summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-09-16 14:03:57 +0200
committermetamuffin <metamuffin@disroot.org>2024-09-16 14:04:03 +0200
commita492e9d461d9a24023f91fbe5a531e9501bf5bb8 (patch)
tree5410621e4f87d384ac3b68a3c0fb96496854a7a6
parentdfda0d0aeb8a50c6d7bdfad8a462629a500dd114 (diff)
downloadhurrycurry-a492e9d461d9a24023f91fbe5a531e9501bf5bb8.tar
hurrycurry-a492e9d461d9a24023f91fbe5a531e9501bf5bb8.tar.bz2
hurrycurry-a492e9d461d9a24023f91fbe5a531e9501bf5bb8.tar.zst
items animate instantly when held for longer
-rw-r--r--client/map/items/item.gd18
1 files changed, 10 insertions, 8 deletions
diff --git a/client/map/items/item.gd b/client/map/items/item.gd
index d256343c..526bf39f 100644
--- a/client/map/items/item.gd
+++ b/client/map/items/item.gd
@@ -27,7 +27,9 @@ var put_sound: PlayRandom = preload("res://audio/play_random.tscn").instantiate(
var sound_id
var destroy_timeout = null
-var creation_timer = 0
+var creation_timer = 0.0
+var item_owned = false
+var player_owned_timer = 0.0
func _init(owned_by_: Node3D):
progress_instance.position.y = 1
@@ -48,13 +50,13 @@ func _init(owned_by_: Node3D):
func _process(delta):
if not is_instance_valid(owned_by): return
- if owned_by.get_parent() is Item or owned_by is Item:
- return
- var p = owned_by.get_parent().get_parent() is Player
- var ispeed = 30.0 if p else 10.
- position = G.interpolate(position, owned_by.global_position, delta * ispeed)
- if p: rotation.y = G.interpolate_angle(rotation.y, owned_by.global_rotation.y, delta * ispeed)
- else: rotation.y = G.interpolate_angle_closest_quarter(rotation.y, owned_by.global_rotation.y, delta * ispeed)
+ if owned_by.get_parent() is Item or owned_by is Item: return
+ var player_owned = owned_by.get_parent().get_parent() is Player
+ player_owned_timer = player_owned_timer + delta if player_owned else 0.
+ var anim_speed = 10.0 * exp(player_owned_timer * 3.0)
+ position = G.interpolate(position, owned_by.global_position, delta * anim_speed)
+ if player_owned: rotation.y = G.interpolate_angle(rotation.y, owned_by.global_rotation.y, delta * anim_speed)
+ else: rotation.y = G.interpolate_angle_closest_quarter(rotation.y, owned_by.global_rotation.y, delta * anim_speed)
if creation_timer != null:
scale = Vector3.ONE * creation_timer
creation_timer += delta * 10.0