diff --git a/overworld/camera/OverworldCamera.gd b/overworld/camera/OverworldCamera.gd index 8ca6ba2..7acd237 100644 --- a/overworld/camera/OverworldCamera.gd +++ b/overworld/camera/OverworldCamera.gd @@ -1 +1,51 @@ -extends Camera3D +class_name OverworldCamera extends Camera3D + +enum TargetType { + FREE, + FOLLOW_NODE +} + +enum FollowType { + INSTANT, + SMOOTH +} + +@export_category("Follow Target") +@export var targetNode:Node3D = null +@export var targetType:TargetType = TargetType.FOLLOW_NODE +@export var targetPosition:Vector3 = Vector3.ZERO + +@export_category("Follow Settings") +@export var targetOffset:Vector3 = Vector3.ZERO +@export var positionOffset:Vector3 = Vector3(3, 10, 0) +@export var pixelPerfect:bool = true + +func getTargetLookAt() -> Vector3: + var targetPos:Vector3 + if TargetType.FREE: + targetPos = self.targetPosition + elif TargetType.FOLLOW_NODE: + if targetNode == null: + targetPos = self.global_transform.origin + self.global_transform.basis.z + else: + targetPos = targetNode.global_transform.origin + + targetPos += targetOffset + return targetPos + +func getTargetPosition() -> Vector3: + var targetPos = getTargetLookAt() + targetPos += positionOffset + return targetPos + +func _process(_delta: float) -> void: + var targetPos = getTargetPosition() + global_transform.origin = targetPos + var lookAt = getTargetLookAt() + look_at(lookAt, Vector3.UP) + +func _enter_tree() -> void: + var targetPos = getTargetPosition() + global_transform.origin = targetPos + var lookAt = getTargetLookAt() + look_at(lookAt, Vector3.UP) diff --git a/overworld/map/TestMap.tscn b/overworld/map/TestMap.tscn index 4c05e13..53e9f43 100644 --- a/overworld/map/TestMap.tscn +++ b/overworld/map/TestMap.tscn @@ -57,6 +57,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.1915, 1.05, 0.125589) entityId = "player" movementType = 2 -[node name="Camera3D" type="Camera3D" parent="."] +[node name="Camera3D" type="Camera3D" parent="." node_paths=PackedStringArray("targetNode")] transform = Transform3D(-0.0384888, -0.605488, 0.794923, -0.0292824, 0.795854, 0.60478, -0.99883, -5.59445e-09, -0.0483616, 9.84926, 12.5195, 0) script = ExtResource("7_tr4a0") +targetNode = NodePath("../Player")