# Stuns people at a distance, removing their linear velocity extends "res://scripts/player.gd" onready var destroy_ability = get_node("MasterOnly/Destroy") var stun_charge = 1 var velocity_charge = 10 # This one is instantaneous, so it gets quita weight var zoom_factor = 3 var sens_factor = 10 # --- Godot overrides --- func _ready(): colored_meshes.append("Yaw/Pitch/Beam") func _process(delta): if is_network_master(): var stun = Input.is_action_pressed("hero_4_stun") var is_stunning = false if Input.is_action_just_pressed("hero_4_zoom"): get_node("TPCamera").cam_fov /= zoom_factor get_node("TPCamera").cam_view_sensitivity /= sens_factor get_node("TPCamera").cam_smooth_movement = false if Input.is_action_just_released("hero_4_zoom"): get_node("TPCamera").cam_fov *= zoom_factor get_node("TPCamera").cam_view_sensitivity *= sens_factor get_node("TPCamera").cam_smooth_movement = true var looking_at = pick() if looking_at and looking_at.has_method("destroy"): destroy_ability.cost = looking_at.destroy_cost destroy_ability.disabled = false if Input.is_action_just_pressed("primary_ability"): if switch_charge > looking_at.destroy_cost: switch_charge -= looking_at.destroy_cost looking_at.rpc("destroy") else: destroy_ability.disabled = true if stun: var players = get_node("/root/Level/Players").get_children() var player = pick_from(players) if player != -1: # We get charge for just stunning, plus charge for how much linear velocity we cut out build_charge(stun_charge * delta) build_charge(velocity_charge * players[player].linear_velocity.length() * delta) rpc("stun", players[player].get_name(), get_node("TPCamera/Camera/Ray").get_collision_point()) is_stunning = true if not is_stunning: rpc("unstun") # --- Player overrides --- # --- Own --- sync func stun(net_id, position): # Stun the thing! var player = util.get_player(net_id) player.set_linear_velocity(Vector3()) # Show the beam! var beam = get_node("Yaw/Pitch/Beam") get_node("Yaw/Pitch").look_at(position, Vector3(0,1,0)) beam.show() var us = get_node("TPCamera/Camera").get_global_transform().origin var distance = position - us beam.scale = Vector3(1,distance.length(),1) # We move the beam up by half the scale because the position is based on the center, not the bottom beam.translation.z = -distance.length() / 2 # We face -z direction sync func unstun(): var beam = get_node("Yaw/Pitch/Beam") beam.hide()