diff options
Diffstat (limited to 'client/player/controllable_player.gd')
| -rw-r--r-- | client/player/controllable_player.gd | 49 | 
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 | 
