Table of Contents
src / player / camera / camera.tscn
Diagram
Overridden virtual functions
_process
func _process(delta: float) -> void:
if shaking_time:
shaking_time = maxf(0.0, shaking_time - delta)
shaking()
Instantiators
Scene Tree
-
Camera Camera2D
Signal Connections
|
Note
|
No signal connections. |
Properties
| Name | Value |
|---|---|
limit_left |
|
limit_bottom |
|
limit_smoothed |
|
position_smoothing_enabled |
|
script |
camera.gd
extends Camera2D
const DASH_SHAKING_TIME = 0.5
const FAILURE_SHAKING_TIME = 0.5
const SHAKING_VALUE = {
&'dash': Vector2(15, 12),
&'failure': Vector2(40, 32),
}
var shaking_time := 0.0
var fixed_position := Vector2(0, 0)
var current_frames : Array
var shaking_value := Vector2(1, 1)
func _process(delta: float) -> void:
if shaking_time:
shaking_time = maxf(0.0, shaking_time - delta)
shaking()
func add_frame(frame: Area2D) -> void:
current_frames.push_back(frame)
apply_limitation()
func remove_frame(frame: Area2D) -> void:
var idx = current_frames.find(frame)
current_frames.remove_at(idx)
apply_limitation()
func apply_limitation() -> void:
if current_frames:
var corners = current_frames.map(func(f): return f.corner())
limit_left = corners.map(func(c): return c["left"]).min()
limit_right = corners.map(func(c): return c["right"]).max()
limit_bottom = corners.map(func(c): return c["top"]).min()
limit_top = corners.map(func(c): return c["bottom"]).max()
else:
limit_left = 0
limit_right = 100000
limit_bottom = -10000
limit_top = 10000
func shake(type: StringName) -> void:
match type:
&'dash':
shaking_time = DASH_SHAKING_TIME
shaking_value = SHAKING_VALUE[&'dash']
&'failure':
shaking_time = FAILURE_SHAKING_TIME
shaking_value = SHAKING_VALUE[&'failure']
func shaking() -> void:
offset.x = shaking_value.x * randf_range(-1, 1) * shaking_time
offset.y = shaking_value.y * randf_range(-1, 1) * shaking_time