From cd120895d015f5d64467776fc9e4727326e5c6e9 Mon Sep 17 00:00:00 2001 From: Luna Date: Mon, 29 Jan 2018 22:04:24 -0500 Subject: [PATCH] [WIP] Continue work on Hero 3 networking --- project.godot | 2 ++ scenes/heroes/3.tscn | 46 +++++++++++++++++++++++++++++++++++++++++++++- scripts/heroes/3.gd | 39 +++++++++++++++++++++++++++++---------- 3 files changed, 76 insertions(+), 11 deletions(-) diff --git a/project.godot b/project.godot index 1a91257..f8b04a7 100644 --- a/project.godot +++ b/project.godot @@ -36,6 +36,8 @@ hero_2_switch_gravity=[ Object(InputEventKey,"resource_local_to_scene":false,"re ] switch_hero=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":39,"unicode":0,"echo":false,"script":null) ] +hero_3_unmerge=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":46,"unicode":0,"echo":false,"script":null) + ] [rendering] diff --git a/scenes/heroes/3.tscn b/scenes/heroes/3.tscn index 0301fca..e8879c5 100644 --- a/scenes/heroes/3.tscn +++ b/scenes/heroes/3.tscn @@ -3,7 +3,7 @@ [ext_resource path="res://scenes/player.tscn" type="PackedScene" id=1] [ext_resource path="res://scripts/heroes/3.gd" type="Script" id=2] -[node name="RigidBody" instance=ExtResource( 1 )] +[node name="RigidBody" index="0" instance=ExtResource( 1 )] contacts_reported = 3 contact_monitor = true @@ -14,4 +14,48 @@ _sections_unfolded = [ "Angular", "Axis Lock", "Collision", "Linear", "Pause", " text = "" +[node name="Boosting" type="Label" parent="MasterOnly" index="2"] + +visible = false +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +margin_left = -30.0 +margin_top = -161.0 +margin_right = 30.0 +margin_bottom = -147.0 +rect_pivot_offset = Vector2( 0, 0 ) +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Boosting!" +align = 1 +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + +[node name="Boosted" type="Label" parent="." index="6"] + +visible = false +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +margin_left = -29.0 +margin_top = -163.0 +margin_right = 28.0 +margin_bottom = -149.0 +rect_pivot_offset = Vector2( 0, 0 ) +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Boosted!" +align = 1 +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + diff --git a/scripts/heroes/3.gd b/scripts/heroes/3.gd index c7bd2df..e2fc0cf 100644 --- a/scripts/heroes/3.gd +++ b/scripts/heroes/3.gd @@ -6,42 +6,61 @@ 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 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): + 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 -func unmerge(): +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)