// SPDX-FileCopyrightText: 2021 Johannes Loher // SPDX-FileCopyrightText: 2021 Oliver Rümpelein // SPDX-FileCopyrightText: 2021 Gesina Schwalbe // SPDX-FileCopyrightText: 2021 Siegfried Krug // // SPDX-License-Identifier: MIT import { ModifiableData, ModifiableDataBase, ResourceData, UsableResource } from "../common/common-data"; import { DS4 } from "../config"; declare global { interface SourceConfig { Actor: DS4ActorDataSource; } } export type DS4ActorDataSource = DS4CharacterDataSource | DS4CreatureDataSource; interface DS4CharacterDataSource { type: "character"; data: DS4CharacterDataSourceData; } interface DS4CreatureDataSource { type: "creature"; data: DS4CreatureDataSourceData; } // templates interface DS4ActorDataSourceDataBase { attributes: DS4ActorDataSourceDataAttributes; traits: DS4ActorDataSourceDataTraits; combatValues: DS4ActorDataSourceDataCombatValues; } type DS4ActorDataSourceDataAttributes = { [Key in keyof typeof DS4.i18n.attributes]: ModifiableDataBase }; type Attribute = keyof DS4ActorDataSourceDataAttributes; export function isAttribute(value: unknown): value is Attribute { return (Object.keys(DS4.i18n.attributes) as Array).includes(value); } type DS4ActorDataSourceDataTraits = { [Key in keyof typeof DS4.i18n.traits]: ModifiableDataBase }; type Trait = keyof DS4ActorDataSourceDataTraits; export function isTrait(value: unknown): value is Trait { return (Object.keys(DS4.i18n.traits) as Array).includes(value); } type DS4ActorDataSourceDataCombatValues = { [Key in keyof typeof DS4.i18n.combatValues]: Key extends "hitPoints" ? ResourceData : ModifiableData; }; type CombatValue = keyof DS4ActorDataSourceDataCombatValues; export function isCombatValue(value: string): value is CombatValue { return (Object.keys(DS4.i18n.combatValues) as Array).includes(value); } // types interface DS4CreatureDataSourceData extends DS4ActorDataSourceDataBase { baseInfo: DS4CreatureDataSourceDataBaseInfo; } export interface DS4CreatureDataSourceDataBaseInfo { loot: string; foeFactor: number; creatureType: CreatureType; sizeCategory: SizeCategory; experiencePoints: number; description: string; } type CreatureType = keyof typeof DS4.i18n.creatureTypes; type SizeCategory = keyof typeof DS4.i18n.creatureSizeCategories; interface DS4CharacterDataSourceData extends DS4ActorDataSourceDataBase { baseInfo: DS4CharacterDataSourceDataBaseInfo; progression: DS4CharacterDataSourceDataProgression; profile: DS4CharacterDataSourceDataProfile; currency: DS4CharacterDataSourceDataCurrency; slayerPoints: DS4CharacterDataSourceDataSlayerPoints; } export interface DS4CharacterDataSourceDataBaseInfo { race: string; class: string; heroClass: string; culture: string; } export interface DS4CharacterDataSourceDataProgression { level: number; experiencePoints: number; talentPoints: UsableResource; progressPoints: UsableResource; } export interface DS4CharacterDataSourceDataProfile { biography: string; gender: string; birthday: string; birthplace: string; age: number; height: number; hairColor: string; weight: number; eyeColor: string; specialCharacteristics: string; } export interface DS4CharacterDataSourceDataCurrency { gold: number; silver: number; copper: number; } export interface DS4CharacterDataSourceDataSlayerPoints { value: number; }