Implement GameModel Support for Character Specific Gamesystems
All checks were successful
E2E Testing / test (push) Successful in 1m42s
All checks were successful
E2E Testing / test (push) Successful in 1m42s
This commit is contained in:
parent
e890d89cc8
commit
28a520a995
@ -1,9 +1,35 @@
|
|||||||
import {ModelComponent} from "../ModelComponent";
|
import {ModelComponent} from "../ModelComponent";
|
||||||
import {ModelComponentType} from "../ModelComponentType";
|
import {ModelComponentType} from "../ModelComponentType";
|
||||||
|
import { Gamesystem } from "../gamesystems/Gamesystem";
|
||||||
|
import { ProductGamesystem } from "../gamesystems/ProductGamesystem";
|
||||||
|
import { ProductTemplateGamesystem } from "../gamesystems/ProductTemplateGamesystem";
|
||||||
|
import { SimpleGamesystem } from "../gamesystems/SimpleGamesystem";
|
||||||
|
import { SimpleTemplateGamesystem } from "../gamesystems/SimpleTemplateGamesystem";
|
||||||
|
|
||||||
export class Character extends ModelComponent{
|
export class Character extends ModelComponent{
|
||||||
|
|
||||||
|
characterSpecificGamesystems: Gamesystem<any, any>[] = []
|
||||||
|
|
||||||
constructor(componentName: string, componentDescription: string) {
|
constructor(componentName: string, componentDescription: string) {
|
||||||
super(componentName, componentDescription, ModelComponentType.CHARACTER);
|
super(componentName, componentDescription, ModelComponentType.CHARACTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addCharacterSpecificSimpleGamesystem(referenceSystem: SimpleGamesystem) {
|
||||||
|
if(!this.findCharacterSpecificGameystemByName(referenceSystem.componentName)) {
|
||||||
|
const templateGamesystem = new SimpleTemplateGamesystem(referenceSystem);
|
||||||
|
this.characterSpecificGamesystems.push(templateGamesystem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addCharacterSpecificProductTemplateGamesystem(referenceSystem: ProductGamesystem) {
|
||||||
|
if(!this.findCharacterSpecificGameystemByName(referenceSystem.componentName)) {
|
||||||
|
const templateGamesystem = new ProductTemplateGamesystem(referenceSystem);
|
||||||
|
this.characterSpecificGamesystems.push(templateGamesystem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
findCharacterSpecificGameystemByName(referenceName: string) {
|
||||||
|
return this.characterSpecificGamesystems.find(gamesystem => gamesystem.componentName === referenceName) != undefined
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
import { ProductGamesystem } from "./ProductGamesystem";
|
||||||
|
import { SimpleGamesystem } from "./SimpleGamesystem";
|
||||||
|
import { SimpleTemplateGamesystem } from "./SimpleTemplateGamesystem";
|
||||||
|
|
||||||
|
export class ProductTemplateGamesystem extends ProductGamesystem {
|
||||||
|
|
||||||
|
referenceSystem: ProductGamesystem
|
||||||
|
|
||||||
|
constructor(referenceSystem: ProductGamesystem) {
|
||||||
|
super(referenceSystem.componentName, referenceSystem.componentDescription)
|
||||||
|
this.referenceSystem = referenceSystem;
|
||||||
|
|
||||||
|
this.innerGamesystems = referenceSystem.innerGamesystems.map(innerGamesystem => {
|
||||||
|
if(innerGamesystem instanceof SimpleGamesystem) {
|
||||||
|
return new SimpleTemplateGamesystem(innerGamesystem)
|
||||||
|
} else {
|
||||||
|
return new ProductTemplateGamesystem(innerGamesystem as ProductTemplateGamesystem)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
this.generateFromChildsystems();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,11 +1,7 @@
|
|||||||
import {Gamesystem} from "./Gamesystem";
|
import {Gamesystem} from "./Gamesystem";
|
||||||
|
import { SimpleTemplateGamesystem } from "./SimpleTemplateGamesystem";
|
||||||
import {SimpleState} from "./states/SimpleState";
|
import {SimpleState} from "./states/SimpleState";
|
||||||
import {SimpleTransition} from "./transitions/SimpleTransition";
|
import {SimpleTransition} from "./transitions/SimpleTransition";
|
||||||
import {State} from "./states/State";
|
|
||||||
import {Transition} from "./transitions/Transition";
|
|
||||||
import {ProductState} from "./states/ProductState";
|
|
||||||
import {ProductTransition} from "./transitions/ProductTransition";
|
|
||||||
import {ProductGamesystem} from "./ProductGamesystem";
|
|
||||||
export class SimpleGamesystem extends Gamesystem<SimpleState, SimpleTransition> {
|
export class SimpleGamesystem extends Gamesystem<SimpleState, SimpleTransition> {
|
||||||
|
|
||||||
|
|
||||||
@ -55,4 +51,8 @@ export class SimpleGamesystem extends Gamesystem<SimpleState, SimpleTransition>
|
|||||||
|
|
||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected findStateByStateLabel(stateLabel: string) {
|
||||||
|
return this.states.find(state => stateLabel === stateLabel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
import { SimpleGamesystem } from "./SimpleGamesystem";
|
||||||
|
import { ScriptAccountAction } from "./actions/ScriptAccountAction";
|
||||||
|
import { ScriptAccountCondition } from "./conditions/ScriptAccountCondition";
|
||||||
|
import { SimpleState } from "./states/SimpleState";
|
||||||
|
import { SimpleTransition } from "./transitions/SimpleTransition";
|
||||||
|
|
||||||
|
export class SimpleTemplateGamesystem extends SimpleGamesystem {
|
||||||
|
referenceSystem: SimpleGamesystem
|
||||||
|
|
||||||
|
constructor(referenceSystem: SimpleGamesystem) {
|
||||||
|
super(referenceSystem.componentName, referenceSystem.componentDescription)
|
||||||
|
this.referenceSystem = referenceSystem;
|
||||||
|
|
||||||
|
this.referenceSystem.states.forEach(state => {
|
||||||
|
const templateState = new SimpleState(state.stateLabel, state.stateDescription)
|
||||||
|
templateState.initial = state.initial;
|
||||||
|
templateState.conditions = state.conditions.map(condition => ScriptAccountCondition.constructScriptAccountCondition(condition.scriptAccount, condition.minValue, condition.maxValue)!)
|
||||||
|
|
||||||
|
this.states.push(templateState);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.referenceSystem.transitions.forEach(transition => {
|
||||||
|
const startingState = this.findStateByStateLabel(transition.startingState.stateLabel);
|
||||||
|
const endingState = this.findStateByStateLabel(transition.endingState.stateLabel);
|
||||||
|
|
||||||
|
const templateTransition = new SimpleTransition(startingState!, endingState!)
|
||||||
|
|
||||||
|
templateTransition.scriptAccountConditions = transition.scriptAccountConditions.map(condition =>
|
||||||
|
ScriptAccountCondition.constructScriptAccountCondition(condition.scriptAccount, condition.minValue, condition.maxValue)!)
|
||||||
|
|
||||||
|
templateTransition.scriptAccountActions = transition.scriptAccountActions.map(action => {
|
||||||
|
return new ScriptAccountAction(action.scriptAccount, action.changingValue);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.transitions.push(templateTransition);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user