|
|
@ -18,11 +18,11 @@ var air_accel = .1 # m/s/s |
|
|
|
var floor_friction = 1-0.08 |
|
|
|
var air_friction = 1-0.03 |
|
|
|
|
|
|
|
var walk_speed_build = 0.006 # `walk_speed` per `switch_charge` |
|
|
|
var air_speed_build = 0.006 # `air_accel` per `switch_charge` |
|
|
|
var walk_speed_build = 0.006 # `walk_speed` per `charge` |
|
|
|
var air_speed_build = 0.006 # `air_accel` per `charge` |
|
|
|
|
|
|
|
sync var switch_charge = 0 |
|
|
|
var switch_charge_cap = 200 # While switching is always at 100, things like speed boost might go higher! |
|
|
|
sync var charge = 0 |
|
|
|
var charge_cap = 200 # While switching is always at 100, things like speed boost might go higher! |
|
|
|
var movement_charge = 0.15 # In percent per meter (except when heroes change that) |
|
|
|
|
|
|
|
# Nodes |
|
|
@ -71,7 +71,7 @@ func _input(event): |
|
|
|
if "record" in player_info: |
|
|
|
recording.events.append([recording.time, event_to_obj(event)]) |
|
|
|
if Input.is_action_just_pressed("enable_cheats"): |
|
|
|
switch_charge = 199 |
|
|
|
charge = 199 |
|
|
|
|
|
|
|
func _process(delta): |
|
|
|
# All player code not caused by input, and not causing movement |
|
|
@ -79,7 +79,7 @@ func _process(delta): |
|
|
|
|
|
|
|
# Check falling (cancel charge and respawn) |
|
|
|
var fall_height = -400 # This is essentially the respawn timer |
|
|
|
var switch_height = -150 # At this point, stop adding to switch_charge. This makes falls not charge you too much |
|
|
|
var switch_height = -150 # At this point, stop adding to charge. This makes falls not charge you too much |
|
|
|
var vel = get_linear_velocity() |
|
|
|
if translation.y < switch_height: |
|
|
|
vel.y = 0 # Don't gain charge from falling when below switch_height |
|
|
@ -87,17 +87,17 @@ func _process(delta): |
|
|
|
if get_translation().y < fall_height: |
|
|
|
rpc("spawn") |
|
|
|
|
|
|
|
# Update switch charge GUI |
|
|
|
switch_text.set_text("%d%%" % int(switch_charge)) # We truncate, rather than round, so that switch is displayed AT 100% |
|
|
|
if switch_charge >= 100: |
|
|
|
# Update charge GUI |
|
|
|
switch_text.set_text("%d%%" % int(charge)) # We truncate, rather than round, so that switch is displayed AT 100% |
|
|
|
if charge >= 100: |
|
|
|
switch_hero_action.show() |
|
|
|
else: |
|
|
|
switch_hero_action.hide() |
|
|
|
if switch_charge > switch_charge_cap: |
|
|
|
if charge > charge_cap: |
|
|
|
# There is however a cap |
|
|
|
switch_charge = switch_charge_cap |
|
|
|
switch_bar.value = switch_charge |
|
|
|
switch_bar_extra.value = switch_charge - 100 |
|
|
|
charge = charge_cap |
|
|
|
switch_bar.value = charge |
|
|
|
switch_bar_extra.value = charge - 100 |
|
|
|
|
|
|
|
# AI recording |
|
|
|
if "record" in player_info: |
|
|
@ -140,10 +140,10 @@ func build_charge(amount): |
|
|
|
amount *= uncapped_advantage |
|
|
|
else: |
|
|
|
# Only build down to 0 |
|
|
|
amount = max(amount, -switch_charge) |
|
|
|
switch_charge += amount |
|
|
|
amount = max(amount, -charge) |
|
|
|
charge += amount |
|
|
|
if is_network_master(): |
|
|
|
rset_unreliable("switch_charge", switch_charge) |
|
|
|
rset_unreliable("charge", charge) |
|
|
|
return amount |
|
|
|
|
|
|
|
sync func spawn(): |
|
|
@ -163,7 +163,7 @@ sync func spawn(): |
|
|
|
placement.z += rand_range(0, z_varies) |
|
|
|
recording = { "time": 0, "states": [], "events": [], "spawn": Vector3() } |
|
|
|
recording.spawn = var2str(placement) |
|
|
|
recording.switch_charge = var2str(switch_charge) |
|
|
|
recording.charge = var2str(charge) |
|
|
|
set_transform(Basis()) |
|
|
|
set_translation(placement) |
|
|
|
set_linear_velocity(Vector3()) |
|
|
@ -274,7 +274,7 @@ func control_player(state): |
|
|
|
var floor_velocity = Vector3() |
|
|
|
var object = ray.get_collider() |
|
|
|
|
|
|
|
var accel = (1 + switch_charge * walk_speed_build) * walk_speed |
|
|
|
var accel = (1 + charge * walk_speed_build) * walk_speed |
|
|
|
state.apply_impulse(Vector3(), direction * accel * get_mass()) |
|
|
|
var lin_v = state.get_linear_velocity() |
|
|
|
lin_v.x *= floor_friction |
|
|
@ -285,7 +285,7 @@ func control_player(state): |
|
|
|
state.apply_impulse(Vector3(), normal * jump_speed * get_mass()) |
|
|
|
|
|
|
|
else: |
|
|
|
var accel = (1 + switch_charge * air_speed_build) * air_accel |
|
|
|
var accel = (1 + charge * air_speed_build) * air_accel |
|
|
|
state.apply_impulse(Vector3(), direction * accel * get_mass()) |
|
|
|
var lin_v = state.get_linear_velocity() |
|
|
|
lin_v.x *= air_friction |
|
|
@ -295,7 +295,7 @@ func control_player(state): |
|
|
|
state.integrate_forces() |
|
|
|
|
|
|
|
func switch_hero_interface(): |
|
|
|
if switch_charge >= 100: |
|
|
|
if charge >= 100: |
|
|
|
# Interface needs the mouse! |
|
|
|
toggle_mouse_capture() |
|
|
|
# Pause so if we have walls and such nothing funny happens |
|
|
|