Replaced the id system with a simple flag for deletion

This commit is contained in:
lustlion
2022-03-17 11:46:10 +01:00
parent 8edcbe2d9b
commit 410c00dcd4
10 changed files with 74 additions and 62 deletions

View File

@@ -36,8 +36,6 @@ function CursedBook:new(x,y)
light_data.color = nil
o.light = Light:new(o.pos.x,o.pos.y,light_data)
o:id()
setmetatable(o, self)
self.__index = self
return o

View File

@@ -19,9 +19,8 @@ function Decoration:new(x,y,animation,light_data)
o.light = Light:new(o.pos.x,o.pos.y,light_data)
end
o:id()
setmetatable(o, self)
self.__index = self
return o
end

View File

@@ -31,8 +31,6 @@ function Fairy:new(x,y)
o.particle_timer = 0
o.particle_time = 5
o:id()
setmetatable(o, self)
self.__index = self
return o

View File

@@ -14,8 +14,6 @@ function HookAnchor:new(x,y,hook_distance)
o:centerOffset(o.body)
o:createBox(o.body)
o:id()
setmetatable(o, self)
self.__index = self
return o

View File

@@ -36,8 +36,6 @@ function Kupo:new(x,y)
light_data.color = nil
o.light = Light:new(o.pos.x,o.pos.y,light_data)
o:id()
setmetatable(o, self)
self.__index = self
return o

View File

@@ -22,7 +22,7 @@ function Particle:new(x,y,particle_data)
o.func = particle_data.func or nil
o.time = particle_data.time or nil
if o.time ~= nil then
if o.time then
if particle_data.time_unit ~= nil
and particle_data.time_unit == "frames" then
o.time = o.time
@@ -37,7 +37,7 @@ function Particle:new(x,y,particle_data)
y = o.speed * math.sin(o.direction)
}
if particle_data.light ~= nil then
if particle_data.light then
local light_data = {}
light_data.radius = particle_data.light
light_data.shine_radius = particle_data.light_shine or nil
@@ -47,34 +47,24 @@ function Particle:new(x,y,particle_data)
end
-- animations
if particle_data.animation ~= nil then
if particle_data.animation then
o.body = Animation:new(particle_data.animation,particle_data.animation_speed)
o:centerOffset(o.body)
o:createBox(o.body)
end
-- particle id handled differently from other entities
table.remove(LoadedObjects.Entities,#LoadedObjects.Entities)
table.insert(LoadedObjects.Particles,o)
o.id = #LoadedObjects.Particles
setmetatable(o, self)
self.__index = self
return o
end
function Particle:kill()
if self.light ~= nil then
if self.light then
self.light:kill()
end
if self.id ~= nil then
for _, e in pairs(LoadedObjects.Particles) do
if e.id > self.id then
e.id = e.id - 1
end
end
table.remove(LoadedObjects.Particles,self.id)
end
self = nil
self.dead = true
end
function Particle:handleAnimation()
@@ -84,7 +74,7 @@ function Particle:handleAnimation()
self.sprite_alpha = self.sprite_alpha_base*(self.time-self.timer)/self.time
end
if self.body ~= nil then
if self.body then
self.body:animate()
self:draw(self.body)
end
@@ -100,6 +90,15 @@ function Particle:doLogic()
end
end
function cleanDeadParticles()
for i=1, #LoadedObjects.Particles do
part = LoadedObjects.Particles[i]
if part.kill then
table.remove(LoadedObjects.Particles,i)
end
end
end
function Particle:doPhysics()
-- horizontal collision
self:moveX(
@@ -118,3 +117,16 @@ function Particle:debug()
love.graphics.setColor(0,1,1)
love.graphics.circle("fill", -Camera.pos.x + self.pos.x, -Camera.pos.y + self.pos.y, 1)
end
---------------
function cleanDeadParticles()
for i=1, #LoadedObjects.Particles do
part = LoadedObjects.Particles[i]
if part and part.dead then
table.remove(LoadedObjects.Particles,i)
end
end
end
---------------

View File

@@ -80,8 +80,6 @@ function Player:new(x,y)
light_data.color = nil
o.light = Light:new(o.pos.x,o.pos.y,light_data)
o:id()
setmetatable(o, self)
self.__index = self
return o