X-Git-Url: http://git.purplebirdman.com/lightcycles-love.git/blobdiff_plain/1a561bf43c90fcaf433c846a04c03dde5b8e9a70..a32b179f4401624b1f9404bb31bf9c547641da14:/player.lua diff --git a/player.lua b/player.lua index 0bf6990..387b54f 100644 --- a/player.lua +++ b/player.lua @@ -1,35 +1,81 @@ +require 'vec2' + Player = {} Player.name = 'player' Player.color = {255, 0, 0} Player.width = 5 Player.height = 5 Player.acceleration = 100 -Player.position = {x=0, y=0} -Player.vector = {x=0, y=0} +Player.position = vec2:new(0, 0) +Player.vector = vec2:new(0, 0) +Player.path = {} +Player.vectors = { + up = vec2:new(0, -1), + down = vec2:new(0, 1), + left = vec2:new(-1, 0), + right = vec2:new(1, 0), + } +Player.keys = { + w = 'up', + s = 'down', + a = 'left', + d = 'right', + } function Player:new(o) o = o or {} setmetatable(o, self) self.__index = self + o:recordPosition() return o end +function Player:drawPath() + if #self.path >= 4 then + love.graphics.setLineWidth(2) + love.graphics.setColor(self.color) + love.graphics.line(self.path) + end +end + function Player:draw() love.graphics.setColor(self.color) love.graphics.rectangle('fill', self.position.x, self.position.y, self.width, self.height) + + -- add current position + self:recordPosition() + self:drawPath() + table.remove(self.path) + table.remove(self.path) end -function Player:update(dt) - if love.keyboard.isDown("w") then - self.vector = {x=0, y=-self.acceleration} - elseif love.keyboard.isDown("s") then - self.vector = {x=0, y=self.acceleration} - elseif love.keyboard.isDown("a") then - self.vector = {x=-self.acceleration, y=0} - elseif love.keyboard.isDown("d") then - self.vector = {x=self.acceleration, y=0} +function Player:recordPosition() + table.insert(self.path, self.position.x + self.width/2) + table.insert(self.path, self.position.y + self.height/2) +end + +function Player:multiple_keys_are_pressed() + local count = 0 + for key,_ in pairs(self.keys) do + if love.keyboard.isDown(key) then + count = count + 1 + end end + return count > 1 +end - self.position.x = self.position.x + self.vector.x * dt - self.position.y = self.position.y + self.vector.y * dt +function Player:update(dt) + if not self:multiple_keys_are_pressed() then + for key, name in pairs(self.keys) do + if love.keyboard.isDown(key) + and self.vector ~= self.vectors[name] + and (self.vector + self.vectors[name]):length() > 0 + then + self.vector = self.vectors[name] + self:recordPosition() + break + end + end + end + self.position = self.position + self.vector * self.acceleration * dt end