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.

84 lines
2.3 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 = 2 # 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 build_rate = 1
  11. func _integrate_forces(state):
  12. var rot = get_rotation().x
  13. if active:
  14. activation_margin = 0
  15. if rot < -activation_margin:
  16. active = true
  17. right_active = false
  18. if rot > activation_margin:
  19. active = true
  20. right_active = true
  21. if active:
  22. if right_active == master_team_right:
  23. # We DO own the correct one; display left counting, blue
  24. get_node("../HUD/LeftTeam").add_color_override("font_color_shadow", Color(0,0,1))
  25. get_node("../HUD/RightTeam").add_color_override("font_color_shadow", Color(0,0,0,0))
  26. else:
  27. # We DO NOT own the correct one; display right counting, red
  28. get_node("../HUD/LeftTeam").add_color_override("font_color_shadow", Color(0,0,0,0))
  29. get_node("../HUD/RightTeam").add_color_override("font_color_shadow", Color(1,0,0))
  30. func _process(delta):
  31. # Figure out what team we're on
  32. # We have to do this here because we never know when the master player will actually be added
  33. if master_team_right == null:
  34. var master_player = get_node("/root/Level/Players/%d" % get_tree().get_network_unique_id())
  35. master_team_right = master_player.player_info.is_right_team
  36. # Count the percents
  37. if active:
  38. if right_active:
  39. right += delta * build_rate
  40. else:
  41. left += delta * build_rate
  42. update_count += delta
  43. if is_network_master() and update_count > update_frequency:
  44. update_count = 0
  45. rset_unreliable("left", left)
  46. rset_unreliable("right", right)
  47. # Check for game over
  48. var game_over = false
  49. var winner_right
  50. if left >= 100:
  51. game_over = true
  52. winner_right = false
  53. left = 100
  54. if right >= 100:
  55. game_over = true
  56. winner_right = true
  57. right = 100
  58. if game_over:
  59. var text = "You lose :("
  60. if winner_right == master_team_right:
  61. text = "You win!!!"
  62. get_node("../HUD/Finish").set_text(text)
  63. Engine.set_time_scale(0.1)
  64. # Render the percents
  65. var on_left = left
  66. var on_right = right
  67. # Always display OUR team on the LEFT (in blue)
  68. if master_team_right:
  69. on_left = right
  70. on_right = left
  71. get_node("../HUD/LeftTeam").set_text("%d%%" % on_left)
  72. get_node("../HUD/RightTeam").set_text("%d%%" % on_right)