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
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)
@@ -121,4 +122,4 @@ class IMICRTS
@connection.finalize
end
end
end
end

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
@@ -188,4 +188,4 @@ end
Dir.glob("#{IMICRTS::GAME_ROOT_PATH}/lib/entities/**/*.rb").each do |entity|
require_relative entity
end
end

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,8 +172,12 @@ class IMICRTS
@player.camera.button_up(id)
end
def set_tool(tool, *args)
pp tool, args
end
def finalize
@director.finalize
end
end
end
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,9 +25,9 @@ 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
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
end