Separate types for data and _data for DS4Actor

This commit is contained in:
Johannes Loher 2021-03-22 10:18:43 +01:00
parent 7c7d30854c
commit 17633ced68
7 changed files with 174 additions and 102 deletions

View file

@ -1,4 +1,4 @@
import { ModifiableDataTotal, ResourceData, UsableResource } from "../common/common-data";
import { ModifiableData, ModifiableDataBase, ResourceData, UsableResource } from "../common/common-data";
import { DS4 } from "../config";
import { DS4ItemData } from "../item/item-data";
@ -6,50 +6,48 @@ export type DS4ActorData = DS4CharacterData | DS4CreatureData;
type ActorType = keyof typeof DS4.i18n.actorTypes;
interface DS4ActorDataHelper<T, U extends ActorType> extends Actor.Data<T, DS4ItemData> {
export interface DS4ActorDataHelper<T, U extends ActorType> extends Actor.Data<T, DS4ItemData> {
type: U;
}
type DS4CharacterData = DS4ActorDataHelper<DS4CharacterDataData, "character">;
type DS4CreatureData = DS4ActorDataHelper<DS4CreatureDataData, "creature">;
// templates
interface DS4ActorDataDataBase {
attributes: DS4ActorDataDataAttributes;
traits: DS4ActorDataDataTraits;
combatValues: DS4ActorDataDataCombatValues;
rolling: DS4ActorDataDataRolling;
}
interface DS4ActorDataDataAttributes {
body: ModifiableDataTotal<number>;
mobility: ModifiableDataTotal<number>;
mind: ModifiableDataTotal<number>;
body: ModifiableDataBase<number>;
mobility: ModifiableDataBase<number>;
mind: ModifiableDataBase<number>;
}
interface DS4ActorDataDataTraits {
strength: ModifiableDataTotal<number>;
constitution: ModifiableDataTotal<number>;
agility: ModifiableDataTotal<number>;
dexterity: ModifiableDataTotal<number>;
intellect: ModifiableDataTotal<number>;
aura: ModifiableDataTotal<number>;
strength: ModifiableDataBase<number>;
constitution: ModifiableDataBase<number>;
agility: ModifiableDataBase<number>;
dexterity: ModifiableDataBase<number>;
intellect: ModifiableDataBase<number>;
aura: ModifiableDataBase<number>;
}
interface DS4ActorDataDataCombatValues {
hitPoints: ResourceData<number>;
defense: ModifiableDataTotal<number>;
initiative: ModifiableDataTotal<number>;
movement: ModifiableDataTotal<number>;
meleeAttack: ModifiableDataTotal<number>;
rangedAttack: ModifiableDataTotal<number>;
spellcasting: ModifiableDataTotal<number>;
targetedSpellcasting: ModifiableDataTotal<number>;
defense: ModifiableData<number>;
initiative: ModifiableData<number>;
movement: ModifiableData<number>;
meleeAttack: ModifiableData<number>;
rangedAttack: ModifiableData<number>;
spellcasting: ModifiableData<number>;
targetedSpellcasting: ModifiableData<number>;
}
interface DS4ActorDataDataRolling {
maximumCoupResult?: number;
minimumFumbleResult?: number;
}
// types
interface DS4CharacterDataData extends DS4ActorDataDataBase {
baseInfo: DS4CharacterDataDataBaseInfo;
@ -58,25 +56,25 @@ interface DS4CharacterDataData extends DS4ActorDataDataBase {
profile: DS4CharacterDataDataProfile;
currency: DS4CharacterDataDataCurrency;
}
interface DS4CharacterDataDataBaseInfo {
export interface DS4CharacterDataDataBaseInfo {
race: string;
class: string;
heroClass: string;
culture: string;
}
interface DS4CharacterDataDataProgression {
export interface DS4CharacterDataDataProgression {
level: number;
experiencePoints: number;
talentPoints: UsableResource<number>;
progressPoints: UsableResource<number>;
}
interface DS4CharacterDataDataLanguage {
export interface DS4CharacterDataDataLanguage {
languages: string;
alphabets: string;
}
interface DS4CharacterDataDataProfile {
export interface DS4CharacterDataDataProfile {
biography: string;
gender: string;
birthday: string;
@ -89,7 +87,7 @@ interface DS4CharacterDataDataProfile {
specialCharacteristics: string;
}
interface DS4CharacterDataDataCurrency {
export interface DS4CharacterDataDataCurrency {
gold: number;
silver: number;
copper: number;
@ -99,11 +97,7 @@ interface DS4CreatureDataData extends DS4ActorDataDataBase {
baseInfo: DS4CreatureDataDataBaseInfo;
}
type CreatureType = "animal" | "construct" | "humanoid" | "magicalEntity" | "plantBeing" | "undead";
type SizeCategory = "tiny" | "small" | "normal" | "large" | "huge" | "colossal";
interface DS4CreatureDataDataBaseInfo {
export interface DS4CreatureDataDataBaseInfo {
loot: string;
foeFactor: number;
creatureType: CreatureType;
@ -111,3 +105,7 @@ interface DS4CreatureDataDataBaseInfo {
experiencePoints: number;
description: string;
}
type CreatureType = "animal" | "construct" | "humanoid" | "magicalEntity" | "plantBeing" | "undead";
type SizeCategory = "tiny" | "small" | "normal" | "large" | "huge" | "colossal";