From cc921f9ade9ee94ad4a872f9aa3933d687eec9fe Mon Sep 17 00:00:00 2001 From: Marco Giacomelli Date: Wed, 24 Apr 2024 17:06:19 +0200 Subject: [PATCH] New bullet instantiation method --- cirnofarm.p64 | 16 +++--- src/cirno.lua | 26 ++-------- src/map.lua | 28 +++++++++++ src/weapons.lua | 131 +++++++++++++++++++++++++++++------------------- 4 files changed, 119 insertions(+), 82 deletions(-) create mode 100644 src/map.lua diff --git a/cirnofarm.p64 b/cirnofarm.p64 index 1bb29e5..910eeb3 100644 --- a/cirnofarm.p64 +++ b/cirnofarm.p64 @@ -6,7 +6,7 @@ version 2 :: sfx/ :: gfx/0.gfx b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w -NC0yNCAwOToxMTowMyIscmV2aXNpb249NjQ4XV1sejQAbgYAAOA6AADzFHtbMF09e2JtcD1weHUA +NC0yNCAxNTowNjoxMiIscmV2aXNpb249NjcxXV1sejQAbgYAAOA6AADzFHtbMF09e2JtcD1weHUA QyAQEATw8CxmbGFncz0wLHBhbl94CADaeT0wLHpvb209MTF9LDIA8QivGyPeA34D3iPeA-4JE24D ThNuI04DfhMA-wOOAz4DTgMuI34jLgOeA-4UAy5eAB3wCfBFTYAtJi1QHWYdBSAdhg0VAB2WHRUN pgQAww0VAA2WHQUQvQXwE1gAHzFYABXwKlBEgBRPHxRQDxSPHwRALxRPHyRADxQfH0QODxkEQA8U @@ -38,11 +38,11 @@ EAfwBAcQByAHMAeAQgAdkAgAOAAIAAgwCAYAgRAIABhQGFAYCgAEFgA-OAAINwEfDzIA-------- ------------------------------------w1A9MTF9fQ== :: gfx/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yNCAwOToxMTowMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yNCAxNTowNjoxMiIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: map/0.map b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yNCAwOToxMTowMyIscmV2aXNpb249NjU4XV1sejQAagIAALFBAADwCHt7Ym1wPXVzZXJkYXRh +NC0yNCAxNTowNjoxMiIscmV2aXNpb249NjgxXV1sejQAagIAALFBAADwCHt7Ym1wPXVzZXJkYXRh KCJpMTYiLDMyAwAvIjABAP--jD80ODABAF4vNDABAAs-MTMw9AL--1wOBAMOIAAPAQBGEzMEAAgB AC8zMAEATi80OBgADw4kAA8BADkOaAAPAQD----------8vxGSIpLGhpZGRlbj1mYWxzZSxuYW1l PSJvYmplY3RzIixwYW5feD0tOTAKAPIBeT0tMTEwLHRpbGVfaD0xNgoAEHcKAI96b29tPTF9LGsQ @@ -56,11 +56,11 @@ ACIPAQA3HzgEACIPgAE3HzgEACMPAQA1LzE4BAAjDwEANS8xOAQAIw8BADUvMTgEACMPAQA1LzE4 BAAjD9cg-----------FTGJhY2vXIA9uEBFQbT0xfX0= :: map/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yNCAwOToxMTowMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yNCAxNTowNjoxMiIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: sfx/0.sfx b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w -NC0yNCAwOToxMTowMyIscmV2aXNpb249NTU3XV1sejQARgEAAGYIAADwJ3B4dQADKAAAAwAED0AQ +NC0yNCAxNTowNjoxMiIscmV2aXNpb249NTgwXV1sejQARgEAAGYIAADwJ3B4dQADKAAAAwAED0AQ Ag4AAaABIAKgDgAPEAAN8MoBAgMEBQYHAA--kAgJCgsPDA8NDw4PDxAA8AANDxEPEg8TDxQPFQ8W DxcTAPEBDxgPGQ8aDxsPHA8dDx4PHxQA8QAgDyEPIg8jDyQPJQ8mDycUAPEAKA8pDyoPKw8sDy0P Lg8vFADxADAPMQ8yDzMPNA81DzYPNxQA-wU4DzkPOg87DzwPPQ8_Dz8AD--w-wEA6-InWgEQBg8g @@ -69,14 +69,14 @@ L-AAMAD--4If-wEAzPEd6A9AAA1ADxcACxoIBggQAgMQBQAGAAgASRcAJggJUP--CfEX-gn8F-4J 8HArAF-_sPBwBAgA-9wf-wEAl1D-----Hw== :: sfx/.info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w -NC0yNCAwOToxMTowMyIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA +NC0yNCAxNTowNjoxMiIsc3RvcmVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIl1dbHo0AAQAAAADAAAA MG5pbA== :: main.lua ---[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-24 09:11:03",revision=754]] +--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-24 15:06:12",revision=800]] include("/cirnofarm/src/game.lua") :: .info.pod b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTE2IDE5OjQyOjIyIixtb2RpZmllZD0iMjAyNC0w -NC0yNCAwOToxMTowMyIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y +NC0yNCAxNTowNjoxMiIscnVudGltZT02LHN0b3JlZD0iMjAyNC0wNC0xNiAxOTo0MDowNSIsd29y a3NwYWNlcz17e2xvY2F0aW9uPSJtYWluLmx1YSMxIix3b3Jrc3BhY2VfaW5kZXg9MX0se2xvY2F0 aW9uPSJnZngvMC5nZngiLHdvcmtzcGFjZV9pbmRleD0yfSx7bG9jYXRpb249Im1hcC8wLm1hcCIs d29ya3NwYWNlX2luZGV4PTN9LHtsb2NhdGlvbj0ic2Z4LzAuc2Z4Iix3b3Jrc3BhY2VfaW5kZXg9 diff --git a/src/cirno.lua b/src/cirno.lua index c34b3a7..22a4c70 100644 --- a/src/cirno.lua +++ b/src/cirno.lua @@ -2,6 +2,7 @@ --include("/cirnofarm/src/actor.lua") local weapons_manager = require(make_path("weapons")) +local map_manager = require(make_path("map")) last_coll=0 mouse_debug = true @@ -198,13 +199,13 @@ function check_collision(x,y,w,h) for i=x,x+w,w do - if (is_tile_solid(i,y) or is_tile_solid(i,y+h)) then + 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 (is_tile_solid(x,i) or is_tile_solid(x+w,i)) then + if (map_manager.is_tile_solid(x,i) or map_manager.is_tile_solid(x+w,i)) then collide = collide or true end end @@ -212,27 +213,6 @@ function check_collision(x,y,w,h) return collide end -function get_layer_tile(x,y,layer) - return get(fetch"map/0.map"[layer].bmp,x,y) -end - -function is_tile(tile_type,x,y) - --local tile = mget(x/tile_width,y/tile_height) - local tile = get_layer_tile(x/tile_width,y/tile_height,3) - local has_flag = fget(tile,tile_type) - --last_coll = fget(tile) - return has_flag -end - -function is_tile_solid(x,y) - return is_tile(1,x,y) == 1 -end - -function can_move(x,y) - return is_tile(0,x,y) -end - - function cmap(o) local ct=false local cb=false diff --git a/src/map.lua b/src/map.lua new file mode 100644 index 0000000..14858bb --- /dev/null +++ b/src/map.lua @@ -0,0 +1,28 @@ +M = {} + +local tile_width = 16 +local tile_height = 16 + +local current_map = "0" + +function get_layer_tile(x,y,layer) + return get(fetch("map/".. current_map .. ".map")[layer].bmp,x,y) +end + +function is_tile(tile_type,x,y) + --local tile = mget(x/tile_width,y/tile_height) + local tile = get_layer_tile(x/tile_width,y/tile_height,3) + local has_flag = fget(tile,tile_type) + --last_coll = fget(tile) + return has_flag +end + +function M.is_tile_solid(x,y) + return is_tile(1,x,y) == 1 +end + +function M.can_move(x,y) + return is_tile(0,x,y) +end + +return M \ No newline at end of file diff --git a/src/weapons.lua b/src/weapons.lua index aaeb949..2dc990e 100644 --- a/src/weapons.lua +++ b/src/weapons.lua @@ -22,27 +22,61 @@ bullet = { destroy_sprite_index=66, life=100, damage=1, - draw=function(self) - --pset(self.x,self.y,8) - spr(self.spriteIndex,self.x,self.y) - end, - update=function(self) - self.x+=self.dx - self.y+=self.dy + -- draw=function(self) + -- --pset(self.x,self.y,8) + -- spr(self.spriteIndex,self.x,self.y) + -- end, + -- update=function(self) + -- self.x+=self.dx + -- self.y+=self.dy - self.life-=1 - if self.life<0 then - del(bullets,self) - -- TODO: Create particle - end + -- self.life-=1 + -- if self.life<0 then + -- del(bullets,self) + -- -- TODO: Create particle + -- end - self.check_collision(self) - end, - check_collision=function(self) - -- If Collide with wall destroy self and create particle + -- self.check_collision(self) + -- end, + -- check_collision=function(self) + -- -- If Collide with wall destroy self and create particle - end + -- end } +bullet.__index = bullet +function bullet:new(x, y, dx, dy) + local o = setmetatable({}, bullet) + o.x = x + o.y = y + o.dx = dx + o.dy = dy + --o.life = 100 + --o.spriteIndex = 80 + --o.destroy_sprite_index = 66 + --o.damage = 1 + return o +end + +function bullet:check_collision() + -- +end + +function bullet:update() + self.x+=self.dx + self.y+=self.dy + + self.life-=1 + if self.life<0 then + del(bullets,self) + -- TODO: Create particle + end + + self.check_collision() +end + +function bullet:draw() + spr(self.spriteIndex,self.x,self.y) +end function M.create_bullet(new_x, new_y, dir_x, dir_y) -- Calculate the length of the direction vector @@ -52,45 +86,40 @@ function M.create_bullet(new_x, new_y, dir_x, dir_y) local normalized_dir_x = dir_x / length local normalized_dir_y = dir_y / length - b = bullet - b.life = 100 - b.x = new_x - b.y = new_y - b.dx = normalized_dir_x * 2 - b.dy = normalized_dir_y * 2 + local b = bullet:new(new_x, new_y, normalized_dir_x * 2, normalized_dir_y * 2) - --add(bullets, b) + add(bullets, b) - add(bullets, { - x=new_x, - y=new_y, - dx=normalized_dir_x * 2, - dy=normalized_dir_y * 2, - spriteIndex=80, - destroy_sprite_index=66, - life=100, - damage=1, - draw=function(self) - --pset(self.x,self.y,8) - spr(self.spriteIndex,self.x,self.y) - end, - update=function(self) - self.x+=self.dx - self.y+=self.dy + -- add(bullets, { + -- x=new_x, + -- y=new_y, + -- dx=normalized_dir_x * 2, + -- dy=normalized_dir_y * 2, + -- spriteIndex=80, + -- destroy_sprite_index=66, + -- life=100, + -- damage=1, + -- draw=function(self) + -- --pset(self.x,self.y,8) + -- spr(self.spriteIndex,self.x,self.y) + -- end, + -- update=function(self) + -- self.x+=self.dx + -- self.y+=self.dy - self.life-=1 - if self.life<0 then - del(bullets,self) - -- TODO: Create particle - end + -- self.life-=1 + -- if self.life<0 then + -- del(bullets,self) + -- -- TODO: Create particle + -- end - self.check_collision(self) - end, - check_collision=function(self) - -- If Collide with wall destroy self and create particle + -- self.check_collision(self) + -- end, + -- check_collision=function(self) + -- -- If Collide with wall destroy self and create particle - end - }) + -- end + -- }) end