Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function mario:movement(dt)
- local maxrunspeed = maxrunspeed
- local maxwalkspeed = maxwalkspeed
- local runacceleration = runacceleration
- local walkacceleration = walkacceleration
- --HORIZONTAL MOVEMENT
- if runkey(self.playernumber) then --RUNNING
- if rightkey(self.playernumber) then --MOVEMENT RIGHT
- if self.jumping or self.falling then --IN AIR
- if self.speedx < maxwalkspeed then
- if self.speedx < 0 then
- self.speedx = self.speedx + runaccelerationair*dt*airslidefactor
- else
- self.speedx = self.speedx + runaccelerationair*dt
- end
- if self.speedx > maxwalkspeed then
- self.speedx = maxwalkspeed
- end
- elseif self.speedx > maxwalkspeed and self.speedx < maxrunspeed then
- if self.speedx < 0 then
- self.speedx = self.speedx + runaccelerationair*dt*airslidefactor
- else
- self.speedx = self.speedx + runaccelerationair*dt
- end
- if self.speedx > maxrunspeed then
- self.speedx = maxrunspeed
- end
- end
- elseif self.ducking == false then --ON GROUND
- if self.speedx < 0 then
- if self.speedx > maxrunspeed then
- self.speedx = self.speedx + superfriction*dt + runacceleration*dt
- else
- self.speedx = self.speedx + friction*dt + runacceleration*dt
- end
- self.animationstate = "sliding"
- self.animationdirection = "right"
- else
- self.speedx = self.speedx + runacceleration*dt
- self.animationstate = "running"
- self.animationdirection = "right"
- end
- if self.speedx > maxrunspeed then
- self.speedx = maxrunspeed
- end
- end
- elseif leftkey(self.playernumber) then --MOVEMENT LEFT
- if self.jumping or self.falling then --IN AIR
- if self.speedx > -maxwalkspeed then
- if self.speedx > 0 then
- self.speedx = self.speedx - runaccelerationair*dt*airslidefactor
- else
- self.speedx = self.speedx - runaccelerationair*dt
- end
- if self.speedx < -maxwalkspeed then
- self.speedx = -maxwalkspeed
- end
- elseif self.speedx < -maxwalkspeed and self.speedx > -maxrunspeed then
- if self.speedx > 0 then
- self.speedx = self.speedx - runaccelerationair*dt*airslidefactor
- else
- self.speedx = self.speedx - runaccelerationair*dt
- end
- if self.speedx < -maxrunspeed then
- self.speedx = -maxrunspeed
- end
- end
- elseif self.ducking == false then --ON GROUND
- if self.speedx > 0 then
- if self.speedx < -maxrunspeed then
- self.speedx = self.speedx - superfriction*dt - runacceleration*dt
- else
- self.speedx = self.speedx - friction*dt - runacceleration*dt
- end
- self.animationstate = "sliding"
- self.animationdirection = "left"
- else
- self.speedx = self.speedx - runacceleration*dt
- self.animationstate = "running"
- self.animationdirection = "left"
- end
- if self.speedx < -maxrunspeed then
- self.speedx = -maxrunspeed
- end
- end
- end
- if (not rightkey(self.playernumber) and not leftkey(self.playernumber)) or (self.ducking and self.falling == false and self.jumping == false) then --NO MOVEMENT
- if self.jumping or self.falling then
- if self.speedx > 0 then
- self.speedx = self.speedx - frictionair*dt
- if self.speedx < minspeed then
- self.speedx = 0
- self.runframe = 1
- end
- else
- self.speedx = self.speedx + frictionair*dt
- if self.speedx > -minspeed then
- self.speedx = 0
- self.runframe = 1
- end
- end
- else
- if self.speedx > 0 then
- if self.speedx > maxrunspeed then
- self.speedx = self.speedx - superfriction*dt
- else
- self.speedx = self.speedx - friction*dt
- end
- if self.speedx < minspeed then
- self.speedx = 0
- self.runframe = 1
- self.animationstate = "idle"
- end
- else
- if self.speedx < -maxrunspeed then
- self.speedx = self.speedx + superfriction*dt
- else
- self.speedx = self.speedx + friction*dt
- end
- if self.speedx > -minspeed then
- self.speedx = 0
- self.runframe = 1
- self.animationstate = "idle"
- end
- end
- end
- end
- else --WALKING
- if rightkey(self.playernumber) then --MOVEMENT RIGHT
- if self.jumping or self.falling then --IN AIR
- if self.speedx < maxwalkspeed then
- if self.speedx < 0 then
- self.speedx = self.speedx + walkaccelerationair*dt*airslidefactor
- else
- self.speedx = self.speedx + walkaccelerationair*dt
- end
- if self.speedx > maxwalkspeed then
- self.speedx = maxwalkspeed
- end
- end
- elseif self.ducking == false then --ON GROUND
- if self.speedx < maxwalkspeed then
- if self.speedx < 0 then
- if self.speedx < -maxrunspeed then
- self.speedx = self.speedx + superfriction*dt + runacceleration*dt
- else
- self.speedx = self.speedx + friction*dt + runacceleration*dt
- end
- self.animationstate = "sliding"
- self.animationdirection = "right"
- else
- self.speedx = self.speedx + walkacceleration*dt
- self.animationstate = "running"
- self.animationdirection = "right"
- end
- if self.speedx > maxwalkspeed then
- self.speedx = maxwalkspeed
- end
- else
- self.speedx = self.speedx - friction*dt
- if self.speedx < maxwalkspeed then
- self.speedx = maxwalkspeed
- end
- end
- end
- elseif leftkey(self.playernumber) then --MOVEMENT LEFT
- if self.jumping or self.falling then --IN AIR
- if self.speedx > -maxwalkspeed then
- if self.speedx > 0 then
- self.speedx = self.speedx - walkaccelerationair*dt*airslidefactor
- else
- self.speedx = self.speedx - walkaccelerationair*dt
- end
- if self.speedx < -maxwalkspeed then
- self.speedx = -maxwalkspeed
- end
- end
- elseif self.ducking == false then --ON GROUND
- if self.speedx > -maxwalkspeed then
- if self.speedx > 0 then
- if self.speedx > maxrunspeed then
- self.speedx = self.speedx - superfriction*dt - runacceleration*dt
- else
- self.speedx = self.speedx - friction*dt - runacceleration*dt
- end
- self.animationstate = "sliding"
- self.animationdirection = "left"
- else
- self.speedx = self.speedx - walkacceleration*dt
- self.animationstate = "running"
- self.animationdirection = "left"
- end
- if self.speedx < -maxwalkspeed then
- self.speedx = -maxwalkspeed
- end
- else
- self.speedx = self.speedx + friction*dt
- if self.speedx > -maxwalkspeed then
- self.speedx = -maxwalkspeed
- end
- end
- end
- end
- if (not rightkey(self.playernumber) and not leftkey(self.playernumber)) or (self.ducking and self.falling == false and self.jumping == false) then --no movement
- if self.jumping or self.falling then
- if self.speedx > 0 then
- self.speedx = self.speedx - frictionair*dt
- if self.speedx < 0 then
- self.speedx = 0
- self.runframe = 1
- end
- else
- self.speedx = self.speedx + frictionair*dt
- if self.speedx > 0 then
- self.speedx = 0
- self.runframe = 1
- end
- end
- else
- if self.speedx > 0 then
- if self.speedx > maxrunspeed then
- self.speedx = self.speedx - superfriction*dt
- else
- self.speedx = self.speedx - friction*dt
- end
- if self.speedx < 0 then
- self.speedx = 0
- self.runframe = 1
- self.animationstate = "idle"
- end
- else
- if self.speedx < -maxrunspeed then
- self.speedx = self.speedx + superfriction*dt
- else
- self.speedx = self.speedx + friction*dt
- end
- if self.speedx > 0 then
- self.speedx = 0
- self.runframe = 1
- self.animationstate = "idle"
- end
- end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement