From f97a9ca95e464e728bba9337b579bc380c33bc7d Mon Sep 17 00:00:00 2001 From: realtradam Date: Thu, 20 May 2021 05:04:21 -0400 Subject: implemented hitboxes --- app/ECS/base_component.rb | 46 -------------------- app/ECS/component_manager.rb | 20 --------- app/ECS/components/00_renderable.rb | 16 ------- app/ECS/components/01_sprite.rb | 44 ------------------- app/ECS/components/02_label.rb | 27 ------------ app/ECS/components/03_player_control.rb | 21 --------- app/ECS/components/04_map.rb | 21 --------- app/ECS/components/05_interactable.rb | 16 ------- app/ECS/components/06_level.rb | 25 ----------- app/ECS/components/07_collidable.rb | 22 ---------- app/ECS/components/debug_singleton.rb | 13 ------ app/ECS/entity_manager.rb | 63 --------------------------- app/ECS/signatures.rb | 35 --------------- app/ECS/system_manager.rb | 5 --- app/ECS/systems/00_player.rb | 14 ------ app/ECS/systems/99_render.rb | 37 ---------------- app/ECS/test.rb | 18 -------- app/helpers/00_tileset.rb | 47 -------------------- app/lib/component_manager.rb | 20 +++++++++ app/lib/components/00_renderable.rb | 16 +++++++ app/lib/components/01_sprite.rb | 44 +++++++++++++++++++ app/lib/components/02_label.rb | 27 ++++++++++++ app/lib/components/03_player_control.rb | 21 +++++++++ app/lib/components/04_map.rb | 21 +++++++++ app/lib/components/05_interactable.rb | 16 +++++++ app/lib/components/06_collidable.rb | 22 ++++++++++ app/lib/components/07_battle.rb | 4 ++ app/lib/components/07_indoor.rb | 4 ++ app/lib/components/07_overworld.rb | 16 +++++++ app/lib/components/debug_singleton.rb | 13 ++++++ app/lib/entity_manager.rb | 63 +++++++++++++++++++++++++++ app/lib/helpers/00_tileset.rb | 49 +++++++++++++++++++++ app/lib/helpers/01_component.rb | 76 +++++++++++++++++++++++++++++++++ app/lib/signatures.rb | 43 +++++++++++++++++++ app/lib/system_manager.rb | 5 +++ app/lib/systems/00_update_levels.rb | 34 +++++++++++++++ app/lib/systems/10_player.rb | 41 ++++++++++++++++++ app/lib/systems/99_render.rb | 37 ++++++++++++++++ app/lib/test.rb | 18 ++++++++ app/main.rb | 15 +++---- app/tick.rb | 59 +++++-------------------- 41 files changed, 607 insertions(+), 547 deletions(-) delete mode 100644 app/ECS/base_component.rb delete mode 100644 app/ECS/component_manager.rb delete mode 100644 app/ECS/components/00_renderable.rb delete mode 100644 app/ECS/components/01_sprite.rb delete mode 100644 app/ECS/components/02_label.rb delete mode 100644 app/ECS/components/03_player_control.rb delete mode 100644 app/ECS/components/04_map.rb delete mode 100644 app/ECS/components/05_interactable.rb delete mode 100644 app/ECS/components/06_level.rb delete mode 100644 app/ECS/components/07_collidable.rb delete mode 100644 app/ECS/components/debug_singleton.rb delete mode 100644 app/ECS/entity_manager.rb delete mode 100644 app/ECS/signatures.rb delete mode 100644 app/ECS/system_manager.rb delete mode 100644 app/ECS/systems/00_player.rb delete mode 100644 app/ECS/systems/99_render.rb delete mode 100644 app/ECS/test.rb delete mode 100644 app/helpers/00_tileset.rb create mode 100644 app/lib/component_manager.rb create mode 100644 app/lib/components/00_renderable.rb create mode 100644 app/lib/components/01_sprite.rb create mode 100644 app/lib/components/02_label.rb create mode 100644 app/lib/components/03_player_control.rb create mode 100644 app/lib/components/04_map.rb create mode 100644 app/lib/components/05_interactable.rb create mode 100644 app/lib/components/06_collidable.rb create mode 100644 app/lib/components/07_battle.rb create mode 100644 app/lib/components/07_indoor.rb create mode 100644 app/lib/components/07_overworld.rb create mode 100644 app/lib/components/debug_singleton.rb create mode 100644 app/lib/entity_manager.rb create mode 100644 app/lib/helpers/00_tileset.rb create mode 100644 app/lib/helpers/01_component.rb create mode 100644 app/lib/signatures.rb create mode 100644 app/lib/system_manager.rb create mode 100644 app/lib/systems/00_update_levels.rb create mode 100644 app/lib/systems/10_player.rb create mode 100644 app/lib/systems/99_render.rb create mode 100644 app/lib/test.rb diff --git a/app/ECS/base_component.rb b/app/ECS/base_component.rb deleted file mode 100644 index f32322b..0000000 --- a/app/ECS/base_component.rb +++ /dev/null @@ -1,46 +0,0 @@ -class BaseComponent - class <= Components::Map.data[key].json['tilesets'].count - end - unless tile.empty? - tile[:x] = Components::Map.data[key].x + (Components::Map.data[key].tilewidth * column_index) + chunk['x'] - tile[:y] = Components::Map.data[key].y + (Components::Map.data[key].tileheight * row_index) + chunk['y'] - tile[:w] = Components::Map.data[key].tilewidth - tile[:h] = Components::Map.data[key].tileheight - $gtk.args.outputs.sprites << tile - end - end - end - end - end - end - end - end - end - end -end diff --git a/app/ECS/test.rb b/app/ECS/test.rb deleted file mode 100644 index 13fd401..0000000 --- a/app/ECS/test.rb +++ /dev/null @@ -1,18 +0,0 @@ -require_relative './entity_manager.rb' -require_relative './component_manager.rb' -require_relative './system_manager.rb' - -move = '0001'.to_i(2) -base = '0010'.to_i(2) -both = '0011'.to_i(2) -Entity.new(move) -Entity.new(base) -Entity.new(both) - -3.times do - Systems.constants.each do |constant| - puts "|----#{constant.to_s.upcase}----|" - Systems::const_get(constant).run - end - #ECS::Entity.destroy_entity(ECS::Entity.all.last.id) unless ECS::Entity.all.empty? -end diff --git a/app/helpers/00_tileset.rb b/app/helpers/00_tileset.rb deleted file mode 100644 index d64006d..0000000 --- a/app/helpers/00_tileset.rb +++ /dev/null @@ -1,47 +0,0 @@ -class Helper - # Returns a loaded map and its dependecies(images,json) - # If any are missing then it will load them from files - - @json_data = {} - class < 1 - return {} - end - - json_tiles = self.get_json_tiles(json_name) - raise Exception.new "Error, json file not a tileset" unless json_tiles['type'] == 'tileset' - return tile_index - json_tiles['tilecount'] if tile_index > json_tiles['tilecount'] - source_height_tiles = (tile_index.to_i / json_tiles['columns'].to_i).to_i# * json_tiles['tileheight'] - { w: json_tiles['tilewidth'], - h: json_tiles['tileheight'], - path: json_tiles['image'].split('mygame/').last.delete('\\'), - source_x: [((tile_index % json_tiles['columns']) - 1) * json_tiles['tilewidth'], 0].max, - # source_y gets special treatment - source_y: [json_tiles['imageheight'] - ((source_height_tiles + 1) * json_tiles['tileheight']), 0].max, - source_w: json_tiles['tilewidth'], - source_h: json_tiles['tileheight'] } - end - end -end diff --git a/app/lib/component_manager.rb b/app/lib/component_manager.rb new file mode 100644 index 0000000..f5261a2 --- /dev/null +++ b/app/lib/component_manager.rb @@ -0,0 +1,20 @@ +#require 'app/ECS/base_component.rb' + +#require 'app/ECS/components/00_test_component.rb' +#require 'app/ECS/components/01_based.rb' + +class Components + class < 1 + return {} + end + + json_tiles = self.get_json_tiles(json_name) + raise Exception.new "Error, json file not a tileset" unless json_tiles['type'] == 'tileset' + return tile_index - json_tiles['tilecount'] if tile_index > json_tiles['tilecount'] + source_height_tiles = (tile_index.to_i / json_tiles['columns'].to_i).to_i# * json_tiles['tileheight'] + { w: json_tiles['tilewidth'], + h: json_tiles['tileheight'], + path: json_tiles['image'].split('mygame/').last.delete('\\'), + source_x: [((tile_index % json_tiles['columns']) - 1) * json_tiles['tilewidth'], 0].max, + # source_y gets special treatment + source_y: [json_tiles['imageheight'] - ((source_height_tiles + 1) * json_tiles['tileheight']), 0].max, + source_w: json_tiles['tilewidth'], + source_h: json_tiles['tileheight'] } + end + end +end diff --git a/app/lib/helpers/01_component.rb b/app/lib/helpers/01_component.rb new file mode 100644 index 0000000..4937ec9 --- /dev/null +++ b/app/lib/helpers/01_component.rb @@ -0,0 +1,76 @@ +class Helper + class BaseComponent + class <= Components::Map.data[key].json['tilesets'].count + end + unless tile.empty? + tile[:x] = Components::Map.data[key].x + (Components::Map.data[key].tilewidth * column_index) + chunk['x'] + tile[:y] = Components::Map.data[key].y + (Components::Map.data[key].tileheight * row_index) + chunk['y'] + tile[:w] = Components::Map.data[key].tilewidth + tile[:h] = Components::Map.data[key].tileheight + $gtk.args.outputs.sprites << tile + end + end + end + end + end + end + end + end + end + end +end diff --git a/app/lib/test.rb b/app/lib/test.rb new file mode 100644 index 0000000..13fd401 --- /dev/null +++ b/app/lib/test.rb @@ -0,0 +1,18 @@ +require_relative './entity_manager.rb' +require_relative './component_manager.rb' +require_relative './system_manager.rb' + +move = '0001'.to_i(2) +base = '0010'.to_i(2) +both = '0011'.to_i(2) +Entity.new(move) +Entity.new(base) +Entity.new(both) + +3.times do + Systems.constants.each do |constant| + puts "|----#{constant.to_s.upcase}----|" + Systems::const_get(constant).run + end + #ECS::Entity.destroy_entity(ECS::Entity.all.last.id) unless ECS::Entity.all.empty? +end diff --git a/app/main.rb b/app/main.rb index a371d72..a05c9da 100644 --- a/app/main.rb +++ b/app/main.rb @@ -9,18 +9,17 @@ end require 'app/dragonruby-game-toolkit-contrib/dragon/grid.rb' -require_all 'helpers' +require_all 'lib/helpers' -require 'app/ECS/signatures.rb' +require 'app/lib/signatures.rb' -require 'app/ECS/entity_manager.rb' +require 'app/lib/entity_manager.rb' -require 'app/ECS/component_manager.rb' -require 'app/ECS/base_component.rb' -require_all 'ECS/components' +require 'app/lib/component_manager.rb' +require_all 'lib/components' -require 'app/ECS/system_manager.rb' -require_all 'ECS/systems' +require 'app/lib/system_manager.rb' +require_all 'lib/systems' require 'app/tick.rb' diff --git a/app/tick.rb b/app/tick.rb index d1b95a7..a4b2153 100644 --- a/app/tick.rb +++ b/app/tick.rb @@ -1,47 +1,15 @@ $gtk.args.grid.origin_top_left! -#$gtk.args.grid.origin_bottom_left! -#Components::DebugSingleton.data = true +Components::DebugSingleton.data = true -thing0 = Entity.new(ID.sprite, - ID.renderable, - ID.player_control) -Components::Sprite.data[thing0.id].set(x: 256, y: 128, w: 64, h: 64, path: 'dragonruby.png') -Components::Renderable.data[thing0.id].z = 10 -#Components::PlayerControl.data[thing0.id].set(north: 's', south: 'w') +@thing0 = Entity.new(ID.sprite, + ID.renderable, + ID.player_control, + ID.overworld) +Components::Sprite.data[@thing0.id].set(x: 256, y: 128, w: 64, h: 64, path: 'dragonruby.png') +Components::Renderable.data[@thing0.id].z = 10 +Components::Overworld.data[@thing0.id].set(x: 4, y: 2) -#@thing0 = Entity.new(ID.sprite, -# ID.renderable, -# ID.player_control) -#@thing3 = Entity.new(ID.sprite, -# ID.renderable, -# ID.player_control) -#Components::Sprite.data[@thing3.id].set(x: 576, y: 580, -# w: 128, h: 101, -# path: 'assets/non-free/Modern_Interiors/1_Interiors/16x16/Room_Builder_16x16.png', -# source_x: 0, source_y: 0, source_w: 16, source_h: 16) - -#json_tiles = Helper.get_json_tiles('tileset_Room_Builder_16x16') -#tile_number = 100 -#source_height_tiles = (tile_number.to_i / json_tiles['columns'].to_i).to_i -#hash = { w: json_tiles['tilewidth'], -# h: json_tiles['tileheight'], -# path: 'assets/non-free/Modern_Interiors/1_Interiors/16x16/Room_Builder_16x16.png', -# source_x: ((tile_number % json_tiles['columns']) - 1) * json_tiles['tilewidth'], -# source_y: json_tiles['imageheight'] - ((source_height_tiles + 1) * json_tiles['tileheight']), -# source_w: json_tiles['tilewidth'], -# source_h: json_tiles['tileheight'] } -#puts hash.inspect - -#Helper.get_tile( -#Components::Sprite.data[thing0.id].set(Helper.get_tile('tileset_Room_Builder_16x16', 936)) -#Components::Sprite.data[thing0.id].set(x: 576, y:280, -# w:128, h: 101) -@thing1 = Entity.new(ID.label, ID.renderable) -#Components::Label.data[@thing1.id].set(x: $gtk.args.grid.center[0], y: $gtk.args.grid.center[1], -# text: $gtk.args.grid.center.inspect, -# size_enum: 5, -# alignment_enum: 1) -#Components::Renderable.data[@thing1.id].z = 5 +#@thing1 = Entity.new(ID.label, ID.renderable) @thing2 = Entity.new(ID.label, ID.renderable) Components::Label.data[@thing2.id].set(x: 740, y: 520, @@ -50,14 +18,7 @@ Components::Label.data[@thing2.id].set(x: 740, y: 520, alignment_enum: 1) Components::Renderable.data[@thing2.id].z = 5 -#@map = Entity.new(ID.map, ID.renderable) -#Components::Map.data[@map.id].set(x: 0, -# y: 0, -# tilewidth: 128, -# tileheight: 128, -# json_name: 'map_test_map') - -@map2 = Entity.new(ID.map, ID.renderable) +@map2 = Entity.new(ID.map, ID.renderable, ID.overworld) Components::Map.data[@map2.id].set(x: 0, y: 0, tilewidth: 64, -- cgit v1.2.3