diff options
Diffstat (limited to 'client')
| -rw-r--r-- | client/game.gd | 2 | ||||
| -rw-r--r-- | client/global.gd | 8 | ||||
| -rw-r--r-- | client/map/items/item.gd | 2 | ||||
| -rw-r--r-- | client/menu/overlay.gd | 6 | ||||
| -rw-r--r-- | client/player/follow_camera.gd | 14 | ||||
| -rw-r--r-- | client/player/player.gd | 4 | 
6 files changed, 22 insertions, 14 deletions
| diff --git a/client/game.gd b/client/game.gd index 3102c84d..98c8986b 100644 --- a/client/game.gd +++ b/client/game.gd @@ -204,7 +204,7 @@ func _ready():  	mp.hide_score.connect($Overlay.hide)  func _process(delta): -	marker.position = lerp(marker.position, marker_target, delta * 40.0) +	marker.position = Global.interpolate(marker.position, marker_target, delta * 30.)  func get_tile_collision(pos: Vector2i) -> bool:  	var t = map.get_tile_name(pos) diff --git a/client/global.gd b/client/global.gd index 042752cc..2dd5f735 100644 --- a/client/global.gd +++ b/client/global.gd @@ -155,3 +155,11 @@ func set_setting(key: String, value):  		push_error("Tried to set setting \"%s\", which does not yet exist (missing key)" % key)  		return  	settings[key].set_value(value) + +func interpolate(current, target, dt): +	return target + (current - target) * exp(-dt) + +func interpolate_angle(current, target, dt): +	if abs(target - current) > PI: +		target -= PI * 2 +	return target + (current - target) * exp(-dt) diff --git a/client/map/items/item.gd b/client/map/items/item.gd index fb55b230..84d3f3fa 100644 --- a/client/map/items/item.gd +++ b/client/map/items/item.gd @@ -40,7 +40,7 @@ func _ready():  	position = owned_by.global_position  func _process(delta): -	position = lerp(position, owned_by.global_position, delta * 30.0) +	position = Global.interpolate(position, owned_by.global_position, delta * 30.0)  func progress(p: float, warn: bool):  	progress_instance.visible = true diff --git a/client/menu/overlay.gd b/client/menu/overlay.gd index 89bbeb24..58e1415c 100644 --- a/client/menu/overlay.gd +++ b/client/menu/overlay.gd @@ -34,9 +34,9 @@ func update(failed_: int, completed_: int, points_: int, time: float):  		timer.start()  func _process(delta): -	failed_label.scale = lerp(failed_label.scale, Vector2(1, 1), delta * 4.) -	completed_label.scale = lerp(completed_label.scale, Vector2(1, 1), delta * 4.) -	points_label.scale = lerp(points_label.scale, Vector2(1, 1), delta * 4.) +	failed_label.scale = Global.interpolate(failed_label.scale, Vector2(1, 1), delta * 4.) +	completed_label.scale = Global.interpolate(completed_label.scale, Vector2(1, 1), delta * 4.) +	points_label.scale = Global.interpolate(points_label.scale, Vector2(1, 1), delta * 4.)  	var seconds: float = floor(timer.time_left)  	seconds_label.text = str(int(seconds))  	decimals_label.text = "%01d" % int((timer.time_left - seconds) * 10) diff --git a/client/player/follow_camera.gd b/client/player/follow_camera.gd index 19ecc65a..db939a0b 100644 --- a/client/player/follow_camera.gd +++ b/client/player/follow_camera.gd @@ -60,13 +60,13 @@ func follow(delta):  	angle_target += Input.get_axis("rotate_left", "rotate_right") * (  		ROTATE_SPEED * delta * (-1 if Global.get_setting("invert_camera") else 1)  	) -	angle = lerp_angle(angle, angle_target, delta * ROTATE_WEIGHT) +	angle = Global.interpolate_angle(angle, angle_target, delta * ROTATE_WEIGHT)  	angle_up_target += Input.get_axis("rotate_down", "rotate_up") * (  		ROTATE_UP_SPEED * delta * (-1 if Global.get_setting("invert_camera") else 1)  	)  	angle_up_target = clamp(angle_up_target, ANGLE_UP_MIN, ANGLE_UP_MAX) -	angle_up = lerp_angle(angle_up, angle_up_target, delta * ROTATE_UP_WEIGHT) +	angle_up = Global.interpolate_angle(angle_up, angle_up_target, delta * ROTATE_UP_WEIGHT)  	var offset = Vector3(0, sin(angle_up) * camera_distance, cos(angle_up) * camera_distance).rotated(Vector3.UP, angle) @@ -76,17 +76,17 @@ func follow(delta):  	if Global.get_setting("interpolate_camera_rotation"):  		transform.basis = Basis.from_euler(Vector3( -			lerp_angle(transform.basis.get_euler().x, new_transform.basis.get_euler().x, delta * LOOK_WEIGHT), -			lerp_angle(transform.basis.get_euler().y, new_transform.basis.get_euler().y, delta * LOOK_WEIGHT), -			lerp_angle(transform.basis.get_euler().z, new_transform.basis.get_euler().z, delta * LOOK_WEIGHT) +			Global.interpolate_angle(transform.basis.get_euler().x, new_transform.basis.get_euler().x, delta * LOOK_WEIGHT), +			Global.interpolate_angle(transform.basis.get_euler().y, new_transform.basis.get_euler().y, delta * LOOK_WEIGHT), +			Global.interpolate_angle(transform.basis.get_euler().z, new_transform.basis.get_euler().z, delta * LOOK_WEIGHT)  		))  	else:  		transform.basis = new_transform.basis -	ground = ground.lerp(target.position, delta * MOVE_WEIGHT) +	ground = Global.interpolate(ground, target.position, delta * MOVE_WEIGHT)  	camera_distance_target += Input.get_axis("zoom_in", "zoom_out") * ZOOM_SPEED * delta  	camera_distance_target = clamp(camera_distance_target, MIN_ZOOM, MAX_ZOOM) -	camera_distance = lerp(camera_distance, camera_distance_target, delta * ZOOM_WEIGHT) +	camera_distance = Global.interpolate(camera_distance, camera_distance_target, delta * ZOOM_WEIGHT)  	position = ground + offset diff --git a/client/player/player.gd b/client/player/player.gd index 301f7945..ef977ce6 100644 --- a/client/player/player.gd +++ b/client/player/player.gd @@ -116,8 +116,8 @@ func pass_to(player: Player):  func _process(delta):  	_anim_angle = fmod(_anim_angle + delta, TAU)  	hand_base.position.y = HAND_BASE_POSITION.y + 0.05 * sin(_anim_angle * 3) -	position_anim = lerp(position_anim, position_, delta * 10) -	rotation_anim = lerp_angle(rotation_anim, rotation_, delta * 10) +	position_anim = Global.interpolate(position_anim, position_, delta * 10) +	rotation_anim = Global.interpolate_angle(rotation_anim, rotation_, delta * 10)  	position.x = position_anim.x  	position.z = position_anim.y  	rotation.y = rotation_anim | 
