summaryrefslogtreecommitdiffhomepage
path: root/systems
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-05-26 01:24:30 -0400
committerrealtradam <[email protected]>2021-05-26 01:24:30 -0400
commit7bec71db2680e0503f39c31047f5f90ca89433df (patch)
tree4d987b479b0670256af5c1a4ffe5ab7b75fb23b4 /systems
downloadFelECS-7bec71db2680e0503f39c31047f5f90ca89433df.tar.gz
FelECS-7bec71db2680e0503f39c31047f5f90ca89433df.zip
init
Diffstat (limited to 'systems')
-rw-r--r--systems/00_update_levels.rb34
-rw-r--r--systems/10_player.rb41
-rw-r--r--systems/99_render.rb37
3 files changed, 112 insertions, 0 deletions
diff --git a/systems/00_update_levels.rb b/systems/00_update_levels.rb
new file mode 100644
index 0000000..6f3a056
--- /dev/null
+++ b/systems/00_update_levels.rb
@@ -0,0 +1,34 @@
+class Systems
+ class UpdateLevels
+ @co = Components::Overworld
+ def self.run
+ @co.data[:add].each do |id|
+ @co.data[:add].delete(id)
+ if !(Components::Sprite.id & Entity.signatures[id]).zero?
+ @co.data[:grid][@co.data[id].x][@co.data[id].y] = {} if @co.data[:grid][@co.data[id].x][@co.data[id].y].nil?
+ #@co.data[:grid][@co.data[id].x][@co.data[id].y].merge!({ player: true })
+ puts @co.data[:grid][@co.data[id].x][@co.data[id].y].inspect
+ elsif !(Components::Map.id & Entity.signatures[id]).zero?
+ if Components::Map.data[id].json['tilesets'].last['source'].split('/').last.delete('\\').delete_suffix('.tsx') == 'hitbox'
+ Components::Map.data[id].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|
+ if tile.to_i == Components::Map.data[id].json['tilesets'].last['firstgid'].to_i
+ @co.data[:grid][column_index][row_index] = {} if @co.data[:grid][column_index][row_index].nil?
+ @co.data[:grid][column_index][row_index].merge!({ hitbox: true })
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ puts @co.data[:grid]
+ end
+ Components::Overworld.data[:remove].each do |id|
+ Components::Overworld.data[:remove].delete(id)
+ end
+ end
+ end
+end
diff --git a/systems/10_player.rb b/systems/10_player.rb
new file mode 100644
index 0000000..307731a
--- /dev/null
+++ b/systems/10_player.rb
@@ -0,0 +1,41 @@
+class Systems
+ class Player
+ @co = Components::Overworld
+ def self.run
+ Components::PlayerControl.data.each do |id, data|
+ puts6 "Right: #{@co.data[:grid][@co.data[id].x+1][@co.data[id].y]}"
+ puts6 "Left #{@co.data[:grid][@co.data[id].x-1][@co.data[id].y]}"
+ puts6 "Down #{@co.data[:grid][@co.data[id].x][@co.data[id].y+1]}"
+ puts6 "Up #{@co.data[:grid][@co.data[id].x][@co.data[id].y-1]}"
+ #puts6 @co.data[:grid][@co.data[id].x + 1][@co.data[id].y][:hitbox].nil?
+
+ if !(Components::Sprite.id & Entity.signatures[id]).zero?
+ if $gtk.args.inputs.keyboard.key_down.send(data.north) &&\
+ (@co.data[:grid][@co.data[id].x][@co.data[id].y - 1].nil? ||\
+ @co.data[:grid][@co.data[id].x][@co.data[id].y - 1][:hitbox].nil?)
+ Components::Sprite.data[id].y -= 64
+ @co.data[id].y -= 1
+ elsif $gtk.args.inputs.keyboard.key_down.send(data.south) &&\
+ (@co.data[:grid][@co.data[id].x][@co.data[id].y + 1].nil? ||\
+ @co.data[:grid][@co.data[id].x][@co.data[id].y + 1][:hitbox].nil?)
+ Components::Sprite.data[id].y += 64
+ @co.data[id].y += 1
+ elsif $gtk.args.inputs.keyboard.key_down.send(data.east) &&\
+ (@co.data[:grid][@co.data[id].x + 1][@co.data[id].y].nil? ||\
+ @co.data[:grid][@co.data[id].x + 1][@co.data[id].y][:hitbox].nil?)
+ Components::Sprite.data[id].x += 64
+ @co.data[id].x += 1
+ elsif $gtk.args.inputs.keyboard.key_down.send(data.west) &&\
+ (@co.data[:grid][@co.data[id].x - 1][@co.data[id].y].nil? || @co.data[:grid][@co.data[id].x - 1][@co.data[id].y][:hitbox].nil?)
+ Components::Sprite.data[id].x -= 64
+ @co.data[id].x -= 1
+ end
+ #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
+ end
+end
diff --git a/systems/99_render.rb b/systems/99_render.rb
new file mode 100644
index 0000000..c71c6fc
--- /dev/null
+++ b/systems/99_render.rb
@@ -0,0 +1,37 @@
+class Systems
+ class Render
+ def self.run
+ Components::Renderable.data.sort_by { |v| v[1].z }.each do |key, data|
+ if !(Components::Sprite.id & Entity.signatures[key]).zero?
+ $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?
+ 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?
+ 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) >= 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