aborto collisorio

This commit is contained in:
MaddoScientisto 2024-04-17 00:08:46 +02:00
commit c48f26f32a
2 changed files with 120 additions and 84 deletions

View file

@ -6,23 +6,52 @@ version 2
:: sfx/ :: sfx/
:: gfx/0.gfx :: gfx/0.gfx
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
NC0xNSAyMToxMjowNyIscmV2aXNpb249MTkzXV1sejQAVQIAAG8zAADzFHtbMF09e2JtcD1weHUA NC0xNiAyMjowODowMyIscmV2aXNpb249MjY2XV1sejQAgwIAAKwzAADzFHtbMF09e2JtcD1weHUA
QyAQEATw8CxmbGFncz0wLHBhbl94CADKeT0wLHpvb209N30sMQDxCK8bI94DfgPeI94D-gkTbgNO QyAQEATw8CxmbGFncz0wLHBhbl94CADKeT0wLHpvb209N30sMQDxCK8bI94DfgPeI94D-gkTbgNO
E24jTgN_EwD-A44DPgNOAy4jfiMuA54D-hQDLl0AHPAJ8EVNgC0mLVAdZh0FIB2GDRUAHZYdFQ2m E24jTgN_EwD-A44DPgNOAy4jfiMuA54D-hQDLl0AHPAJ8EVNgC0mLVAdZh0FIB2GDRUAHZYdFQ2m
BADDDRUADZYdBRC9BfATVwAfMVcAFP8VUESAFE8fFFAPFI8fBEAvFE8fJEAPFB8fRB4EQA8UXg0e BADDDRUADZYdBRC9BfATVwAfMVcAFP8VUESAFE8fFFAPFI8fBEAvFE8fJEAPFB8fRB4EQA8UXg0e
BEANBgAPn1AUPg0UgETwFX4ADg9jAQUPMQCn388TLxEPE18RDxM-EQ8MABRzfxM-ET8THxAAAAQA BEANBgAPn1AUPg0UgETwFX4AHPAI8BWcQAx-EBwwDH4MDgwgnB4MIAx-HAwHAB99BgAGrw4MMAx9
H08MABB1LxEvEz8RjzgAP28RDwwAFC-fE9UAHNn0DA8fNB50HjQeJB4kBgDxAEQOJB7UHoQeJA6U HECc8BRuAA4P0QEFDzEAdt-PEy8RDxNfEQ8TPxEPDAAUc38TPxE-Ex8QAAAEAB9PDAAQdS8RLxM-
HoQONAQABh4AEIQEAD8O9AkIAiYPMQD-CvEUQF8UcB4PFT8fLkAeDxUOPx8PFQ4NDiAeDQ4NPx8O EY84AD9vEQ8MABQv3xPVABzZ9AwPHzQedB40HiQeJAYA8QBEDiQe1B6EHiQOlB6EDjQEAAYeABCE
DQ4NDhAGAGE8DQ4NHgALADENDhwHABE_BgAhHA4HABEeBgAnDhQaACUUDhoA4CwNDixeTA4NTA0O BAA-DvQJ1wEmDzEA-wrxFEBfFHAeDxU-Hy5AHg8VDj8fDxUODQ4gHg0ODT8fDg0ODQ4QBgBhPA0O
AA48FgBSPA4QDixaAEEOIA4MCgBhDQ4cDkAuCgBPHnBeQPsAHg8xAP----------8v9DUDWgBT8c DR4ACwAxDQ4cBwARPgYAIRwOBwARHgYAJw4UGgAlFA4aAOAsDQ4sXkwODUwNDgAOPBYAUjwOEA4s
FXAFbgVQBR48HgVgFUwFgAUMBwwHHAVQJUwFUAU8BwwHFVAFTAcsBVAVTBVwBUwFcAUsBSwFYAUc WgBBDiAODAoAYQ0OHA5ALgoATx5wXkD7AB4PMQD-----------L-Q1A1oAU-HBVwBW4FUAUePB4F
BQAFHAVgBQwFIAUMBXAFQAXwBbIAHg8xAP------------------------------------------ YBVMBYAFDAcMBxwFUCVMBVAFPAcMBxVQBUwHLAVQFUwVcAVMBXAFLAUsBWAFHAUABRwFYAUMBSAF
-----4tQbT03fX0= DAVwBUAF8AWyAB4PMQD-----------------------------------------------_LUG09N319
:: gfx/.info.pod :: gfx/.info.pod
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixzdG9yZWQ9IjIwMjQtMDQt b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
MDQgMDc6MTk6MzMiXV1sejQABAAAAAMAAAAwbmls NC0xNiAyMjowODowMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
MG5pbA==
:: map/0.map
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
NC0xNiAyMjowODowMyIscmV2aXNpb249Mjc5XV1sejQAzgEAANggAADwCHt7Ym1wPXVzZXJkYXRh
KCJpMTYiLDMyAwAvIjABAPsfOQQAHg8BADsDVAAfMQwABA8QAAEPAQA6HzkEAB4PAQCHLzIwAQAD
LzMwTAAhDwEAYx8zsAAEDhQADhgADwEAIRM0BAAPAQAmD4AAMg8BAK8PMAI1LzMw4ACXHzJcAEQP
BAEhD4wAMg-EAZQP7ABVHjJsAA8wAaIPlAA9DBwADyQBNQ9IAAEvMjABAGgPkADQD_gBCR8wXAAu
DwEArx8y3AARDxQCrB8yvAECDwEA8w9MAQ0vMzABAP_d8RciKSxoaWRkZW49ZmFsc2UsbmFtZT0i
c29saWQiLHBhbl94PS05MAoA8gF5PS0xMzksdGlsZV9oPTE2CgAQdwoAj3pvb209MX0saRALHzEE
APgPAQAhHzEEADgEAQAfOQwABA8QAAEfMQQAOA8BACEfMQQAOB84BAAcHzEEADwfOAQAHBc5PAAP
BAAxHziAAJwfMQQAPB84BAAcHzEEADwfOAQAHB8xBAA8HzgEABwfMQQAPB84BAAcHzEEADwfOAQA
HB8xBAA8HzgEABwfMQQA----------_1D2kQA59iYWNrZ3JvdW5uEBxQbT0xfX0=
:: map/.info.pod
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
NC0xNiAyMjowODowMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
MG5pbA==
:: sfx/0.sfx
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
NC0xNiAyMjowODowMyIscmV2aXNpb249MjM2XV1sejQARgEAAGYIAADwJ3B4dQADKAAAAwAED0AQ
Ag4AAaABIAKgDgAPEAAN8MoBAgMEBQYHAA--kAgJCgsPDA8NDw4PDxAA8AANDxEPEg8TDxQPFQ8W
DxcTAPEBDxgPGQ8aDxsPHA8dDx4PHxQA8QAgDyEPIg8jDyQPJQ8mDycUAPEAKA8pDyoPKw8sDy0P
Lg8vFADxADAPMQ8yDzMPNA81DzYPNxQA-wU4DzkPOg87DzwPPQ8_Dz8AD--w-wEA6-InWgEQBg8g
EAEgASAB8AACEAIMEAEgDyEgATAPQPDDDygP--DGD-gKD-8PgA-3Dw0B8AkBEAYMMAA-Dw-gMQAb
L-AAMAD--4If-wEAzPEd6A9AAA1ADxcACxoIBggQAgMQBQAGAAgASRcAJggJUP--CfEX-gn8F-4J
8HArAF-_sPBwBAgA-9wf-wEAl1D-----Hw==
:: sfx/.info.pod
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
NC0xNiAyMjowODowMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
MG5pbA==
:: main.lua :: main.lua
--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-15 21:12:07",revision=257]] --[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-16 22:08:03",revision=334]]
--cd("/cirnofarm/src") --cd("/cirnofarm/src")
include("/cirnofarm/src/cirno.lua") include("/cirnofarm/src/cirno.lua")
--function _init() --function _init()
@ -51,36 +80,11 @@ include("/cirnofarm/src/cirno.lua")
-- if (btn(2)) y -= 2 -- if (btn(2)) y -= 2
-- if (btn(3)) y += 2 -- if (btn(3)) y += 2
--end --end
:: map/0.map
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
NC0xNSAyMToxMjowNyIscmV2aXNpb249MjAzXV1sejQAtAEAANggAADwCHt7Ym1wPXVzZXJkYXRh
KCJpMTYiLDMyAwAvIjABAPsfOQQAHg8BADsDVAAfMQwABA8QAAEPAQA6HzkEAB4PAQCHLzIwAQAD
LzMwTAAhDwEAex8z3AAGDwEA-3QPMAIeD9ABnB8y9ABIHzJEAHQfMMQBUQ-sAJgfMmwADQ-0Asgf
MxwAFQ8kATgPSAABLzIwAQBoD5AA0A-oAQkfMFwALg8BAK8fMtwAEQ8UAqwfMrwBAg8BAPMPTAEN
LzMwAQD-nfEXIiksaGlkZGVuPWZhbHNlLG5hbWU9InNvbGlkIixwYW5feD0tOTAKAPIBeT0tMTM5
LHRpbGVfaD0xNgoAEHcKAI96b29tPTF9LGkQCx8xBAD4DwEAIR8xBAA4BAEAHzkMAAQPEAABHzEE
ADgPAQAhHzEEADgfOAQAHB8xBAA8HzgEABwXOTwADwQAMR84gACcHzEEADwfOAQAHB8xBAA8HzgE
ABwfMQQAPB84BAAcHzEEADwfOAQAHB8xBAA8HzgEABwfMQQAPB84BAAcHzEEAP----------tQ9p
EAOfYmFja2dyb3VubhAcUG09MX19
:: map/.info.pod
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixzdG9yZWQ9IjIwMjQtMDQt
MDQgMDc6MTk6MzMiXV1sejQABAAAAAMAAAAwbmls
:: sfx/0.sfx
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
NC0xNSAyMToxMjowNyIscmV2aXNpb249MTY2XV1sejQARgEAAGYIAADwJ3B4dQADKAAAAwAED0AQ
Ag4AAaABIAKgDgAPEAAN8MoBAgMEBQYHAA--kAgJCgsPDA8NDw4PDxAA8AANDxEPEg8TDxQPFQ8W
DxcTAPEBDxgPGQ8aDxsPHA8dDx4PHxQA8QAgDyEPIg8jDyQPJQ8mDycUAPEAKA8pDyoPKw8sDy0P
Lg8vFADxADAPMQ8yDzMPNA81DzYPNxQA-wU4DzkPOg87DzwPPQ8_Dz8AD--w-wEA6-InWgEQBg8g
EAEgASAB8AACEAIMEAEgDyEgATAPQPDDDygP--DGD-gKD-8PgA-3Dw0B8AkBEAYMMAA-Dw-gMQAb
L-AAMAD--4If-wEAzPEd6A9AAA1ADxcACxoIBggQAgMQBQAGAAgASRcAJggJUP--CfEX-gn8F-4J
8HArAF-_sPBwBAgA-9wf-wEAl1D-----Hw==
:: sfx/.info.pod
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixzdG9yZWQ9IjIwMjQtMDQt
MDQgMDc6MTk6MzMiXV1sejQABAAAAAMAAAAwbmls
:: .info.pod :: .info.pod
b64$LS1bW3BvZCxydW50aW1lPTUsc3RvcmVkPSIyMDI0LTA0LTE1IDIxOjEyOjA3Iix3b3Jrc3Bh b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTE2IDE5OjQyOjIyIixtb2RpZmllZD0iMjAyNC0w
Y2VzPXt7bG9jYXRpb249Im1haW4ubHVhIzIiLHdvcmtzcGFjZV9pbmRleD0xfSx7bG9jYXRpb249 NC0xNiAyMjowODowMyIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y
ImdmeC8wLmdmeCIsd29ya3NwYWNlX2luZGV4PTJ9LHtsb2NhdGlvbj0ibWFwLzAubWFwIix3b3Jr a3NwYWNlcz17e2xvY2F0aW9uPSJtYWluLmx1YSMyIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0
c3BhY2VfaW5kZXg9M30se2xvY2F0aW9uPSJzZngvMC5zZngiLHdvcmtzcGFjZV9pbmRleD00fX1d aW9uPSJnZngvMC5nZngiLHdvcmtzcGFjZV9pbmRleD0yfSx7bG9jYXRpb249Im1hcC8wLm1hcCIs
XWx6NAAEAAAAAwAAADBuaWw= d29ya3NwYWNlX2luZGV4PTN9LHtsb2NhdGlvbj0ic2Z4LzAuc2Z4Iix3b3Jrc3BhY2VfaW5kZXg9
NH19XV1sejQABAAAAAMAAAAwbmls
:: [eoc] :: [eoc]

View file

@ -1,9 +1,11 @@
--[[pod_format="raw",created="2024-04-14 14:05:11",modified="2024-04-15 22:01:12",revision=116]] --[[pod_format="raw",created="2024-04-14 14:05:11",modified="2024-04-16 22:07:51",revision=191]]
--include("/cirnofarm/src/actor.lua") --include("/cirnofarm/src/actor.lua")
last_coll=0
mouse_debug = true mouse_debug = true
w=480 w=480
h=300 h=300
tile_width = 16
tile_height = 16
asdf = {top=0, side=1} asdf = {top=0, side=1}
function _init() function _init()
@ -13,33 +15,47 @@ function _init()
y=128, y=128,
w=16, w=16,
h=16, h=16,
speed=1.2, speed=0.05,
hflip=false, hflip=false,
spriteIndex=64, spriteIndex=64,
move_x=0, move_x=0,
move_y=0, move_y=0,
noclip=false,
cm=true, -- Collide with map tiles cm=true, -- Collide with map tiles
cb=true, -- Collide with world bounds cb=true, -- Collide with world bounds
draw=function(self) draw=function(self)
spr(self.spriteIndex,self.x,self.y, self.hflip) spr(self.spriteIndex,self.x,self.y, self.hflip)
drawCollision(self) drawCollision(self.x+self.move_x,self.y,self.w-1,self.h-1)
drawCollision(self.x,self.y+self.move_y,self.w-1,self.h-1)
print(string.format("x:%.2f y:%.2f mx:%.2f my:%.2f coll:%d",self.x,self.y,
self.move_x,self.move_y,last_coll),0,0,1)
end, end,
update=function(self) update=function(self)
self.move_x = self.x --self.move_x = self.x
self.move_y = self.y --self.move_y = self.y
if (btn(0)) self.move_x -= self.speed self.hflip = true if (btn(0)) self.move_x -= self.speed self.hflip = true
if (btn(1)) self.move_x += self.speed self.hflip = false if (btn(1)) self.move_x += self.speed self.hflip = false
if (btn(2)) self.move_y -= self.speed if (btn(2)) self.move_y -= self.speed
if (btn(3)) self.move_y += self.speed if (btn(3)) self.move_y += self.speed
if (checkCollision(self.x+self.move_x,self.y,self.w-1,self.h-1)) then
--if (can_move(self.move_x,self.move_y)) then --if (can_move(self.move_x,self.move_y)) then
--if (cmap(self) == false) then --if (cmap(self) == false) then
self.x = self.move_x
self.y = self.move_y if (not self.noclip) then self.move_x = 0 end
--else --else
-- sfx(0) -- sfx(0)
--end end
if (not self.noclip and checkCollision(self.x,self.y+self.move_y,self.w-1,self.h-1)) then
if (not self.noclip) then self.move_y = 0 end
end
self.move_x *= 0.95
self.move_y *= 0.95
self.x += self.move_x
self.y += self.move_y
--if (checkCollision(col_x,col_y) == false) then --if (checkCollision(col_x,col_y) == false) then
-- x = col_x -- x = col_x
-- y = col_y -- y = col_y
@ -47,8 +63,7 @@ function _init()
end end
}) })
tile_width = 16
tile_height = 16
end end
function _draw() function _draw()
@ -76,45 +91,62 @@ function _update()
end end
end end
function drawCollision(o) function drawCollision(x,y,w,h)
local right = o.x+o.w+o.speed for i=x,x+w,w do
local left = o.x-o.speed
local bottom = o.y+o.h+o.speed pset(i,y,8)
local top = o.y-o.speed --pset(i,y+h,18)
end
rect(left,top,right,bottom,2) --[[for i=y,y+h,w do
pset(x,i,8)
pset(x+w,i,8)
end]]
--rect(left,top,right,bottom,2)
end end
function checkCollision(o) function checkCollision(x,y,w,h)
-- check right local collide = false
-- devo controllare la collisione prima di calcolare il dove, per ogni input direzionale last_coll = 0
local right = o.x+o.w+o.speed for i=x,x+w,w do
local left = o.x-o.speed
local bottom = o.y+o.h+o.speed
local top = o.y-o.speed
if (not is_tile(1,top,left) local sprite = mget(i,y)
and not is_tile(1,top,right) local flag = fget(sprite)
) if (flag == 1) then
collide = true
last_coll = 1
end
-- check left --if (is_tile_solid(i,y) --[[or is_tile_solid(i,y+h)]]) then
-- check top -- collide = true
-- check bottom -- last_coll = 1
return is_tile(0,x,y) --end
--return fget(mget(x/tile_width,y/tile_height),0) end
--for i=y,y+h do
-- if (is_tile_solid(x,i) or is_tile_solid(x+w,i)) then
-- collide = true
-- end
--end
return collide
end end
function is_tile(tile_type,x,y) function is_tile(tile_type,x,y)
local tile = mget(x/tile_width,y/tile_height) local tile = mget(x/tile_width,y/tile_height)
local has_flag = fget(tile,tile_type) local has_flag = fget(tile,tile_type)
--last_coll = fget(tile)
return has_flag return has_flag
end end
function is_tile_solid(x,y)
return is_tile(1,x,y)
end
function can_move(x,y) function can_move(x,y)
return is_tile(0,x,y)
return not is_tile(1,x,y)
end end
function debug_mouse() function debug_mouse()
@ -123,8 +155,8 @@ function debug_mouse()
local y_offset = 5 local y_offset = 5
-- tile size -- tile size
local tw=16 local tw=tile_width
local th=16 local th=tile_height
-- window width and height -- window width and height
local w=480 local w=480