132 lines
3.5 KiB
Lua
132 lines
3.5 KiB
Lua
trigger_event = {
|
|
list = {},
|
|
}
|
|
|
|
trigger_ev = {}
|
|
|
|
function trigger_event.new ( _name, _tr_func, _tr_init, _tr_update, _a, _b, _time, _text, _distancia )
|
|
table.insert( trigger_event.list, {
|
|
name = _name,
|
|
trigger = _tr_func,
|
|
init = _tr_init,
|
|
update = _tr_update,
|
|
actor = _a,
|
|
actor_b = _b,
|
|
time = _time,
|
|
text = _text,
|
|
distancia = _distancia,
|
|
enabled = true,
|
|
running = false,
|
|
})
|
|
end
|
|
|
|
function trigger_event.update ()
|
|
for _,t in ipairs(trigger_event.list) do
|
|
if t.enabled and not t.running then
|
|
t.running = t:trigger()
|
|
end
|
|
end
|
|
end
|
|
|
|
function trigger_event.disable(_name)
|
|
print("Disabling ".._name)
|
|
for _,t in ipairs(trigger_event.list) do
|
|
if t.name == _name then
|
|
print("Disabled trigger ".._name)
|
|
t.running = false
|
|
t.enabled = false
|
|
end
|
|
end
|
|
end
|
|
|
|
-- PREMIERE HEALER - BOSS 1 TRIGGER
|
|
function trigger_ev:premiere_boss1_trigger( )
|
|
if stages.boss_loaded and
|
|
--abad.objects.clau_premiere~=nil and
|
|
abad.energia<=abad.max_energia/2
|
|
then
|
|
self:init()
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function trigger_ev:premiere_healer_init()
|
|
-- if premiere.update==premiere_update_healer then return true end
|
|
-- Guardar l'estat de Premiere
|
|
premiere.from_hab = premiere.hab
|
|
premiere.from_x = premiere.x
|
|
premiere.from_y = premiere.y
|
|
premiere.from_update = premiere.update
|
|
-- Moure a premiere al Boss stage
|
|
premiere.hab = 54
|
|
premiere.x = 2
|
|
premiere.y = 3
|
|
local world_x, world_y = coords.room_to_world(premiere.hab,premiere.x,premiere.y)
|
|
premiere.x=world_x
|
|
premiere.y=world_y
|
|
premiere.health_wait = 100
|
|
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
|
|
|
|
function trigger_ev:premiere_healer_update()
|
|
-- Esperar mentres dona la vida
|
|
if premiere.health_wait>0 and premiere.health_wait<100 then
|
|
premiere.health_wait = premiere.health_wait - 1
|
|
else
|
|
premiere.x = premiere.x+1
|
|
end
|
|
|
|
-- Lloc de pausa
|
|
local hab, tx, ty = coords.world_to_tile(premiere.x, premiere.y)
|
|
if hab == 55 and tx==0 and ty==3 and premiere.health_wait==100 then
|
|
-- 55 (0,3)
|
|
local _text = "Tenne! Io t'achudo. Figo!";
|
|
table.insert(
|
|
dialeg.list,
|
|
{ actor=premiere,
|
|
text=_text,
|
|
time=200,
|
|
w = math.floor(4.6*#_text),
|
|
h = 20,
|
|
}
|
|
)
|
|
premiere.health_wait = premiere.health_wait - 1
|
|
elseif hab >= 56 then
|
|
-- Restaurar a Premiere
|
|
premiere.hab = premiere.from_hab
|
|
premiere.x = premiere.from_x
|
|
premiere.y = premiere.from_y
|
|
premiere.update = premiere.from_update
|
|
end
|
|
end
|
|
|
|
-- DIALEG GENERAL
|
|
function trigger_ev:dialeg_trigger ()
|
|
if h_collision( self.actor, self.actor_b ) and
|
|
distancia ( self.actor, self.actor_b )<=self.distancia
|
|
then
|
|
self:init()
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
function trigger_ev:dialeg_init()
|
|
table.insert(
|
|
dialeg.list,
|
|
{ actor=self.actor,
|
|
text=self.text,
|
|
time=self.time,
|
|
w = math.floor(4.6*#self.text),
|
|
h = 20,
|
|
}
|
|
)
|
|
trigger_event.disable(self.name)
|
|
end
|