space-game/src/ship/shipStatus.ts
Michael Mainguy 44c685ac2d Cleanup batch 5: Remove unused exported types
Made 75+ types internal (removed export keyword) across 24 files:
- Analytics event types (kept GameEventMap, GameEventName, GameEventProperties)
- Level config types (QuaternionArray, MaterialConfig, etc.)
- Ship types (SightConfig, InputState, etc.)
- Store state types (AuthState, GameConfigData, etc.)
- Various config interfaces

These types are still used internally but were never imported elsewhere.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-28 18:11:40 -06:00

211 lines
4.7 KiB
TypeScript

import { Observable } from "@babylonjs/core";
/**
* Event data for ship status changes
*/
export interface ShipStatusChangeEvent {
statusType: "fuel" | "hull" | "ammo";
oldValue: number;
newValue: number;
delta: number;
}
/**
* Ship status values container
*/
interface ShipStatusValues {
fuel: number;
hull: number;
ammo: number;
}
/**
* Manages ship status values (fuel, hull integrity, ammo)
* Provides observable events for changes and automatic clamping to 0-1 range
*/
export class ShipStatus {
private _fuel: number = 1.0;
private _hull: number = 1.0;
private _ammo: number = 1.0;
// Maximum values for each resource
private _maxFuel: number = 1.0;
private _maxHull: number = 1.0;
private _maxAmmo: number = 1.0;
// Observable for status changes
public readonly onStatusChanged: Observable<ShipStatusChangeEvent> =
new Observable<ShipStatusChangeEvent>();
/**
* Get current fuel level (0-1)
*/
public get fuel(): number {
return this._fuel;
}
/**
* Get current hull integrity (0-1)
*/
public get hull(): number {
return this._hull;
}
/**
* Get current ammo level (0-1)
*/
public get ammo(): number {
return this._ammo;
}
/**
* Get all status values
*/
public getValues(): ShipStatusValues {
return {
fuel: this._fuel,
hull: this._hull,
ammo: this._ammo,
};
}
/**
* Set fuel level directly (clamped to 0-1)
*/
public setFuel(value: number): void {
const oldValue = this._fuel;
this._fuel = Math.max(0, Math.min(this._maxFuel, value));
if (oldValue !== this._fuel) {
this.onStatusChanged.notifyObservers({
statusType: "fuel",
oldValue,
newValue: this._fuel,
delta: this._fuel - oldValue,
});
}
}
/**
* Set hull integrity directly (clamped to 0-1)
*/
public setHull(value: number): void {
const oldValue = this._hull;
this._hull = Math.max(0, Math.min(this._maxHull, value));
if (oldValue !== this._hull) {
this.onStatusChanged.notifyObservers({
statusType: "hull",
oldValue,
newValue: this._hull,
delta: this._hull - oldValue,
});
}
}
/**
* Set ammo level directly (clamped to 0-1)
*/
public setAmmo(value: number): void {
const oldValue = this._ammo;
this._ammo = Math.max(0, Math.min(this._maxAmmo, value));
if (oldValue !== this._ammo) {
this.onStatusChanged.notifyObservers({
statusType: "ammo",
oldValue,
newValue: this._ammo,
delta: this._ammo - oldValue,
});
}
}
/**
* Increment fuel by delta amount
*/
public addFuel(delta: number): void {
this.setFuel(this._fuel + delta);
}
/**
* Decrement fuel by delta amount
*/
public consumeFuel(delta: number): void {
this.setFuel(this._fuel - delta);
}
/**
* Damage hull by delta amount
*/
public damageHull(delta: number): void {
this.setHull(this._hull - delta);
}
/**
* Repair hull by delta amount
*/
public repairHull(delta: number): void {
this.setHull(this._hull + delta);
}
/**
* Increment ammo by delta amount
*/
public addAmmo(delta: number): void {
this.setAmmo(this._ammo + delta);
}
/**
* Decrement ammo by delta amount (fire weapon)
*/
public consumeAmmo(delta: number): void {
this.setAmmo(this._ammo - delta);
}
/**
* Check if fuel is depleted
*/
public isFuelEmpty(): boolean {
return this._fuel <= 0;
}
/**
* Check if hull is destroyed
*/
public isDestroyed(): boolean {
return this._hull <= 0;
}
/**
* Check if ammo is depleted
*/
public isAmmoEmpty(): boolean {
return this._ammo <= 0;
}
/**
* Reset all values to full
*/
public reset(): void {
this.setFuel(this._maxFuel);
this.setHull(this._maxHull);
this.setAmmo(this._maxAmmo);
}
/**
* Set maximum values for resources
*/
public setMaxValues(fuel?: number, hull?: number, ammo?: number): void {
if (fuel !== undefined) this._maxFuel = fuel;
if (hull !== undefined) this._maxHull = hull;
if (ammo !== undefined) this._maxAmmo = ammo;
}
/**
* Dispose observables
*/
public dispose(): void {
this.onStatusChanged.clear();
}
}