102 lines
2.2 KiB
GDScript
102 lines
2.2 KiB
GDScript
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])
|