Implement production vertical slice foundation
This commit is contained in:
1 parent
9d4a89f355
commit
a18e82eb44
104 files changed
+10595
-268
No files matched your search
@@ -0,0 +1,99 @@
|
||||
class_name DiveRulesResolver
|
||||
extends RefCounted
|
||||
|
||||
const DiveDifficultyProfile = preload("res://game/domain/rules/dive_difficulty_profile.gd")
|
||||
const DiveUpgradeEffects = preload("res://game/domain/rules/dive_upgrade_effects.gd")
|
||||
const DiveAccessibilityAdjustments = preload(
|
||||
"res://game/domain/rules/dive_accessibility_adjustments.gd"
|
||||
)
|
||||
const ResolvedDiveRules = preload("res://game/domain/rules/resolved_dive_rules.gd")
|
||||
|
||||
const BASE_BATTERY_CAPACITY_KWH := 100.0
|
||||
const BASE_OXYGEN_CAPACITY_L := 480.0
|
||||
const BASE_OXYGEN_CONSUMPTION_L_PER_MIN := 30.0
|
||||
const BASE_HULL_INTEGRITY := 100.0
|
||||
const BASE_CERTIFIED_DEPTH_M := 60.0
|
||||
|
||||
const BASE_LONGITUDINAL_POWER_KW := 1800.0
|
||||
const BASE_STEERING_POWER_KW := 180.0
|
||||
const BASE_VERTICAL_POWER_KW := 360.0
|
||||
const BASE_HIGH_THRUST_POWER_KW := 900.0
|
||||
const BASE_RETURN_ENERGY_KWH_PER_M := 100.0 / 1200.0
|
||||
const BASE_ASCENT_ENERGY_KWH_PER_M := 0.035
|
||||
|
||||
|
||||
func resolve(
|
||||
difficulty: DiveDifficultyProfile,
|
||||
upgrades: DiveUpgradeEffects = null,
|
||||
accessibility: DiveAccessibilityAdjustments = null
|
||||
) -> ResolvedDiveRules:
|
||||
var resolved_upgrades: DiveUpgradeEffects = (
|
||||
upgrades if upgrades != null else DiveUpgradeEffects.new()
|
||||
)
|
||||
var resolved_accessibility: DiveAccessibilityAdjustments = (
|
||||
accessibility if accessibility != null else DiveAccessibilityAdjustments.new()
|
||||
)
|
||||
if difficulty == null:
|
||||
return null
|
||||
if not difficulty.validation_error().is_empty():
|
||||
return null
|
||||
if not resolved_upgrades.validation_error().is_empty():
|
||||
return null
|
||||
if not resolved_accessibility.validation_error().is_empty():
|
||||
return null
|
||||
|
||||
# Base values, then submarine upgrades, difficulty and gameplay accessibility.
|
||||
var battery_capacity: float = (
|
||||
BASE_BATTERY_CAPACITY_KWH + resolved_upgrades.battery_capacity_bonus_kwh
|
||||
)
|
||||
var oxygen_capacity: float = (
|
||||
BASE_OXYGEN_CAPACITY_L + resolved_upgrades.oxygen_capacity_bonus_l
|
||||
)
|
||||
var hull_integrity: float = BASE_HULL_INTEGRITY + resolved_upgrades.hull_integrity_bonus
|
||||
var certified_depth: float = (
|
||||
BASE_CERTIFIED_DEPTH_M + resolved_upgrades.certified_depth_bonus_m
|
||||
)
|
||||
|
||||
var battery_multiplier: float = (
|
||||
resolved_upgrades.battery_consumption_multiplier
|
||||
* difficulty.battery_consumption_multiplier
|
||||
* resolved_accessibility.battery_consumption_multiplier
|
||||
)
|
||||
var oxygen_multiplier: float = (
|
||||
difficulty.oxygen_consumption_multiplier
|
||||
* resolved_accessibility.oxygen_consumption_multiplier
|
||||
)
|
||||
var pressure_multiplier: float = (
|
||||
resolved_upgrades.pressure_damage_multiplier
|
||||
* difficulty.pressure_damage_multiplier
|
||||
* resolved_accessibility.pressure_damage_multiplier
|
||||
)
|
||||
var collision_multiplier: float = (
|
||||
resolved_upgrades.collision_damage_multiplier
|
||||
* difficulty.collision_damage_multiplier
|
||||
)
|
||||
|
||||
var result: ResolvedDiveRules = ResolvedDiveRules.new(
|
||||
battery_capacity,
|
||||
oxygen_capacity,
|
||||
BASE_OXYGEN_CONSUMPTION_L_PER_MIN * oxygen_multiplier,
|
||||
hull_integrity,
|
||||
certified_depth,
|
||||
BASE_LONGITUDINAL_POWER_KW * battery_multiplier,
|
||||
BASE_STEERING_POWER_KW * battery_multiplier,
|
||||
BASE_VERTICAL_POWER_KW * battery_multiplier,
|
||||
BASE_HIGH_THRUST_POWER_KW * battery_multiplier,
|
||||
BASE_RETURN_ENERGY_KWH_PER_M * battery_multiplier,
|
||||
BASE_ASCENT_ENERGY_KWH_PER_M * battery_multiplier,
|
||||
pressure_multiplier,
|
||||
collision_multiplier,
|
||||
3.5,
|
||||
4.0,
|
||||
0.45,
|
||||
1.5 * difficulty.crush_grace_multiplier,
|
||||
0.30,
|
||||
0.15,
|
||||
0.05,
|
||||
3.0
|
||||
)
|
||||
return result if result.validation_error().is_empty() else null
|
||||
Reference in new issue
Block a user