diff options
author | metamuffin <metamuffin@disroot.org> | 2024-08-16 21:57:13 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-08-16 21:57:13 +0200 |
commit | 98c33cfa06732b630522c836d9686243ced891ad (patch) | |
tree | cf62918d35c947059954ec9765933df848130c83 | |
parent | 04c7e6530a5afcb2b181d8870e9132cae20a3ae9 (diff) | |
download | hurrycurry-98c33cfa06732b630522c836d9686243ced891ad.tar hurrycurry-98c33cfa06732b630522c836d9686243ced891ad.tar.bz2 hurrycurry-98c33cfa06732b630522c836d9686243ced891ad.tar.zst |
interp item to next 90° rotation when on tile
-rw-r--r-- | client/global.gd | 15 | ||||
-rw-r--r-- | client/map/items/item.gd | 6 |
2 files changed, 15 insertions, 6 deletions
diff --git a/client/global.gd b/client/global.gd index 647cac32..d660173a 100644 --- a/client/global.gd +++ b/client/global.gd @@ -350,10 +350,17 @@ static func interpolate_angle(current, target, dt): current = fmod(current, PI * 2) target = fmod(target, PI * 2) if abs(target - current) > PI: - if target < 0: - target += PI * 2 - else: - target -= PI * 2 + if target < 0: target += PI * 2 + else: target -= PI * 2 + return target + (current - target) * exp(-dt) + +# TODO not working in all cases yet but there was an attempt +static func interpolate_angle_closest_quarter(current, target, dt): + current = fmod(current, PI * 2) + target = fmod(target, PI * 2) + while abs(target - current) > PI / 4.: + if target - current < 0: target += PI / 2 + else: target -= PI / 2 return target + (current - target) * exp(-dt) func find_menu(node: Node) -> Menu: diff --git a/client/map/items/item.gd b/client/map/items/item.gd index fc10dbee..2d046700 100644 --- a/client/map/items/item.gd +++ b/client/map/items/item.gd @@ -44,9 +44,11 @@ func _ready(): position = owned_by.global_position func _process(delta): - var ispeed = 30.0 if owned_by.get_parent().get_parent() is Player else 10. + 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) - rotation.y = G.interpolate_angle(rotation.y, owned_by.global_rotation.y, 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) func progress(p: float, warn: bool): progress_instance.visible = true |