dotup-ts-node-skills-game
Version:
Develop alexa typescript games
112 lines (110 loc) • 4.64 kB
JavaScript
"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