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)
|
||||
|
||||
Reference in New Issue
Block a user