Files
cacaus-arcade/data/warp.lua
JailGamer fc9ed7614e - Primer 'redo' de part del codi
- Afegida la pantalla de titol
2026-04-02 21:46:43 +02:00

97 lines
2.3 KiB
Lua

warp={
max_warps=50,
warp_list={},
update=update_all,
}
function warp.init(tiles_sf)
local curr_source = surf.source()
local curr_target = surf.target()
warp_sf=surf.new(32,32)
surf.source(tiles_sf)
surf.target(warp_sf)
local sprite_x = 11*16
local sprite_y = 15*16
draw.surfrot(sprite_x, sprite_y, 16, 16, 0, 0, 0)
draw.surfrot(sprite_x, sprite_y, 16, 16, 15, 0, 90)
draw.surfrot(sprite_x, sprite_y, 16, 16, 15, 15, 180)
draw.surfrot(sprite_x, sprite_y, 16, 16, 0, 15, 270)
surf.source(curr_source)
surf.target(curr_target)
end
function warp.close()
surf.free(warp_sf)
end
function warp.new(_actor)
-- local world_x, world_y = coords.room_to_world(_hab,_x,_y)
return {name="warp",
hab=_hab,
x=_actor.x,
y=_actor.y,
w=arcade_config.sprite_size.w,
h=arcade_config.sprite_size.h,
frame=0,
wait=0,
step=0,
angle=0,
d_angle=5,
update=warp.update,
draw=warp.draw,
alive=true,
actor=_actor}
end
function warp:draw()
if not self.alive then return end
local scr_x, scr_y = viewp:screen_coords( self.x, self.y )
local curr_sf=surf.source()
local target_sf=surf.target()
surf.source(warp_sf)
surf.target(0)
draw.surfrot(0,0,32,32,scr_x,scr_y,self.angle)
surf.source(curr_sf)
surf.target(target_sf)
end
function warp:update()
if not self.actor.warping then self.alive=false end
if not self.alive then return end
self.wait=self.wait+1
self.angle=self.angle+self.d_angle
if self.wait==10 then
self.d_angle=self.d_angle+1
self.wait = 0
end
if self.d_angle==20 then
self.d_angle=5
self.alive = false
end
if self.angle>=360 then self.angle=self.angle % 360 end
end
function warp.open(actor)
for _, w in ipairs(warp.warp_list) do
if not w.alive then
w.alive = true
w.x = actor.x
w.y = actor.y
w.actor = actor
return e; -- reutilitzar
end
end
table.insert(warp.warp_list, warp.new(actor) )
end
function warp.update_all()
for _, w in ipairs(warp.warp_list) do
if w.alive then
w:update()
end
end
end