src / player / camera / camera.tscn

Diagram

Diagram

Overridden virtual functions

_process

func _process(delta: float) -> void:
	if shaking_time:
		shaking_time = maxf(0.0, shaking_time - delta)
		shaking()

Scene Tree

  • Camera Camera2D

Signal Connections

Note
No signal connections.

Properties

Table 1. Root properties
Name Value

limit_left

0

limit_bottom

1080

limit_smoothed

true

position_smoothing_enabled

true

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