[FIX] Modificada l'estructura de trigger_event per a incorporar funcions init i update

This commit is contained in:
2026-04-26 11:36:57 +02:00
parent 6b6f6e6721
commit ca4169f2f1
2 changed files with 36 additions and 15 deletions

View File

@@ -212,7 +212,10 @@ function stages.stage1_boss()
boss.reason="" boss.reason=""
boss.enabled=true boss.enabled=true
boss:fight() boss:fight()
trigger_event.new("Premiere Boss 1",premiere_boss1_trigger) trigger_event.new("Premiere Boss 1",
trigger_ev.premiere_boss1_trigger,
trigger_ev.premiere_healer_init,
trigger_ev.premiere_healer_update)
end end
end end

View File

@@ -2,24 +2,29 @@ trigger_event = {
list = {}, list = {},
} }
function trigger_event.new ( _name, _trigger_func ) trigger_ev = {}
function trigger_event.new ( _name, _tr_func, _tr_init, _tr_update )
table.insert( trigger_event.list, { table.insert( trigger_event.list, {
name = _name, name = _name,
trigger = _trigger_func, trigger = _tr_func,
init = _tr_init,
update = _tr_update,
enabled = true, enabled = true,
running = false running = false,
}) })
end end
function trigger_event.update () function trigger_event.update ()
for _,t in ipairs(trigger_event.list) do for _,t in ipairs(trigger_event.list) do
if t.enabled and not t.running then if t.enabled and not t.running then
t.running = t.trigger() t.running = t:trigger()
end end
end end
end end
function trigger_event.disable(_name) function trigger_event.disable(_name)
print("Disabling ".._name)
for _,t in ipairs(trigger_event.list) do for _,t in ipairs(trigger_event.list) do
if t.name == _name then if t.name == _name then
print("Disabled trigger ".._name) print("Disabled trigger ".._name)
@@ -30,20 +35,20 @@ function trigger_event.disable(_name)
end end
-- PREMIERE HEALER - BOSS 1 TRIGGER -- PREMIERE HEALER - BOSS 1 TRIGGER
function premiere_boss1_trigger() function trigger_ev:premiere_boss1_trigger( )
print(abad.objects.clau_premiere)
if stages.boss_loaded and if stages.boss_loaded and
abad.objects.clau_premiere~=nil and --abad.objects.clau_premiere~=nil and
abad.energia<=abad.max_energia/2 abad.energia<=abad.max_energia/2
then then
premiere_healer_init() self:init()
return true return true
end end
return false return false
end end
function premiere_healer_init() function trigger_ev:premiere_healer_init()
if premiere.update==premiere_update_healer then return true end -- if premiere.update==premiere_update_healer then return true end
-- Guardar l'estat de Premiere
premiere.from_hab = premiere.hab premiere.from_hab = premiere.hab
premiere.from_x = premiere.x premiere.from_x = premiere.x
premiere.from_y = premiere.y premiere.from_y = premiere.y
@@ -56,10 +61,15 @@ function premiere_healer_init()
premiere.x=world_x premiere.x=world_x
premiere.y=world_y premiere.y=world_y
premiere.health_wait = 100 premiere.health_wait = 100
premiere.update = premiere_update_healer premiere.update = self.update
-- El trigger el deshabilitaria al acabar el update
-- pero en estos moments no se com fer-ho
-- perque l'update s'executa dins de premiere i no
-- dins del trigger
trigger_event.disable(self.name)
end end
function premiere_update_healer() function trigger_ev:premiere_healer_update()
-- Esperar mentres dona la vida -- Esperar mentres dona la vida
if premiere.health_wait>0 and premiere.health_wait<100 then if premiere.health_wait>0 and premiere.health_wait<100 then
premiere.health_wait = premiere.health_wait - 1 premiere.health_wait = premiere.health_wait - 1
@@ -84,10 +94,18 @@ function premiere_update_healer()
premiere.health_wait = premiere.health_wait - 1 premiere.health_wait = premiere.health_wait - 1
elseif hab >= 56 then elseif hab >= 56 then
-- Restaurar a Premiere -- Restaurar a Premiere
trigger_event.disable("Premiere Boss 1")
premiere.hab = premiere.from_hab premiere.hab = premiere.from_hab
premiere.x = premiere.from_x premiere.x = premiere.from_x
premiere.y = premiere.from_y premiere.y = premiere.from_y
premiere.update = premiere.from_update premiere.update = premiere.from_update
end end
end end
function premiere_dialeg1_trigger ()
if h_collision( premiere, abad) and
distancia ( premiere, abad )<=150
then
return true
end
return false
end