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.

66 lines
1.8 KiB

  1. extends "res://scripts/player.gd"
  2. var merge_power = .1
  3. var merged = null
  4. var old_layer
  5. var old_mask
  6. var allow_merge_time = 0
  7. var allow_merge_threshold = 0.4
  8. func _ready():
  9. # Called every time the node is added to the scene.
  10. # Initialization here
  11. pass
  12. func _process(delta):
  13. if is_network_master():
  14. allow_merge_time += delta
  15. if not merged and allow_merge_time > allow_merge_threshold:
  16. var cols = get_colliding_bodies()
  17. for col in cols:
  18. if col.is_in_group("player"):
  19. var same_team = col.player_info.is_right_team == player_info.is_right_team
  20. if same_team:
  21. rpc("merge", col.get_name())
  22. if merged and Input.is_action_just_pressed("hero_3_unmerge"):
  23. rpc("unmerge")
  24. sync func merge(node_name):
  25. var other = get_node("/root/Level/Players").get_node(node_name)
  26. hide()
  27. print(other.get_name())
  28. # Disable collisions
  29. old_layer = collision_layer
  30. old_mask = collision_mask
  31. collision_layer = 0
  32. collision_mask = 0
  33. gravity_scale = 0
  34. if is_network_master():
  35. # Assume their PoV, but no control
  36. other.get_node("Yaw/Pitch/Camera").make_current()
  37. get_node("MasterOnly/Boosting").show()
  38. if other.is_network_master():
  39. var other_boosted = get_node("Boosted").duplicate()
  40. other_boosted.show()
  41. other.get_node("MasterOnly").add_child(other_boosted)
  42. # Boost them!
  43. other.walk_speed *= (1 + merge_power)
  44. other.air_accel *= (1 + merge_power)
  45. merged = other
  46. sync func unmerge():
  47. show()
  48. gravity_scale = 1
  49. # Re-enable collisions
  50. collision_layer = old_layer
  51. collision_mask = old_mask
  52. if is_network_master():
  53. get_node("Yaw/Pitch/Camera").make_current()
  54. if merged.is_network_master():
  55. merged.get_node("MasterOnly/Boosting").queue_free()
  56. # Undo the boost
  57. merged.walk_speed /= (1 + merge_power)
  58. merged.air_accel /= (1 + merge_power)
  59. merged = null