public Keypad(string keypadName) { Name = keypadName; Locked = false; passcodes = new Dictionary <string, string>(); Reset(); // initialize the statemachine keypadStateMachine = new StateMachine(); keypadStateMachine.overrideState("idle"); // Set up the transititions, default to idle keypadStateMachine.transitions.Add("timer_wait", () => { return((keypadStateMachine.timerActive()) ? "timer_wait" : "idle"); }); keypadStateMachine.actions.Add("failed", () => { password = ""; keypadStateMachine.startTimer(3); keypadStateMachine.overrideState("timer_wait"); }); keypadStateMachine.actions.Add("passed", () => { password = ""; keypadStateMachine.startTimer(3); keypadStateMachine.overrideState("timer_wait"); }); keypadStateMachine.actions.Add("clear", () => { password = ""; keypadStateMachine.overrideState("idle"); }); keypadStateMachine.actions.Add("idle", () => { if ((CurrentTries < MaxTries) && doorHandler.getState() == "locked") { if (password == "") { Clear(); } // the door has closed, unlock the keypad if it's not locked from tries. Locked = false; } }); }
public DoorHandler(string doorName, IMyGridTerminalSystem gts) { name = doorName; // TODO: find the door. doorObj = (IMyDoor)gts.GetBlockWithName(name); // initialize the statemachine doorStateMachine = new StateMachine(); doorStateMachine.overrideState("closing"); // Set up the transititions, default to locked if no door. doorStateMachine.transitions.Add("enable", () => { if (doorObj == null) { return("locked"); } return((doorObj.Enabled) ? "opening" : "enable"); }); doorStateMachine.transitions.Add("opening", () => { if (doorObj == null) { return("locked"); } return((doorObj.Status == DoorStatus.Open) ? "open_wait" : "opening"); }); doorStateMachine.transitions.Add("timer_wait", () => { if (doorObj == null) { return("locked"); } return((doorStateMachine.timerActive()) ? "timer_wait" : "closing"); }); doorStateMachine.transitions.Add("closing", () => { if (doorObj == null) { return("locked"); } return((doorObj.Status == DoorStatus.Closed) ? "locked" : "closing"); }); // no transition for locked. doorStateMachine.actions.Add("enable", () => { if (doorObj == null) { return; } doorObj.Enabled = true; }); doorStateMachine.actions.Add("opening", () => { if (doorObj == null) { return; } if (doorObj.Status == DoorStatus.Opening) { return; } doorObj.OpenDoor(); }); doorStateMachine.actions.Add("open_wait", () => { if (doorObj == null) { return; } doorStateMachine.startTimer(5); doorStateMachine.overrideState("timer_wait"); }); doorStateMachine.actions.Add("closing", () => { if (doorObj == null) { return; } if (doorObj.Status == DoorStatus.Closing) { return; } doorObj.Enabled = true; doorObj.CloseDoor(); }); doorStateMachine.actions.Add("locked", () => { if (doorObj == null) { return; } doorObj.Enabled = false; }); }