I tried it without animation part , but can’t figure out why T is not updates even when condition is met .
extends Node3D
@onready var T: Transform3D = global_transform
func _ready() -> void:
print("start value of T:",T)
func _process(_dt) -> void:
var occupied_forward = is_cell_occupied(T.origin - T.basis.z)
var occupied_forward_down = is_cell_occupied(T.origin - T.basis.z - T.basis.y)
if Input.is_action_just_pressed("forward"):
print("pressed forward ","T.origin",T.origin,"T.basis.z", T.basis.z, "T.basis.y", T.basis.y)
print("occupied_forward = ", occupied_forward)
print("occupied_forward_down = ", occupied_forward_down)
print("grid size cell ", %grid.cell_size)
if not occupied_forward and occupied_forward_down:
T = T.translated_local(Vector3.FORWARD * %grid.cell_size)
print("not occupied_forward and occupied_forward_down")
print("T value ",T)
elif occupied_forward:
T = T.rotated_local(Vector3.RIGHT, PI /2.0)
elif not occupied_forward and not occupied_forward_down:
T = T.translated_local((Vector3.FORWARD * Vector3.DOWN) * %grid.cell_size)
T = T.rotated_local(Vector3.RIGHT, -PI/ 2.0)
elif Input.is_action_just_pressed("left_camera"):
print("pressed left_camera", T.basis)
T = T.rotated_local(Vector3.UP, PI/ 2.0)
elif Input.is_action_just_pressed("right_camera"):
print("pressed right_camera", T.basis)
T = T.rotated_local(Vector3.UP, -PI /2.0)
T = T.orthonormalized()
if T.is_equal_approx(global_transform):
return
func is_cell_occupied(pos: Vector3) -> bool:
return %grid.get_cell_item(%grid.local_to_map(pos)) != GridMap.INVALID_CELL_ITEM
return this on forward
start value of T:[X: (1.0, 0.0, 0.0), Y: (0.0, 1.0, 0.0), Z: (0.0, 0.0, 1.0), O: (-2.5, 1.5, 0.5)]
pressed forward T.origin(-2.5, 1.5, 0.5)T.basis.z(0.0, 0.0, 1.0)T.basis.y(0.0, 1.0, 0.0)
occupied_forward = false
occupied_forward_down = true
grid size cell (1.0, 1.0, 1.0)
not occupied_forward and occupied_forward_down
T value [X: (1.0, 0.0, 0.0), Y: (0.0, 1.0, 0.0), Z: (0.0, 0.0, 1.0), O: (-2.5, 1.5, -0.5)]