Overworld Camera
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.1915, 1.05, 0.125589)
|
|||||||
entityId = "player"
|
entityId = "player"
|
||||||
movementType = 2
|
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)
|
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")
|
script = ExtResource("7_tr4a0")
|
||||||
|
targetNode = NodePath("../Player")
|
||||||
|
|||||||
Reference in New Issue
Block a user