aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortpart <tpart120@proton.me>2025-06-02 19:16:24 +0200
committertpart <tpart120@proton.me>2025-06-02 19:16:29 +0200
commit9dcc15720ac29c7cae54b1cc6066a07f6a2eb3bd (patch)
tree1656ad84459e50ba5126b5d5d0e5f3f3cd7a7ebf
parent8059e28bbc363dd6304cc67db69dbc573f6e0280 (diff)
downloadhurrycurry-9dcc15720ac29c7cae54b1cc6066a07f6a2eb3bd.tar
hurrycurry-9dcc15720ac29c7cae54b1cc6066a07f6a2eb3bd.tar.bz2
hurrycurry-9dcc15720ac29c7cae54b1cc6066a07f6a2eb3bd.tar.zst
Make interaction target code more readable; Refactoring
-rw-r--r--client/player/controllable_player.gd49
1 files changed, 26 insertions, 23 deletions
diff --git a/client/player/controllable_player.gd b/client/player/controllable_player.gd
index 1ac84504..ce20a0a2 100644
--- a/client/player/controllable_player.gd
+++ b/client/player/controllable_player.gd
@@ -1,6 +1,6 @@
# Hurry Curry! - a game about cooking
# Copyright 2024 metamuffin
-# Copyright 2024 tpart
+# Copyright 2025 tpart
# Copyright 2024 nokoe
#
# This program is free software: you can redistribute it and/or modify
@@ -229,28 +229,31 @@ func interact():
else:
marker.visible = false
-func get_interact_target():
- var rx := movement_base.position.x + sin(movement_base.rotation.y) * 0.7
- var ry := movement_base.position.z + cos(movement_base.rotation.y) * 0.7
- var bx = floor(rx)
- var by = floor(ry)
- var best := Vector2i(bx, by)
- var best_d = 100
- for ox in range(-1,1):
- for oy in range (-1, 1):
- var tile_name = game.map.get_tile_name(Vector2i(bx + ox, by + oy))
+func get_interact_target() -> Vector2i:
+ var interact_target := Vector2(
+ movement_base.position.x + sin(movement_base.rotation.y) * 0.7,
+ movement_base.position.z + cos(movement_base.rotation.y) * 0.7
+ )
+ var interact_target_i := Vector2i(interact_target.floor())
+ var best_cursor := interact_target_i
+ var best_distance := 100.
+
+ for offset_x in range(-1,1):
+ for offset_y in range (-1, 1):
+ var offset_cursor := interact_target_i + Vector2i(offset_x, offset_y)
+ var tile_name = game.map.get_tile_name(offset_cursor)
if tile_name == null: continue
var tile_id: int = game.tile_index_by_name[tile_name]
+
if game.tile_interact[tile_id]:
- var cx = (bx + ox + 0.5)
- var cy = (by + oy + 0.5)
- var dx = rx - cx
- var dy = ry - cy
- var pdx = movement_base.position.x - cx
- var pdy = movement_base.position.z - cy
- var d = sqrt(dx * dx + dy * dy)
- var pd = sqrt(pdx * pdx + pdy * pdy)
- if pd < 2 && d < best_d:
- best_d = d
- best = Vector2i(bx + ox, by + oy)
- return best
+ var tile_center := Vector2(offset_cursor) + Vector2(0.5, 0.5)
+ var cursor_tile_distance := (interact_target - tile_center).length()
+ var player_tile_distance := Vector2(
+ movement_base.position.x - tile_center.x,
+ movement_base.position.z - tile_center.y
+ ).length()
+ if player_tile_distance < 1.9 && cursor_tile_distance < best_distance:
+ best_distance = cursor_tile_distance
+ best_cursor = offset_cursor
+
+ return best_cursor