UNPKG

dotup-ts-node-skills-game

Version:
112 lines (110 loc) 4.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const GadgetBuilder_1 = require("../Builder/GadgetBuilder"); const RollcallBuilder_1 = require("../Builder/RollcallBuilder"); const Enumerations_1 = require("../Constants/Enumerations"); const RollcallState_1 = require("./RollcallState"); class Rollcall { constructor(context, requirements) { this.context = context; this.requirements = requirements; this.model = this.loadModel(); } Start() { const rollcallBuilder = new RollcallBuilder_1.RollCallBuilder(); this.context.shouldEndSession(undefined); this.model.state = RollcallState_1.RollcallState.Active; // Write context this.createStartDirective(); } StopRollcall() { const lights = GadgetBuilder_1.GadgetBuilder.setLightsOff([]); this.context.AddDirective(lights); // Done if (this.isValid()) { this.model.state = RollcallState_1.RollcallState.Completed; } else { this.model.state = RollcallState_1.RollcallState.Cancelled; } } GameEngineInputHandlerEvent() { const request = this.context.request.getInputHandlerEventRequest(); request.events.forEach(event => { this.InputHandlerEvent(event); }); } CancelRollcall() { const stop = GadgetBuilder_1.GadgetBuilder.stopInputHandler(this.context.request.getSessionAttributes().originatingRequestId); this.context.AddDirective(stop); const lights = GadgetBuilder_1.GadgetBuilder.setLightsOff([]); this.context.AddDirective(lights); this.model.state = RollcallState_1.RollcallState.Cancelled; } InputHandlerEvent(item) { const request = this.context.request.getInputHandlerEventRequest(); const session = this.context.request.getSessionAttributes(); if (request.originatingRequestId !== session.originatingRequestId) { // this.context.shouldEndSession(false); console.log(`event: ${item.name} | request ${request.originatingRequestId} !==!== session ${session.originatingRequestId}`); return; } const event = item.name.split('_'); switch (event[0]) { case Enumerations_1.EventNames.ButtonDown: item.inputEvents.forEach(inputEvent => { this.ButtonDown(event[1], inputEvent); }); break; case Enumerations_1.EventNames.ButtonGroupPressed: this.ButtonGroupDown(event[1], item.inputEvents); break; case Enumerations_1.EventNames.Timeout: // this.model.completed = true; console.log('ROLLCALL timeout'); this.OnTimeout(item); } } ButtonGroupDown(buttonName, inputEvent) { // TODO: Fehlerbehandlung // if (nextButton === undefined && !this.isValid()) { // throw new Error('wrong configuration. No more rollcall buttons and model is invalid.'); // } const group = this.model.rollcallButtonGroups.find(item => item.name === buttonName); for (let buttonIndex = 0; buttonIndex < group.buttons.length; buttonIndex += 1) { group.buttons[buttonIndex].id = inputEvent[buttonIndex].gadgetId; } group.buttons.forEach(button => { // Next button this.OnButtonFound(button.name, button.id, undefined); }); if (this.isValid()) { this.StopRollcall(); } else { this.Start(); } } ButtonDown(buttonName, inputEvent) { const foundButton = this.model.rollcallButtons.find(item => item.name === buttonName); if (foundButton.id !== undefined) { throw new Error(`${buttonName} already assigned to ${foundButton.id}`); } foundButton.id = inputEvent.gadgetId; // Next button const nextButton = this.model.rollcallButtons.find(item => item.id !== undefined); if (nextButton === undefined && !this.isValid()) { throw new Error('wrong configuration. No more rollcall buttons and model is invalid.'); } this.OnButtonFound(foundButton.name, foundButton.id, nextButton); } loadModel() { const session = this.context.request.getSessionAttributes(); if (session.rollcall === undefined) { throw new Error('RollcallModel === undefined'); } return session.rollcall; } } exports.Rollcall = Rollcall; //# sourceMappingURL=Rollcall.js.map