added driftling

This commit is contained in:
2026-02-11 08:18:46 +11:00
parent d03f907c24
commit e3d04ca247
30 changed files with 363 additions and 80 deletions

View File

@@ -28,6 +28,10 @@ var mage_unlocked: bool = 0
func check_high_score(level_title: String, wave_reached: int, endless: bool) -> void:
if !endless_high_scores.has(level_title):
endless_high_scores[level_title] = 0
if !level_high_scores.has(level_title):
level_high_scores[level_title] = 0
if endless and endless_high_scores[level_title] < wave_reached:
endless_high_scores[level_title] = wave_reached
elif level_high_scores[level_title] < wave_reached:

View File

@@ -0,0 +1,55 @@
class_name DriftlingDrippler
extends Node
enum DriftlingDrippleState {
BLOATING = 0,
FLOATING = 1,
CHOAKING = 2,
CROAKING = 3
}
@export var driftling: EnemyController
@export var animator: AnimationTree
@export var model: Node3D
@export var bloat_hitbox: Hitbox
@export var croak_hitbox: Hitbox
var time_to_bloat: float = 1.5
var time_to_float: float = 3.0
var time_to_choak: float = 0.8
var time_to_croak: float = 0.4
var state: DriftlingDrippleState = DriftlingDrippleState.BLOATING
func _ready() -> void:
time_to_bloat += NoiseRandom.randf_in_range(name.to_int(), 0.0, 0.5)
time_to_float += NoiseRandom.randf_in_range(name.to_int(), 0.0, 2.0)
time_to_choak += NoiseRandom.randf_in_range(name.to_int(), 0.0, 0.4)
time_to_croak += NoiseRandom.randf_in_range(name.to_int(), 0.0, 0.2)
next_state(DriftlingDrippleState.BLOATING)
func set_dripple(amount: float) -> void:
animator.set("parameters/Blend2/blend_amount", amount)
func next_state(state: DriftlingDrippleState) -> void:
var tween: Tween = create_tween()
match state:
DriftlingDrippleState.BLOATING:
tween.tween_method(set_dripple, 1.0, 0.0, time_to_bloat)
tween.tween_property(model, "position", Vector3.UP * 3.0, time_to_bloat)
tween.tween_callback(next_state.bind(DriftlingDrippleState.FLOATING))
DriftlingDrippleState.FLOATING:
bloat_hitbox.disabled = false
tween.tween_interval(time_to_float)
tween.tween_callback(next_state.bind(DriftlingDrippleState.CHOAKING))
DriftlingDrippleState.CHOAKING:
bloat_hitbox.disabled = true
tween.tween_method(set_dripple, 0.0, 1.0, time_to_croak)
tween.tween_property(model, "position", Vector3.DOWN * 3.0, time_to_croak)
tween.tween_callback(next_state.bind(DriftlingDrippleState.CROAKING))
DriftlingDrippleState.CROAKING:
tween.tween_interval(time_to_float)
tween.tween_callback(next_state.bind(DriftlingDrippleState.BLOATING))

View File

@@ -0,0 +1 @@
uid://cxu1voan64i5g

View File

@@ -24,13 +24,13 @@ func enemy_entered_shield_range(body: Node3D) -> void:
body.reached_goal.connect(enemy_reached_goal)
func enemy_died(enemy: Enemy) -> void:
func enemy_died(_enemy: Enemy) -> void:
enemies_inside -= 1
if enemies_inside == 0:
goal_cleared.emit()
func enemy_reached_goal(enemy: Enemy, penalty: int) -> void:
func enemy_reached_goal(_enemy: Enemy, _penalty: int) -> void:
enemies_inside -= 1
if enemies_inside == 0:
goal_cleared.emit()