|
|
@ -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: |
|
|
|