summaryrefslogtreecommitdiff
path: root/player.lua
diff options
context:
space:
mode:
authorAki <nthirtyone@gmail.com>2017-02-26 05:04:34 +0100
committerAki <nthirtyone@gmail.com>2017-02-26 05:04:34 +0100
commit72533c0efb9d5659cd2c1fb0e9f067696d759812 (patch)
tree9fd29c0700c182de5e787af45c4277ee62140787 /player.lua
downloadvisitor-72533c0efb9d5659cd2c1fb0e9f067696d759812.zip
visitor-72533c0efb9d5659cd2c1fb0e9f067696d759812.tar.gz
visitor-72533c0efb9d5659cd2c1fb0e9f067696d759812.tar.bz2
Initial commit, after jam
Diffstat (limited to 'player.lua')
-rw-r--r--player.lua85
1 files changed, 85 insertions, 0 deletions
diff --git a/player.lua b/player.lua
new file mode 100644
index 0000000..e4ef8f6
--- /dev/null
+++ b/player.lua
@@ -0,0 +1,85 @@
+-- Metatable.
+local Player = {
+ x = 14,
+ y = 12,
+ frame = 1,
+ animation = "idle",
+ moved = false,
+ target_x = 14,
+ call,
+}
+Player.__index = Player
+
+-- Craete new empty Player object.
+local function newPlayer()
+ return setmetatable({}, Player)
+end
+
+-- Position related functions.
+function Player:getPosition()
+ return self.x, self.y
+end
+function Player:setPosition(x, y)
+ self.x, self.y = x, y
+ return self
+end
+
+-- Facing.
+function Player:getFacing()
+ if self.animation == "walk" then
+ if (self.target_x - self.x) < 0 then
+ return -1
+ end
+ end
+ return 1
+end
+
+-- Target.
+function Player:setTarget(x, y, prop)
+ if Game.inRange(x, y) then
+ self.target_x = x
+ self.prop = prop
+ end
+end
+
+-- Change animation.
+function Player:changeAnimation(name)
+ if self.animation ~= name then
+ self.animation = name
+ self.frame = 1
+ end
+ return self
+end
+
+-- LÖVE2D callbacks.
+function Player:update()
+ -- Animation.
+ local frames = #Game.quads.player[self.animation]
+ self.frame = (self.frame%frames)+1
+ -- Movement towards target.
+ self.moved = false
+ if math.abs(self.x - self.target_x) > 2 then
+ self:changeAnimation("walk")
+ else
+ self:changeAnimation("idle")
+ if self.prop then
+ print("Using prop...")
+ self.prop:use()
+ self.prop = nil
+ end
+ end
+ -- Walking.
+ if self.animation == "walk" and not self.moved and (self.frame == 1 or self.frame == 3 or self.frame == 5) then
+ self.x = self.x + self:getFacing()
+ self.moved = true
+ end
+end
+function Player:draw(scale)
+ local quad = Game.quads.player[self.animation][self.frame]
+ local sprite = Game.sprites.player
+ local x, y = self:getPosition()
+ love.graphics.setColor(255,255,255)
+ love.graphics.draw(sprite, quad, (x)*scale, (y)*scale, 0, scale*self:getFacing(), scale, 4)
+end
+
+return newPlayer \ No newline at end of file