diff --git a/scenes/player/ray_cast_look.gd b/scenes/player/ray_cast_look.gd index 5ac5e77..ea92373 100644 --- a/scenes/player/ray_cast_look.gd +++ b/scenes/player/ray_cast_look.gd @@ -31,24 +31,21 @@ func _process(_delta: float) -> void: func is_valid_placement_target(block_pos: Vector3i) -> bool: - # This needs some work as it's still not quite reliable - # Sometimes can't place in the position directly in front of the player - var collision_shape_radius: float = player.collision_shape_standing.shape.radius - 0.2 # Fuzzy magic number (bad dev, bad) + var collision_shape_radius: float = player.collision_shape_standing.shape.radius - var maximums: Vector3 = Vector3(collision_shape_radius, 0, collision_shape_radius) - var position_min: Vector3i = Vector3i(player.global_position - maximums) - var position_max: Vector3i = Vector3i(player.global_position + maximums) + var collision_size_adjustments: Vector3 = Vector3(collision_shape_radius, 0, collision_shape_radius) + var player_position_min: Vector3 = player.global_position - collision_size_adjustments + var player_position_max: Vector3 = player.global_position + collision_size_adjustments - position_max.y = player.current_height + player_position_max.y += player.current_height - if ( - block_pos.x >= position_min.x and block_pos.x <= position_max.x and - block_pos.y >= position_min.y and block_pos.y <= position_max.y and - block_pos.z >= position_min.z and block_pos.z <= position_max.z - ): - return false + var _is_overlapping_player: bool = ( + block_pos.x >= player_position_min.x and block_pos.x <= player_position_max.x and + block_pos.y >= player_position_min.y and block_pos.y <= player_position_max.y and + block_pos.z >= player_position_min.z and block_pos.z <= player_position_max.z + ) - return true + return !_is_overlapping_player func hook_block(target_block: Block) -> void: