public void updateView(bool updateAll) { if (_DEBUG_lastState != userInteractionState) { Debug.Log(userInteractionState); _DEBUG_lastState = userInteractionState; } List<Hexagon> toBeUpdatedHexagons = new List<Hexagon>(); if (updateAll) { toBeUpdatedHexagons.AddRange(Map.instance.Hexagons); } else { if (_prevHexagon != null) { toBeUpdatedHexagons.Add(_prevHexagon); toBeUpdatedHexagons.AddRange(_prevHexagon.SurroundingHexagons); } } foreach (var toBeUpdatedHexagon in toBeUpdatedHexagons) { toBeUpdatedHexagon.updateMaterial(); } moveButtonTo(GridManager.instance.MoveButton, _prevHexagon, new Vector3(50, 60, 0)); moveButtonTo(GridManager.instance.InfectButton, _prevHexagon, new Vector3(-50, 60, 0)); GridManager.instance.MoveButton.GetComponent<UnityEngine.UI.Button>().interactable = isMoveButtonActive(_prevHexagon); GridManager.instance.InfectButton.GetComponent<UnityEngine.UI.Button>().interactable = isInfectButtonActive(_prevHexagon); }
public UserInteractionManager() { Log.Logger.Information($"Creating UserInteractionManager"); SnoozeTimer = new Timer(); SnoozeTimer.Enabled = false; SnoozeTimer.AutoReset = false; SnoozeTimer.Elapsed += SnoozeTimer_Elapsed; ElapsedActiveReminders = new List <ReminderEntity>(); UserState = UserInteractionState.Disabled; Log.Logger.Information($"Creating UserInteractionManager done"); }
/// <summary> /// Sets SnoozeTime user state and starts the snooze timer countdown. /// </summary> protected virtual void GoToSnoozeState(DateTime now, int?remainingSnoozeIntervalMs = null) { UserState = UserInteractionState.SnoozeTime; SnoozeTimerStarted = now; //determine interval int configuredIntervalMs = SnoozeIntervalMinutes.Value * 60 * 1000; int snoozeIntervalToUse = remainingSnoozeIntervalMs ?? configuredIntervalMs; //start timer SnoozeTimer.Interval = snoozeIntervalToUse; Log.Logger.Information($"Starting snooze timer with intveral [Interval = {snoozeIntervalToUse} ms]"); SnoozeTimer.Start(); }
/// <summary> /// Immediately fires next event if there is any reminder in the list, or goes to NoElapsedReminders state otherwise. /// </summary> protected virtual void GoToRingingOrIdleState(DateTime now) { if (ElapsedActiveReminders.Any()) { var nextToRing = ElapsedActiveReminders.First(); GoToRingingState(nextToRing.Name, now); } else { UserState = UserInteractionState.NoElapsedReminders; Log.Logger.Information($"No elapsed reminders in the list. GoToRingingOrIdleState method is setting state to NoElapsedReminders"); } }
protected virtual void HandleSnoozeElapsed(DateTime now) { if (UserState != UserInteractionState.SnoozeTime) { //only expected to happen as a result of not well handled concurrency //this may put component in a deadlock probably! Will disable+enabled unblock the state? Log.Logger.Error($"UserState is {UserState} instead of {UserInteractionState.SnoozeTime} after snooze period elapsed. Ignoring timer event."); return; } var nextReminderToRing = ElapsedActiveReminders.FirstOrDefault(); if (nextReminderToRing == null) { //only expected to happen as a result of not well handled concurrency Log.Logger.Error($"No reminder found after snooze period elapsed. Going to {UserInteractionState.NoElapsedReminders} state."); UserState = UserInteractionState.NoElapsedReminders; return; } GoToRingingState(nextReminderToRing.Name, now); }
protected virtual void HandleStatusChangeAndSetIsEnabled(bool wasEnabledBefore, bool isEnabled) { bool startedNow = !wasEnabledBefore && isEnabled; bool stoppedNow = wasEnabledBefore && !isEnabled; DateTime now = DateTime.UtcNow; if (startedNow) { Log.Logger.Information($"Starting UserInteractionManager"); GoToRingingOrIdleState(now); Log.Logger.Information($"Starting UserInteractionManager done"); } else if (stoppedNow) { SnoozeTimer.Stop(); UserState = UserInteractionState.Disabled; Log.Logger.Information($"Stopped UserInteractionManager"); } else { Log.Logger.Information($"UserInteractionManager already {(isEnabled ? "started" : "stopped")}"); } }
/// <summary> /// Set user state and fire ringing event. /// </summary> /// <param name="reminderName"></param> /// <param name="now"></param> protected void GoToRingingState(string reminderName, DateTime now) { UserState = UserInteractionState.WaitingUserResponse; OnRingingNeeded(reminderName); }
public UserInteractionStateChangedEventArgs(UserInteractionState userInteractionstate) { UserInteractionState = userInteractionstate; }
void OnReleasingHexagon(Hexagon hexagon) { switch (userInteractionState) { case UserInteractionState.Idle: userInteractionState = UserInteractionState.Idle; break; case UserInteractionState.HexagonSelected: userInteractionState = UserInteractionState.HexagonSelected; break; case UserInteractionState.StartedMoving: userInteractionState = UserInteractionState.StartedMoving; break; case UserInteractionState.StartedDragging: if (hexagon.isAccessible() && !hexagon.HexagonContainsFungus) { EndDrag(hexagon); selectDifferentHexagon(null); userInteractionState = UserInteractionState.Idle; } else { userInteractionState = UserInteractionState.HexagonSelected; } break; } updateView(); }
void OnPressingNowhere() { switch (userInteractionState) { case UserInteractionState.Idle: case UserInteractionState.HexagonSelected: case UserInteractionState.StartedMoving: case UserInteractionState.StartedDragging: selectDifferentHexagon(null); userInteractionState = UserInteractionState.Idle; break; } updateView(); }
void OnPressingHexagon(Hexagon hexagon) { switch (userInteractionState) { case UserInteractionState.Idle: if (hexagon.HexagonContainsFungus) { selectDifferentHexagon(hexagon); userInteractionState = UserInteractionState.HexagonSelected; if (isMoveButtonActive(hexagon)) { StartDrag(hexagon); userInteractionState = UserInteractionState.StartedDragging; } } else { userInteractionState = UserInteractionState.Idle; } break; case UserInteractionState.HexagonSelected: if (isMoveButtonActive(hexagon) && hexagon == _prevHexagon) { StartDrag(hexagon); userInteractionState = UserInteractionState.StartedDragging; } else { userInteractionState = UserInteractionState.HexagonSelected; } break; case UserInteractionState.StartedMoving: userInteractionState = UserInteractionState.StartedMoving; break; case UserInteractionState.StartedDragging: userInteractionState = UserInteractionState.StartedDragging; break; } updateView(); }
private void OnMoveClicked() { switch (userInteractionState) { case UserInteractionState.Idle: userInteractionState = UserInteractionState.Idle; break; case UserInteractionState.HexagonSelected: StartDrag(_prevHexagon); userInteractionState = UserInteractionState.StartedMoving; break; case UserInteractionState.StartedMoving: userInteractionState = UserInteractionState.StartedMoving; break; case UserInteractionState.StartedDragging: userInteractionState = UserInteractionState.StartedDragging; break; } updateView(); }
private void OnInfectClicked() { switch (userInteractionState) { case UserInteractionState.Idle: userInteractionState = UserInteractionState.Idle; break; case UserInteractionState.HexagonSelected: if (isInfectButtonActive(_prevHexagon)) { _prevHexagon.InfectTree(); selectDifferentHexagon(null); userInteractionState = UserInteractionState.Idle; } else { userInteractionState = UserInteractionState.HexagonSelected; } break; case UserInteractionState.StartedMoving: userInteractionState = UserInteractionState.StartedMoving; break; case UserInteractionState.StartedDragging: userInteractionState = UserInteractionState.StartedDragging; break; } updateView(); }