This commit is contained in:
Gerard Gascón 2025-04-24 17:06:24 +02:00
commit 18efc36800
161 changed files with 5008 additions and 0 deletions

View file

@ -0,0 +1,51 @@
extends Node
@onready var leftEngine: Sprite2D = $MotorIzquierdo
@onready var rightEngine: Sprite2D = $MotorDerecho
var leftPowerLevel: float
var currentLeftPowerLevel: float
var rightPowerLevel: float
var currentRightPowerLevel: float
@export var leftPowerSprites: Array[Texture2D]
@export var rightPowerSprites: Array[Texture2D]
@export_range(0, 2) var transitionDelta: float
func _transition(curr: float, goal: float, delta: float) -> float:
return curr + (goal - curr) * transitionDelta * delta
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
currentLeftPowerLevel = _transition(currentLeftPowerLevel, leftPowerLevel, delta)
currentRightPowerLevel = _transition(currentRightPowerLevel, rightPowerLevel, delta)
if not leftPowerSprites.is_empty():
var index = roundf(currentLeftPowerLevel * leftPowerSprites.size())
index = clamp(index, 0, leftPowerSprites.size() - 1)
leftEngine.texture = leftPowerSprites[index]
if not rightPowerSprites.is_empty():
var index = roundf(currentRightPowerLevel * rightPowerSprites.size())
index = clamp(index, 0, rightPowerSprites.size() - 1)
rightEngine.texture = rightPowerSprites[index]
func _change_left_power_level(level: float):
leftPowerLevel = level
func _change_right_power_level(level: float):
rightPowerLevel = level
func _on_left_engine_off():
_change_left_power_level(0)
func _on_left_engine_on():
_change_left_power_level(1)
func _on_right_engine_off():
_change_right_power_level(0)
func _on_right_engine_on():
_change_right_power_level(1)

View file

@ -0,0 +1,41 @@
extends Node2D
@onready var on: Sprite2D = $CaraFeliz
@onready var powerless: Sprite2D = $CaraTieso
@onready var off: Sprite2D = $CaraPanico
@export var game_manager: GameManager
var lights_out: bool
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if abs(game_manager.spinner_speed) > 0:
_on_face()
lights_out = false
elif not lights_out:
_powerless_face()
func _on_lights_out():
lights_out = true
_off_face()
func _on_face():
on.visible = true
powerless.visible = false
off.visible = false
func _off_face():
on.visible = false
powerless.visible = false
off.visible = true
func _powerless_face():
on.visible = false
powerless.visible = true
off.visible = false

21
scripts/effects/lights.gd Normal file
View file

@ -0,0 +1,21 @@
extends Node2D
@export var light1: Sprite2D
@export var light2: Sprite2D
@export var light3: Sprite2D
@export var light4: Sprite2D
# Called when the node enters the scene tree for the first time.
func _ready():
light1.visible = false
light2.visible = false
light3.visible = false
light4.visible = false
func _process(_delta):
light1.visible = Input.is_action_pressed("BTN_1")
light2.visible = Input.is_action_pressed("BTN_2")
light3.visible = Input.is_action_pressed("BTN_3")
light4.visible = Input.is_action_pressed("BTN_4")

44
scripts/effects/shadow.gd Normal file
View file

@ -0,0 +1,44 @@
extends Sprite2D
@export var powerOnCurve: Curve
@export var shutDownCurve: Curve
var time: float
@export var duration: float
@export var bubbleMask: Sprite2D
var curve: Curve
var animating: bool = false
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if (not animating):
return
time += delta
var alpha = curve.sample(clamp(time / duration, 0, 1))
modulate = Color(Color.WHITE, alpha)
bubbleMask.modulate = Color(Color.WHITE, alpha)
if (time >= duration):
animating = false
func shut_down():
time = 0
curve = shutDownCurve
animating = true
func power_on():
time = 0
curve = powerOnCurve
animating = true
func _on_lights_out():
shut_down()
func _on_lights_in():
power_on()

26
scripts/effects/shake.gd Normal file
View file

@ -0,0 +1,26 @@
extends Camera2D
@export var randomStrength: float = 30.0
@export var randomRotationStrength: float = 5.0
@export var shakeFade: float = 5.0
@export var intensity: float = 0.0
var rng = RandomNumberGenerator.new()
var shake_strength: float = 0.0
var initialPos: Vector2
func _ready():
initialPos = offset
func _process(delta):
offset = initialPos + randomOffset() * intensity
rotation = randomRotation() * intensity
func randomOffset() -> Vector2:
return Vector2(rng.randf_range(-randomStrength, randomStrength), rng.randf_range(-randomStrength, randomStrength))
func randomRotation() -> float:
return deg_to_rad(randf_range(-randomRotationStrength, randomRotationStrength))

14
scripts/effects/smoke.gd Normal file
View file

@ -0,0 +1,14 @@
extends Node2D
@export var positions: Array[Node2D]
func spawn():
var pos: Node2D = positions.pick_random()
if not pos:
return
positions.erase(pos)
var scene = load("res://scenes/smoke_particles.tscn")
var scene_instance = scene.instantiate()
add_child(scene_instance)
scene_instance.global_position = pos.global_position

View file

@ -0,0 +1,39 @@
extends Node2D
@export var sound_sources: Array[AudioStream]
@export var enabled_speaker: Sprite2D
@export var disabled_speaker: Sprite2D
func _ready():
_disable_speaker()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if (Input.is_action_just_pressed("BTN_5")):
_play_random_sound()
func _play_random_sound():
var stream = sound_sources.pick_random()
var length = stream.get_length()
SoundManager.play_sound(stream)
_enable_speaker()
if ($Timer.time_left < length):
$Timer.start(length)
func _enable_speaker():
enabled_speaker.visible = true
disabled_speaker.visible = false
func _disable_speaker():
enabled_speaker.visible = false
disabled_speaker.visible = true
func _on_timer_timeout():
_disable_speaker()

View file

@ -0,0 +1,15 @@
extends ColorRect
@export var intensity: float
# Called when the node enters the scene tree for the first time.
func _ready():
var tween = get_tree().create_tween()
tween.tween_method(_set_vignette, 0.0, 1.5, 0.5).set_trans(Tween.TRANS_LINEAR)
tween.tween_method(_set_vignette, 1.5, 0.0, 0.5).set_trans(Tween.TRANS_LINEAR).set_delay(0.5)
tween.set_loops()
func _set_vignette(value: float):
var mat: ShaderMaterial = material
mat.set_shader_parameter("vignette_strength", value * intensity)