mirror of
https://gitlab.com/MaddoScientisto/cirnofarm.git
synced 2026-06-01 10:15:46 +00:00
Bullet actor collisions
This commit is contained in:
parent
f784bf43e9
commit
0e0a458949
5 changed files with 92 additions and 18 deletions
|
|
@ -6,7 +6,7 @@ version 2
|
||||||
:: sfx/
|
:: sfx/
|
||||||
:: gfx/0.gfx
|
:: gfx/0.gfx
|
||||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
|
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
|
||||||
NC0yOCAxNDoyNToyMiIscmV2aXNpb249MTMxNl1dbHo0AHsMAAA3RAAA8xR7WzBdPXtibXA9cHh1
|
NC0yOCAxNTowMDo0NSIscmV2aXNpb249MTMzM11dbHo0AHsMAAA3RAAA8xR7WzBdPXtibXA9cHh1
|
||||||
AEMgEBAE8PAsZmxhZ3M9MCxwYW5feAgA2nk9MCx6b29tPTExfSwyAPEIrxsj3gN_A94j3gP_CRNu
|
AEMgEBAE8PAsZmxhZ3M9MCxwYW5feAgA2nk9MCx6b29tPTExfSwyAPEIrxsj3gN_A94j3gP_CRNu
|
||||||
A04TbiNOA34TAP8DjgM_A04DLiN_Iy4DngP_FAMuXgAd8AnwRU2ALSYtUB1mHQUgHYYNFQAdlh0V
|
A04TbiNOA34TAP8DjgM_A04DLiN_Iy4DngP_FAMuXgAd8AnwRU2ALSYtUB1mHQUgHYYNFQAdlh0V
|
||||||
DaYEAMMNFQANlh0FEL0F8BNYAB8zWAAV8CpQRIAUTx8UUA8Ujx8EQC8UTx8kQA8UHx9EDg8ZBEAP
|
DaYEAMMNFQANlh0FEL0F8BNYAB8zWAAV8CpQRIAUTx8UUA8Ujx8EQC8UTx8kQA8UHx9EDg8ZBEAP
|
||||||
|
|
@ -65,11 +65,11 @@ HzYpwBoZECpQKhkAChlQSjlABhkKFgkGGhYwCQopChkKBhkGEGoJKgkWIBYKFgoJAK8wNhlGUIaQ
|
||||||
JvAGQQEfDzIA--------------------------------------9BUD0xMX19
|
JvAGQQEfDzIA--------------------------------------9BUD0xMX19
|
||||||
:: gfx/.info.pod
|
:: gfx/.info.pod
|
||||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
||||||
NC0yOCAxNDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
NC0yOCAxNTowMDo0NSIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||||
MG5pbA==
|
MG5pbA==
|
||||||
:: map/0.map
|
:: map/0.map
|
||||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
||||||
NC0yOCAxNDoyNToyMiIscmV2aXNpb249MTMyMV1dbHo0AM8FAAAUQgAA8Ah7e2JtcD11c2VyZGF0
|
NC0yOCAxNTowMDo0NSIscmV2aXNpb249MTM1MV1dbHo0AM8FAAAUQgAA8Ah7e2JtcD11c2VyZGF0
|
||||||
YSgiaTE2IiwzMgMALyIwAQD-gy4xMAwADwEAoiozMAEAHjQUAAwBADU1ODABAD80ODABACsvNDAz
|
YSgiaTE2IiwzMgMALyIwAQD-gy4xMAwADwEAoiozMAEAHjQUAAwBADU1ODABAD80ODABACsvNDAz
|
||||||
ACYfNnwABD8xMzCAAEoAAQA-MzYwXAATBAQADwEANQ9QACEvMzCAAG0PAQC6KjQ4CAEPBAMHDiAA
|
ACYfNnwABD8xMzCAAEoAAQA-MzYwXAATBAQADwEANQ9QACEvMzCAAG0PAQC6KjQ4CAEPBAMHDiAA
|
||||||
DwEANgSAAB8zYAEALzMwAQBOLzQ4GAAPDiQADwEAOQ5oAA8BAHIeM4ABD4AAYA8BAP_EBLQDDhAA
|
DwEANgSAAB8zYAEALzMwAQBOLzQ4GAAPDiQADwEAOQ5oAA8BAHIeM4ABD4AAYA8BAP_EBLQDDhAA
|
||||||
|
|
@ -98,11 +98,11 @@ AAEEHAAJgAQfZQQAGA8BAA0fOAQAFA8BAAEvZTABAC4vMTgEABMPgAD-Ri8wOAQAFB9lBAAgDwEA
|
||||||
ER84BAAUH2UEAB4PCSGSSmJhY2sJIWQxMzcuMTYBABU3hhAvMTKGEBFQbT0xfX0=
|
ER84BAAUH2UEAB4PCSGSSmJhY2sJIWQxMzcuMTYBABU3hhAvMTKGEBFQbT0xfX0=
|
||||||
:: map/.info.pod
|
:: map/.info.pod
|
||||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
||||||
NC0yOCAxNDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
NC0yOCAxNTowMDo0NSIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||||
MG5pbA==
|
MG5pbA==
|
||||||
:: sfx/0.sfx
|
:: sfx/0.sfx
|
||||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
|
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
|
||||||
NC0yOCAxNDoyNToyMiIscmV2aXNpb249MTAzNF1dbHo0AEYBAABmCAAA8CdweHUAAygAAAMABA9A
|
NC0yOCAxNTowMDo0NSIscmV2aXNpb249MTA1MV1dbHo0AEYBAABmCAAA8CdweHUAAygAAAMABA9A
|
||||||
EAIOAAGgASACoA4ADxAADfDKAQIDBAUGBwAP-5AICQoLDwwPDQ8ODw8QAPAADQ8RDxIPEw8UDxUP
|
EAIOAAGgASACoA4ADxAADfDKAQIDBAUGBwAP-5AICQoLDwwPDQ8ODw8QAPAADQ8RDxIPEw8UDxUP
|
||||||
Fg8XEwDxAQ8YDxkPGg8bDxwPHQ8eDx8UAPEAIA8hDyIPIw8kDyUPJg8nFADxACgPKQ8qDysPLA8t
|
Fg8XEwDxAQ8YDxkPGg8bDxwPHQ8eDx8UAPEAIA8hDyIPIw8kDyUPJg8nFADxACgPKQ8qDysPLA8t
|
||||||
Dy4PLxQA8QAwDzEPMg8zDzQPNQ82DzcUAP8FOA85DzoPOw88Dz0PPg8-AA--8P8BAOvyJ1oBEAYP
|
Dy4PLxQA8QAwDzEPMg8zDzQPNQ82DzcUAP8FOA85DzoPOw88Dz0PPg8-AA--8P8BAOvyJ1oBEAYP
|
||||||
|
|
@ -111,14 +111,14 @@ Gy-wADAA--_CH-8BAMzxHegPQAANQA8XAAsaCAYIEAIDEAUABgAIAEkXACYICVD--wnxF-4J-Bf_
|
||||||
CfBwKwBf-rDwcAQIAP-cH-8BAJdQ-----x8=
|
CfBwKwBf-rDwcAQIAP-cH-8BAJdQ-----x8=
|
||||||
:: sfx/.info.pod
|
:: sfx/.info.pod
|
||||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
|
||||||
NC0yOCAxNDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
NC0yOCAxNTowMDo0NSIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA
|
||||||
MG5pbA==
|
MG5pbA==
|
||||||
:: main.lua
|
:: main.lua
|
||||||
--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-28 14:25:22",revision=1321]]
|
--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-28 15:00:45",revision=1338]]
|
||||||
include("/cirnofarm/src/game.lua")
|
include("/cirnofarm/src/game.lua")
|
||||||
:: .info.pod
|
:: .info.pod
|
||||||
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTE2IDE5OjQyOjIyIixtb2RpZmllZD0iMjAyNC0w
|
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTE2IDE5OjQyOjIyIixtb2RpZmllZD0iMjAyNC0w
|
||||||
NC0yOCAxNDoyNToyMyIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y
|
NC0yOCAxNTowMDo0NSIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y
|
||||||
a3NwYWNlcz17e2xvY2F0aW9uPSJtYWluLmx1YSMxIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0
|
a3NwYWNlcz17e2xvY2F0aW9uPSJtYWluLmx1YSMxIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0
|
||||||
aW9uPSJnZngvMC5nZngiLHdvcmtzcGFjZV9pbmRleD0yfSx7bG9jYXRpb249Im1hcC8wLm1hcCIs
|
aW9uPSJnZngvMC5nZngiLHdvcmtzcGFjZV9pbmRleD0yfSx7bG9jYXRpb249Im1hcC8wLm1hcCIs
|
||||||
d29ya3NwYWNlX2luZGV4PTN9LHtsb2NhdGlvbj0ic2Z4LzAuc2Z4Iix3b3Jrc3BhY2VfaW5kZXg9
|
d29ya3NwYWNlX2luZGV4PTN9LHtsb2NhdGlvbj0ic2Z4LzAuc2Z4Iix3b3Jrc3BhY2VfaW5kZXg9
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,16 @@
|
||||||
--M = {}
|
--M = {}
|
||||||
|
|
||||||
Actor = {
|
Actor = {}
|
||||||
life=100,
|
|
||||||
spriteIndex=0,
|
|
||||||
}
|
|
||||||
--actor.__index = actor
|
--actor.__index = actor
|
||||||
function Actor:new(new_x,new_y)
|
function Actor:new(new_x,new_y)
|
||||||
local o = {
|
local o = {
|
||||||
x=new_x,
|
x=new_x,
|
||||||
y=new_y,
|
y=new_y,
|
||||||
w=16,
|
w=16,
|
||||||
h=16
|
h=16,
|
||||||
|
life=100,
|
||||||
|
shootable=false
|
||||||
|
--spriteIndex=0
|
||||||
}
|
}
|
||||||
|
|
||||||
return setmetatable(o, {__index=self})
|
return setmetatable(o, {__index=self})
|
||||||
|
|
@ -20,6 +20,17 @@ function Actor:update()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Actor:destroy()
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function Actor:damage(amount)
|
||||||
|
self.life -= amount
|
||||||
|
if (self.life <= 0) then
|
||||||
|
self:destroy()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function Actor:draw()
|
function Actor:draw()
|
||||||
spr(self.spriteIndex,self.x,self.y)
|
spr(self.spriteIndex,self.x,self.y)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,29 @@ local Actor = require(make_path("actor2"))
|
||||||
-- return barrel
|
-- return barrel
|
||||||
|
|
||||||
local Barrel = Actor:new()
|
local Barrel = Actor:new()
|
||||||
Barrel.spriteIndex = 3
|
|
||||||
|
|
||||||
|
function Barrel:new(x,y)
|
||||||
|
local b = Actor:new(x,y)
|
||||||
|
|
||||||
|
b.life = 5
|
||||||
|
b.shootable = true
|
||||||
|
b.spriteIndex = 3
|
||||||
|
|
||||||
|
return setmetatable(b, {__index=self})
|
||||||
|
end
|
||||||
|
|
||||||
|
--Barrel.spriteIndex = 3
|
||||||
|
--Barrel.shootable = true
|
||||||
|
--Barrel.life = 5
|
||||||
|
|
||||||
function Barrel:update()
|
function Barrel:update()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Barrel:destroy()
|
||||||
|
del(actors,self)
|
||||||
|
end
|
||||||
|
|
||||||
--function Barrel:draw()
|
--function Barrel:draw()
|
||||||
-- spr(self.spriteIndex,self.x,self.y)
|
-- spr(self.spriteIndex,self.x,self.y)
|
||||||
--end
|
--end
|
||||||
|
|
|
||||||
34
src/game.lua
34
src/game.lua
|
|
@ -91,6 +91,8 @@ function _update()
|
||||||
p:update()
|
p:update()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
check_collisions()
|
||||||
|
|
||||||
--slidervalue = pgui:component("hslider",{pos=vec(190,20),value=slidervalue})
|
--slidervalue = pgui:component("hslider",{pos=vec(190,20),value=slidervalue})
|
||||||
|
|
||||||
pgui:component("vstack",{stroke=true,pos=vec(0,0),color={0,18,12,0,7,6},height=0,margin=3,gap=3,contents={
|
pgui:component("vstack",{stroke=true,pos=vec(0,0),color={0,18,12,0,7,6},height=0,margin=3,gap=3,contents={
|
||||||
|
|
@ -227,4 +229,34 @@ function render_layer(layer)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function distance(x1, y1, x2, y2)
|
||||||
|
return math.sqrt((x2 - x1)^2 + (y2 - y1)^2)
|
||||||
|
end
|
||||||
|
|
||||||
|
function collided(act, bul)
|
||||||
|
-- Calculate distance between actor and bullet
|
||||||
|
local dist = distance(act.x, act.y, bul.x, bul.y)
|
||||||
|
|
||||||
|
-- Check if distance is less than actor's half size and bullet's radius
|
||||||
|
return dist < (bul.radius + math.min(act.w, act.h) / 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
function check_collisions()
|
||||||
|
for _, actor in ipairs(actors) do
|
||||||
|
if (actor.shootable) then
|
||||||
|
for _, bullet in ipairs(bullets) do
|
||||||
|
if collided(actor, bullet) --[[and not bullet.destroyed]] then
|
||||||
|
-- Destroy bullet
|
||||||
|
bullet:destroy()
|
||||||
|
|
||||||
|
-- Damage actor
|
||||||
|
actor:damage(bullet.damage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ local bullets_list = {
|
||||||
spriteIndex=80,
|
spriteIndex=80,
|
||||||
damage=1,
|
damage=1,
|
||||||
speed=2,
|
speed=2,
|
||||||
life=100
|
life=100,
|
||||||
|
radius=2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,8 +67,18 @@ end
|
||||||
-- Particle
|
-- Particle
|
||||||
|
|
||||||
Particle = Actor:new()
|
Particle = Actor:new()
|
||||||
Particle.life=4
|
|
||||||
Particle.spriteIndex=81
|
function Particle:new(x,y)
|
||||||
|
local p = Actor:new(x,y)
|
||||||
|
|
||||||
|
p.life=4
|
||||||
|
p.spriteIndex=81
|
||||||
|
p.shootable = false
|
||||||
|
|
||||||
|
return setmetatable(p, {__index=self})
|
||||||
|
end
|
||||||
|
--Particle.life=4
|
||||||
|
--Particle.spriteIndex=81
|
||||||
|
|
||||||
function Particle:update()
|
function Particle:update()
|
||||||
self.life-=1
|
self.life-=1
|
||||||
|
|
@ -97,6 +108,7 @@ function Bullet:new(bullet_data,x,y,dir_x,dir_y)
|
||||||
obj.damage = bullet_data.damage
|
obj.damage = bullet_data.damage
|
||||||
obj.life = bullet_data.life
|
obj.life = bullet_data.life
|
||||||
obj.speed = bullet_data.speed
|
obj.speed = bullet_data.speed
|
||||||
|
obj.radius = bullet_data.radius
|
||||||
|
|
||||||
obj.dx = dir_x * obj.speed
|
obj.dx = dir_x * obj.speed
|
||||||
obj.dy = dir_y * obj.speed
|
obj.dy = dir_y * obj.speed
|
||||||
|
|
@ -122,6 +134,9 @@ function Bullet:check_collision()
|
||||||
self:destroy()
|
self:destroy()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Collision with actors
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Bullet:update()
|
function Bullet:update()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue