123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import { Component, Input } from '@angular/core';
- import { DataService } from 'src/services/data/data.service';
- import { Observable } from 'rxjs';
- import { Attribute } from 'src/interfaces/attribute';
- import { DetailsService } from 'src/services/details/details.service';
- import { SaveThrowDetailsComponent } from '../save-throw-details/save-throw-details.component';
- @Component({
- selector: 'save-throw-field',
- templateUrl: './save-throw-field.component.html',
- styleUrls: ['./save-throw-field.component.scss'],
- })
- export class SaveThrowFieldComponent {
- constructor(
- public dataAccessor: DataService,
- public detailsAccessor: DetailsService
- ) {}
- @Input() attributeName: string = '';
- public attribute: Attribute = { name: '', value: 0, proficiency: false };
- private proficiencyBonus: number = 0;
- private attributeModifier: number = 0;
- public saveModifier: string = '0';
- public nameTranslator: any = {
- strength: 'Stärke',
- dexterity: 'Geschicklichkeit',
- constitution: 'Konstitution',
- intelligence: 'Intelligenz',
- wisdom: 'Weisheit',
- charisma: 'Charisma',
- };
- public ngOnInit(): void {
- this.initAttributeSubscription();
- this.initProficiencySubscription();
- }
- private initAttributeSubscription(): void {
- const observable: Observable<Attribute> = eval(
- `this.dataAccessor.${this.attributeName}$`
- );
- observable.subscribe((newValue: Attribute) => {
- this.attribute = newValue;
- this.attributeModifier = this.calculateAttributeModifier();
- this.saveModifier = this.calculateSaveModifier();
- });
- }
- private initProficiencySubscription(): void {
- this.dataAccessor.proficiency$.subscribe((newValue: any) => {
- this.proficiencyBonus = newValue;
- this.attributeModifier = this.calculateAttributeModifier();
- this.saveModifier = this.calculateSaveModifier();
- });
- }
- private calculateAttributeModifier(): number {
- return Math.floor((this.attribute.value - 10) / 2);
- }
- public calculateSaveModifier(): string {
- let mod = this.attributeModifier;
- if (this.attribute.proficiency) {
- mod += this.proficiencyBonus;
- }
- if (mod > 0) {
- return '+' + mod;
- } else {
- return mod.toString();
- }
- }
- public openDetails(): void {
- this.detailsAccessor.openPanel(SaveThrowDetailsComponent, {
- attributeName: this.nameTranslator[this.attributeName],
- saveModifier: this.saveModifier,
- });
- }
- public updateAttribute(): void {
- setTimeout(() => {
- this.dataAccessor.updateAttribute(this.attribute);
- });
- }
- }
|