|
@ -0,0 +1,48 @@ |
|
|
|
|
|
extends "res://scripts/player.gd" |
|
|
|
|
|
|
|
|
|
|
|
var merge_power = .1 |
|
|
|
|
|
var merged = null |
|
|
|
|
|
|
|
|
|
|
|
var old_layer |
|
|
|
|
|
var old_mask |
|
|
|
|
|
|
|
|
|
|
|
func _ready(): |
|
|
|
|
|
# Called every time the node is added to the scene. |
|
|
|
|
|
# Initialization here |
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
func _process(delta): |
|
|
|
|
|
if not merged: |
|
|
|
|
|
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: |
|
|
|
|
|
merge(col) |
|
|
|
|
|
|
|
|
|
|
|
func merge(other): |
|
|
|
|
|
hide() |
|
|
|
|
|
# Disable collisions |
|
|
|
|
|
old_layer = collision_layer |
|
|
|
|
|
old_mask = collision_mask |
|
|
|
|
|
collision_layer = 0 |
|
|
|
|
|
collision_mask = 0 |
|
|
|
|
|
if is_network_master(): |
|
|
|
|
|
# Assume their PoV, but no control |
|
|
|
|
|
other.get_node("Yaw/Pitch/Camera").make_current() |
|
|
|
|
|
# Boost them! |
|
|
|
|
|
other.walk_speed *= (1 + merge_power) |
|
|
|
|
|
other.air_accel *= (1 + merge_power) |
|
|
|
|
|
merged = other |
|
|
|
|
|
|
|
|
|
|
|
func unmerge(): |
|
|
|
|
|
show() |
|
|
|
|
|
# Re-enable collisions |
|
|
|
|
|
collision_layer = old_layer |
|
|
|
|
|
collision_mask = old_mask |
|
|
|
|
|
if is_network_master(): |
|
|
|
|
|
get_node("Yaw/Pitch/Camera").make_current() |
|
|
|
|
|
# Undo the boost |
|
|
|
|
|
merged.walk_speed /= (1 + merge_power) |
|
|
|
|
|
merged.air_accel /= (1 + merge_power) |
|
|
|
|
|
merged = null |