--[[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")) M = {} local weapons = {} local bullets = {} local particles = {} weapon = { name = "Ice Blaster", rate_of_fire = 0.2, shoot=function(self) end } 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(particles,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(particles, 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 Particles: %d", count(bullets), count(particles)), 0,32,1) end return M