Implement basic version of characters #32
@ -3,7 +3,9 @@
 | 
			
		||||
    <button mat-icon-button class="small-icon-button" [ngClass]="openContent === ModelComponentType.SCRIPTACCOUNT ? 'selected':''"
 | 
			
		||||
            (click)="openScriptAccountsOverview()"><mat-icon>inventory_2</mat-icon></button>
 | 
			
		||||
    <button mat-icon-button class="small-icon-button" [ngClass]="openContent === ModelComponentType.GAMESYTEM ? 'selected':''"
 | 
			
		||||
            (click)="openGamesystemsOverview()"><mat-icon>manufacturing</mat-icon></button>
 | 
			
		||||
            (click)="openGamesystemsOverview()"><mat-icon>code</mat-icon></button>
 | 
			
		||||
    <button mat-icon-button class="small-icon-button" [ngClass]="openContent === ModelComponentType.CHARACTER ? 'selected':''"
 | 
			
		||||
            (click)="openCharactersOverview()"><mat-icon>person</mat-icon></button>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,10 +22,12 @@
 | 
			
		||||
        <mat-menu #contentMenu="matMenu">
 | 
			
		||||
          <button mat-menu-item (click)="openScriptAccountsOverview()">{{ModelComponentTypeUtillities.toString(ModelComponentType.SCRIPTACCOUNT)}}</button>
 | 
			
		||||
          <button mat-menu-item (click)="openGamesystemsOverview()">{{ModelComponentTypeUtillities.toString(ModelComponentType.GAMESYTEM)}}</button>
 | 
			
		||||
          <button mat-menu-item (click)="openCharactersOverview()">{{ModelComponentTypeUtillities.toString(ModelComponentType.CHARACTER)}}</button>
 | 
			
		||||
        </mat-menu>
 | 
			
		||||
      </div>
 | 
			
		||||
      <app-script-account-overview *ngIf="openContent == ModelComponentType.SCRIPTACCOUNT" #scriptAccountOverview [gameModel]="gameModel" (onOpenScriptAccount)="openModelComponent($event)"></app-script-account-overview>
 | 
			
		||||
      <app-gamescript-overview *ngIf="openContent == ModelComponentType.GAMESYTEM" #gamesystemOverview [gameModel]="gameModel" (openGamesystemEditor)="openModelComponent($event)"></app-gamescript-overview>
 | 
			
		||||
      <app-character-overview *ngIf="openContent == ModelComponentType.CHARACTER" #characterOverview [gameModel]="gameModel"></app-character-overview>
 | 
			
		||||
    </mat-drawer>
 | 
			
		||||
 | 
			
		||||
    <div class="example-sidenav-content">
 | 
			
		||||
 | 
			
		||||
@ -206,6 +206,11 @@ export class AppComponent implements OnInit{
 | 
			
		||||
    this.drawer!.open();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  openCharactersOverview() {
 | 
			
		||||
    this.openContent = ModelComponentType.CHARACTER
 | 
			
		||||
    this.drawer!.open()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected readonly ModelComponentType = ModelComponentType;
 | 
			
		||||
 | 
			
		||||
  closeContentOverview() {
 | 
			
		||||
 | 
			
		||||
@ -68,6 +68,7 @@ import {
 | 
			
		||||
import {
 | 
			
		||||
    ScriptaccountConditionEditorComponent
 | 
			
		||||
} from "./editor/gamesystem-editor/scriptaccount-condition-editor/scriptaccount-condition-editor.component";
 | 
			
		||||
import {CharacterOverviewComponent} from "./side-overviews/character-overview/character-overview.component";
 | 
			
		||||
 | 
			
		||||
// AoT requires an exported function for factories
 | 
			
		||||
const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader =>  new TranslateHttpLoader(http, './assets/i18n/', '.json');
 | 
			
		||||
@ -91,63 +92,64 @@ const httpLoaderFactory = (http: HttpClient): TranslateHttpLoader =>  new Transl
 | 
			
		||||
    ScriptaccountActionEditorComponent,
 | 
			
		||||
    ScriptaccountConditionEditorComponent
 | 
			
		||||
  ],
 | 
			
		||||
    imports: [
 | 
			
		||||
        BrowserModule,
 | 
			
		||||
        FormsModule,
 | 
			
		||||
        HttpClientModule,
 | 
			
		||||
        CoreModule,
 | 
			
		||||
        SharedModule,
 | 
			
		||||
        TranslateModule.forRoot({
 | 
			
		||||
            loader: {
 | 
			
		||||
                provide: TranslateLoader,
 | 
			
		||||
                useFactory: httpLoaderFactory,
 | 
			
		||||
                deps: [HttpClient]
 | 
			
		||||
            }
 | 
			
		||||
        }),
 | 
			
		||||
        BrowserAnimationsModule,
 | 
			
		||||
        MatIcon,
 | 
			
		||||
        MatToolbar,
 | 
			
		||||
        MatButton,
 | 
			
		||||
        MatFormField,
 | 
			
		||||
        MatInput,
 | 
			
		||||
        MatDrawerContainer,
 | 
			
		||||
        MatDrawer,
 | 
			
		||||
        MatIconButton,
 | 
			
		||||
        MatMenuTrigger,
 | 
			
		||||
        MatMenu,
 | 
			
		||||
        MatMenuItem,
 | 
			
		||||
        MatListItem,
 | 
			
		||||
        MatActionList,
 | 
			
		||||
        MatTabGroup,
 | 
			
		||||
        MatTab,
 | 
			
		||||
        MatTabLabel,
 | 
			
		||||
        MatLabel,
 | 
			
		||||
        MatFormField,
 | 
			
		||||
        ReactiveFormsModule,
 | 
			
		||||
        MatError,
 | 
			
		||||
        MatDialogTitle,
 | 
			
		||||
        MatDialogContent,
 | 
			
		||||
        MatDialogActions,
 | 
			
		||||
        MatMiniFabButton,
 | 
			
		||||
        MatTreeModule,
 | 
			
		||||
        MatTable,
 | 
			
		||||
        MatColumnDef,
 | 
			
		||||
        MatHeaderCell,
 | 
			
		||||
        MatHeaderCellDef,
 | 
			
		||||
        MatCellDef,
 | 
			
		||||
        MatCell,
 | 
			
		||||
        MatHeaderRow,
 | 
			
		||||
        MatRow,
 | 
			
		||||
        MatHeaderRowDef,
 | 
			
		||||
        MatRowDef,
 | 
			
		||||
        MatCheckbox,
 | 
			
		||||
        MatSelect,
 | 
			
		||||
        MatOption,
 | 
			
		||||
        MatHint,
 | 
			
		||||
        MatTooltip,
 | 
			
		||||
        MatCard,
 | 
			
		||||
        MatCardContent
 | 
			
		||||
    ],
 | 
			
		||||
  imports: [
 | 
			
		||||
    BrowserModule,
 | 
			
		||||
    FormsModule,
 | 
			
		||||
    HttpClientModule,
 | 
			
		||||
    CoreModule,
 | 
			
		||||
    SharedModule,
 | 
			
		||||
    TranslateModule.forRoot({
 | 
			
		||||
      loader: {
 | 
			
		||||
        provide: TranslateLoader,
 | 
			
		||||
        useFactory: httpLoaderFactory,
 | 
			
		||||
        deps: [HttpClient]
 | 
			
		||||
      }
 | 
			
		||||
    }),
 | 
			
		||||
    BrowserAnimationsModule,
 | 
			
		||||
    MatIcon,
 | 
			
		||||
    MatToolbar,
 | 
			
		||||
    MatButton,
 | 
			
		||||
    MatFormField,
 | 
			
		||||
    MatInput,
 | 
			
		||||
    MatDrawerContainer,
 | 
			
		||||
    MatDrawer,
 | 
			
		||||
    MatIconButton,
 | 
			
		||||
    MatMenuTrigger,
 | 
			
		||||
    MatMenu,
 | 
			
		||||
    MatMenuItem,
 | 
			
		||||
    MatListItem,
 | 
			
		||||
    MatActionList,
 | 
			
		||||
    MatTabGroup,
 | 
			
		||||
    MatTab,
 | 
			
		||||
    MatTabLabel,
 | 
			
		||||
    MatLabel,
 | 
			
		||||
    MatFormField,
 | 
			
		||||
    ReactiveFormsModule,
 | 
			
		||||
    MatError,
 | 
			
		||||
    MatDialogTitle,
 | 
			
		||||
    MatDialogContent,
 | 
			
		||||
    MatDialogActions,
 | 
			
		||||
    MatMiniFabButton,
 | 
			
		||||
    MatTreeModule,
 | 
			
		||||
    MatTable,
 | 
			
		||||
    MatColumnDef,
 | 
			
		||||
    MatHeaderCell,
 | 
			
		||||
    MatHeaderCellDef,
 | 
			
		||||
    MatCellDef,
 | 
			
		||||
    MatCell,
 | 
			
		||||
    MatHeaderRow,
 | 
			
		||||
    MatRow,
 | 
			
		||||
    MatHeaderRowDef,
 | 
			
		||||
    MatRowDef,
 | 
			
		||||
    MatCheckbox,
 | 
			
		||||
    MatSelect,
 | 
			
		||||
    MatOption,
 | 
			
		||||
    MatHint,
 | 
			
		||||
    MatTooltip,
 | 
			
		||||
    MatCard,
 | 
			
		||||
    MatCardContent,
 | 
			
		||||
    CharacterOverviewComponent
 | 
			
		||||
  ],
 | 
			
		||||
  providers: [],
 | 
			
		||||
  bootstrap: [AppComponent]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@ -4,16 +4,20 @@ import {Transition} from "./gamesystems/transitions/Transition";
 | 
			
		||||
import {State} from "./gamesystems/states/State";
 | 
			
		||||
import {ProductGamesystem} from "./gamesystems/ProductGamesystem";
 | 
			
		||||
import {SimpleGamesystem} from "./gamesystems/SimpleGamesystem";
 | 
			
		||||
import {StorageModel} from "./fs/StorageModel";
 | 
			
		||||
import {Character} from "./characters/Character";
 | 
			
		||||
import {ModelComponentType} from "./ModelComponentType";
 | 
			
		||||
 | 
			
		||||
export class GameModel {
 | 
			
		||||
  gameModelName: string
 | 
			
		||||
 | 
			
		||||
  gamesystems: Gamesystem<any, any>[] = [];
 | 
			
		||||
  scriptAccounts: ScriptAccount[] = [];
 | 
			
		||||
  characters: Character[] = []
 | 
			
		||||
 | 
			
		||||
  constructor(gameModelName: string) {
 | 
			
		||||
    this.gameModelName = gameModelName;
 | 
			
		||||
    this.characters.push(new Character("Astrid Hofferson", "", ModelComponentType.CHARACTER))
 | 
			
		||||
    this.characters.push(new Character("Hicks Haddock", "", ModelComponentType.CHARACTER))
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  addGamesystem(gamesystem: Gamesystem<any, any>) {
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
export enum ModelComponentType {
 | 
			
		||||
  SCRIPTACCOUNT,
 | 
			
		||||
  GAMESYTEM
 | 
			
		||||
  GAMESYTEM,
 | 
			
		||||
  CHARACTER
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,7 @@ export class ModelComponentTypeUtillities {
 | 
			
		||||
    switch (modelComponentType) {
 | 
			
		||||
      case ModelComponentType.SCRIPTACCOUNT: return "ScriptAccounts";
 | 
			
		||||
      case ModelComponentType.GAMESYTEM: return "Gamesystems";
 | 
			
		||||
      case ModelComponentType.CHARACTER: return "Characters"
 | 
			
		||||
      default: return "Undefined";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@ -13,6 +14,7 @@ export class ModelComponentTypeUtillities {
 | 
			
		||||
    switch (modelComponentType) {
 | 
			
		||||
      case ModelComponentType.SCRIPTACCOUNT: return "ScriptAccount";
 | 
			
		||||
      case ModelComponentType.GAMESYTEM: return "Gamesystem";
 | 
			
		||||
      case ModelComponentType.CHARACTER: return "Character"
 | 
			
		||||
      default: return "Undefined";
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@ -21,6 +23,7 @@ export class ModelComponentTypeUtillities {
 | 
			
		||||
    switch (string) {
 | 
			
		||||
      case "gamesystem": return ModelComponentType.GAMESYTEM;
 | 
			
		||||
      case "scriptaccount": return ModelComponentType.SCRIPTACCOUNT;
 | 
			
		||||
      case "character": return ModelComponentType.CHARACTER
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								src/app/project/game-model/characters/Character.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/app/project/game-model/characters/Character.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
import {ModelComponent} from "../ModelComponent";
 | 
			
		||||
import {ModelComponentType} from "../ModelComponentType";
 | 
			
		||||
 | 
			
		||||
export class Character extends ModelComponent{
 | 
			
		||||
 | 
			
		||||
  constructor(componentName: string, componentDescription: string, type: ModelComponentType) {
 | 
			
		||||
    super(componentName, componentDescription, type);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,5 @@
 | 
			
		||||
<mat-action-list>
 | 
			
		||||
  <mat-list-item class="scriptAccount-item" *ngFor="let character of gameModel!.characters">
 | 
			
		||||
    <mat-icon class="scriptAccount-icon">person</mat-icon>{{character.componentName}}
 | 
			
		||||
  </mat-list-item>
 | 
			
		||||
</mat-action-list>
 | 
			
		||||
@ -0,0 +1,14 @@
 | 
			
		||||
.scriptAccount-item {
 | 
			
		||||
  min-height: 1.8em !important;
 | 
			
		||||
  height: 1.8em !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.scriptAccount-icon {
 | 
			
		||||
  margin-right: 10px;
 | 
			
		||||
  color: #ccffff;
 | 
			
		||||
  align-content: baseline;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.selected-item {
 | 
			
		||||
  background-color: #8696b6;
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,23 @@
 | 
			
		||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
 | 
			
		||||
 | 
			
		||||
import { CharacterOverviewComponent } from './character-overview.component';
 | 
			
		||||
 | 
			
		||||
describe('CharacterOverviewComponent', () => {
 | 
			
		||||
  let component: CharacterOverviewComponent;
 | 
			
		||||
  let fixture: ComponentFixture<CharacterOverviewComponent>;
 | 
			
		||||
 | 
			
		||||
  beforeEach(async () => {
 | 
			
		||||
    await TestBed.configureTestingModule({
 | 
			
		||||
      imports: [CharacterOverviewComponent]
 | 
			
		||||
    })
 | 
			
		||||
    .compileComponents();
 | 
			
		||||
    
 | 
			
		||||
    fixture = TestBed.createComponent(CharacterOverviewComponent);
 | 
			
		||||
    component = fixture.componentInstance;
 | 
			
		||||
    fixture.detectChanges();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should create', () => {
 | 
			
		||||
    expect(component).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@ -0,0 +1,22 @@
 | 
			
		||||
import {Component, Input} from '@angular/core';
 | 
			
		||||
import {GameModel} from "../../project/game-model/GameModel";
 | 
			
		||||
import {MatActionList, MatListItem} from "@angular/material/list";
 | 
			
		||||
import {MatIcon} from "@angular/material/icon";
 | 
			
		||||
import {NgForOf} from "@angular/common";
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-character-overview',
 | 
			
		||||
  standalone: true,
 | 
			
		||||
  imports: [
 | 
			
		||||
    MatActionList,
 | 
			
		||||
    MatIcon,
 | 
			
		||||
    MatListItem,
 | 
			
		||||
    NgForOf
 | 
			
		||||
  ],
 | 
			
		||||
  templateUrl: './character-overview.component.html',
 | 
			
		||||
  styleUrl: './character-overview.component.scss'
 | 
			
		||||
})
 | 
			
		||||
export class CharacterOverviewComponent {
 | 
			
		||||
 | 
			
		||||
  @Input() gameModel: GameModel | undefined
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user