67 lines
1.5 KiB
Lua
67 lines
1.5 KiB
Lua
local Entity = require "scenes.levels.entities.parent"
|
|
|
|
local Weapon = Entity:extend()
|
|
|
|
function Weapon:new(level, x, y, id, xsp, ysp)
|
|
Weapon.super.new(self, level, "weapon", x-8, y - 8, 16, 16)
|
|
self.weaponid = id or 0
|
|
self.xsp = xsp or 0
|
|
self.ysp = ysp or 0
|
|
self.rotation = 0
|
|
end
|
|
|
|
function Weapon:setFilter()
|
|
self.filter = function(item, other)
|
|
if (other.collType=="wall") then
|
|
return 'touch'
|
|
elseif (other.collType=="block") then
|
|
return "touch"
|
|
elseif (other.collType=="ennemy") then
|
|
return "touch"
|
|
else
|
|
return nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function Weapon:update(dt)
|
|
self:setFilter()
|
|
|
|
self.rotation = self.rotation + (dt * 90)*8
|
|
|
|
local cols, cols_len = self:move(dt)
|
|
|
|
for j=1,cols_len do
|
|
local other = cols[j].other
|
|
if other.collType=="wall" and (self.life == 1) then
|
|
self:destroy()
|
|
end
|
|
if other.collType=="block" and (self.life == 1) then
|
|
self:destroy()
|
|
other:breakBlock()
|
|
end
|
|
if other.collType=="ennemy" and (self.life == 1) then
|
|
self:destroy()
|
|
other:getDamage(1)
|
|
end
|
|
end
|
|
|
|
self.life = 1
|
|
|
|
local isInsideView = self:isInsideView()
|
|
if (isInsideView == false) then
|
|
self:destroy()
|
|
end
|
|
|
|
self:getDirection()
|
|
end
|
|
|
|
function Weapon:draw(dt)
|
|
local rotation = math.floor(self.rotation/45)*45
|
|
drawx, drawy = self:getCenter()
|
|
self.scene.assets.tileset["weapon"]:drawTile(self.weaponid, drawx, drawy,
|
|
rotation, self.direction, 1, 8, 8)
|
|
end
|
|
|
|
return Weapon
|