Spice-King / foundry-swnr

Stars Without Number: Revised for Foundry VTT
GNU Affero General Public License v3.0
30 stars 41 forks source link

Define power systems structure #9

Open Spice-King opened 3 years ago

Spice-King commented 3 years ago

I wish to support as much home brew content as possible, so baking in the various power systems feels kinda bad, plus that means baking in the deluxe and paid supplements in order to support them.

Spice-King commented 3 years ago
// For linking system def to classes, foci and what not.
declare interface SWNRPowerSystemDef {
  resourceName: string;
  type: "effort pool" | "prepared spells" | "spell slots";
  system: SWNRPowerSystemDefs;
}

declare type SWNRValidLevels = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
declare type SWNRSpellLevels = 1 | 2 | 3 | 4 | 5;
declare type SWNRPowerSystemDefs =
  | SWNREffortPoolDef
  | SWNRPreparedSpellsDef
  | SWNRSpellSlotsDef;

declare interface SWNRPowerSystem {
  localizationKey: string;
  value: number;
  max: number;
  type: SWNRPowerSystemTypes;
}

declare type SWNRPowerSystemTypes =
  | SWNREffortPool
  | SWNRSpellSlots
  | SWNRPreparedSpells;

declare interface SWNREffortPool extends SWNRPowerSystem {
  committed: {
    active: number;
    scene: number;
    day: number;
  };
}

declare interface SWNRSpellSlots extends SWNRPowerSystem {
  spentSlots: {
    [SpellLevel in SWNRSpellLevels]: number;
  };
}

declare interface SWNRPreparedSpells extends SWNRPowerSystem {
  preparedSpells: {
    spellItemId: string;
    slotLevel: SWNRSpellLevels;
    used: boolean;
  }[];
}

declare interface SWNREffortPoolDef extends SWNRPowerSystemDef {
  timeSlots: {
    name: string;
    localization: string;
  }[];
}

declare interface SWNRPreparedSpellsDef extends SWNRPowerSystemDef {
  preparedSpellsPerCharLevel: {
    [P in SWNRValidLevels]: {
      [P in SWNRSpellLevels]: number;
    };
  };
}

declare interface SWNRSpellSlotsDef extends SWNRPowerSystemDef {
  spellsPerLevel: {
    [P in SWNRValidLevels]: {
      [P in SWNRSpellLevels]: {
        spellSlots: number;
        knownSpellsLimit: number;
      };
    };
  };
}
bwebster4 commented 3 years ago

I like this