now save player name from SoloLobby, made Director know able game so that construction workers can set active tool for Game (todo: implement tools :D), drafted 'structure' document

This commit is contained in:
2019-11-22 17:18:44 -06:00
parent 8b6f629a6a
commit 2b1ff35a34
8 changed files with 56 additions and 19 deletions

View File

@@ -9,19 +9,31 @@ class IMICRTS
@actions = []
end
def add(action, *args)
case action
def add(type, *args)
action = Action.new
case type
when :add_to_build_queue
action = Action.new
ent = IMICRTS::Entity.get(args.first)
raise "Failed to find entity: #{args.first.inspect}" unless ent
action.label = ent.name.to_s.split("_").map{ |s| s.capitalize }.join(" ")
action.description = "Cost: #{ent.cost}\n#{ent.description}"
action.block = proc { @parent.component(:build_queue).add(args.first) }
@actions << action
when :set_build_tool
ent = IMICRTS::Entity.get(args[1])
raise "Failed to find entity: #{args[1].inspect}" unless ent
action.label = ent.name.to_s.split("_").map { |s| s.capitalize }.join(" ")
action.description = "Cost: #{ent.cost}\n#{ent.description}"
action.block = proc { @parent.director.game.set_tool(:building, ent) }
else
raise "Unhandled sidebar action: #{action.inspect}"
end
@actions << action
end
end
end

View File

@@ -1,7 +1,8 @@
class IMICRTS
class Director
attr_reader :current_tick, :map
def initialize(map:, players:, networking_mode:, tick_rate: 10)
attr_reader :current_tick, :map, :game
def initialize(game:, map:, players:, networking_mode:, tick_rate: 10)
@game = game
@map = map
@players = players
@connection = IMICRTS::Connection.new(director: self, mode: networking_mode)

View File

@@ -3,7 +3,7 @@ IMICRTS::Entity.define_entity(:construction_worker, :unit, 1000, "Constructs bui
entity.has(:build_queue)
entity.has(:sidebar_actions)
[:power_plant, :refinery, :barracks, :war_factory, :helipad, :construction_yard].each do |ent|
entity.component(:sidebar_actions).add(:add_to_build_queue, ent)
entity.component(:sidebar_actions).add(:set_build_tool, :place_building, ent)
end
entity.radius = 14

View File

@@ -15,7 +15,7 @@ class IMICRTS
end
end
attr_reader :player, :id, :name, :type, :speed
attr_reader :director, :player, :id, :name, :type, :speed
attr_accessor :position, :angle, :radius, :target, :state,
:movement, :health, :max_health,
:turret, :center, :particle_emitters

View File

@@ -8,7 +8,7 @@ class IMICRTS
@options[:networking_mode] ||= :host
@player = Player.new(id: 0)
@director = Director.new(map: Map.new(map_file: "maps/test_map.tmx"), networking_mode: @options[:networking_mode], players: [@player])
@director = Director.new(game: self, map: Map.new(map_file: "maps/test_map.tmx"), networking_mode: @options[:networking_mode], players: [@player])
@entity_controller = EntityController.new(game: self, director: @director, player: @player)
@overlays = []
@@ -172,6 +172,10 @@ class IMICRTS
@player.camera.button_up(id)
end
def set_tool(tool, *args)
pp tool, args
end
def finalize
@director.finalize
end

View File

@@ -12,7 +12,7 @@ class IMICRTS
end
flow do
button("Refresh") do
# refresh_games
refresh_games
end
button("Host Game")
button("Join Game")
@@ -25,8 +25,8 @@ class IMICRTS
end
def refresh_games
@games_list.clear do
label "No games found..."
@games_list.clear do |stack|
stack.label "No games found..."
end
end
end

View File

@@ -35,15 +35,22 @@ class IMICRTS
flow(width: 1.0) do
button("Accept", width: 0.5) do
Setting.set(:player_name, @player_name.value)
save_playerdata
push_state(Game, networking_mode: :virtual)
end
button("Back", align: :right) do
save_playerdata
push_state(MainMenu)
end
end
end
end
def save_playerdata
Setting.set(:player_name, @player_name.value)
Setting.save!
end
end
end

13
structure.md Normal file
View File

@@ -0,0 +1,13 @@
# I-MIC RTS - Structure
* Dependancy Trees
* Entity
* Director
* Player
* Networking
## Dependancy Trees
### Entity
An entity requires access to Director
### Director
The Director requires access to most everything as its purpose is to: sync commands to and from other players (local and remote), to execute said commands on the correct tick, and to be the primary for entities to gain access to required features and functions outside of the Director.