Implement production vertical slice foundation

This commit is contained in:
chindit committed 2026-10-02 15:27:48 +02:00
1 parent 9d4a89f355
commit a18e82eb44
104 files changed
+10595 -268

No files matched your search

+101
View File
@@ -0,0 +1,101 @@
class_name DiveEvent
extends RefCounted
const DiveAlertLevel = preload("res://game/domain/dive/dive_alert_level.gd")
const DiveTerminalReason = preload("res://game/domain/dive/dive_terminal_reason.gd")
enum Kind {
ALERT_LEVEL_CHANGED,
RESOURCE_DEPLETED,
HULL_DAMAGED,
DIVE_TERMINATED,
}
var event_id: StringName
var kind: Kind
var tick_sequence: int
var subject: StringName
var amount: float
var previous_level: DiveAlertLevel.Value
var current_level: DiveAlertLevel.Value
var terminal_reason: DiveTerminalReason.Value
func _init(
p_event_id: StringName,
p_kind: Kind,
p_tick_sequence: int,
p_subject: StringName = &"",
p_amount: float = 0.0,
p_previous_level: DiveAlertLevel.Value = DiveAlertLevel.Value.NORMAL,
p_current_level: DiveAlertLevel.Value = DiveAlertLevel.Value.NORMAL,
p_terminal_reason: DiveTerminalReason.Value = DiveTerminalReason.Value.NONE
) -> void:
event_id = p_event_id
kind = p_kind
tick_sequence = p_tick_sequence
subject = p_subject
amount = p_amount
previous_level = p_previous_level
current_level = p_current_level
terminal_reason = p_terminal_reason
static func alert_changed(
tick_sequence: int,
subject: StringName,
previous_level: DiveAlertLevel.Value,
current_level: DiveAlertLevel.Value
):
return new(
_event_id(tick_sequence, &"alert", subject),
Kind.ALERT_LEVEL_CHANGED,
tick_sequence,
subject,
0.0,
previous_level,
current_level
)
static func resource_depleted(tick_sequence: int, subject: StringName):
return new(
_event_id(tick_sequence, &"depleted", subject),
Kind.RESOURCE_DEPLETED,
tick_sequence,
subject
)
static func hull_damaged(tick_sequence: int, amount: float):
return new(
_event_id(tick_sequence, &"damage", &"hull"),
Kind.HULL_DAMAGED,
tick_sequence,
&"hull",
amount
)
static func dive_terminated(
tick_sequence: int,
reason: DiveTerminalReason.Value
):
return new(
_event_id(tick_sequence, &"terminal", &"dive"),
Kind.DIVE_TERMINATED,
tick_sequence,
&"dive",
0.0,
DiveAlertLevel.Value.NORMAL,
DiveAlertLevel.Value.NORMAL,
reason
)
static func _event_id(
tick_sequence: int,
event_name: StringName,
subject_name: StringName
) -> StringName:
return StringName("%d:%s:%s" % [tick_sequence, event_name, subject_name])