//ExecuteTacticsItem protected void ResetPreviousTacticsItem(ref AllyTacticsItem PreviousExecutionItem, ref AllyMember PreviousExecutionTarget) { //Do not reset current, only past tactics item. PreviousExecutionItem = null; PreviousExecutionTarget = null; }
/// <summary> /// Compares Current To Previous Tactics Item To Determine If New Tactics Item Was Obtained. /// If Current Tactics Equal Past Tactics, Condition Will Fail. /// CheckPreviousNullInstead Boolean Will Check Previous Tactics Instead. /// </summary> public bool HasNewTacticsItem(ref AllyTacticsItem CurrentExecutionItem, ref AllyMember CurrentExecutionTarget, ref AllyTacticsItem PreviousExecutionItem, ref AllyMember PreviousExecutionTarget, bool CheckPreviousNullInstead) { if (CheckPreviousNullInstead == false) { if (CurrentExecutionItem == PreviousExecutionItem && CurrentExecutionTarget == PreviousExecutionTarget) { return(false); } else { return(true); } } else { if (PreviousExecutionItem != null && PreviousExecutionTarget != null) { return(true); } return(false); } }
/// <summary> /// Resets Execution Items And Targets, Previous and Current. /// </summary> public bool ResetTacticsItems(ref AllyTacticsItem CurrentExecutionItem, ref AllyMember CurrentExecutionTarget, ref AllyTacticsItem PreviousExecutionItem, ref AllyMember PreviousExecutionTarget) { CurrentExecutionItem = null; CurrentExecutionTarget = null; PreviousExecutionItem = null; PreviousExecutionTarget = null; return(true); }
protected void ResetCurrentTacticsItem(ref AllyTacticsItem CurrentExecutionItem, ref AllyMember CurrentExecutionTarget, ref AllyTacticsItem PreviousExecutionItem, ref AllyMember PreviousExecutionTarget) { //Setting Previous Tactics Item To Current Item PreviousExecutionItem = CurrentExecutionItem; PreviousExecutionTarget = CurrentExecutionTarget; //Resetting Current Tactics Item CurrentExecutionItem = null; CurrentExecutionTarget = null; }
protected virtual AllyTacticsItem EvaluateTacticalConditionOrders(List <AllyTacticsItem> _tactics) { int _order = int.MaxValue; AllyTacticsItem _exeTactic = null; foreach (var _tactic in _tactics) { if (_tactic.order < _order) { _order = _tactic.order; _exeTactic = _tactic; } } return(_exeTactic); }
//EvaluateTacticsSuccessful protected (AllyTacticsItem _tacticItem, AllyMember _target) EvaluateTacticalConditionOrders() { int _order = int.MaxValue; AllyTacticsItem _exeTactic = null; AllyMember _exeTarget = null; foreach (var _tactic in evalTactics) { if (_tactic.Key.order < _order) { _order = _tactic.Key.order; _exeTactic = _tactic.Key; _exeTarget = _tactic.Value; } } return(_exeTactic, _exeTarget); }
/// <summary> /// Executes The Given Tactics Item with Target. /// StopPerformingTask Determines If Stop Performing Task Should Be Executed Instead. /// Make Sure The CurrentTacticsItem and Target aren't null when executing an action. /// If Stopping, make sure previous tactics item isn't null either. /// Current will be reset if not stopping, and previous will be reset after stopping. /// </summary> public bool ExecuteTacticsItem(ref AllyTacticsItem CurrentExecutionItem, ref AllyMember CurrentExecutionTarget, ref AllyTacticsItem PreviousExecutionItem, ref AllyMember PreviousExecutionTarget, bool StopPerformingTask) { if (StopPerformingTask == false) { if (CurrentExecutionItem != null && CurrentExecutionTarget != null) { //Not Stopping, Execute Current Item CurrentExecutionItem.action.actionToPerform(allyMember, aiController, CurrentExecutionTarget); ResetCurrentTacticsItem(ref CurrentExecutionItem, ref CurrentExecutionTarget, ref PreviousExecutionItem, ref PreviousExecutionTarget); } else { //Resetting Current Tactics Item CurrentExecutionItem = null; CurrentExecutionTarget = null; //Return Failure If Current Item is Null when trying to execute action. return(false); } } else { if (PreviousExecutionItem != null && PreviousExecutionTarget != null) { //Use Previous Execution Item To Stop Performing Task PreviousExecutionItem.action.stopPerformingTask(allyMember, aiController, PreviousExecutionTarget); ResetPreviousTacticsItem(ref PreviousExecutionItem, ref PreviousExecutionTarget); } else { ResetPreviousTacticsItem(ref PreviousExecutionItem, ref PreviousExecutionTarget); //Return Failure If Previous Item is Null when trying to stop execution. return(false); } } return(true); }
/// <summary> /// Returns True if Evaluating Tactics Successfully Returns A Tactics Item. /// </summary> public bool EvaluateTacticsSuccessful(ref AllyTacticsItem CurrentExecutionItem, ref AllyMember CurrentExecutionTarget) { //Temporary Fix for PartyManager Delaying Initial AllyInCommand Methods if (allyInCommand == null) { CurrentExecutionItem = null; CurrentExecutionTarget = null; return(false); } evalTactics.Clear(); foreach (var _tactic in AllyTacticsList) { //If Condition is True and //Can Perform The Given Action var _boolTargetTuple = _tactic.condition.action(allyMember, aiController); if (_boolTargetTuple._success && _tactic.action.canPerformAction(allyMember, aiController, _boolTargetTuple._target)) { evalTactics.Add(_tactic, _boolTargetTuple._target); } } if (evalTactics.Count > 0) { var _currentItem = EvaluateTacticalConditionOrders(); CurrentExecutionItem = _currentItem._tacticItem; CurrentExecutionTarget = _currentItem._target; return(true); } else { CurrentExecutionItem = null; CurrentExecutionTarget = null; return(false); } }
protected virtual void ExecuteAllyTacticsList() { if (!AllyComponentsAreReady) { Debug.LogError("Not All Components are Available, cannot execute Tactics."); UnLoadAndCancelTactics(); UnsubFromEvents(); Destroy(this); } // Pause Ally Tactics If Ally Is Paused // Due to the Game Pausing Or Control Pause Mode // Is Active if (myEventHandler.bAllyIsPaused) { return; } //Don't Want to Execute Tactics While in the //Middle of an Ability Use if (myEventHandler.bIsUsingAbility) { return; } //Temporary Fix for PartyManager Delaying Initial AllyInCommand Methods if (allyInCommand == null) { return; } evalTactics.Clear(); foreach (var _tactic in AllyTacticsList) { //If Condition is True and //Can Perform The Given Action if (_tactic.condition.action(allyMember) && _tactic.action.canPerformAction(allyMember)) { evalTactics.Add(_tactic); } } if (evalTactics.Count > 0) { previousExecutionItem = currentExecutionItem; currentExecutionItem = EvaluateTacticalConditionOrders(evalTactics); //Execution Item isn't null and Previous Entry Doesn't Equal Current One //Prevents AddActionItem Event Being Called Constantly if (currentExecutionItem != null && currentExecutionItem.action != null && currentExecutionItem.action.actionToPerform != null && bCanAddActionItemToQueue ) { myEventHandler.CallOnAddActionItemToQueue(currentExecutionItem.action); } } else { if (currentExecutionItem != null) { myEventHandler.CallOnRemoveAIActionFromQueue(); } //Setting Previous To Null Is Equivalent To //A Boolean That Gets Set To True Once an //Action Gets Added And False When Removing previousExecutionItem = null; currentExecutionItem = null; } }