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.

94 lines
2.7 KiB

  1. extends RigidBody
  2. var left = 0
  3. var right = 0
  4. var active = false
  5. var right_active = false
  6. var activation_margin = 0.1
  7. var update_frequency = 1 # In secs. This isn't too fast-paced, so don't clog the network with updates every frame
  8. var update_count = 0
  9. var master_team_right = null
  10. var friend_color
  11. var enemy_color
  12. var build_rate = 1.5
  13. func _integrate_forces(state):
  14. var rot = get_rotation().x
  15. if active:
  16. activation_margin = 0
  17. if rot > activation_margin:
  18. active = true
  19. right_active = false
  20. if rot < -activation_margin:
  21. active = true
  22. right_active = true
  23. if active:
  24. if right_active == master_team_right:
  25. # We DO own the correct one; display left counting, blue
  26. get_node("../HUD/LeftTeam").add_color_override("font_color_shadow", friend_color)
  27. get_node("../HUD/RightTeam").add_color_override("font_color_shadow", Color(0,0,0,0))
  28. else:
  29. # We DO NOT own the correct one; display right counting, red
  30. get_node("../HUD/LeftTeam").add_color_override("font_color_shadow", Color(0,0,0,0))
  31. get_node("../HUD/RightTeam").add_color_override("font_color_shadow", enemy_color)
  32. func _process(delta):
  33. # Figure out what team we're on
  34. # We have to do this here because we never know when the master player will actually be added
  35. if master_team_right == null:
  36. var master_player = util.get_master_player()
  37. if master_player:
  38. master_team_right = master_player.player_info.is_right_team
  39. friend_color = master_player.friend_color
  40. enemy_color = master_player.enemy_color
  41. var name = "right" if master_team_right else "left"
  42. var full_name = "res://assets/objective-%s.png" % name
  43. get_node("MeshInstance").get_surface_material(0).albedo_texture = load(full_name)
  44. else:
  45. master_team_right = true # Doesn't matter, it's all graphical and we're headless
  46. # Count the percents
  47. if active:
  48. if right_active:
  49. right += delta * build_rate
  50. else:
  51. left += delta * build_rate
  52. update_count += delta
  53. if is_network_master() and update_count > update_frequency:
  54. update_count = 0
  55. rset("left", left)
  56. rset("right", right)
  57. # Check for game over
  58. var game_over = false
  59. var winner_right
  60. if left >= 100:
  61. game_over = true
  62. winner_right = false
  63. left = 100
  64. if right >= 100:
  65. game_over = true
  66. winner_right = true
  67. right = 100
  68. if game_over:
  69. var text = "You lose :("
  70. if winner_right == master_team_right:
  71. text = "You win!!!"
  72. get_node("../HUD/Finish").set_text(text)
  73. Engine.set_time_scale(0.1)
  74. # Render the percents
  75. var on_left = left
  76. var on_right = right
  77. # Always display OUR team on the LEFT (in blue)
  78. if master_team_right:
  79. on_left = right
  80. on_right = left
  81. get_node("../HUD/LeftTeam").set_text("%d%%" % on_left)
  82. get_node("../HUD/RightTeam").set_text("%d%%" % on_right)