public bool CanExecuteAction(Action action) { float lastTime = PlayerPrefs.GetFloat(action.tag, 0); if (lastTime == 0) { if (action.tag != Constants.Actions.SLEEP_NIGHT && action.tag != Constants.Actions.TAKE_NAP) { return(true); } } int lastTimeInMinutes = clock.GetTotalMinutes((long)lastTime); int currentTimeInMinutes = clock.GetTotalMinutes((long)clock.currentGameTime); int minutesDiff = currentTimeInMinutes - lastTimeInMinutes; int hour = clock.GetHours((long)clock.currentGameTime); switch (action.tag) { case Constants.Actions.EAT_MEAL: return(minutesDiff > 4 * 60); case Constants.Actions.EAT_SNACK: return(minutesDiff > 2 * 60); case Constants.Actions.LOSE_TIME: return(minutesDiff > 60); case Constants.Actions.SLEEP_NIGHT: return(hour >= 23 || hour < 3); case Constants.Actions.TAKE_NAP: return(hour >= 13 && minutesDiff > 8 * 60); case Constants.Actions.USE_BATHROOM: return(minutesDiff > 3 * 60); case Constants.Actions.WATCH_MOVIE: return(minutesDiff > 1 * 60); case Constants.Actions.WRITE_THESIS: return(minutesDiff > 1 * 60); } return(true); }