Files
Ransom-s-wake/game/domain/rules/dive_difficulty_profile.gd
T

53 lines
1.5 KiB
GDScript

class_name DiveDifficultyProfile
extends RefCounted
var profile_id: StringName
var oxygen_consumption_multiplier: float
var battery_consumption_multiplier: float
var collision_damage_multiplier: float
var pressure_damage_multiplier: float
var crush_grace_multiplier: float
func _init(
p_profile_id: StringName,
p_oxygen_consumption_multiplier: float,
p_battery_consumption_multiplier: float,
p_collision_damage_multiplier: float,
p_pressure_damage_multiplier: float,
p_crush_grace_multiplier: float
) -> void:
profile_id = p_profile_id
oxygen_consumption_multiplier = p_oxygen_consumption_multiplier
battery_consumption_multiplier = p_battery_consumption_multiplier
collision_damage_multiplier = p_collision_damage_multiplier
pressure_damage_multiplier = p_pressure_damage_multiplier
crush_grace_multiplier = p_crush_grace_multiplier
static func exploration():
return new(&"exploration", 0.75, 0.80, 0.65, 0.50, 1.50)
static func standard():
return new(&"standard", 1.0, 1.0, 1.0, 1.0, 1.0)
static func expert():
return new(&"expert", 1.20, 1.15, 1.25, 1.35, 0.75)
func validation_error() -> String:
if profile_id.is_empty():
return "difficulty profile_id is empty"
for value: float in [
oxygen_consumption_multiplier,
battery_consumption_multiplier,
collision_damage_multiplier,
pressure_damage_multiplier,
crush_grace_multiplier,
]:
if not is_finite(value) or value <= 0.0:
return "difficulty multipliers must be finite and positive"
return ""