summaryrefslogtreecommitdiffhomepage
path: root/not
diff options
context:
space:
mode:
Diffstat (limited to 'not')
-rw-r--r--not/Hero.lua78
1 files changed, 43 insertions, 35 deletions
diff --git a/not/Hero.lua b/not/Hero.lua
index cb4d249..b097767 100644
--- a/not/Hero.lua
+++ b/not/Hero.lua
@@ -37,26 +37,13 @@ Hero.PUNCH_DOWN = {-8,4, -8,20, 8,20, 8,4}
-- Constructor of `Hero`.
function Hero:new (name, x, y, world)
- -- TODO: Statics moved temporarily here. Should be moved to e.g. `load()`.
- if Hero.portrait_sprite == nil then
- Hero.portrait_sprite = love.graphics.newImage("assets/portraits.png")
- Hero.portrait_frame = love.graphics.newImage("assets/menu.png")
- end
- -- Find imagePath based on hero name.
- local fileName = name or Hero.name -- INITIAL
- local imagePath = string.format("assets/nauts/%s.png", fileName)
- -- `PhysicalBody` initialization.
+ local imagePath = string.format("assets/nauts/%s.png", name)
+ Hero.load()
Hero.__super.new(self, x, y, world, imagePath)
self:setBodyType("dynamic")
self:setBodyFixedRotation(true)
self.group = -1-#world.Nauts
- -- Main fixture initialization.
- local fixture = self:addFixture({-5,-8, 5,-8, 5,8, -5,8}, 8)
- fixture:setUserData(self)
- fixture:setCategory(2)
- fixture:setMask(2)
- fixture:setGroupIndex(self.group)
- -- Actual `Hero` initialization.
+ self:newFixture()
self.world = world
self.punchCooldown = 0
self.name = name
@@ -64,11 +51,30 @@ function Hero:new (name, x, y, world)
self:createEffect("respawn")
end
+-- TODO: This is temporarily called by constructor.
+function Hero.load ()
+ if Hero.portrait_sprite == nil then
+ Hero.portrait_sprite = love.graphics.newImage("assets/portraits.png")
+ Hero.portrait_frame = love.graphics.newImage("assets/menu.png")
+ end
+end
+
+--- Creates hero's fixture and adds it to physical body.
+function Hero:newFixture ()
+ local fixture = self:addFixture({-5,-8, 5,-8, 5,8, -5,8}, 8)
+ fixture:setUserData(self)
+ fixture:setCategory(2)
+ fixture:setMask(2)
+ fixture:setGroupIndex(self.group)
+end
+
-- Update callback of `Hero`
function Hero:update (dt)
Hero.__super.update(self, dt)
- if self.body:isDestroyed() then return end
-
+ if self.body:isDestroyed() then
+ return
+ end
+ self:dampVelocity(dt)
-- Salto
if self.salto and (self.current == self.animations.walk or self.current == self.animations.default) then
self.angle = (self.angle + 17 * dt * self.facing) % 360
@@ -76,23 +82,6 @@ function Hero:update (dt)
self.angle = 0
end
- -- Custom linear damping.
- if not self.isWalking then
- local face = nil
- local x, y = self:getLinearVelocity()
- if x < -12 then
- face = 1
- elseif x > 12 then
- face = -1
- else
- face = 0
- end
- self:applyForce(40*face,0)
- if not self.inAir then
- self:applyForce(80*face,0)
- end
- end
-
-- Could you please die?
-- TODO: World/Map function for testing if Point is inside playable area.
local m = self.world.map
@@ -147,6 +136,25 @@ function Hero:update (dt)
end
end
+--- Damps linear velocity every frame by applying minor force to body.
+function Hero:dampVelocity (dt)
+ if not self.isWalking then
+ local face
+ local x, y = self:getLinearVelocity()
+ if x < -12 then
+ face = 1
+ elseif x > 12 then
+ face = -1
+ else
+ face = 0
+ end
+ self:applyForce(40*face,0)
+ if not self.inAir then
+ self:applyForce(80*face,0)
+ end
+ end
+end
+
-- TODO: comment them and place them somewhere properly
function Hero:getAngle ()
return self.angle