Browse Source

[WIP] Continue work on Hero 3 networking

master
Luna 7 years ago
parent
commit
cd120895d0
3 changed files with 76 additions and 11 deletions
  1. +2
    -0
      project.godot
  2. +45
    -1
      scenes/heroes/3.tscn
  3. +29
    -10
      scripts/heroes/3.gd

+ 2
- 0
project.godot View File

@ -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]


+ 45
- 1
scenes/heroes/3.tscn View File

@ -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

+ 29
- 10
scripts/heroes/3.gd View File

@ -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)

Loading…
Cancel
Save