extends "res://scripts/player.gd"
|
|
|
|
var merge_power = .1
|
|
var merged = null
|
|
|
|
var old_layer
|
|
var old_mask
|
|
|
|
var allow_merge_time = 0
|
|
var allow_merge_threshold = 0.4
|
|
|
|
func _ready():
|
|
# Called every time the node is added to the scene.
|
|
# Initialization here
|
|
pass
|
|
|
|
func _process(delta):
|
|
if is_network_master():
|
|
allow_merge_time += delta
|
|
if not merged and allow_merge_time > allow_merge_threshold:
|
|
var cols = get_colliding_bodies()
|
|
for col in cols:
|
|
if col.is_in_group("player"):
|
|
var same_team = col.player_info.is_right_team == player_info.is_right_team
|
|
if same_team:
|
|
rpc("merge", col.get_name())
|
|
|
|
if merged and Input.is_action_just_pressed("hero_3_unmerge"):
|
|
rpc("unmerge")
|
|
|
|
sync func merge(node_name):
|
|
var other = get_node("/root/Level/Players").get_node(node_name)
|
|
hide()
|
|
print(other.get_name())
|
|
# Disable collisions
|
|
old_layer = collision_layer
|
|
old_mask = collision_mask
|
|
collision_layer = 0
|
|
collision_mask = 0
|
|
gravity_scale = 0
|
|
if is_network_master():
|
|
# Assume their PoV, but no control
|
|
other.get_node("Yaw/Pitch/Camera").make_current()
|
|
get_node("MasterOnly/Boosting").show()
|
|
if other.is_network_master():
|
|
var other_boosted = get_node("Boosted").duplicate()
|
|
other_boosted.show()
|
|
other.get_node("MasterOnly").add_child(other_boosted)
|
|
# Boost them!
|
|
other.walk_speed *= (1 + merge_power)
|
|
other.air_accel *= (1 + merge_power)
|
|
merged = other
|
|
|
|
sync func unmerge():
|
|
show()
|
|
gravity_scale = 1
|
|
# Re-enable collisions
|
|
collision_layer = old_layer
|
|
collision_mask = old_mask
|
|
if is_network_master():
|
|
get_node("Yaw/Pitch/Camera").make_current()
|
|
if merged.is_network_master():
|
|
merged.get_node("MasterOnly/Boosting").queue_free()
|
|
# Undo the boost
|
|
merged.walk_speed /= (1 + merge_power)
|
|
merged.air_accel /= (1 + merge_power)
|
|
merged = null
|