diff options
| author | realtradam <[email protected]> | 2021-05-19 05:42:53 -0400 |
|---|---|---|
| committer | realtradam <[email protected]> | 2021-05-19 05:42:53 -0400 |
| commit | fee80f42f0889f2d484e25f4366f14b68c65ba70 (patch) | |
| tree | fa1e728e3d9d91eb5946177f347781cdfea45b47 /app/ECS | |
| parent | 490b20123c75cf8eb5de7039993cb704e3d7a0c8 (diff) | |
| download | typemon-code-fee80f42f0889f2d484e25f4366f14b68c65ba70.tar.gz typemon-code-fee80f42f0889f2d484e25f4366f14b68c65ba70.zip | |
fully working map import
Diffstat (limited to 'app/ECS')
| -rw-r--r-- | app/ECS/base_component.rb | 1 | ||||
| -rw-r--r-- | app/ECS/components/00_renderable.rb | 2 | ||||
| -rw-r--r-- | app/ECS/components/05_interactable.rb (renamed from app/ECS/components/05_map_object.rb) | 2 | ||||
| -rw-r--r-- | app/ECS/components/06_level.rb | 25 | ||||
| -rw-r--r-- | app/ECS/components/07_collidable.rb (renamed from app/ECS/components/06_grid_singleton.rb) | 12 | ||||
| -rw-r--r-- | app/ECS/components/debug_singleton.rb | 13 | ||||
| -rw-r--r-- | app/ECS/signatures.rb | 22 | ||||
| -rw-r--r-- | app/ECS/systems/00_player.rb | 8 | ||||
| -rw-r--r-- | app/ECS/systems/99_render.rb | 15 |
9 files changed, 74 insertions, 26 deletions
diff --git a/app/ECS/base_component.rb b/app/ECS/base_component.rb index e374540..f32322b 100644 --- a/app/ECS/base_component.rb +++ b/app/ECS/base_component.rb @@ -1,7 +1,6 @@ class BaseComponent class <<self def id - #puts underscore(self.ancestors[0].name.split('::').last) @id ||= ID.send(ComponentHelper.underscore(ancestors[0].name.split('::').last)) end diff --git a/app/ECS/components/00_renderable.rb b/app/ECS/components/00_renderable.rb index 270e5f9..4008691 100644 --- a/app/ECS/components/00_renderable.rb +++ b/app/ECS/components/00_renderable.rb @@ -4,7 +4,7 @@ class Components attr_accessor :z def initialize - @z = z + @z = 0 end def set(**opts) diff --git a/app/ECS/components/05_map_object.rb b/app/ECS/components/05_interactable.rb index 270e5f9..305bb02 100644 --- a/app/ECS/components/05_map_object.rb +++ b/app/ECS/components/05_interactable.rb @@ -1,6 +1,6 @@ class Components # If an entity can be rendered on screen - class Renderable < BaseComponent + class Interactable < BaseComponent attr_accessor :z def initialize diff --git a/app/ECS/components/06_level.rb b/app/ECS/components/06_level.rb new file mode 100644 index 0000000..4d692e6 --- /dev/null +++ b/app/ECS/components/06_level.rb @@ -0,0 +1,25 @@ +class Components + # If an entity can be rendered on screen + class Level < BaseComponent + attr_accessor :z + + def initialize + @grid = [[]] #Array.new(1) { Array.new(1) } + end + + def set(x: x, y: y, **opts) + smart_array(x, y).merge(opts) + end + + # Things that the smart_array holds + # + # player: is the player in the square? + # hitbox: true/false + # interact: id/false + def smart_array(x, y) + @grid[x] = [] if @grid[x].nil? + @grix[x][y] = {} if @grid[x][y].nil? + @grid[x][y] + end + end +end diff --git a/app/ECS/components/06_grid_singleton.rb b/app/ECS/components/07_collidable.rb index 392d770..207e138 100644 --- a/app/ECS/components/06_grid_singleton.rb +++ b/app/ECS/components/07_collidable.rb @@ -1,10 +1,16 @@ class Components # If an entity can be rendered on screen - class GridSingleton < BaseComponent - attr_accessor :z + class Collidable < BaseComponent + class <<self + def add(entity_id) + super(entity_id) + #add to grid? + end + end + attr_accessor :grid def initialize - @z = 0 + @grid = [[]] end def set(**opts) diff --git a/app/ECS/components/debug_singleton.rb b/app/ECS/components/debug_singleton.rb new file mode 100644 index 0000000..f298172 --- /dev/null +++ b/app/ECS/components/debug_singleton.rb @@ -0,0 +1,13 @@ +class Components + # If an entity can be rendered on screen + class DebugSingleton + class <<self + @data = false + attr_accessor :data + + def id + 0 + end + end + end +end diff --git a/app/ECS/signatures.rb b/app/ECS/signatures.rb index d3ac390..a6df0ac 100644 --- a/app/ECS/signatures.rb +++ b/app/ECS/signatures.rb @@ -1,31 +1,35 @@ class ID class <<self def renderable - @renderable ||= 0b0_001 #'0_001'.to_i(2) + 0b0_001 end def sprite - @sprite ||= 0b0_010 #'0_010'.to_i(2) + 0b0_010 end def label - @label ||= 0b0_100 #'0_100'.to_i(2) + 0b0_100 end def player_control - @player_control ||= 0b0_001_000 #'0_001_000'.to_i(2) + 0b0_001_000 end def map - @map ||= 0b0_010_000 #'0_010_000'.to_i(2) + 0b0_010_000 end - def map_object - @map_object ||= 0b0_100_000 + def interactable + 0b0_100_000 end - def grid_singleton - @grid_singleton ||= 0b0_001_000_000 + def level + 0b0_001_000_000 + end + + def collidable + 0b0_010_000_000 end end end diff --git a/app/ECS/systems/00_player.rb b/app/ECS/systems/00_player.rb index 0a0492a..21dedfd 100644 --- a/app/ECS/systems/00_player.rb +++ b/app/ECS/systems/00_player.rb @@ -3,10 +3,10 @@ class Systems def self.run Components::PlayerControl.data.each do |id, data| if !(Components::Sprite.id & Entity.signatures[id]).zero? - Components::Sprite.data[id].y -= 10 if $gtk.args.inputs.keyboard.key_held.send(data.north) - Components::Sprite.data[id].y += 10 if $gtk.args.inputs.keyboard.key_held.send(data.south) - Components::Sprite.data[id].x += 10 if $gtk.args.inputs.keyboard.key_held.send(data.east) - Components::Sprite.data[id].x -= 10 if $gtk.args.inputs.keyboard.key_held.send(data.west) + Components::Sprite.data[id].y -= 64 if $gtk.args.inputs.keyboard.key_down.send(data.north) + Components::Sprite.data[id].y += 64 if $gtk.args.inputs.keyboard.key_down.send(data.south) + Components::Sprite.data[id].x += 64 if $gtk.args.inputs.keyboard.key_down.send(data.east) + Components::Sprite.data[id].x -= 64 if $gtk.args.inputs.keyboard.key_down.send(data.west) end end end diff --git a/app/ECS/systems/99_render.rb b/app/ECS/systems/99_render.rb index a2f697b..c71c6fc 100644 --- a/app/ECS/systems/99_render.rb +++ b/app/ECS/systems/99_render.rb @@ -16,14 +16,15 @@ class Systems loop do tile = Helper.get_tile(json_name: Components::Map.data[key].json['tilesets'][iter]['source'].split('/').last.delete('\\').delete_suffix('.tsx'), tile_index: tile) break if tile.is_a?(Hash) - raise Exception.new "#{Components::Map.data[key].json['json_name']} not valid map, exceeded tile range" if (iter += 1) > layer['chunks'].count + raise Exception.new "#{Components::Map.data[key].json['json_name']} not valid map, exceeded tile range" if (iter += 1) >= 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 - 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 - #puts60 temp.inspect - $gtk.args.outputs.sprites << tile end end end |
