public async Task<bool> Execute() { // Timer anti spam if (!_timer.IsFinished) return true; _timer.Reset(); // Clean list of actions from fullfilled not repeated if (_toDelete.Any()) { foreach (var molecule in _toDelete) { _actions.Remove(molecule); } _toDelete.Clear(); } if (_currentAction != null) { switch (_currentAction.Status.State) { case ActionResult.Init: case ActionResult.Running: case ActionResult.Refresh: await _currentAction.Execute(); GarrisonButler.Diagnostic("[Sequencer] Pulsed Action {0}, status => {1}", _currentAction.Name(), _currentAction.Status); return true; case ActionResult.Done: case ActionResult.Failed: GarrisonButler.Diagnostic("[Sequencer] Failed Action {0}, status => {1}", _currentAction.Name(), _currentAction.Status); _currentAction = null; break; } } GarrisonButler.Diagnostic("[Sequencer] Action empty, looking for new one."); // Find new action to perform foreach (var mol in _actions) { var action = mol.BigAction; if (action.IsFulfilled()) { //GarrisonButler.Diagnostic("[Sequencer] Skipping Action {0} since Fullfilled ****************************************************** ", action.Name()); if (!action.ShouldRepeat) { GarrisonButler.Diagnostic("[Sequencer] Action {0} will be deleted since Fullfilled ****************************************************** ", action.Name()); _toDelete.Add(mol); } continue; } if (!action.RequirementsMet()) { //GarrisonButler.Diagnostic("[Sequencer] Skipping Action {0} since Requirements not met ****************************************************** ", action.Name()); continue; } _currentAction = action; GarrisonButler.Diagnostic("[Sequencer] new Action {0}", action.Name()); return true; } GarrisonButler.Log("[Sequencer] All actions fulfilled, Nothing left to do."); return false; }
public Molecule(Atom bigAction, int priority) { BigAction = bigAction; Priority = priority; }