[70fb6d4] | 1 | extends Camera
|
---|
| 2 |
|
---|
| 3 | onready var fall_anim = $AnimationPlayer
|
---|
| 4 |
|
---|
| 5 | func _ready():
|
---|
| 6 | pass
|
---|
| 7 |
|
---|
[f7b09c8] | 8 |
|
---|
| 9 | # enum = {
|
---|
| 10 | # MODE_PLAYER,
|
---|
| 11 | # MODE_FOLLOW,
|
---|
| 12 | # MODE_ZOOM
|
---|
| 13 | #}
|
---|
| 14 |
|
---|
| 15 | #const SNAP_DISTANCE = 0.05
|
---|
| 16 | #const TARGET_VECTOR = Vector3(0,0,-1) # Targeting vector/angle, relative to target node. Multiplied by "distance".
|
---|
| 17 | #const MIN_DISTANCE = 0.5
|
---|
| 18 | #const MAX_DISTANCE = 2.5
|
---|
| 19 | #const UP = Vector3(0,1,0)
|
---|
| 20 |
|
---|
| 21 | #export var speed = 2.0
|
---|
| 22 |
|
---|
| 23 | #var anchor # To bring the camera back once it needs to. (Transform)
|
---|
| 24 | #var target # Node to follow or zoom on. (Node)
|
---|
| 25 | #var distance # Distance when zooming in or out. (float)
|
---|
| 26 | #var mode # Currently active mode. (int)
|
---|
| 27 |
|
---|
| 28 | #func follow(target_node):
|
---|
| 29 | # if !is_processing():
|
---|
| 30 | # anchor = transform
|
---|
| 31 | # set_process(true)
|
---|
| 32 | # distance = 1.0
|
---|
| 33 | # target = target_node
|
---|
| 34 | # mode = MODE_FOLLOW
|
---|
| 35 |
|
---|
| 36 | #func zoom(target_node):
|
---|
| 37 | # if !is_processing():
|
---|
| 38 | # anchor = transform
|
---|
| 39 | # set_process(true)
|
---|
| 40 | # distance = 1.0
|
---|
| 41 | # target = target_node
|
---|
| 42 | # mode = MODE_ZOOM
|
---|
| 43 |
|
---|
| 44 | #func go_to_player():
|
---|
| 45 | # target = null
|
---|
| 46 | # mode = MODE_PLAYER
|
---|
| 47 | # set_process(true)
|
---|
| 48 |
|
---|
| 49 | #func snap_to_player():
|
---|
| 50 | # transform = anchor
|
---|
| 51 | # set_process(false)
|
---|
| 52 |
|
---|
| 53 | #func _ready():
|
---|
| 54 | # set_process(false)
|
---|
| 55 | # mode = MODE_PLAYER
|
---|
| 56 | # anchor = transform
|
---|
| 57 | # distance = 1.0
|
---|
| 58 |
|
---|
| 59 | #func _process(delta): match mode:
|
---|
| 60 | # MODE_PLAYER:
|
---|
| 61 | # var newTransform = transform.interpolate_with(anchor, delta * speed)
|
---|
| 62 | # if newTransform.origin.distance_to(anchor.origin) < SNAP_DISTANCE:
|
---|
| 63 | # transform = anchor
|
---|
| 64 | # set_process(false)
|
---|
| 65 | # else:
|
---|
| 66 | # transform = newTransform
|
---|
| 67 | # MODE_FOLLOW:
|
---|
| 68 | # distance = clamp(distance + delta / 8, 1.0, MAX_DISTANCE)
|
---|
| 69 | # var targetTransform = target.global_transform
|
---|
| 70 | # targetTransform.origin += targetTransform.basis.xform(TARGET_VECTOR * distance)
|
---|
| 71 | # global_transform = global_transform.interpolate_with(targetTransform, delta * speed)
|
---|
| 72 | # look_at(target, UP)
|
---|
| 73 | # MODE_ZOOM:
|
---|
| 74 | # distance = clamp(distance - delta / 4, MIN_DISTANCE, 1.0)
|
---|
| 75 | # var targetTransform = target.global_transform
|
---|
| 76 | # targetTransform.origin += targetTransform.basis.xform(TARGET_VECTOR * distance)
|
---|
| 77 | # global_transform = global_transform.interpolate_with(targetTransform, delta * speed)
|
---|
| 78 | # look_at(target, UP)
|
---|