Bullet = Object:extend() cos = math.cos sin = math.sin --optimisation function Bullet:new(x, y, p, speed, rotation) self.image = love.graphics.newImage("assets/bullet.png") self.x = x self.y = y self.p = p self.speed = speed self.rotation = rotation self.width = self.image:getWidth() self.height = self.image:getHeight() self.scaleX = 1 self.scaleY = 1 self.originX = self.width / 2 self.originY = self.height / 2 self.collider = World:newCircleCollider(x, y, 10) self.collider:setPosition(self.x, self.y) end function Bullet:update(dt) --New bullets are set to New Collision Class --this is to make sure the bullet doesn't collide with the player that shot it if self.p == 1 or self.p == 2 then self.collider:setCollisionClass("New") end if self.p == 1 then self.collider:setCollisionClass("Bullet1") elseif self.p == 2 then self.collider:setCollisionClass("Bullet2") end if self.p == 1 then local dx = cos(self.rotation) * self.speed * dt local dy = sin(self.rotation) * self.speed * dt self.collider:setLinearVelocity(dx, dy) self.x = self.collider:getX() self.y = self.collider:getY() --If a bullet hits a wall, make it bounce off the wall and change its rotation if self.collider:enter("Wall") then self.rotation = self.rotation + math.pi self.collider:setAngle(self.rotation) end end if self.p == 2 then local dx = cos(self.rotation) * self.speed * dt local dy = sin(self.rotation) * self.speed * dt self.collider:setLinearVelocity(dx, dy) self.x = self.collider:getX() self.y = self.collider:getY() end end function Bullet:draw() for _, _ in ipairs(Bullets1) do love.graphics.draw( self.image, self.x, self.y, self.rotation, self.scaleX, self.scaleY, self.originX, self.originY ) end for _, _ in ipairs(Bullets2) do love.graphics.draw( self.image, self.x, self.y, self.rotation, self.scaleX, self.scaleY, self.originX, self.originY ) end end