 [WIP] Split up lobby -> menu, lobby, custom_game
lobby.gd had gotten big, bloated, ugly, and hard to read. It needed a
refactor. The first thing I did is split up the *GUI* into the logical
steps it should be. So the new flow is:
- Start the game
- Click "Quick Play"
- Matchmaking begins on my dedicated server
- Start the game
- Click "Custom Game"
- *Only now* am I presented with server / client options
- Start the game
- Click "Singleplayer"
- Singleplayer
NOW, and only now, and NO MATTER WHAT PATH I TAKE, I am taken to the
*lobby*, which now is where I:
- Choose my name
- Choose hero
- See list of players
- Get my team assigned
- Anything else that I might like to put in
The point here is that this has *nothing* to do with handshaking /
matchmaking / etc! This is just part of the game! At this point I have
*already been connected* to the server. I've already been aquainted with
my other players. The game has begun.
I put the things that don't belong in any of these flows in
networking.gd, a sort of model-view sorta thing. All of these flows use
some sort of networking thing like `init_server` that tbh should be
*completely* abstracted from the UI.
It's totally a WIP!!! Above is the IDEA, but below is what I've actually
*done*:
- Made the scenes, made a passable UI for each one that at least
indicates ~what they'll do
- Made the corresponding scripts, and split up the lobby script into
ABOUT where I think it'll end up, but no promises
It still errors all over the place, and it's nowhere near properly
organized. PLUS, I'd also like to rewrite a lot of the code / rename
things as part of the initial refactor goal of making me able to
actually think about networking.
7 years ago |
|
- extends Control
-
- func _ready():
- randomize()
- _gui_setup()
-
- # GUI
-
- func _gui_setup():
- get_node("Center/Play").connect("pressed", self, "_find_game")
- get_node("Center/CustomGame").connect("pressed", self, "_custom_game")
- get_node("Center/Singleplayer").connect("pressed", self, "_singleplayer")
-
- func _find_game():
- print("still refactoring matchmaker")
-
- func _custom_game():
- get_tree().change_scene("res://scenes/custom_game.tscn")
-
- func _singleplayer():
- print("still refactoring singleplayer")
-
- # Command line
-
- func _option_sel(button_name, option):
- var button = get_node(button_name)
- if option == "r":
- option = randi() % button.get_item_count()
- else:
- option = int(option)
- button.select(option)
-
- # if o.get_value("-silent"):
- # server_playing = false
- # if o.get_value("-hero"):
- # var hero = o.get_value("-hero")
- # _option_sel("PlayerSettings/HeroSelect", hero)
- # # For some reason, calling _option_sel doesn't trigger the actual selection
- # select_hero(get_node("PlayerSettings/HeroSelect").get_selected_id())
- # if o.get_value("-level"):
- # _option_sel("CustomGame/LevelSelect", o.get_value("-level"))
- # if o.get_value("-server"):
- # call_deferred("_server_init")
- # if o.get_value("-matchmaker"):
- # call_deferred("_matchmaker_init")
- # if o.get_value("-client"):
- # call_deferred("_client_init")
- # if o.get_value("-port"):
- # port = o.get_value("-port")
- # if o.get_value("-start-game"):
- # my_info.start_game = true
- # if o.get_value("-singleplayer"):
- # call_deferred("_singleplayer_init")
- # if o.get_value("-ai"):
- # my_info.is_ai = true
- # if not o.get_value("-no-record") and not o.get_value("-ai"):
- # my_info.record = true
- # if o.get_value('-h'):
- # o.print_help()
- # quit()
-
|