--[[pod_format="raw",created="2024-04-24 07:17:14",modified="2024-04-24 20:33:05",revision=11]] local map_manager = require(make_path("map")) local Actor = require(make_path("actor2")) --local actor = require("actor2") M = {} local weapons = {} local bullets = {} -- local particles = {} weapon = { name = "Ice Blaster", rate_of_fire = 0.2, shoot=function(self) end } Particle = Actor:new() Particle.life=4 Particle.spriteIndex=81 -- particle = { -- x=0, -- y=0, -- life=4, -- spriteIndex=81 -- } --particle.__index = particle -- function Particle:new(x,y) -- local o = setmetatable({}, particle) -- o.x=x -- o.y=y -- return o -- end function Particle:update() self.life-=1 if self.life<=0 then del(actors,self) end end -- function Particle:draw() -- spr(self.spriteIndex,self.x,self.y) -- end bullet = { x=0, y=0, dx=0, dy=0, spriteIndex=80, destroy_sprite_index=66, life=100, damage=1, } bullet.__index = bullet function bullet:new(x, y, dx, dy) local o = setmetatable({}, bullet) o.x = x o.y = y o.dx = dx o.dy = dy return o end function bullet:destroy() -- Create particle local p = Particle:new(self.x, self.y) add(actors, p) del(bullets,self) end function bullet:check_collision() if (map_manager.is_tile_shoot_solid(self.x,self.y)) then self:destroy() end end function bullet:update() self.x+=self.dx self.y+=self.dy self.life-=1 if self.life<0 then self:destroy() end self:check_collision() end function bullet:draw() spr(self.spriteIndex,self.x,self.y) end function M.create_bullet(new_x, new_y, dir_x, dir_y) -- Calculate the length of the direction vector local length = sqrt(dir_x^2 + dir_y^2) -- Normalize the direction vector local normalized_dir_x = dir_x / length local normalized_dir_y = dir_y / length local b = bullet:new(new_x, new_y, normalized_dir_x * 2, normalized_dir_y * 2) add(bullets, b) -- add(bullets, { -- x=new_x, -- y=new_y, -- dx=normalized_dir_x * 2, -- dy=normalized_dir_y * 2, -- spriteIndex=80, -- destroy_sprite_index=66, -- life=100, -- damage=1, -- draw=function(self) -- --pset(self.x,self.y,8) -- spr(self.spriteIndex,self.x,self.y) -- end, -- update=function(self) -- self.x+=self.dx -- self.y+=self.dy -- self.life-=1 -- if self.life<0 then -- del(bullets,self) -- -- TODO: Create particle -- end -- self.check_collision(self) -- end, -- check_collision=function(self) -- -- If Collide with wall destroy self and create particle -- end -- }) end function M.init() end function M.draw() for b in all(bullets) do b:draw() end -- for p in all(particles) do -- p:draw() -- end end function M.update() for b in all(bullets) do b:update() end -- for p in all(particles) do -- p:update() -- end end function M.debug_draw() print(string.format("Bullets: %d", count(bullets)), 0,32,1) end return M