uh yeah i keep forgetting ab pushing these. sorry.

This commit is contained in:
lustlion
2022-01-18 00:14:54 +01:00
parent dd2debc0bd
commit 5a266d6b3a
73 changed files with 405 additions and 274 deletions

View File

@@ -7,15 +7,33 @@
Player.coins = 0
-- physics
o.moveSpeed = 1.5
o.moveSpeed = 1.3
o.zeroSpeed = 0.01
o.move_x = 0
o.airFriction = 0.01
o.groundFriction = 0.3
o.jumpImpulse = 3.5
o.dashCooldownTime = 0.1
o.dashCooldownTimer = 0
o.dashTimer = 0
o.dashTime = 0.15
o.dashDistance = 40
o.dashSpeed = o.dashDistance / (o.dashTime*60)
o.dashCount = 1
o.boxCollision = {
from = {x = -8, y = -16},
to = {x = 8, y = 0}
}
o.lightRange = 32
o.lightRange = 0--32
-- status
o.isDashing = false
o.isJumping = false
o.isOnGround = 0
o.coyoteValue = 5
@@ -26,10 +44,11 @@
o.maskType = animation.moth_mask
-- sprite
o.sprite_offset = {x = 8, y = 16}
o.target_offset = {x = 0, y = 12}
o.body = Animation:New(animation.nancy.idle)
o.mask = Animation:New(animation.moth_mask.idle)
o:centerOffset(o.body)
o:getBoundingBox(o.body, 3,-3,0,-1)
-- lights
o.light = CreateLight(o.pos.x,o.pos.y,o.lightRange)
@@ -41,25 +60,100 @@
end
function Player:Smart()
if love.keyboard.isDown("a") then self.vel.x = -self.moveSpeed
elseif love.keyboard.isDown("d") then self.vel.x = self.moveSpeed
else self.vel.x = 0 end
if love.keyboard.isDown("w") then self.vel.y = -self.moveSpeed
elseif love.keyboard.isDown("s") then self.vel.y = self.moveSpeed
else self.vel.y = 0 end
end
function Player:DoPhysics()
self.pos.x = self.pos.x + self.vel.x
self.pos.y = self.pos.y + self.vel.y
end
function Player:HandleAnimation()
-- light
self.light.pos.x = self.pos.x-self.target_offset.x
self.light.pos.y = self.pos.y-self.target_offset.y
if self.dashTimer <= 0 then
if self.isOnGround then
self.vel.x = self.vel.x * (1-self.groundFriction)
else
self.vel.x = self.vel.x * (1-self.airFriction)
end
if math.abs(self.vel.x) < self.zeroSpeed then self.vel.x = 0 end
if love.keyboard.isDown(keybind.moveLeft) then
self.move_x = -self.moveSpeed
elseif love.keyboard.isDown(keybind.moveRight) then
self.move_x = self.moveSpeed
else
self.move_x = 0
end
self.vel.x = self.vel.x
if love.keyboard.isDown(keybind.moveJump) then
if self.isOnGround then
self.vel.y = -self.jumpImpulse
end
end
end
self.dashCooldownTimer = math.max(0,self.dashCooldownTimer - current_dt)
if love.keyboard.isDown(keybind.moveDash) then
if self.dashCooldownTimer == 0
and not self.isDashing
and self.dashCount > 0 then
self.dashCount = self.dashCount - 1
self.isDashing = true
local vertical = 0
if love.keyboard.isDown(keybind.moveDown) then vertical = vertical + 1 end
if love.keyboard.isDown(keybind.moveUp) then vertical = vertical - 1 end
local horizontal = 0
if love.keyboard.isDown(keybind.moveRight) then horizontal = horizontal + 1 end
if love.keyboard.isDown(keybind.moveLeft) then horizontal = horizontal - 1 end
if horizontal == 0 and vertical == 0 then
horizontal = self.sprite_flip.x
end
self.dashDirection = GetAngleFromVector(horizontal, vertical)
self.dashTimer = self.dashTime
end
else
self.isDashing = false
end
end
function Player:DoPhysics()
self.isOnGround = false
self.dashTimer = self.dashTimer - current_dt
if self.dashTimer > 0 then
self.dashCooldownTimer = self.dashCooldownTime
self.vel.x = self.dashSpeed * math.cos(self.dashDirection)
self.vel.y = self.dashSpeed * math.sin(self.dashDirection)
else
self.dashTimer = 0
self.vel.y = self.vel.y + gravity
end
if not self:isCollidingAt(self.pos.x + self.vel.x + self.move_x, self.pos.y, objects.collisions) then
self.pos.x = self.pos.x + self.vel.x + self.move_x
else
self.vel.x = 0
end
if not self:isCollidingAt(self.pos.x, self.pos.y + self.vel.y, objects.collisions) then
self.pos.y = self.pos.y + self.vel.y
else
if self.vel.y > 0 then
self.isOnGround = true
self.dashCount = 1
self.vel.y = 0
end
end
end
function Player:HandleAnimation()
if self.dashTimer > 0 then
self.sprite_tint = {1,1,0}
else
self.sprite_tint = {1,1,1}
end
-- flip sprite to look in the direction is moving
if self.vel.x ~= 0 then self.sprite_flip.x = math.sign(self.vel.x) end
if self.move_x ~= 0 then self.sprite_flip.x = math.sign(self.move_x) end
-- animation priority
if self.vel.y > 1.25 then
@@ -68,7 +162,7 @@ function Player:HandleAnimation()
elseif self.vel.y < 0 then
self.body = self.body:ChangeTo(animation.nancy.jump)
self.mask = self.mask:ChangeTo(self.maskType.jump)
elseif self.vel.x ~= 0 then
elseif self.vel.x + self.move_x ~= 0 then
self.body = self.body:ChangeTo(animation.nancy.run)
self.mask = self.mask:ChangeTo(self.maskType.run)
else
@@ -82,18 +176,8 @@ function Player:HandleAnimation()
end
self.body:Animate()
self.body:Draw(
math.floor(self.pos.x) - Camera.pos.x - ( (self.sprite_offset.x) * math.cos(self.sprite_rotation) - (self.sprite_offset.y) * math.sin(self.sprite_rotation)) * self.sprite_scale.x * self.sprite_flip.x,
math.floor(self.pos.y)- Camera.pos.y - ( (self.sprite_offset.x) * math.sin(self.sprite_rotation) + (self.sprite_offset.y) * math.cos(self.sprite_rotation)) * self.sprite_scale.y * self.sprite_flip.y,
self.sprite_rotation,
self.sprite_scale.x * self.sprite_flip.x,
self.sprite_scale.y * self.sprite_flip.y
)
self.mask:Draw(
math.floor(self.pos.x) - Camera.pos.x - ( (self.sprite_offset.x) * math.cos(self.sprite_rotation) - (self.sprite_offset.y) * math.sin(self.sprite_rotation)) * self.sprite_scale.x * self.sprite_flip.x,
math.floor(self.pos.y)- Camera.pos.y - ( (self.sprite_offset.x) * math.sin(self.sprite_rotation) + (self.sprite_offset.y) * math.cos(self.sprite_rotation)) * self.sprite_scale.y * self.sprite_flip.y,
self.sprite_rotation,
self.sprite_scale.x * self.sprite_flip.x,
self.sprite_scale.y * self.sprite_flip.y
)
self:Draw(self.body)
if self.dashCount > 0 then
self:Draw(self.mask)
end
end