summaryrefslogtreecommitdiffhomepage
path: root/app
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-05-19 05:42:53 -0400
committerrealtradam <[email protected]>2021-05-19 05:42:53 -0400
commitfee80f42f0889f2d484e25f4366f14b68c65ba70 (patch)
treefa1e728e3d9d91eb5946177f347781cdfea45b47 /app
parent490b20123c75cf8eb5de7039993cb704e3d7a0c8 (diff)
downloadtypemon-code-fee80f42f0889f2d484e25f4366f14b68c65ba70.tar.gz
typemon-code-fee80f42f0889f2d484e25f4366f14b68c65ba70.zip
fully working map import
Diffstat (limited to 'app')
-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
-rw-r--r--app/helpers/00_tileset.rb15
-rw-r--r--app/tick.rb28
11 files changed, 98 insertions, 45 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
diff --git a/app/helpers/00_tileset.rb b/app/helpers/00_tileset.rb
index d6e6cf3..d64006d 100644
--- a/app/helpers/00_tileset.rb
+++ b/app/helpers/00_tileset.rb
@@ -7,12 +7,12 @@ class Helper
attr_accessor :json_data
def get_json_tiles(json_name)
+ return nil if json_name == 'hitbox' && !Components::DebugSingleton.data
+
if self.json_data[json_name].nil?
self.json_data[json_name] = $gtk.parse_json_file "assets/json/#{json_name}.json"
raise Exception.new "#{json_name} is null and not loaded. Cannot get json tile" if self.json_data[json_name].nil?
- #puts self.json_data[json_name].inspect
- #puts json_name
if self.json_data[json_name]['type'] == 'map' #json_name.split("_").first == 'map'
self.json_data[json_name]['tilesets'].each do |tileset|
tileset = Helper.get_json_tiles(tileset['source'].split('/').last.delete_suffix('.tsx'))
@@ -25,16 +25,21 @@ class Helper
end
def get_tile(json_name:, tile_index:)
+ if json_name == 'hitbox' && !Components::DebugSingleton.data
+ return tile_index - 1 if tile_index > 1
+ return {}
+ end
+
json_tiles = self.get_json_tiles(json_name)
- return puts "Error, json file not a tileset" unless json_tiles['type'] == 'tileset'
+ 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'],
+ 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']),
+ 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
diff --git a/app/tick.rb b/app/tick.rb
index 41c95aa..d1b95a7 100644
--- a/app/tick.rb
+++ b/app/tick.rb
@@ -1,10 +1,12 @@
$gtk.args.grid.origin_top_left!
#$gtk.args.grid.origin_bottom_left!
+#Components::DebugSingleton.data = true
thing0 = Entity.new(ID.sprite,
- ID.renderable,
- ID.player_control)
-Components::Sprite.data[thing0.id].set(x: 0, y: 0, w: 128, h: 101, path: 'dragonruby.png')
+ 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,
@@ -35,16 +37,14 @@ Components::Sprite.data[thing0.id].set(x: 0, y: 0, w: 128, h: 101, path: 'dragon
#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
-
-puts $gtk.args.grid.screen_y_direction.inspect
+#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
@thing2 = Entity.new(ID.label, ID.renderable)
-Components::Label.data[@thing2.id].set(x: 640, y: 420,
+Components::Label.data[@thing2.id].set(x: 740, y: 520,
text: 'It Werks',
size_enum: 5,
alignment_enum: 1)
@@ -67,11 +67,11 @@ Components::Renderable.data[@map2.id].z = 4
#Helper.get_json_tiles('map_test')
-@x = 700 * 10
+@x = 0
def tick args
@x += 1
- @y = (@x / 10).to_i
- Components::Label.data[@thing2.id].text = (@y).to_i
+ @y = @x / 6
+ Components::Label.data[@thing2.id].text = "Seconds Passed: #{(@y.to_i).to_s.insert(-2,'.')}"
Systems.constants.each do |constant|
Systems.const_get(constant).run
end