Browse Source

Disallow placing blocks where player is located

pull/22/head
Ryan Reed 1 month ago
parent
commit
0bd79ee992
3 changed files with 32 additions and 4 deletions
  1. +3
    -2
      scenes/player/player.gd
  2. +2
    -1
      scenes/player/player.tscn
  3. +27
    -1
      scenes/player/ray_cast_look.gd

+ 3
- 2
scenes/player/player.gd View File

@ -25,6 +25,7 @@ extends CharacterBody3D
@onready var collision_shape_crouching: CollisionShape3D = $CollisionShapeCrouching
@onready var ray_cast_crouch: RayCast3D = $RayCastCrouch
var current_height: float = 0.0
var current_jump_count: int = 0
var current_speed: float = walk_speed
var direction: Vector3 = Vector3.ZERO
@ -74,8 +75,8 @@ func _handle_crouching(delta: float) -> void:
collision_shape_crouching.disabled = !is_crouching
collision_shape_standing.disabled = is_crouching
var height: float = crouch_height if is_crouching else standing_height
head.position.y = lerp(head.position.y, height, camera_acceleration * delta)
current_height = crouch_height if is_crouching else standing_height
head.position.y = lerp(head.position.y, current_height, camera_acceleration * delta)
func _handle_jumping() -> void:
if is_on_floor():


+ 2
- 1
scenes/player/player.tscn View File

@ -37,10 +37,11 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8, 0)
[node name="BlockMesh" parent="Head/Camera3D" instance=ExtResource("2_p47bc")]
transform = Transform3D(1, 0, 0, 0, 0.965926, -0.258819, 0, 0.258819, 0.965926, 0, -0.680035, -1.7196)
[node name="RayCastLook" type="RayCast3D" parent="Head"]
[node name="RayCastLook" type="RayCast3D" parent="Head" node_paths=PackedStringArray("player")]
target_position = Vector3(0, 0, -10)
debug_shape_custom_color = Color(0.753415, 4.77457e-05, 0.578804, 1)
script = ExtResource("2_dovo2")
player = NodePath("../..")
[node name="RayCastCrouch" type="RayCast3D" parent="."]
editor_description = "Y should be just slightly higher than the height of the standing collision shape"


+ 27
- 1
scenes/player/ray_cast_look.gd View File

@ -1,6 +1,9 @@
extends RayCast3D
@export var player: Player
func _process(_delta: float) -> void:
if is_colliding():
var collider: Object = get_collider()
@ -9,9 +12,14 @@ func _process(_delta: float) -> void:
if Input.is_action_just_pressed("right_click_interact"):
(collider as Block).destroy_block()
if Input.is_action_just_pressed("left_click_interact"):
var new_block_pos: Vector3i = Vector3i(collider.position + get_collision_normal())
if !is_valid_placement_target(new_block_pos):
return
EntityManager.create_block.emit(
InventoryManager.quick_slot_item_id,
collider.position + get_collision_normal()
new_block_pos
)
if Waila.ref.get_target() == collider:
@ -25,6 +33,24 @@ func _process(_delta: float) -> void:
release_target()
func is_valid_placement_target(new_block_pos: Vector3i) -> bool:
# This could probably use some work
var collision_shape_radius: float = player.collision_shape_standing.shape.radius
var maximums: Vector3 = Vector3(collision_shape_radius, player.current_height, collision_shape_radius)
var position_min: Vector3i = Vector3i(player.global_position - maximums)
var position_max: Vector3i = Vector3i(player.global_position + maximums)
if (
new_block_pos.x >= position_min.x and new_block_pos.x <= position_max.x and
new_block_pos.y >= position_min.y and new_block_pos.y <= position_max.y and
new_block_pos.z >= position_min.z and new_block_pos.z <= position_max.z
):
return false
return true
func hook_block(target_block: Block) -> void:
target_block.hook()
Waila.ref.set_target(target_block)


Loading…
Cancel
Save