summaryrefslogtreecommitdiffhomepage
path: root/app/ECS
diff options
context:
space:
mode:
Diffstat (limited to 'app/ECS')
-rw-r--r--app/ECS/base_component.rb1
-rw-r--r--app/ECS/components/00_renderable.rb2
-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.rb25
-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.rb13
-rw-r--r--app/ECS/signatures.rb22
-rw-r--r--app/ECS/systems/00_player.rb8
-rw-r--r--app/ECS/systems/99_render.rb15
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