From 5e667fd6d29eac0a453fa6f9500ec79df5b45b25 Mon Sep 17 00:00:00 2001 From: MaddoScientisto Date: Fri, 26 Apr 2024 14:24:25 +0200 Subject: [PATCH] Movable object --- cirnofarm.p64 | 16 +++++----- src/actor2.lua | 4 ++- src/barrel.lua | 2 +- src/game.lua | 7 ++++- src/movable_actor.lua | 72 +++++++++++++++++++++++++++++++++++++++++++ src/strawberry.lua | 13 ++++---- 6 files changed, 97 insertions(+), 17 deletions(-) create mode 100644 src/movable_actor.lua diff --git a/cirnofarm.p64 b/cirnofarm.p64 index 9821159..1681e25 100644 --- a/cirnofarm.p64 +++ b/cirnofarm.p64 @@ -6,7 +6,7 @@ version 2 :: sfx/ :: gfx/0.gfx b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w -NC0yNiAxMjowMDoxMiIscmV2aXNpb249ODg0XV1sejQAkAgAAPw9AADzFHtbMF09e2JtcD1weHUA +NC0yNiAxMjoyMjo0MCIscmV2aXNpb249ODk2XV1sejQAkAgAAPw9AADzFHtbMF09e2JtcD1weHUA QyAQEATw8CxmbGFncz0wLHBhbl94CADaeT0wLHpvb209MTF9LDIA8QivGyPeA34D3iPeA-4JE24D ThNuI04DfhMA-wOOAz4DTgMuI34jLgOeA-4UAy5eAB3wCfBFTYAtJi1QHWYdBSAdhg0VAB2WHRUN pgQAww0VAA2WHQUQvQXwE1gAHzNYABXwKlBEgBRPHxRQDxSPHwRALxRPHyRADxQfH0QODxkEQA8U @@ -48,11 +48,11 @@ CAYAgRAIABhQGFAYCgAEFgA-OAAINwEfDzIA---------------------------------------- ----w1A9MTF9fQ== :: gfx/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yNiAxMjowMDoxMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yNiAxMjoyMjo0MCIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: map/0.map b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yNiAxMjowMDoxMiIscmV2aXNpb249OTA0XV1sejQAngMAABVCAADwCHt7Ym1wPXVzZXJkYXRh +NC0yNiAxMjoyMjo0MCIscmV2aXNpb249OTE5XV1sejQAngMAABVCAADwCHt7Ym1wPXVzZXJkYXRh KCJpMTYiLDMyAwAvIjABAP_DLjEwDAAPAQDhPzQ4MAEAXi80MAEACz8xMzABAHMXNAQADwEANQ9Q ACEfM4AAbg8BALoqNDgIAQ8EAwcOIAAPAQA2BIAAHzNgAQAvMzABAE4vNDgYAA8OJAAPAQA5DmgA DwEAch4zgAEPgABgDwEA---------7-1HSIpLGhpZGRlbj1mYWxzZSxuYW1lPSJvYmplY3RzIixw @@ -71,11 +71,11 @@ NR84gAD-bC4xYngED4AAAQQcAA6ABA8BADQfOAQAEg8BAEYvMTgEABMPAQBFLzE4BAATDwEARS8x OAQAEw8BAEYfOAQAIg8BADcfOAQAIg8JIbZMYmFjawkhTjEyLjOHECgyNhYAD4cQBlBtPTF9fQ== :: map/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yNiAxMjowMDoxMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yNiAxMjoyMjo0MCIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: sfx/0.sfx b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w -NC0yNiAxMjowMDoxMiIscmV2aXNpb249NzQxXV1sejQARgEAAGYIAADwJ3B4dQADKAAAAwAED0AQ +NC0yNiAxMjoyMjo0MCIscmV2aXNpb249NzUyXV1sejQARgEAAGYIAADwJ3B4dQADKAAAAwAED0AQ Ag4AAaABIAKgDgAPEAAN8MoBAgMEBQYHAA--kAgJCgsPDA8NDw4PDxAA8AANDxEPEg8TDxQPFQ8W DxcTAPEBDxgPGQ8aDxsPHA8dDx4PHxQA8QAgDyEPIg8jDyQPJQ8mDycUAPEAKA8pDyoPKw8sDy0P Lg8vFADxADAPMQ8yDzMPNA81DzYPNxQA-wU4DzkPOg87DzwPPQ8_Dz8AD--w-wEA6-InWgEQBg8g @@ -84,14 +84,14 @@ L-AAMAD--4If-wEAzPEd6A9AAA1ADxcACxoIBggQAgMQBQAGAAgASRcAJggJUP--CfEX-gn8F-4J 8HArAF-_sPBwBAgA-9wf-wEAl1D-----Hw== :: sfx/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yNiAxMjowMDoxMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yNiAxMjoyMjo0MCIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: main.lua ---[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-26 12:00:12",revision=1005]] +--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-26 12:22:40",revision=1022]] include("/cirnofarm/src/game.lua") :: .info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTE2IDE5OjQyOjIyIixtb2RpZmllZD0iMjAyNC0w -NC0yNiAxMjowMDoxMyIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y +NC0yNiAxMjoyMjo0MCIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y a3NwYWNlcz17e2xvY2F0aW9uPSJtYWluLmx1YSMxIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0 aW9uPSJnZngvMC5nZngiLHdvcmtzcGFjZV9pbmRleD0yfSx7bG9jYXRpb249Im1hcC8wLm1hcCIs d29ya3NwYWNlX2luZGV4PTN9LHtsb2NhdGlvbj0ic2Z4LzAuc2Z4Iix3b3Jrc3BhY2VfaW5kZXg9 diff --git a/src/actor2.lua b/src/actor2.lua index a5e164d..9c52e7b 100644 --- a/src/actor2.lua +++ b/src/actor2.lua @@ -8,7 +8,9 @@ Actor = { function Actor:new(new_x,new_y) local o = { x=new_x, - y=new_y, + y=new_y, + w=16, + h=16 } return setmetatable(o, {__index=self}) diff --git a/src/barrel.lua b/src/barrel.lua index 413a2af..0c0b499 100644 --- a/src/barrel.lua +++ b/src/barrel.lua @@ -9,7 +9,7 @@ local Actor = require(make_path("actor2")) -- return barrel -Barrel = Actor:new() +local Barrel = Actor:new() Barrel.spriteIndex = 3 diff --git a/src/game.lua b/src/game.lua index cf9471a..5b0e91e 100644 --- a/src/game.lua +++ b/src/game.lua @@ -56,6 +56,7 @@ local mouse_debug = require(make_path("mouse_debug")) local map_manager = require(make_path("map")) local weapons_manager = require(make_path("weapons")) local Barrel = require(make_path("barrel")) +local Strawberry = require(make_path("strawberry")) tile_width = 16 tile_height = 16 @@ -104,7 +105,7 @@ function _draw() mouse_debug.draw(4, tile_width, tile_height) weapons_manager.debug_draw() - + print(string.format("Actors: %d", count(actors)),0,32+8) end @@ -121,7 +122,11 @@ function spawn_objects() if (tile == 3) then local b = Barrel:new(x*tile_width,y*tile_height) add(actors,b) + elseif(tile == 72) then + local s = Strawberry:new(x*tile_width,y*tile_height) + add(actors,s) end + end end diff --git a/src/movable_actor.lua b/src/movable_actor.lua new file mode 100644 index 0000000..f12ee69 --- /dev/null +++ b/src/movable_actor.lua @@ -0,0 +1,72 @@ +local Actor = require(make_path("actor2")) +local map_manager = require(make_path("map")) + +local MovableActor = Actor:new() +MovableActor.speed=0.05 +MovableActor.hflip=false +MovableActor.move_x=0 +MovableActor.move_y=0 +MovableActor.noclip=false +MovableActor.collide_map=true +MovableActor.collide_actors=true +MovableActor.collide_bounds=true + +function MovableActor:draw() + spr(self.spriteIndex,self.x,self.y, self.hflip) + +end + +function MovableActor:update() + self:move() +end + +function MovableActor:move() + local hitbox_x = 4 + local hitbox_y = 8 + local hitbox_w = 6 + local hitbox_h = 8 + + if (self.collide_map) then + if (check_collision(self.x+self.move_x+hitbox_x, + self.y+hitbox_y, + hitbox_w, + hitbox_h)) then + if (not self.noclip) then self.move_x = 0 end + end + + if (check_collision(self.x+hitbox_x, + self.y+self.move_y+hitbox_y, + hitbox_w, + hitbox_h)) then + if (not self.noclip) then self.move_y = 0 end + end + end + + self.move_x *= 0.95 + self.move_y *= 0.95 + + self.x += self.move_x + self.y += self.move_y +end + +function check_collision(x,y,w,h) + local collide = false + + for i=x,x+w,w do + + if (map_manager.is_tile_solid(i,y) or map_manager.is_tile_solid(i,y+h)) then + collide = collide or true + end + end + + for i=y,y+h do + if (map_manager.is_tile_solid(x,i) or map_manager.is_tile_solid(x+w,i)) then + collide = collide or true + end + end + + return collide +end + + +return MovableActor \ No newline at end of file diff --git a/src/strawberry.lua b/src/strawberry.lua index 03ca136..87297a0 100644 --- a/src/strawberry.lua +++ b/src/strawberry.lua @@ -1,8 +1,9 @@ --[[pod_format="raw",created="2024-04-22 19:32:54",modified="2024-04-23 20:21:06",revision=6]] -M = {} +local MovableActor = require(make_path("movable_actor")) +local Strawberry = MovableActor:new() +Strawberry.spriteIndex = 72 +Strawberry.collide_map=false +Strawberry.collide_actors=false +Strawberry.collide_bounds=false -function M.func() - print("inside module.func()") -end - -return M \ No newline at end of file +return Strawberry \ No newline at end of file