@aurigma/design-atoms
Version:
Design Atoms is a part of Customer's Canvas SDK which allows for manipulating individual design elements through your code.
60 lines • 3.46 kB
JavaScript
import { Exception } from "@aurigma/design-atoms-model/Exception";
import { EventObject } from "@aurigma/design-atoms-model/EventObject";
import { InputState } from "./../../../Input/InputManager/IInputManager";
export class CreateInputHandlerStateMachine {
constructor() {
this._stateChanged = new EventObject();
this._currentState = CreateInputHandlerState.Initial;
this._allowedTransitions = new Map([
[CreateInputHandlerState.Initial, [CreateInputHandlerState.PointSelected, CreateInputHandlerState.RectangleSelectionStarted]],
[CreateInputHandlerState.RectangleSelectionStarted, [CreateInputHandlerState.RectangleSelected, CreateInputHandlerState.RectangleSelectionChanged]],
[CreateInputHandlerState.RectangleSelectionChanged, [CreateInputHandlerState.RectangleSelected, CreateInputHandlerState.RectangleSelectionChanged]],
[CreateInputHandlerState.RectangleSelected, [CreateInputHandlerState.Initial]],
[CreateInputHandlerState.PointSelected, [CreateInputHandlerState.Initial]],
]);
}
onMove(params) {
switch (params.state) {
case InputState.Started:
this._changeState(CreateInputHandlerState.RectangleSelectionStarted, params.startWorkspace);
this._changeState(CreateInputHandlerState.RectangleSelectionChanged, params.workspace);
// TODO: It's strange decision, but there is no time to change logic. Need to refactor to new Input System
break;
case InputState.InProgress:
this._changeState(CreateInputHandlerState.RectangleSelectionChanged, params.workspace);
break;
case InputState.Finished:
this._changeState(CreateInputHandlerState.RectangleSelected, params.workspace);
this._changeState(CreateInputHandlerState.Initial, params.workspace);
break;
}
}
onLongTap(params) {
this._changeState(CreateInputHandlerState.PointSelected, params.workspace);
this._changeState(CreateInputHandlerState.Initial, params.workspace);
}
onClick(params) {
this._changeState(CreateInputHandlerState.PointSelected, params.workspace);
this._changeState(CreateInputHandlerState.Initial, params.workspace);
}
addStateChanged(handler) { this._stateChanged.add(handler); }
removeStateChanged(handler) { this._stateChanged.remove(handler); }
_changeState(state, point) {
if (!this._allowedTransitions.get(this._currentState).includes(state))
throw new Exception(`${this._currentState} to ${state} transition is restricted`);
this._currentState = state;
this._stateChanged.notify({
state: state,
point: point
});
}
}
export var CreateInputHandlerState;
(function (CreateInputHandlerState) {
CreateInputHandlerState["Initial"] = "Initial";
CreateInputHandlerState["PointSelected"] = "PointSelected";
CreateInputHandlerState["RectangleSelectionStarted"] = "RectangleSelectionStarted";
CreateInputHandlerState["RectangleSelectionChanged"] = "RectangleSelectionChanged";
CreateInputHandlerState["RectangleSelected"] = "RectangleSelected";
})(CreateInputHandlerState || (CreateInputHandlerState = {}));
//# sourceMappingURL=CreateInputHandlerStateMachine.js.map