import { Component } from '@angular/core'; import { DataService } from 'src/services/data/data.service'; import { Router } from '@angular/router'; interface characterData { view: string; value: string; } @Component({ selector: 'app-character-creator', templateUrl: './character-creator.component.html', styleUrls: ['./character-creator.component.scss'], }) export class CharacterCreatorComponent { selectedValue: string = ''; // Translators // TODO: Implement the species public species: characterData[] = [ { view: 'Mensch', value: 'Human' }, { view: 'Zwerg', value: 'Dwarf' }, { view: 'Elf', value: 'Elf' }, { view: 'Eladrin', value: 'Eladrin' }, { view: 'Halbelf', value: 'HalfElf' }, { view: 'Halbelf (Mal des Entdeckens)', value: 'HalfElfDetection' }, { view: 'Halbling', value: 'Halfling' }, { view: 'Gnom', value: 'Gnome' }, { view: 'Halbork', value: 'HalfOrc' }, { view: 'Tiefling', value: 'Tiefling' }, ]; // TODO: Implement the classes public classes: characterData[] = [ { view: 'Test', value: 'Test' }, { view: 'Barbar', value: 'Barbarian' }, { view: 'Barde', value: 'Bard' }, { view: 'Druide', value: 'Druid' }, { view: 'Hexenmeister', value: 'Warlock' }, { view: 'Kämpfer', value: 'Fighter' }, { view: 'Kleriker', value: 'Cleric' }, { view: 'Magier', value: 'Wizard' }, { view: 'Mönch', value: 'Monk' }, { view: 'Paladin', value: 'Paladin' }, { view: 'Schurke', value: 'Rogue' }, { view: 'Waldläufer', value: 'Ranger' }, { view: 'Zauberer', value: 'Sorcerer' }, ]; public backgrounds: characterData[] = [ { view: 'Akolyth', value: 'acolyte' }, { view: 'Scharlatan', value: 'charlatan' }, { view: 'Edelmann', value: 'noble' }, { view: 'Entertainer', value: 'entertainer' }, { view: 'Folk Held', value: 'folkHero' }, { view: 'Gelehrter', value: 'sage' }, { view: 'Gladiator', value: 'gladiator' }, { view: 'Gildenhändler', value: 'guildArtisan' }, { view: 'Gildehandwerker', value: 'guildMerchant' }, { view: 'Herumtreiber', value: 'outlander' }, { view: 'Krimineller', value: 'criminal' }, { view: 'Künstler', value: 'artist' }, { view: 'Marine', value: 'sailor' }, { view: 'Scharlatan', value: 'charlatan' }, { view: 'Soldat', value: 'soldier' }, { view: 'Stadtwache', value: 'cityWatch' }, { view: 'Urchin', value: 'urchin' }, ]; public genders: characterData[] = [ { view: 'Weiblich', value: 'Female' }, { view: 'Männlich', value: 'Male' }, { view: 'Divers', value: 'Diverse' }, ]; // Predefined Data private hitDice: any = { Barbarian: 12, Bard: 8, Cleric: 8, Druid: 8, Fighter: 10, Monk: 8, Paladin: 10, Ranger: 10, Rogue: 8, Sorcerer: 6, Warlock: 8, Wizard: 6, }; public spellcastingAttributes: any = { Barbarian: null, Bard: 'Charisma', Cleric: 'Wisdom', Druid: 'Wisdom', Fighter: null, Monk: 'Wisdom', Paladin: 'Charisma', Ranger: 'Wisdom', Rogue: 'Intelligence', Sorcerer: 'Charisma', Warlock: 'Charisma', Wizard: 'Intelligence', }; public characterName: string = ''; public characterClass: string = ''; public characterSpecies: string = ''; public characterBackground: string = ''; public characterGender: string = ''; public constructor( public dataAccessor: DataService, private Router: Router ) {} public async createCharacter(): Promise { console.log(this.characterName); // Creates a new entry in the character collection this.dataAccessor.addData('characters', { name: this.characterName }); // Creates a new collection with the character name this.createNewCharacterInDatabase().then(() => { // Die Funktion muss ertstmal durchlaufen, bevor der Character ausgewählt werden kann sessionStorage.setItem('characterName', this.characterName); this.dataAccessor.dataLoaded = false; this.Router.navigate(['journal']); }); } public async createNewCharacterInDatabase(): Promise { // TODO: Für alle Daten einen eigenen Key/Value Eintrag anlegen addData(collection: string, data: any, key?: string): void return Promise.all([ // Character Data this.dataAccessor.addData( this.characterName, { class: this.characterClass, subclass: '', race: this.characterSpecies, background: this.characterBackground, level: 1, experience: 0, image: '', gender: this.characterGender, age: '', height: '', weight: '', eyes: '', skin: '', hair: '', }, 'characterData' ), // Character Image this.dataAccessor.addData( this.characterName, { value: undefined, }, 'image' ), // Character Attributes this.dataAccessor.addData( this.characterName, { strength: { name: 'strength', value: 10, proficiency: false }, dexterity: { name: 'dexterity', value: 10, proficiency: false }, constitution: { name: 'constitution', value: 10, proficiency: false }, intelligence: { name: 'intelligence', value: 10, proficiency: false }, wisdom: { name: 'wisdom', value: 10, proficiency: false }, charisma: { name: 'charisma', value: 10, proficiency: false }, }, 'attributes' ), // Character Skills this.dataAccessor.addData( this.characterName, { acrobatics: { name: 'acrobatics', proficiency: false }, animalHandling: { name: 'animalHandling', proficiency: false }, arcana: { name: 'arcana', proficiency: false }, athletics: { name: 'athletics', proficiency: false }, deception: { name: 'deception', proficiency: false }, history: { name: 'history', proficiency: false }, insight: { name: 'insight', proficiency: false }, intimidation: { name: 'intimidation', proficiency: false }, investigation: { name: 'investigation', proficiency: false }, medicine: { name: 'medicine', proficiency: false }, nature: { name: 'nature', proficiency: false }, perception: { name: 'perception', proficiency: false }, performance: { name: 'performance', proficiency: false }, persuasion: { name: 'persuasion', proficiency: false }, religion: { name: 'religion', proficiency: false }, sleightOfHand: { name: 'sleightOfHand', proficiency: false }, stealth: { name: 'stealth', proficiency: false }, survival: { name: 'survival', proficiency: false }, }, 'skills' ), // Character Combat Stats this.dataAccessor.addData( this.characterName, { armorClass: 10, initiative: 0, movement: 30, deathSaves: [0, 0], proficiencyBonus: 2, conditions: [], exhaustion: 0, inspiration: false, }, 'combatStats' ), // Character Hit Points this.dataAccessor.addData( this.characterName, { hitPoints: { maxHitPoints: 10, currentHitPoints: 10, temporaryHitPoints: 0, }, hitDice: { diceNumber: 1, diceType: this.hitDice[this.characterClass], diceUsed: 0, }, }, 'hitPoints' ), // Character Abilities this.dataAccessor.addData( this.characterName, { data: [], }, 'abilities' ), // Character Traits this.dataAccessor.addData( this.characterName, { data: [], }, 'traits' ), // Character Proficiencies this.dataAccessor.addData( this.characterName, { light: false, medium: false, heavy: false, shields: false, simple: false, martial: false, other: [], tools: [], languages: ['Gemeinsprache'], }, 'proficiencies' ), // Character Spellslots this.dataAccessor.addData( this.characterName, { spellslots: [], showSpellslots: false, spellcastingAttribute: this.spellcastingAttributes[this.characterClass], }, 'spellslots' ), // Ki Points this.dataAccessor.addData( this.characterName, { totalPoints: 0, usedPoints: 0, showKiPoints: false, }, 'kiPoints' ), // Weapons this.dataAccessor.addData( this.characterName, { data: [], }, 'favoriteWeapons' ), // WEAPONS AND ARMOR this.dataAccessor.addData( this.characterName, { data: [], }, 'weaponsAndArmor' ), // MISCELLANEOUS this.dataAccessor.addData( this.characterName, { data: [], }, 'miscellaneous' ), // CONSUMABLES this.dataAccessor.addData( this.characterName, { data: [], }, 'consumables' ), // MONEY this.dataAccessor.addData( this.characterName, { platinum: 0, gold: 0, silver: 0, copper: 0, }, 'money' ), // FOOD this.dataAccessor.addData( this.characterName, { data: [], }, 'food' ), // Favorite Spells this.dataAccessor.addData( this.characterName, { spells: [], }, 'favoriteSpells' ), // Spells this.dataAccessor.addData( this.characterName, { spells: [], id: 10000, }, 'customSpells' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel0' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel1' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel2' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel3' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel4' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel5' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel6' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel7' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel8' ), this.dataAccessor.addData( this.characterName, { spells: [], }, 'spellLevel9' ), // Notes // Maps // NPCs // Quests ]).then(() => {}); } }