1 | extends Camera
|
---|
2 |
|
---|
3 | onready var fall_anim = $AnimationPlayer
|
---|
4 |
|
---|
5 | func _ready():
|
---|
6 | pass
|
---|
7 |
|
---|
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)
|
---|