summaryrefslogtreecommitdiffhomepage
path: root/app/ECS
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-05-19 02:23:17 -0400
committerrealtradam <[email protected]>2021-05-19 02:23:17 -0400
commit490b20123c75cf8eb5de7039993cb704e3d7a0c8 (patch)
tree302caf2be626efd0ac14baed36b8201bc49d0795 /app/ECS
parent120b693ffd02bc5c7f41ff2b9657facc7117daae (diff)
downloadtypemon-code-490b20123c75cf8eb5de7039993cb704e3d7a0c8.tar.gz
typemon-code-490b20123c75cf8eb5de7039993cb704e3d7a0c8.zip
working json to sprite conversion
Diffstat (limited to 'app/ECS')
-rw-r--r--app/ECS/components/00_renderable.rb8
-rw-r--r--app/ECS/components/02_label.rb22
-rw-r--r--app/ECS/components/03_player_control.rb23
-rw-r--r--app/ECS/components/04_map.rb21
-rw-r--r--app/ECS/components/05_map_object.rb16
-rw-r--r--app/ECS/components/06_grid_singleton.rb16
-rw-r--r--app/ECS/signatures.rb18
-rw-r--r--app/ECS/systems/00_player.rb4
-rw-r--r--app/ECS/systems/99_render.rb19
9 files changed, 107 insertions, 40 deletions
diff --git a/app/ECS/components/00_renderable.rb b/app/ECS/components/00_renderable.rb
index 18017cc..270e5f9 100644
--- a/app/ECS/components/00_renderable.rb
+++ b/app/ECS/components/00_renderable.rb
@@ -3,8 +3,14 @@ class Components
class Renderable < BaseComponent
attr_accessor :z
- def initialize(z: 0)
+ def initialize
@z = z
end
+
+ def set(**opts)
+ opts.each do |key, value|
+ self.send "#{key}=", value
+ end
+ end
end
end
diff --git a/app/ECS/components/02_label.rb b/app/ECS/components/02_label.rb
index 2483d57..aed00ed 100644
--- a/app/ECS/components/02_label.rb
+++ b/app/ECS/components/02_label.rb
@@ -7,17 +7,17 @@ class Components
def set(x: @x, y: @y, text: @text, size_enum: @size_enum, alignment_enum: @alignment_enum,
a: @a, r: @r, g: @g, b: @b, font: @font, vertical_alignment_enum: @vertical_alignment_enum)
- [@x = x,
- @y = y,
- @text = text,
- @size_enum = size_enum,
- @alignment_enum = alignment_enum,
- @r = r,
- @g = g,
- @b = b,
- @a = a,
- @font = font,
- @vertical_alignment_enum = vertical_alignment_enum]
+ {x: @x = x,
+ y: @y = y,
+ text: @text = text,
+ size_enum: @size_enum = size_enum,
+ alignment_enum: @alignment_enum = alignment_enum,
+ r: @r = r,
+ g: @g = g,
+ b: @b = b,
+ a: @a = a,
+ font: @font = font,
+ vertical_alignment_enum: @vertical_alignment_enum = vertical_alignment_enum }
end
def primative_marker
diff --git a/app/ECS/components/03_player_control.rb b/app/ECS/components/03_player_control.rb
index 22bc458..58d0102 100644
--- a/app/ECS/components/03_player_control.rb
+++ b/app/ECS/components/03_player_control.rb
@@ -1,20 +1,21 @@
class Components
# Gives control(keyboard or otherwise) over an object
class PlayerControl < BaseComponent
- attr_accessor :north, :south, :east, :west
+ attr_accessor :north, :south, :east, :west, :interact, :menu
- def initialize(north: 'w', south: 's', east: 'd', west: 'a')
- @north = north
- @south = south
- @east = east
- @west = west
+ def initialize
+ @north = 'w'
+ @south = 's'
+ @east = 'd'
+ @west = 'a'
+ @interact = 'space'
+ @menu = 'enter'
end
- def set(north: 'w', south: 's', east: 'd', west: 'a')
- @north = north
- @south = south
- @east = east
- @west = west
+ def set(**opts)
+ opts.each do |key, value|
+ send "#{key}=", value
+ end
end
end
end
diff --git a/app/ECS/components/04_map.rb b/app/ECS/components/04_map.rb
new file mode 100644
index 0000000..804fc02
--- /dev/null
+++ b/app/ECS/components/04_map.rb
@@ -0,0 +1,21 @@
+class Components
+ # dragonruby label wrapper
+ class Map < BaseComponent
+
+ attr_accessor :json_name, :json, :x, :y, :tilewidth, :tileheight, :a, :r, :g, :b
+
+ def set(json_name: @json_name, x: @x, y: @y, tilewidth: @tilewidth,
+ tileheight: @tileheight, a: @a, r: @r, g: @g, b: @b)
+ { json_name: @json_name = json_name,
+ json: @json = Helper.get_json_tiles(json_name),
+ x: @x = x,
+ y: @y = y,
+ tilewidth: @tilewidth = tilewidth,
+ tileheight: @tileheight = tileheight,
+ r: @r = r,
+ g: @g = g,
+ b: @b = b,
+ a: @a = a }
+ end
+ end
+end
diff --git a/app/ECS/components/05_map_object.rb b/app/ECS/components/05_map_object.rb
new file mode 100644
index 0000000..270e5f9
--- /dev/null
+++ b/app/ECS/components/05_map_object.rb
@@ -0,0 +1,16 @@
+class Components
+ # If an entity can be rendered on screen
+ class Renderable < BaseComponent
+ attr_accessor :z
+
+ def initialize
+ @z = z
+ end
+
+ def set(**opts)
+ opts.each do |key, value|
+ self.send "#{key}=", value
+ end
+ end
+ end
+end
diff --git a/app/ECS/components/06_grid_singleton.rb b/app/ECS/components/06_grid_singleton.rb
new file mode 100644
index 0000000..392d770
--- /dev/null
+++ b/app/ECS/components/06_grid_singleton.rb
@@ -0,0 +1,16 @@
+class Components
+ # If an entity can be rendered on screen
+ class GridSingleton < BaseComponent
+ attr_accessor :z
+
+ def initialize
+ @z = 0
+ end
+
+ def set(**opts)
+ opts.each do |key, value|
+ self.send "#{key}=", value
+ end
+ end
+ end
+end
diff --git a/app/ECS/signatures.rb b/app/ECS/signatures.rb
index 844c66d..d3ac390 100644
--- a/app/ECS/signatures.rb
+++ b/app/ECS/signatures.rb
@@ -1,27 +1,31 @@
class ID
class <<self
def renderable
- @renderable ||= '0_001'.to_i(2)
+ @renderable ||= 0b0_001 #'0_001'.to_i(2)
end
def sprite
- @sprite ||= '0_010'.to_i(2)
+ @sprite ||= 0b0_010 #'0_010'.to_i(2)
end
def label
- @label ||= '0_100'.to_i(2)
+ @label ||= 0b0_100 #'0_100'.to_i(2)
end
def player_control
- @player_control ||= '0_001_000'.to_i(2)
+ @player_control ||= 0b0_001_000 #'0_001_000'.to_i(2)
end
def map
- @map ||= '0_010_000'.to_i(2)
+ @map ||= 0b0_010_000 #'0_010_000'.to_i(2)
end
- def map
- @map ||= '0_100_000'.to_i(2)
+ def map_object
+ @map_object ||= 0b0_100_000
+ end
+
+ def grid_singleton
+ @grid_singleton ||= 0b0_001_000_000
end
end
end
diff --git a/app/ECS/systems/00_player.rb b/app/ECS/systems/00_player.rb
index 9b03def..0a0492a 100644
--- a/app/ECS/systems/00_player.rb
+++ b/app/ECS/systems/00_player.rb
@@ -3,8 +3,8 @@ 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].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)
end
diff --git a/app/ECS/systems/99_render.rb b/app/ECS/systems/99_render.rb
index 37b562a..a2f697b 100644
--- a/app/ECS/systems/99_render.rb
+++ b/app/ECS/systems/99_render.rb
@@ -3,24 +3,27 @@ class Systems
def self.run
Components::Renderable.data.sort_by { |v| v[1].z }.each do |key, data|
if !(Components::Sprite.id & Entity.signatures[key]).zero?
- #Components::Based.data[key].x += 2
$gtk.args.outputs.sprites << Components::Sprite.data[key].set
elsif !(Components::Label.id & Entity.signatures[key]).zero?
$gtk.args.outputs.labels << Components::Label.data[key].set
elsif !(Components::Map.id & Entity.signatures[key]).zero?
- #puts Components::Map.data[key].json.inspect
Components::Map.data[key].json['layers'].each do |layer|
layer['chunks'].each do |chunk|
chunk['data'].each_slice(chunk['width']).with_index do |row, row_index|
row.each_with_index do |tile, column_index|
unless tile.zero?
- temp = Helper.get_tile(json_name: 'tileset_Room_Builder_16x16', tile_index: tile)
- temp[:x] = Components::Map.data[key].x + (Components::Map.data[key].tilewidth * column_index) + chunk['x']
- temp[:y] = Components::Map.data[key].y - (Components::Map.data[key].tileheight * (row_index + 1)) - chunk['y'] #REVERSED
- temp[:w] = Components::Map.data[key].tilewidth
- temp[:h] = Components::Map.data[key].tileheight
+ iter = 0
+ 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
+ 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 << temp
+ $gtk.args.outputs.sprites << tile
end
end
end