diff --git a/cirnofarm.p64 b/cirnofarm.p64 index 3545f9d..c73a898 100644 --- a/cirnofarm.p64 +++ b/cirnofarm.p64 @@ -6,7 +6,7 @@ version 2 :: sfx/ :: gfx/0.gfx b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w -NC0yOCAxNDoyNToyMiIscmV2aXNpb249MTMxNl1dbHo0AHsMAAA3RAAA8xR7WzBdPXtibXA9cHh1 +NC0yOCAxNTowMDo0NSIscmV2aXNpb249MTMzM11dbHo0AHsMAAA3RAAA8xR7WzBdPXtibXA9cHh1 AEMgEBAE8PAsZmxhZ3M9MCxwYW5feAgA2nk9MCx6b29tPTExfSwyAPEIrxsj3gN_A94j3gP_CRNu A04TbiNOA34TAP8DjgM_A04DLiN_Iy4DngP_FAMuXgAd8AnwRU2ALSYtUB1mHQUgHYYNFQAdlh0V DaYEAMMNFQANlh0FEL0F8BNYAB8zWAAV8CpQRIAUTx8UUA8Ujx8EQC8UTx8kQA8UHx9EDg8ZBEAP @@ -65,11 +65,11 @@ HzYpwBoZECpQKhkAChlQSjlABhkKFgkGGhYwCQopChkKBhkGEGoJKgkWIBYKFgoJAK8wNhlGUIaQ JvAGQQEfDzIA--------------------------------------9BUD0xMX19 :: gfx/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yOCAxNDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yOCAxNTowMDo0NSIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: map/0.map b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yOCAxNDoyNToyMiIscmV2aXNpb249MTMyMV1dbHo0AM8FAAAUQgAA8Ah7e2JtcD11c2VyZGF0 +NC0yOCAxNTowMDo0NSIscmV2aXNpb249MTM1MV1dbHo0AM8FAAAUQgAA8Ah7e2JtcD11c2VyZGF0 YSgiaTE2IiwzMgMALyIwAQD-gy4xMAwADwEAoiozMAEAHjQUAAwBADU1ODABAD80ODABACsvNDAz ACYfNnwABD8xMzCAAEoAAQA-MzYwXAATBAQADwEANQ9QACEvMzCAAG0PAQC6KjQ4CAEPBAMHDiAA DwEANgSAAB8zYAEALzMwAQBOLzQ4GAAPDiQADwEAOQ5oAA8BAHIeM4ABD4AAYA8BAP_EBLQDDhAA @@ -98,11 +98,11 @@ AAEEHAAJgAQfZQQAGA8BAA0fOAQAFA8BAAEvZTABAC4vMTgEABMPgAD-Ri8wOAQAFB9lBAAgDwEA ER84BAAUH2UEAB4PCSGSSmJhY2sJIWQxMzcuMTYBABU3hhAvMTKGEBFQbT0xfX0= :: map/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yOCAxNDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yOCAxNTowMDo0NSIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: sfx/0.sfx b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w -NC0yOCAxNDoyNToyMiIscmV2aXNpb249MTAzNF1dbHo0AEYBAABmCAAA8CdweHUAAygAAAMABA9A +NC0yOCAxNTowMDo0NSIscmV2aXNpb249MTA1MV1dbHo0AEYBAABmCAAA8CdweHUAAygAAAMABA9A EAIOAAGgASACoA4ADxAADfDKAQIDBAUGBwAP-5AICQoLDwwPDQ8ODw8QAPAADQ8RDxIPEw8UDxUP Fg8XEwDxAQ8YDxkPGg8bDxwPHQ8eDx8UAPEAIA8hDyIPIw8kDyUPJg8nFADxACgPKQ8qDysPLA8t Dy4PLxQA8QAwDzEPMg8zDzQPNQ82DzcUAP8FOA85DzoPOw88Dz0PPg8-AA--8P8BAOvyJ1oBEAYP @@ -111,14 +111,14 @@ Gy-wADAA--_CH-8BAMzxHegPQAANQA8XAAsaCAYIEAIDEAUABgAIAEkXACYICVD--wnxF-4J-Bf_ CfBwKwBf-rDwcAQIAP-cH-8BAJdQ-----x8= :: sfx/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yOCAxNDoyNToyMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yOCAxNTowMDo0NSIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: 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") :: .info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTE2IDE5OjQyOjIyIixtb2RpZmllZD0iMjAyNC0w -NC0yOCAxNDoyNToyMyIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y +NC0yOCAxNTowMDo0NSIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y a3NwYWNlcz17e2xvY2F0aW9uPSJtYWluLmx1YSMxIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0 aW9uPSJnZngvMC5nZngiLHdvcmtzcGFjZV9pbmRleD0yfSx7bG9jYXRpb249Im1hcC8wLm1hcCIs d29ya3NwYWNlX2luZGV4PTN9LHtsb2NhdGlvbj0ic2Z4LzAuc2Z4Iix3b3Jrc3BhY2VfaW5kZXg9 diff --git a/src/actor2.lua b/src/actor2.lua index 9c52e7b..23afaa0 100644 --- a/src/actor2.lua +++ b/src/actor2.lua @@ -1,16 +1,16 @@ --M = {} -Actor = { - life=100, - spriteIndex=0, -} +Actor = {} --actor.__index = actor function Actor:new(new_x,new_y) local o = { x=new_x, y=new_y, w=16, - h=16 + h=16, + life=100, + shootable=false + --spriteIndex=0 } return setmetatable(o, {__index=self}) @@ -20,6 +20,17 @@ function Actor:update() end +function Actor:destroy() + +end + +function Actor:damage(amount) + self.life -= amount + if (self.life <= 0) then + self:destroy() + end +end + function Actor:draw() spr(self.spriteIndex,self.x,self.y) end diff --git a/src/barrel.lua b/src/barrel.lua index 0c0b499..a48be88 100644 --- a/src/barrel.lua +++ b/src/barrel.lua @@ -10,13 +10,29 @@ local Actor = require(make_path("actor2")) -- return barrel 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() end +function Barrel:destroy() + del(actors,self) +end + --function Barrel:draw() -- spr(self.spriteIndex,self.x,self.y) --end diff --git a/src/game.lua b/src/game.lua index c4a57b1..9faf2ea 100644 --- a/src/game.lua +++ b/src/game.lua @@ -91,6 +91,8 @@ function _update() p:update() end + check_collisions() + --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={ @@ -227,4 +229,34 @@ function render_layer(layer) end end -end \ No newline at end of file +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 + diff --git a/src/weapons.lua b/src/weapons.lua index 72b1e66..dd66273 100644 --- a/src/weapons.lua +++ b/src/weapons.lua @@ -10,7 +10,8 @@ local bullets_list = { spriteIndex=80, damage=1, speed=2, - life=100 + life=100, + radius=2 } } @@ -66,8 +67,18 @@ end -- Particle 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() self.life-=1 @@ -97,6 +108,7 @@ function Bullet:new(bullet_data,x,y,dir_x,dir_y) obj.damage = bullet_data.damage obj.life = bullet_data.life obj.speed = bullet_data.speed + obj.radius = bullet_data.radius obj.dx = dir_x * obj.speed obj.dy = dir_y * obj.speed @@ -122,6 +134,9 @@ function Bullet:check_collision() self:destroy() end + -- Collision with actors + + end function Bullet:update()