A team game with an emphasis on movement (with no shooting), inspired by Overwatch and Zineth
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.7 KiB

[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
  1. extends "res://scripts/args.gd"
  2. func _ready():
  3. randomize()
  4. _parse_args()
  5. _gui_setup()
  6. # GUI
  7. func _gui_setup():
  8. get_node("Center/Play").connect("pressed", self, "_find_game")
  9. get_node("Center/CustomGame").connect("pressed", self, "_custom_game")
  10. get_node("Center/Singleplayer").connect("pressed", self, "_singleplayer")
  11. func _find_game():
  12. print("still refactoring matchmaker")
  13. func _custom_game():
  14. get_tree().change_scene("res://scenes/custom_game.tscn")
  15. func _singleplayer():
  16. print("still refactoring singleplayer")
  17. # Command line
  18. func _set_up_options():
  19. var opts = Options.new()
  20. opts.set_banner(('A non-violent MOBA inspired by Overwatch and Zineth'))
  21. opts.add('-singleplayer', false, 'Whether to run singeplayer, starting immediately')
  22. opts.add('-server', false, 'Whether to run as server')
  23. opts.add('-matchmaker', false, 'Whether to be the sole matchmaker')
  24. opts.add('-client', false, 'Immediately connect as client')
  25. opts.add('-silent', false, 'If the server is not playing, merely serving')
  26. opts.add('-port', 54672, 'The port to run a server on or connect to')
  27. opts.add('-hero', 'r', 'Your choice of hero (index)')
  28. opts.add('-level', 'r', 'Your choice of level (index) - server only!')
  29. opts.add('-start-game', false, 'Join as a client and immediately start the game')
  30. opts.add('-ai', true, 'Run this client as AI')
  31. opts.add('-no-record', true, "Don't record this play for AI later")
  32. opts.add('-h', false, "Print help")
  33. return opts
  34. func _option_sel(button_name, option):
  35. var button = get_node(button_name)
  36. if option == "r":
  37. option = randi() % button.get_item_count()
  38. else:
  39. option = int(option)
  40. button.select(option)
  41. func _parse_args():
  42. var o = setup_options()
  43. o.parse()
  44. # if o.get_value("-silent"):
  45. # server_playing = false
  46. # if o.get_value("-hero"):
  47. # var hero = o.get_value("-hero")
  48. # _option_sel("PlayerSettings/HeroSelect", hero)
  49. # # For some reason, calling _option_sel doesn't trigger the actual selection
  50. # select_hero(get_node("PlayerSettings/HeroSelect").get_selected_id())
  51. # if o.get_value("-level"):
  52. # _option_sel("CustomGame/LevelSelect", o.get_value("-level"))
  53. # if o.get_value("-server"):
  54. # call_deferred("_server_init")
  55. # if o.get_value("-matchmaker"):
  56. # call_deferred("_matchmaker_init")
  57. # if o.get_value("-client"):
  58. # call_deferred("_client_init")
  59. # if o.get_value("-port"):
  60. # port = o.get_value("-port")
  61. # if o.get_value("-start-game"):
  62. # my_info.start_game = true
  63. # if o.get_value("-singleplayer"):
  64. # call_deferred("_singleplayer_init")
  65. # if o.get_value("-ai"):
  66. # my_info.is_ai = true
  67. # if not o.get_value("-no-record") and not o.get_value("-ai"):
  68. # my_info.record = true
  69. # if o.get_value('-h'):
  70. # o.print_help()
  71. # quit()