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

View File

@ -24,15 +24,12 @@ function Entity:new(x,y)
o.sprite_alpha = 1
o.sprite_flip = { x = 1, y = 1}
table.insert(LoadedObjects.Entities,o)
setmetatable(o, self)
self.__index = self
return o
end
function Entity:id()
table.insert(LoadedObjects.Entities,self)
self.id = #LoadedObjects.Entities
end
function Entity:checkNearest(type,maxdistance)
local return_entity = nil
local shortest = -1
@ -64,9 +61,6 @@ function Entity:checkNearest(type,maxdistance)
return return_entity
end
function Entity:doLogic()
end
function Entity:moveX(amount, func)
self.move_remainder.x = self.move_remainder.x + amount
local move = math.round(self.move_remainder.x)
@ -130,15 +124,7 @@ function Entity:kill()
if self.light ~= nil then
self.light:kill()
end
if self.id ~= nil then
table.remove(LoadedObjects.Entities,self.id)
for _, e in pairs(LoadedObjects.Entities) do
if e.id > self.id then
e.id = e.id - 1
end
end
end
self = nil
self.dead = true
end
function Entity:checkVisionLine(entity,range)
@ -306,6 +292,9 @@ function Entity:debug()
end
end
function Entity:doLogic()
end
function Entity:doPhysics()
end
@ -315,6 +304,19 @@ end
function Entity:drawBackground()
end
---------------
function cleanDeadEntities()
for i=1, #LoadedObjects.Entities do
enty = LoadedObjects.Entities[i]
if enty.dead then
table.remove(LoadedObjects.Entities,i)
end
end
end
---------------
require "code/entities/kupo"
require "code/entities/arrow"
require "code/entities/decoration"

View File

@ -68,6 +68,10 @@ function stepGame()
Demo:startPlayback()
end
end
cleanDeadParticles()
cleanDeadEntities()
cleanDeadLights()
end
function drawGame()

View File

@ -1,4 +1,6 @@
Light = {}
Light = class(nil, {
type = "Light"
})
LoadedObjects.Lights = {}
function Light:new(x,y,data)
@ -17,26 +19,12 @@ function Light:new(x,y,data)
o.flicker_time = 60/12
o.flicker_timer = 0
table.insert(LoadedObjects.Lights,o)
o.id = #LoadedObjects.Lights
setmetatable(o, self)
self.__index = self
table.insert(LoadedObjects.Lights,o)
return o
end
function Light:kill()
if self.id ~= nil then
table.remove(LoadedObjects.Lights,self.id)
for _, e in pairs(LoadedObjects.Lights) do
if e.id > self.id then
e.id = e.id - 1
end
end
end
self = nil
end
function Light:flicker()
self.flicker_timer = self.flicker_timer + 1
@ -82,3 +70,20 @@ function Light:drawShine()
love.graphics.setShader()
end
end
function Light:kill()
self.dead = true
end
---------------
function cleanDeadLights()
for i=1, #LoadedObjects.Entities do
enty = LoadedObjects.Entities[i]
if enty.dead then
table.remove(LoadedObjects.Entities,i)
end
end
end
---------------