[WIP] Enviant als cacos a altra dimensió
[NEW] Tile per a warping
This commit is contained in:
159
data/warp.lua
Normal file
159
data/warp.lua
Normal file
@@ -0,0 +1,159 @@
|
||||
warp={
|
||||
max_warps=50,
|
||||
warp_list={},
|
||||
update=update_all,
|
||||
}
|
||||
|
||||
function warp.init()
|
||||
warp_sf=surf.new(32,32)
|
||||
surf.source(tiles)
|
||||
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)
|
||||
end
|
||||
|
||||
function warp.new(world_x, world_y)
|
||||
-- local world_x, world_y = coords.room_to_world(_hab,_x,_y)
|
||||
return {name="warp",
|
||||
hab=_hab,
|
||||
x=world_x,
|
||||
y=world_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}
|
||||
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()
|
||||
surf.source(warp_sf)
|
||||
draw.surfrot(0,0,32,32,scr_x,scr_y,self.angle)
|
||||
surf.source(curr_sf)
|
||||
end
|
||||
|
||||
function warp:update()
|
||||
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(world_x,world_y)
|
||||
for _, w in ipairs(warp.warp_list) do
|
||||
if not w.alive then
|
||||
w.alive = true
|
||||
w.x = world_x
|
||||
w.y = world_y
|
||||
return e; -- reutilitzar
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(warp.warp_list, warp.new(world_x, world_y) )
|
||||
end
|
||||
|
||||
|
||||
function warp.update_all()
|
||||
for _, w in ipairs(warp.warp_list) do
|
||||
if w.alive then
|
||||
w:update()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- function warp:draw()
|
||||
-- if self.frame>0 then
|
||||
-- local scr_x, scr_y = viewp:screen_coords( self.x, self.y )
|
||||
-- draw.surf((self.frame&7)*cw, (self.frame>>cxr2)*ch, cw, ch, scr_x, scr_y, cw, ch, self.flip)
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- function warp:update_normal()
|
||||
-- self.wait=self.wait+1
|
||||
--
|
||||
-- if self.wait==18 then
|
||||
-- self.wait=0
|
||||
-- self.step=(self.step+1)%4
|
||||
-- self.frame=self.anim[self.step+1]
|
||||
-- end
|
||||
--
|
||||
-- local step = 1
|
||||
-- if self.flip then step = -step end
|
||||
-- local inc = 0
|
||||
-- if self.flip then inc = self.bb.w end
|
||||
--
|
||||
-- local check_x = self.x+self.bb.x+step
|
||||
-- local check_ywall = self.y+self.h-2
|
||||
-- local check_yhole = self.y+self.h+1
|
||||
-- if not self.flip then
|
||||
-- check_x = self.x+self.bb.w+self.bb.x+step
|
||||
-- end
|
||||
--
|
||||
-- local check_no_wall= arc_check_tile(check_x,check_ywall)<tiletype.block
|
||||
-- local check_no_hole= arc_check_tile(check_x,check_yhole)~=tiletype.void
|
||||
-- if check_no_wall and check_no_hole then
|
||||
-- self.x=self.x+step
|
||||
-- else
|
||||
-- self.flip=not self.flip
|
||||
-- end
|
||||
--
|
||||
-- if viewp:inside(self.x, self.y, self.w, self.h) then
|
||||
-- if collision(abad,self) then
|
||||
-- abad_hurt(1)
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
-- -- if self.hab==abad.hab then
|
||||
-- -- if aabb(abad,self) then
|
||||
-- -- abad_hurt(1)
|
||||
-- -- end
|
||||
-- -- end
|
||||
--
|
||||
-- --if check_tile(self.hab,self.x+4,self.y+16)==tiletype.void and ((self.x+4)&7==0 or check_tile(self.hab,self.x+12,self.y+16)==tiletype.void) then
|
||||
-- -- self.flip=not self.flip
|
||||
-- --end
|
||||
-- end
|
||||
--
|
||||
-- function warp:update_hit()
|
||||
-- self.wait=self.wait+1
|
||||
--
|
||||
-- if self.wait>=6 then
|
||||
-- self.wait=0
|
||||
-- self.step=self.step+1
|
||||
-- if self.step<40 then
|
||||
-- if self.step%2==0 then
|
||||
-- self.frame=16
|
||||
-- else
|
||||
-- self.frame=-1
|
||||
-- end
|
||||
-- elseif self.step>=40 then
|
||||
-- self.step=0
|
||||
-- self.wait=0
|
||||
-- self.update=warp.update_normal
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
-- function warp:hit()
|
||||
-- self.update=warp.update_hit
|
||||
-- end
|
||||
Reference in New Issue
Block a user