[FIX] Els warps reutilitzats mantenien l'estat anterior [NEW] Funcio distancia(a, b)
102 lines
2.5 KiB
Lua
102 lines
2.5 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
|
|
w.frame = 0
|
|
w.wait = 0
|
|
w.step = 0
|
|
w.angle = 0
|
|
w.d_angle = 5
|
|
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
|
|
|