@gamebob/axon-surge 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/axon-surge.js +1943 -1325
  2. package/dist/config/GameConfig.d.ts +27 -1
  3. package/dist/config/GameConfig.d.ts.map +1 -1
  4. package/dist/content/ContentRegistry.d.ts +25 -0
  5. package/dist/content/ContentRegistry.d.ts.map +1 -0
  6. package/dist/content/ContentTypes.d.ts +67 -0
  7. package/dist/content/ContentTypes.d.ts.map +1 -0
  8. package/dist/content/DefaultContentRegistry.d.ts +3 -0
  9. package/dist/content/DefaultContentRegistry.d.ts.map +1 -0
  10. package/dist/content/DefinitionRegistry.d.ts +22 -0
  11. package/dist/content/DefinitionRegistry.d.ts.map +1 -0
  12. package/dist/content/EnemyBehavior.d.ts +70 -0
  13. package/dist/content/EnemyBehavior.d.ts.map +1 -0
  14. package/dist/content/EnemyBehaviors.d.ts +4 -0
  15. package/dist/content/EnemyBehaviors.d.ts.map +1 -0
  16. package/dist/content/EnemyDefinitions.d.ts +4 -0
  17. package/dist/content/EnemyDefinitions.d.ts.map +1 -0
  18. package/dist/core/GameEngine.d.ts +5 -0
  19. package/dist/core/GameEngine.d.ts.map +1 -1
  20. package/dist/director/InteractiveTutorial.d.ts +6 -0
  21. package/dist/director/InteractiveTutorial.d.ts.map +1 -1
  22. package/dist/director/SpawnerPatterns.d.ts +10 -7
  23. package/dist/director/SpawnerPatterns.d.ts.map +1 -1
  24. package/dist/director/WaveDirector.d.ts +5 -1
  25. package/dist/director/WaveDirector.d.ts.map +1 -1
  26. package/dist/entities/CoreEntity.d.ts +3 -1
  27. package/dist/entities/CoreEntity.d.ts.map +1 -1
  28. package/dist/entities/EnemyEntity.d.ts +7 -0
  29. package/dist/entities/EnemyEntity.d.ts.map +1 -1
  30. package/dist/entities/ExperienceOrb.d.ts +26 -3
  31. package/dist/entities/ExperienceOrb.d.ts.map +1 -1
  32. package/dist/factory/EntityFactory.d.ts +5 -2
  33. package/dist/factory/EntityFactory.d.ts.map +1 -1
  34. package/dist/input/InputManager.d.ts +3 -1
  35. package/dist/input/InputManager.d.ts.map +1 -1
  36. package/dist/physics/EffectClusterer.d.ts +18 -0
  37. package/dist/physics/EffectClusterer.d.ts.map +1 -0
  38. package/dist/physics/PhysicsEngine.d.ts +5 -1
  39. package/dist/physics/PhysicsEngine.d.ts.map +1 -1
  40. package/dist/physics/handlers/ChainReactionHelper.d.ts +2 -2
  41. package/dist/physics/handlers/ChainReactionHelper.d.ts.map +1 -1
  42. package/dist/physics/handlers/CoreCollisionHandler.d.ts +3 -1
  43. package/dist/physics/handlers/CoreCollisionHandler.d.ts.map +1 -1
  44. package/dist/physics/handlers/ShieldCollisionHandler.d.ts +3 -1
  45. package/dist/physics/handlers/ShieldCollisionHandler.d.ts.map +1 -1
  46. package/dist/physics/handlers/ThrownCollisionHandler.d.ts +3 -1
  47. package/dist/physics/handlers/ThrownCollisionHandler.d.ts.map +1 -1
  48. package/dist/physics/handlers/ToxicPoolPhysicsHandler.d.ts +2 -1
  49. package/dist/physics/handlers/ToxicPoolPhysicsHandler.d.ts.map +1 -1
  50. package/dist/physics/handlers/VortexPhysicsHandler.d.ts +3 -2
  51. package/dist/physics/handlers/VortexPhysicsHandler.d.ts.map +1 -1
  52. package/dist/powerups/PowerUpRegistry.d.ts +10 -3
  53. package/dist/powerups/PowerUpRegistry.d.ts.map +1 -1
  54. package/dist/powerups/PowerUpTypes.d.ts +6 -1
  55. package/dist/powerups/PowerUpTypes.d.ts.map +1 -1
  56. package/dist/render/CanvasRenderer.d.ts +6 -2
  57. package/dist/render/CanvasRenderer.d.ts.map +1 -1
  58. package/dist/render/EnemyShapeRenderer.d.ts +17 -0
  59. package/dist/render/EnemyShapeRenderer.d.ts.map +1 -0
  60. package/dist/render/TutorialArrowRenderer.d.ts.map +1 -1
  61. package/dist/strategies/FragmentClusterStrategy.d.ts.map +1 -1
  62. package/dist/strategies/GravityParasiteStrategy.d.ts.map +1 -1
  63. package/dist/strategies/HeavyShieldStrategy.d.ts.map +1 -1
  64. package/dist/strategies/ImpactStrategy.d.ts +4 -0
  65. package/dist/strategies/ImpactStrategy.d.ts.map +1 -1
  66. package/dist/strategies/PiercingCellStrategy.d.ts.map +1 -1
  67. package/dist/strategies/ToxicSporeStrategy.d.ts.map +1 -1
  68. package/dist/styles.css +1 -1
  69. package/dist/theme/GameColors.d.ts +19 -0
  70. package/dist/theme/GameColors.d.ts.map +1 -0
  71. package/dist/theme/ThemeManager.d.ts.map +1 -1
  72. package/dist/types/game.d.ts +5 -1
  73. package/dist/types/game.d.ts.map +1 -1
  74. package/dist/ui/HUDOverlay.d.ts +2 -6
  75. package/dist/ui/HUDOverlay.d.ts.map +1 -1
  76. package/dist/ui/ProgressBar.d.ts +8 -4
  77. package/dist/ui/ProgressBar.d.ts.map +1 -1
  78. package/package.json +1 -1
@@ -4,6 +4,10 @@ export interface CoreConfig {
4
4
  radius: number;
5
5
  vampirismHealProgressRate: number;
6
6
  hasOffscreenIndicators: boolean;
7
+ autoDeflectFragments: boolean;
8
+ fragmentDeflectionLookahead: number;
9
+ fragmentDeflectionSpeed: number;
10
+ fragmentDeflectionCooldown: number;
7
11
  }
8
12
  export interface ToxicPoolConfig {
9
13
  baseRadius: number;
@@ -33,6 +37,9 @@ export interface ShieldConfig {
33
37
  export interface ClusterConfig {
34
38
  fragmentCount: number;
35
39
  hasHoming: boolean;
40
+ explosionParticleCount: number;
41
+ maxExplosionShockwaves: number;
42
+ maxExplosionFloatingTexts: number;
36
43
  }
37
44
  export interface PiercerConfig {
38
45
  terminalAoERadius: number;
@@ -45,6 +52,23 @@ export interface MagnetConfig {
45
52
  corePickupRadius: number;
46
53
  absorptionSpeed: number;
47
54
  }
55
+ export interface ExperienceConfig {
56
+ mergeDistance: number;
57
+ magneticAttractionDistance: number;
58
+ magneticAttractionStrength: number;
59
+ baseRadius: number;
60
+ radiusGrowthPerLevel: number;
61
+ maxRadius: number;
62
+ mergeDuration: number;
63
+ blueThreshold: number;
64
+ yellowThreshold: number;
65
+ redThreshold: number;
66
+ }
67
+ export interface EffectAggregationConfig {
68
+ toxicPoolMergePadding: number;
69
+ gravityVortexMergePadding: number;
70
+ shockwaveMergeDistance: number;
71
+ }
48
72
  export interface GameConfigData {
49
73
  core: CoreConfig;
50
74
  toxicPool: ToxicPoolConfig;
@@ -53,12 +77,14 @@ export interface GameConfigData {
53
77
  cluster: ClusterConfig;
54
78
  piercer: PiercerConfig;
55
79
  magnet: MagnetConfig;
80
+ experience: ExperienceConfig;
81
+ effectAggregation: EffectAggregationConfig;
56
82
  }
57
83
  export declare const DEFAULT_GAME_CONFIG: GameConfigData;
58
84
  export declare class GameConfigManager {
59
85
  private static instance;
60
86
  private config;
61
- private constructor();
87
+ constructor();
62
88
  static getInstance(): GameConfigManager;
63
89
  getConfig(): GameConfigData;
64
90
  updateConfig(partial: Partial<GameConfigData>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"GameConfig.d.ts","sourceRoot":"","sources":["../../src/config/GameConfig.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,yBAAyB,EAAE,MAAM,CAAC;IAClC,sBAAsB,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,eAAe,CAAC;IAC3B,aAAa,EAAE,mBAAmB,CAAC;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,eAAO,MAAM,mBAAmB,EAAE,cAgDjC,CAAC;AAEF,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAC3C,OAAO,CAAC,MAAM,CAAiB;IAE/B,OAAO;WAIO,WAAW,IAAI,iBAAiB;IAOvC,SAAS,IAAI,cAAc;IAI3B,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAOpD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIvC,WAAW,CAAC,MAAM,GAAE,MAAU,GAAG,IAAI;IAIrC,cAAc,IAAI,IAAI;CAGhC"}
1
+ {"version":3,"file":"GameConfig.d.ts","sourceRoot":"","sources":["../../src/config/GameConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { DefinitionRegistry } from "./DefinitionRegistry";
2
+ import type { AreaDefinition, BossDefinition, BossRewardDefinition, ContentCatalog, CoreDefinition, EnemyDefinition, EnemyVariantDefinition, SpawnerPatternDefinition, SynergyDefinition } from "./ContentTypes";
3
+ import type { PowerUpDefinition } from "../powerups/PowerUpTypes";
4
+ /**
5
+ * Catalog of all extensible game content.
6
+ *
7
+ * The registries are intentionally separate so future systems can validate references
8
+ * without making the game loop know how content was authored.
9
+ */
10
+ export declare class ContentRegistry {
11
+ readonly enemies: DefinitionRegistry<EnemyDefinition>;
12
+ readonly variants: DefinitionRegistry<EnemyVariantDefinition>;
13
+ readonly powerUps: DefinitionRegistry<PowerUpDefinition>;
14
+ readonly synergies: DefinitionRegistry<SynergyDefinition>;
15
+ readonly areas: DefinitionRegistry<AreaDefinition>;
16
+ readonly bosses: DefinitionRegistry<BossDefinition>;
17
+ readonly bossRewards: DefinitionRegistry<BossRewardDefinition>;
18
+ readonly cores: DefinitionRegistry<CoreDefinition>;
19
+ readonly spawnerPatterns: DefinitionRegistry<SpawnerPatternDefinition>;
20
+ readonly tutorial: ContentCatalog["tutorial"];
21
+ constructor(catalog?: ContentCatalog);
22
+ /** Validate references once a complete catalog has been assembled. */
23
+ validate(): void;
24
+ }
25
+ //# sourceMappingURL=ContentRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentRegistry.d.ts","sourceRoot":"","sources":["../../src/content/ContentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EACR,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,EACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;;;;GAKG;AACH,qBAAa,eAAe;IACxB,SAAgB,OAAO,sCAAoD;IAC3E,SAAgB,QAAQ,6CAAmE;IAC3F,SAAgB,QAAQ,wCAAyD;IACjF,SAAgB,SAAS,wCAAwD;IACjF,SAAgB,KAAK,qCAAkD;IACvE,SAAgB,MAAM,qCAAkD;IACxE,SAAgB,WAAW,2CAA+D;IAC1F,SAAgB,KAAK,qCAAkD;IACvE,SAAgB,eAAe,+CAAuE;IACtG,SAAgB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;gBAElC,OAAO,GAAE,cAAmB;IAa/C,sEAAsE;IAC/D,QAAQ,IAAI,IAAI;CAiC1B"}
@@ -0,0 +1,67 @@
1
+ import type { IImpactStrategy } from "../strategies/ImpactStrategy";
2
+ import type { EnemyType } from "../types/game";
3
+ import type { PowerUpDefinition } from "../powerups/PowerUpTypes";
4
+ import type { IdentifiedDefinition } from "./DefinitionRegistry";
5
+ import type { EnemyBehavior } from "./EnemyBehavior";
6
+ export interface EnemyDefinition extends IdentifiedDefinition {
7
+ readonly id: EnemyType;
8
+ readonly speed: number;
9
+ readonly maxSpeed: number;
10
+ readonly radius: number;
11
+ readonly hitRadiusPadding?: number;
12
+ readonly color: string;
13
+ readonly canBeGrabbed: boolean;
14
+ readonly initialRotation: "none" | "random";
15
+ readonly impactStrategyFactory?: () => IImpactStrategy;
16
+ readonly behavior: EnemyBehavior;
17
+ readonly spawnWeight?: number;
18
+ readonly ambientSpawn?: boolean;
19
+ readonly synergyKey?: string;
20
+ }
21
+ export interface EnemyVariantDefinition extends IdentifiedDefinition {
22
+ readonly baseEnemyId: EnemyType;
23
+ }
24
+ export interface SynergyDefinition extends IdentifiedDefinition {
25
+ readonly requiredIds: readonly string[];
26
+ readonly resultIds: readonly string[];
27
+ }
28
+ export interface AreaDefinition extends IdentifiedDefinition {
29
+ readonly baseEnemyIds: readonly EnemyType[];
30
+ readonly additionalEnemyIds: readonly EnemyType[];
31
+ readonly ruleIds: readonly string[];
32
+ readonly bossId?: string;
33
+ }
34
+ export interface BossDefinition extends IdentifiedDefinition {
35
+ readonly mechanicId: string;
36
+ readonly areaId?: string;
37
+ readonly rewardId?: string;
38
+ }
39
+ export interface BossRewardDefinition extends IdentifiedDefinition {
40
+ readonly temporaryPowerUpIds: readonly string[];
41
+ readonly permanentUnlockIds: readonly string[];
42
+ }
43
+ export interface CoreDefinition extends IdentifiedDefinition {
44
+ readonly modifierIds: readonly string[];
45
+ }
46
+ export interface SpawnerPatternDefinition extends IdentifiedDefinition {
47
+ readonly algorithmId: string;
48
+ readonly enemyIds: readonly EnemyType[];
49
+ readonly weight: number;
50
+ }
51
+ export interface TutorialDefinition {
52
+ readonly launcherEnemyId: EnemyType;
53
+ readonly targetEnemyId: EnemyType;
54
+ }
55
+ export interface ContentCatalog {
56
+ readonly enemies?: readonly EnemyDefinition[];
57
+ readonly variants?: readonly EnemyVariantDefinition[];
58
+ readonly powerUps?: readonly PowerUpDefinition[];
59
+ readonly synergies?: readonly SynergyDefinition[];
60
+ readonly areas?: readonly AreaDefinition[];
61
+ readonly bosses?: readonly BossDefinition[];
62
+ readonly bossRewards?: readonly BossRewardDefinition[];
63
+ readonly cores?: readonly CoreDefinition[];
64
+ readonly spawnerPatterns?: readonly SpawnerPatternDefinition[];
65
+ readonly tutorial?: TutorialDefinition;
66
+ }
67
+ //# sourceMappingURL=ContentTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentTypes.d.ts","sourceRoot":"","sources":["../../src/content/ContentTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ContentRegistry } from "./ContentRegistry";
2
+ export declare const DEFAULT_CONTENT_REGISTRY: ContentRegistry;
3
+ //# sourceMappingURL=DefaultContentRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultContentRegistry.d.ts","sourceRoot":"","sources":["../../src/content/DefaultContentRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,eAAO,MAAM,wBAAwB,iBAWnC,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface IdentifiedDefinition {
2
+ readonly id: string;
3
+ }
4
+ /**
5
+ * Small, strict registry used by game content definitions.
6
+ *
7
+ * Registries deliberately reject duplicate and empty ids so content cannot silently
8
+ * replace another definition while the catalog grows.
9
+ */
10
+ export declare class DefinitionRegistry<T extends IdentifiedDefinition> {
11
+ private readonly kind;
12
+ private readonly definitions;
13
+ constructor(kind: string);
14
+ register(definition: T): void;
15
+ registerMany(definitions: readonly T[]): void;
16
+ has(id: string): boolean;
17
+ get(id: string): T | undefined;
18
+ require(id: string): T;
19
+ values(): T[];
20
+ get size(): number;
21
+ }
22
+ //# sourceMappingURL=DefinitionRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefinitionRegistry.d.ts","sourceRoot":"","sources":["../../src/content/DefinitionRegistry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,oBAAoB;IAGvC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;gBAEhB,IAAI,EAAE,MAAM;IAEzC,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI;IAY7B,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI;IAM7C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC;IAQtB,MAAM,IAAI,CAAC,EAAE;IAIpB,IAAW,IAAI,IAAI,MAAM,CAExB;CACJ"}
@@ -0,0 +1,70 @@
1
+ import type { GameConfigData } from "../config/GameConfig";
2
+ import type { EnemyEntity } from "../entities/EnemyEntity";
3
+ import type { EntityFactory } from "../factory/EntityFactory";
4
+ import type { JuiceEffects } from "../render/JuiceEffects";
5
+ import type { EventBus } from "../core/EventBus";
6
+ import type { SpatialHash } from "../physics/SpatialHash";
7
+ import type { EnemyType, FloatingText, GravityVortex, Particle, Shockwave, ToxicPool, Vector2D } from "../types/game";
8
+ export interface EnemyReleaseContext {
9
+ readonly config: GameConfigData;
10
+ }
11
+ export interface EnemyUpdateContext {
12
+ readonly dt: number;
13
+ readonly enemies: readonly EnemyEntity[];
14
+ readonly config: GameConfigData;
15
+ }
16
+ export interface EnemyEffectContext {
17
+ readonly enemies: EnemyEntity[];
18
+ readonly pools: ToxicPool[];
19
+ readonly vortices: GravityVortex[];
20
+ readonly shockwaves: Shockwave[];
21
+ readonly particles: Particle[];
22
+ readonly floatingTexts: FloatingText[];
23
+ readonly eventBus: EventBus;
24
+ readonly juice: JuiceEffects;
25
+ readonly spatialHash: SpatialHash<EnemyEntity>;
26
+ readonly factory: EntityFactory;
27
+ readonly config: GameConfigData;
28
+ readonly width: number;
29
+ readonly height: number;
30
+ readonly currentThrowState: {
31
+ kills: number;
32
+ pos: Vector2D | null;
33
+ };
34
+ readonly onKill: () => void;
35
+ readonly killEnemy: (enemy: EnemyEntity, angle: number) => void;
36
+ }
37
+ export interface EnemyCollisionContext extends EnemyEffectContext {
38
+ readonly thrownEnemy: EnemyEntity;
39
+ readonly targetEnemy: EnemyEntity;
40
+ readonly impactAngle: number;
41
+ }
42
+ export interface EnemyChainReactionContext extends EnemyEffectContext {
43
+ readonly enemy: EnemyEntity;
44
+ readonly angle: number;
45
+ }
46
+ /**
47
+ * Runtime extension point for enemy behaviour.
48
+ *
49
+ * Systems own the lifecycle; content owns the exceptional behaviour. Adding an
50
+ * enemy therefore means registering data and hooks, not editing physics/input.
51
+ */
52
+ export interface EnemyBehavior {
53
+ readonly rendererId: string;
54
+ readonly rotatesWithVelocity: boolean;
55
+ readonly canBeChainReactionTarget: boolean;
56
+ /** Marks fragments that the core may automatically deflect when threatened. */
57
+ readonly autoDeflectFromCore?: boolean;
58
+ readonly onRelease?: (enemy: EnemyEntity, context: EnemyReleaseContext) => void;
59
+ readonly onThrownUpdate?: (enemy: EnemyEntity, context: EnemyUpdateContext) => void;
60
+ readonly onOutOfBounds?: (enemy: EnemyEntity, context: EnemyEffectContext) => void;
61
+ readonly onCollision?: (context: EnemyCollisionContext) => boolean;
62
+ /** Whether a thrown enemy remains active after its collision strategy resolves. */
63
+ readonly continuesThroughTargets?: boolean;
64
+ readonly onChainReaction?: (context: EnemyChainReactionContext) => void;
65
+ readonly canInteractWithHazard?: (enemy: EnemyEntity, hazardId: string) => boolean;
66
+ readonly synergyKey?: (enemy: EnemyEntity) => string;
67
+ readonly spawnedEnemyIds?: readonly EnemyType[];
68
+ }
69
+ export declare const DEFAULT_ENEMY_BEHAVIOR: EnemyBehavior;
70
+ //# sourceMappingURL=EnemyBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnemyBehavior.d.ts","sourceRoot":"","sources":["../../src/content/EnemyBehavior.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { EnemyBehavior } from "./EnemyBehavior";
2
+ export declare const DEFAULT_ENEMY_BEHAVIORS: Record<string, EnemyBehavior>;
3
+ export declare const getDefaultEnemyBehavior: (id: string) => EnemyBehavior;
4
+ //# sourceMappingURL=EnemyBehaviors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnemyBehaviors.d.ts","sourceRoot":"","sources":["../../src/content/EnemyBehaviors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAiH,MAAM,iBAAiB,CAAC;AA6NpK,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAoDjE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,IAAI,MAAM,KAAG,aAKpD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { EnemyDefinition } from "./ContentTypes";
2
+ /** Current enemy catalog. New enemy content should be added as a definition here first. */
3
+ export declare const DEFAULT_ENEMY_DEFINITIONS: readonly EnemyDefinition[];
4
+ //# sourceMappingURL=EnemyDefinitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnemyDefinitions.d.ts","sourceRoot":"","sources":["../../src/content/EnemyDefinitions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,2FAA2F;AAC3F,eAAO,MAAM,yBAAyB,EAAE,SAAS,eAAe,EA8E/D,CAAC"}
@@ -27,6 +27,10 @@ export declare class GameEngine {
27
27
  private tutorialOverlay;
28
28
  private progressBar;
29
29
  private performanceAudit;
30
+ private readonly content;
31
+ private readonly entityFactory;
32
+ private readonly configManager;
33
+ private readonly powerUpRegistry;
30
34
  private core;
31
35
  private enemies;
32
36
  private ambientEnemies;
@@ -56,6 +60,7 @@ export declare class GameEngine {
56
60
  private resizeCanvas;
57
61
  private setupEvents;
58
62
  startGame(): void;
63
+ private clearTransientRunState;
59
64
  private update;
60
65
  private triggerLevelUp;
61
66
  private presentNextLevelUp;
@@ -1 +1 @@
1
- {"version":3,"file":"GameEngine.d.ts","sourceRoot":"","sources":["../../src/core/GameEngine.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAgB,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAMjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;CAC3B;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAE3C,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAGyB;IAC7D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CACsD;IAC9F,OAAO,CAAC,gBAAgB,CAAa;IAErC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,OAAO,EAAE,iBAAiB;IAoE/B,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKrC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI5B,WAAW,IAAI,QAAQ;IAIvB,QAAQ,IAAI,KAAK;IAIxB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,WAAW;IA6CZ,SAAS,IAAI,IAAI;IAmCxB,OAAO,CAAC,MAAM;IAoLd,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;IA+C1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;IA+C5B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,MAAM;IA+Bd,OAAO,CAAC,cAAc;IAIf,OAAO,IAAI,IAAI;CAKzB"}
1
+ {"version":3,"file":"GameEngine.d.ts","sourceRoot":"","sources":["../../src/core/GameEngine.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAgB,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAQjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;CAC3B;AAED,qBAAa,UAAU;IACnB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IACzD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2C;IAE3E,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAGyB;IAC7D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CACsD;IAC9F,OAAO,CAAC,gBAAgB,CAAa;IAErC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,OAAO,EAAE,iBAAiB;IAuE/B,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKrC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI5B,WAAW,IAAI,QAAQ;IAIvB,QAAQ,IAAI,KAAK;IAIxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,WAAW;IA6CZ,SAAS,IAAI,IAAI;IA8BxB,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,MAAM;IAqLd,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;IA+C1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;IAwD5B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,MAAM;IAiCd,OAAO,CAAC,cAAc;IAIf,OAAO,IAAI,IAAI;CAKzB"}
@@ -1,5 +1,11 @@
1
1
  import { EnemyEntity } from "../entities/EnemyEntity";
2
+ import { EntityFactory } from "../factory/EntityFactory";
3
+ import type { EnemyType } from "../types/game";
2
4
  export declare class InteractiveTutorial {
5
+ private readonly factory;
6
+ private readonly launcherType;
7
+ private readonly targetType;
8
+ constructor(factory: EntityFactory, launcherType: EnemyType, targetType: EnemyType);
3
9
  isActive: boolean;
4
10
  showWarning: boolean;
5
11
  private dummyLauncher;
@@ -1 +1 @@
1
- {"version":3,"file":"InteractiveTutorial.d.ts","sourceRoot":"","sources":["../../src/director/InteractiveTutorial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,qBAAa,mBAAmB;IACrB,QAAQ,EAAE,OAAO,CAAS;IAC1B,WAAW,EAAE,OAAO,CAAS;IACpC,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,gBAAgB,CAA4B;IAE7C,iBAAiB,IAAI,OAAO;IAQ5B,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM1C,WAAW,IAAI,WAAW,GAAG,IAAI;IAIjC,SAAS,IAAI,WAAW,GAAG,IAAI;IAI/B,OAAO,IAAI,CAAC,GAAG,CAAC;IAOhB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,IAAI;IA+BxE,MAAM,CACT,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,IAAI,EACtB,cAAc,CAAC,EAAE,MAAM,IAAI,GAC5B,IAAI;IA0DP,OAAO,CAAC,YAAY;IAab,QAAQ,IAAI,IAAI;CAI1B"}
1
+ {"version":3,"file":"InteractiveTutorial.d.ts","sourceRoot":"","sources":["../../src/director/InteractiveTutorial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI/C,qBAAa,mBAAmB;IACT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAiB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAAa,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAA7F,OAAO,EAAE,aAAa,EAAmB,YAAY,EAAE,SAAS,EAAmB,UAAU,EAAE,SAAS;IACrI,QAAQ,EAAE,OAAO,CAAS;IAC1B,WAAW,EAAE,OAAO,CAAS;IACpC,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,gBAAgB,CAA4B;IAE7C,iBAAiB,IAAI,OAAO;IAQ5B,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM1C,WAAW,IAAI,WAAW,GAAG,IAAI;IAIjC,SAAS,IAAI,WAAW,GAAG,IAAI;IAI/B,OAAO,IAAI,CAAC,GAAG,CAAC;IAOhB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,IAAI;IA+BxE,MAAM,CACT,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,IAAI,EACtB,cAAc,CAAC,EAAE,MAAM,IAAI,GAC5B,IAAI;IA0DP,OAAO,CAAC,YAAY;IAab,QAAQ,IAAI,IAAI;CAI1B"}
@@ -1,13 +1,16 @@
1
1
  import { EnemyEntity } from "../entities/EnemyEntity";
2
2
  import { EnemyPool } from "../pool/EnemyPool";
3
- import type { Vector2D } from "../types/game";
3
+ import type { EntityFactory } from "../factory/EntityFactory";
4
+ import type { Vector2D, EnemyType } from "../types/game";
4
5
  export declare class SpawnerPatterns {
6
+ private static readonly algorithms;
7
+ static spawn(factory: EntityFactory, pool: EnemyPool, algorithmId: string, enemyIds: readonly EnemyType[], corePos: Vector2D, width: number, height: number): EnemyEntity[];
5
8
  static getOffscreenPosition(width: number, height: number): Vector2D;
6
- static spawnCircleOfDeath(pool: EnemyPool, corePos: Vector2D, width: number, height: number): EnemyEntity[];
7
- static spawnDenseCluster(pool: EnemyPool, width: number, height: number, corePos: Vector2D): EnemyEntity[];
8
- static spawnSineSnake(pool: EnemyPool, width: number, height: number, corePos: Vector2D): EnemyEntity[];
9
- static spawnDoubleSpiral(pool: EnemyPool, width: number, height: number, corePos: Vector2D): EnemyEntity[];
10
- static spawnMarchingWall(pool: EnemyPool, width: number, height: number, corePos: Vector2D): EnemyEntity[];
11
- static spawnCrossfireStreams(pool: EnemyPool, width: number, height: number, corePos: Vector2D): EnemyEntity[];
9
+ static spawnCircleOfDeath(factory: EntityFactory, pool: EnemyPool, enemyIds: readonly EnemyType[], corePos: Vector2D, width: number, height: number): EnemyEntity[];
10
+ static spawnDenseCluster(factory: EntityFactory, pool: EnemyPool, enemyIds: readonly EnemyType[], width: number, height: number, corePos: Vector2D): EnemyEntity[];
11
+ static spawnSineSnake(factory: EntityFactory, pool: EnemyPool, enemyIds: readonly EnemyType[], width: number, height: number, corePos: Vector2D): EnemyEntity[];
12
+ static spawnDoubleSpiral(factory: EntityFactory, pool: EnemyPool, enemyIds: readonly EnemyType[], width: number, height: number, corePos: Vector2D): EnemyEntity[];
13
+ static spawnMarchingWall(factory: EntityFactory, pool: EnemyPool, enemyIds: readonly EnemyType[], width: number, height: number, corePos: Vector2D): EnemyEntity[];
14
+ static spawnCrossfireStreams(factory: EntityFactory, pool: EnemyPool, enemyIds: readonly EnemyType[], width: number, height: number, corePos: Vector2D): EnemyEntity[];
12
15
  }
13
16
  //# sourceMappingURL=SpawnerPatterns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpawnerPatterns.d.ts","sourceRoot":"","sources":["../../src/director/SpawnerPatterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAC;AAEzD,qBAAa,eAAe;WACV,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ;WAS7D,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;WAwBpG,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;WA+BnG,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;WAiBhG,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;WAkBnG,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;WAsBnG,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;CAgBxH"}
1
+ {"version":3,"file":"SpawnerPatterns.d.ts","sourceRoot":"","sources":["../../src/director/SpawnerPatterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEzD,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAOhC;WAEY,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;WAIpK,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ;WAS7D,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE;WAuB5J,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;WA+B3J,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;WAiBxJ,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;WAkB3J,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;WAsB3J,qBAAqB,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW,EAAE;CAgBhL"}
@@ -1,13 +1,17 @@
1
1
  import type { Vector2D } from "../types/game";
2
2
  import { EnemyEntity } from "../entities/EnemyEntity";
3
+ import type { EntityFactory } from "../factory/EntityFactory";
4
+ import type { ContentRegistry } from "../content/ContentRegistry";
3
5
  export declare class WaveDirector {
6
+ private readonly factory;
7
+ private readonly content;
4
8
  wave: number;
5
9
  private pool;
6
10
  private spawnTimer;
7
11
  private waveTimer;
8
12
  private patternCooldown;
9
13
  private initialGracePeriod;
10
- constructor();
14
+ constructor(factory: EntityFactory, content: ContentRegistry);
11
15
  reset(): void;
12
16
  update(dt: number, activeEnemies: EnemyEntity[], width: number, height: number, corePos: Vector2D): EnemyEntity | null;
13
17
  private spawnSingleEnemy;
@@ -1 +1 @@
1
- {"version":3,"file":"WaveDirector.d.ts","sourceRoot":"","sources":["../../src/director/WaveDirector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,qBAAa,YAAY;IACd,IAAI,EAAE,MAAM,CAAK;IACxB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,kBAAkB,CAAe;;IAMlC,KAAK,IAAI,IAAI;IAOb,MAAM,CACT,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,WAAW,EAAE,EAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,QAAQ,GAClB,WAAW,GAAG,IAAI;IAgCrB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,sBAAsB;CAqDjC"}
1
+ {"version":3,"file":"WaveDirector.d.ts","sourceRoot":"","sources":["../../src/director/WaveDirector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAa,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,qBAAa,YAAY;IAQT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAiB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPtE,IAAI,EAAE,MAAM,CAAK;IACxB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,kBAAkB,CAAe;gBAEZ,OAAO,EAAE,aAAa,EAAmB,OAAO,EAAE,eAAe;IAIvF,KAAK,IAAI,IAAI;IAOb,MAAM,CACT,EAAE,EAAE,MAAM,EACV,aAAa,EAAE,WAAW,EAAE,EAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,QAAQ,GAClB,WAAW,GAAG,IAAI;IAgCrB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,sBAAsB;CAqDjC"}
@@ -1,5 +1,7 @@
1
1
  import type { Vector2D } from "../types/game";
2
+ import { GameConfigManager } from "../config/GameConfig";
2
3
  export declare class CoreEntity {
4
+ private readonly configManager;
3
5
  position: Vector2D;
4
6
  radius: number;
5
7
  integrity: number;
@@ -15,7 +17,7 @@ export declare class CoreEntity {
15
17
  };
16
18
  powerUpCount: number;
17
19
  collectedPowerUpColors: string[];
18
- constructor(x: number, y: number);
20
+ constructor(x: number, y: number, configManager: GameConfigManager);
19
21
  absorbPowerUpColor(hexColor: string, weight?: number): void;
20
22
  getHitboxRadius(): number;
21
23
  getColorHex(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"CoreEntity.d.ts","sourceRoot":"","sources":["../../src/entities/CoreEntity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,qBAAa,UAAU;IACZ,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAK;IACvB,WAAW,EAAE,MAAM,CAAC;IAEpB,oBAAoB,EAAE,MAAM,CAAK;IACjC,0BAA0B,EAAE,MAAM,CAAC;IAEnC,WAAW,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAA4B;IAC5E,YAAY,EAAE,MAAM,CAAK;IACzB,sBAAsB,EAAE,MAAM,EAAE,CAAM;gBAEjC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAUzB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAa,GAAG,IAAI;IAejE,eAAe,IAAI,MAAM;IAOzB,WAAW,IAAI,MAAM;IAOrB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOxB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOxC,cAAc,EAAE,MAAM,CAAK;IAE3B,aAAa,IAAI,OAAO;IAgBxB,IAAI,CAAC,MAAM,GAAE,MAAU,GAAG,OAAO;IASjC,UAAU,CAAC,MAAM,GAAE,MAAU,GAAG,IAAI;IAKpC,UAAU,IAAI,OAAO;IAYrB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;CAc3C"}
1
+ {"version":3,"file":"CoreEntity.d.ts","sourceRoot":"","sources":["../../src/entities/CoreEntity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBAAa,UAAU;IAesB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAdhE,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAK;IACvB,WAAW,EAAE,MAAM,CAAC;IAEpB,oBAAoB,EAAE,MAAM,CAAK;IACjC,0BAA0B,EAAE,MAAM,CAAC;IAEnC,WAAW,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAA4B;IAC5E,YAAY,EAAE,MAAM,CAAK;IACzB,sBAAsB,EAAE,MAAM,EAAE,CAAM;gBAE1B,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAmB,aAAa,EAAE,iBAAiB;IAUnF,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAa,GAAG,IAAI;IAejE,eAAe,IAAI,MAAM;IAOzB,WAAW,IAAI,MAAM;IAOrB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAOxB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOxC,cAAc,EAAE,MAAM,CAAK;IAE3B,aAAa,IAAI,OAAO;IAgBxB,IAAI,CAAC,MAAM,GAAE,MAAU,GAAG,OAAO;IASjC,UAAU,CAAC,MAAM,GAAE,MAAU,GAAG,IAAI;IAKpC,UAAU,IAAI,OAAO;IAYrB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;CAc3C"}
@@ -1,5 +1,6 @@
1
1
  import type { Vector2D, EnemyType } from "../types/game";
2
2
  import type { IImpactStrategy } from "../strategies/ImpactStrategy";
3
+ import type { EnemyBehavior } from "../content/EnemyBehavior";
3
4
  export type DeathType = "none" | "dissolve" | "sliced";
4
5
  export declare class EnemyEntity {
5
6
  id: string;
@@ -11,9 +12,13 @@ export declare class EnemyEntity {
11
12
  isGrabbed: boolean;
12
13
  isThrown: boolean;
13
14
  wasManipulated: boolean;
15
+ isGrabbable: boolean;
14
16
  rotation: number;
15
17
  color: string;
16
18
  strategy: IImpactStrategy | null;
19
+ behavior: EnemyBehavior;
20
+ synergyKey: string;
21
+ /** Collision padding is deliberately small; visual area effects define their own radius. */
17
22
  hitRadiusPadding: number;
18
23
  maxSpeed: number;
19
24
  isStationaryShield: boolean;
@@ -21,6 +26,8 @@ export declare class EnemyEntity {
21
26
  launchDelay: number;
22
27
  remainingHomingKills: number;
23
28
  experienceDropPending: boolean;
29
+ psionicDeflectionCooldown: number;
30
+ psionicDeflectionTimer: number;
24
31
  isDying: boolean;
25
32
  deathType: DeathType;
26
33
  deathTimer: number;
@@ -1 +1 @@
1
- {"version":3,"file":"EnemyEntity.d.ts","sourceRoot":"","sources":["../../src/entities/EnemyEntity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEvD,qBAAa,WAAW;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAkB;IACpC,QAAQ,EAAE,QAAQ,CAAkB;IACpC,MAAM,EAAE,MAAM,CAAM;IACpB,IAAI,EAAE,SAAS,CAAa;IAC5B,MAAM,EAAE,OAAO,CAAS;IACxB,SAAS,EAAE,OAAO,CAAS;IAC3B,QAAQ,EAAE,OAAO,CAAS;IAC1B,cAAc,EAAE,OAAO,CAAS;IAChC,QAAQ,EAAE,MAAM,CAAK;IACrB,KAAK,EAAE,MAAM,CAAa;IAC1B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAQ;IACxC,gBAAgB,EAAE,MAAM,CAAO;IAC/B,QAAQ,EAAE,MAAM,CAAO;IAEvB,kBAAkB,EAAE,OAAO,CAAS;IACpC,WAAW,EAAE,MAAM,CAAK;IACxB,WAAW,EAAE,MAAM,CAAK;IACxB,oBAAoB,EAAE,MAAM,CAAK;IACjC,qBAAqB,EAAE,OAAO,CAAS;IAEvC,OAAO,EAAE,OAAO,CAAS;IACzB,SAAS,EAAE,SAAS,CAAU;IAC9B,UAAU,EAAE,MAAM,CAAK;IACvB,aAAa,EAAE,MAAM,CAAO;IAC5B,UAAU,EAAE,MAAM,CAAK;gBAElB,EAAE,EAAE,MAAM;IAIf,YAAY,IAAI,MAAM;IAItB,oBAAoB,CAAC,cAAc,GAAE,OAAe,GAAG,IAAI;IAU3D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,GAAG,IAAI;IAWvE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAoCxB,KAAK,IAAI,IAAI;CAmBvB"}
1
+ {"version":3,"file":"EnemyEntity.d.ts","sourceRoot":"","sources":["../../src/entities/EnemyEntity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEvD,qBAAa,WAAW;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAkB;IACpC,QAAQ,EAAE,QAAQ,CAAkB;IACpC,MAAM,EAAE,MAAM,CAAM;IACpB,IAAI,EAAE,SAAS,CAAM;IACrB,MAAM,EAAE,OAAO,CAAS;IACxB,SAAS,EAAE,OAAO,CAAS;IAC3B,QAAQ,EAAE,OAAO,CAAS;IAC1B,cAAc,EAAE,OAAO,CAAS;IAChC,WAAW,EAAE,OAAO,CAAQ;IAC5B,QAAQ,EAAE,MAAM,CAAK;IACrB,KAAK,EAAE,MAAM,CAAa;IAC1B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAQ;IACxC,QAAQ,EAAE,aAAa,CAA0B;IACjD,UAAU,EAAE,MAAM,CAAM;IAC/B,4FAA4F;IACrF,gBAAgB,EAAE,MAAM,CAAO;IAC/B,QAAQ,EAAE,MAAM,CAAO;IAEvB,kBAAkB,EAAE,OAAO,CAAS;IACpC,WAAW,EAAE,MAAM,CAAK;IACxB,WAAW,EAAE,MAAM,CAAK;IACxB,oBAAoB,EAAE,MAAM,CAAK;IACjC,qBAAqB,EAAE,OAAO,CAAS;IACvC,yBAAyB,EAAE,MAAM,CAAK;IACtC,sBAAsB,EAAE,MAAM,CAAK;IAEnC,OAAO,EAAE,OAAO,CAAS;IACzB,SAAS,EAAE,SAAS,CAAU;IAC9B,UAAU,EAAE,MAAM,CAAK;IACvB,aAAa,EAAE,MAAM,CAAO;IAC5B,UAAU,EAAE,MAAM,CAAK;gBAElB,EAAE,EAAE,MAAM;IAIf,YAAY,IAAI,MAAM;IAItB,oBAAoB,CAAC,cAAc,GAAE,OAAe,GAAG,IAAI;IAU3D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,GAAG,IAAI;IAWvE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAuCxB,KAAK,IAAI,IAAI;CAyBvB"}
@@ -1,14 +1,37 @@
1
1
  import type { Vector2D } from "../types/game";
2
+ import type { ExperienceConfig } from "../config/GameConfig";
2
3
  export declare class ExperienceOrb {
3
4
  readonly id: string;
4
5
  position: Vector2D;
5
6
  velocity: Vector2D;
6
- readonly value: number;
7
- readonly radius: number;
7
+ value: number;
8
+ radius: number;
9
+ color: string;
8
10
  active: boolean;
9
11
  isAbsorbing: boolean;
10
- constructor(position: Vector2D, value?: number);
12
+ isMerging: boolean;
13
+ visualScale: number;
14
+ mergePulse: number;
15
+ absorbedByCore: boolean;
16
+ private readonly config;
17
+ private mergeTarget;
18
+ private mergeStartPosition;
19
+ private mergeElapsed;
20
+ constructor(position: Vector2D, value?: number, config?: ExperienceConfig);
21
+ /**
22
+ * Fuses nearby, loose orbs into a single cluster. A spatial hash keeps this
23
+ * bounded when many enemies die in the same area instead of comparing every
24
+ * orb with every other orb.
25
+ */
26
+ static mergeNearby(orbs: ExperienceOrb[], mergeDistance: number): void;
27
+ /** Applies a gentle pairwise pull before fusion so the player can read the cluster forming. */
28
+ static attractNearby(orbs: ExperienceOrb[], config: ExperienceConfig, dt: number): void;
11
29
  beginAbsorption(): void;
30
+ mergeWith(other: ExperienceOrb): void;
12
31
  update(dt: number, corePosition: Vector2D, coreRadius: number, absorptionSpeed: number): void;
32
+ private updateAppearance;
33
+ private getTierColor;
34
+ private updateMergeAnimation;
35
+ private static getCellKey;
13
36
  }
14
37
  //# sourceMappingURL=ExperienceOrb.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExperienceOrb.d.ts","sourceRoot":"","sources":["../../src/entities/ExperienceOrb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,qBAAa,aAAa;IACtB,SAAgB,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IAC1B,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,EAAE,MAAM,CAAK;IAC5B,MAAM,EAAE,OAAO,CAAQ;IACvB,WAAW,EAAE,OAAO,CAAS;gBAExB,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAE,MAAU;IAa1C,eAAe,IAAI,IAAI;IAMvB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;CA4BvG"}
1
+ {"version":3,"file":"ExperienceOrb.d.ts","sourceRoot":"","sources":["../../src/entities/ExperienceOrb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAgB7D,qBAAa,aAAa;IACtB,SAAgB,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAQ;IACvB,WAAW,EAAE,OAAO,CAAS;IAC7B,SAAS,EAAE,OAAO,CAAS;IAC3B,WAAW,EAAE,MAAM,CAAK;IACxB,UAAU,EAAE,MAAM,CAAK;IACvB,cAAc,EAAE,OAAO,CAAS;IAEvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,YAAY,CAAK;gBAEb,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,gBAA4C;IAiBvG;;;;OAIG;WACW,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IA0C7E,+FAA+F;WACjF,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IA0DvF,eAAe,IAAI,IAAI;IAMvB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAoCrC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAqCpG,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,MAAM,CAAC,UAAU;CAI5B"}
@@ -1,7 +1,10 @@
1
1
  import { EnemyEntity } from "../entities/EnemyEntity";
2
2
  import type { Vector2D, EnemyType } from "../types/game";
3
+ import type { ContentRegistry } from "../content/ContentRegistry";
3
4
  export declare class EntityFactory {
4
- static createEnemy(type: EnemyType, spawnPos: Vector2D, corePos: Vector2D): EnemyEntity;
5
- static configureEnemy(enemy: EnemyEntity, type: EnemyType, spawnPos: Vector2D, corePos: Vector2D): void;
5
+ private readonly content;
6
+ constructor(content: ContentRegistry);
7
+ createEnemy(type: EnemyType, spawnPos: Vector2D, corePos: Vector2D): EnemyEntity;
8
+ configureEnemy(enemy: EnemyEntity, type: EnemyType, spawnPos: Vector2D, corePos: Vector2D): void;
6
9
  }
7
10
  //# sourceMappingURL=EntityFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityFactory.d.ts","sourceRoot":"","sources":["../../src/factory/EntityFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAQzD,qBAAa,aAAa;WACR,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW;WAOhF,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;CAgEjH"}
1
+ {"version":3,"file":"EntityFactory.d.ts","sourceRoot":"","sources":["../../src/factory/EntityFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,qBAAa,aAAa;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,eAAe;IAErD,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,WAAW;IAOhF,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI;CA0B1G"}
@@ -1,6 +1,7 @@
1
1
  import type { Vector2D } from "../types/game";
2
2
  import { EnemyEntity } from "../entities/EnemyEntity";
3
3
  import { OrbitingModifierOrb } from "../powerups/OrbitingModifierOrb";
4
+ import { GameConfigManager } from "../config/GameConfig";
4
5
  export declare class InputManager {
5
6
  pointerPosition: Vector2D;
6
7
  isPointerDown: boolean;
@@ -9,7 +10,8 @@ export declare class InputManager {
9
10
  dragStart: Vector2D | null;
10
11
  private pointerHistory;
11
12
  private canvas;
12
- constructor(canvas: HTMLCanvasElement);
13
+ private readonly configManager;
14
+ constructor(canvas: HTMLCanvasElement, configManager: GameConfigManager);
13
15
  private updatePointerPos;
14
16
  private bindEvents;
15
17
  tryGrab(enemies: EnemyEntity[], isTouch?: boolean): EnemyEntity | null;
@@ -1 +1 @@
1
- {"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/input/InputManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAStE,qBAAa,YAAY;IACd,eAAe,EAAE,QAAQ,CAAkB;IAC3C,aAAa,EAAE,OAAO,CAAS;IAC/B,YAAY,EAAE,WAAW,GAAG,IAAI,CAAQ;IACxC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAC9C,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,iBAAiB;IAKrC,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,UAAU;IAwDX,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,GAAE,OAAe,GAAG,WAAW,GAAG,IAAI;IAqB7E,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,OAAO,GAAE,OAAe,GAAG,mBAAmB,GAAG,IAAI;IAmB7F,eAAe,IAAI,WAAW,GAAG,IAAI;IAuErC,YAAY,IAAI,IAAI;IAepB,KAAK,IAAI,IAAI;CAOvB"}
1
+ {"version":3,"file":"InputManager.d.ts","sourceRoot":"","sources":["../../src/input/InputManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQzD,qBAAa,YAAY;IACd,eAAe,EAAE,QAAQ,CAAkB;IAC3C,aAAa,EAAE,OAAO,CAAS;IAC/B,YAAY,EAAE,WAAW,GAAG,IAAI,CAAQ;IACxC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAC9C,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;gBAEtC,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB;IAMvE,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,UAAU;IAwDX,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,GAAE,OAAe,GAAG,WAAW,GAAG,IAAI;IAqB7E,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,EAAE,OAAO,GAAE,OAAe,GAAG,mBAAmB,GAAG,IAAI;IAmB7F,eAAe,IAAI,WAAW,GAAG,IAAI;IA6DrC,YAAY,IAAI,IAAI;IAepB,KAAK,IAAI,IAAI;CAOvB"}
@@ -0,0 +1,18 @@
1
+ import type { EffectAggregationConfig } from "../config/GameConfig";
2
+ import type { GravityVortex, Shockwave, ToxicPool } from "../types/game";
3
+ /**
4
+ * Consolidates equivalent transient effects before they reach the next frame.
5
+ * The aggregate keeps the gameplay payload while reducing the number of
6
+ * physics and render entities competing for the frame.
7
+ */
8
+ export declare class EffectClusterer {
9
+ static merge(pools: ToxicPool[], vortices: GravityVortex[], shockwaves: Shockwave[], config: EffectAggregationConfig): void;
10
+ private static mergeToxicPools;
11
+ private static mergeVortices;
12
+ private static mergeShockwaves;
13
+ private static mergeNearby;
14
+ private static mergePositionByArea;
15
+ private static sourceCount;
16
+ private static distance;
17
+ }
18
+ //# sourceMappingURL=EffectClusterer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EffectClusterer.d.ts","sourceRoot":"","sources":["../../src/physics/EffectClusterer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEzE;;;;GAIG;AACH,qBAAa,eAAe;WACV,KAAK,CACf,KAAK,EAAE,SAAS,EAAE,EAClB,QAAQ,EAAE,aAAa,EAAE,EACzB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,uBAAuB,GAChC,IAAI;IAMP,OAAO,CAAC,MAAM,CAAC,eAAe;IAgB9B,OAAO,CAAC,MAAM,CAAC,aAAa;IAgB5B,OAAO,CAAC,MAAM,CAAC,eAAe;IAwB9B,OAAO,CAAC,MAAM,CAAC,WAAW;IAkB1B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAUlC,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,QAAQ;CAG1B"}