private static void ProcessParallelMethods() { if (Mode != BehaviorManagerMode.Parallel) { return; } MyAPIGateway.Parallel.Start(() => { try { Mode = BehaviorManagerMode.ParallelWorking; //Logger.MsgDebug("Start Parallel Methods", DebugTypeEnum.General); ProcessCollisionChecksParallel(); ProcessTargetingParallel(); ProcessAutoPilotParallel(); ProcessWeaponsParallel(); ProcessTriggersParallel(); Mode = BehaviorManagerMode.MainThread; //Logger.MsgDebug("End Parallel Methods", DebugTypeEnum.General); } catch (Exception e) { Mode = BehaviorManagerMode.Parallel; Logger.MsgDebug("Exception in Parallel Calculations", DebugTypeEnum.General); Logger.MsgDebug(e.ToString(), DebugTypeEnum.General); } }); }
public static void ProcessBehaviors() { if (_debugDraw) { for (int i = Behaviors.Count - 1; i >= 0; i--) { if (!Behaviors[i].IsClosed() && Behaviors[i].IsAIReady()) { Behaviors[i].DebugDrawWaypoints(); } } } _barrageCounter++; if (Mode != BehaviorManagerMode.None) { try { ProcessParallelMethods(); ProcessMainThreadMethods(); } catch (Exception e) { Logger.MsgDebug("Exception in Main Behavior Processing", DebugTypeEnum.General); Logger.MsgDebug(e.ToString(), DebugTypeEnum.General); } } else { _behaviorCounter++; } if ((_barrageCounter % 10) == 0) { ProcessWeaponsBarrage(); _barrageCounter = 0; } if (_behaviorCounter == 15) { for (int i = Behaviors.Count - 1; i >= 0; i--) { if (Behaviors[i].IsClosed() || Behaviors[i].BehaviorTerminated) { Behaviors.RemoveAt(i); continue; } } //Logger.MsgDebug("Start Parallel For All Behaviors", DebugTypeEnum.General); Mode = BehaviorManagerMode.Parallel; _behaviorCounter = 0; } }
private static void ProcessMainThreadMethods() { if (Mode != BehaviorManagerMode.MainThread) { return; } ProcessAutoPilotMain(); ProcessWeaponsMain(); ProcessTriggersMain(); ProcessDespawnConditions(); ProcessMainBehavior(); Mode = BehaviorManagerMode.None; }
private static void ProcessMainThreadMethods() { if (Mode != BehaviorManagerMode.MainThread) { return; } //Logger.MsgDebug("Start Main Methods", DebugTypeEnum.General); ProcessAutoPilotMain(); ProcessWeaponsMain(); ProcessTriggersMain(); ProcessDespawnConditions(); ProcessMainBehavior(); Mode = BehaviorManagerMode.None; //Logger.MsgDebug("End Main Methods", DebugTypeEnum.General); }
public static void ProcessBehaviors() { if (DebugDraw) { for (int i = Behaviors.Count - 1; i >= 0; i--) { if (Behaviors[i] == null) { continue; } if (!Behaviors[i].IsClosed() && Behaviors[i].IsAIReady()) { Behaviors[i].DebugDrawWaypoints(); } } } if (WaterHelper.RequiresUpdate) { WaterHelper.RefreshWater(); } if (AiNeedsReset) { AiNeedsReset = false; if (ResetAiBlocks.Count > 0) { for (int j = ResetAiBlocks.Count - 1; j >= 0; j--) { var behavior = GetBehavior(ResetAiBlocks[j]); if (behavior == null) { continue; } behavior.BehaviorTerminated = true; if (ResetAiBlocks[j].Storage != null && ResetAiBlocks[j].Storage.ContainsKey(new Guid("FF814A67-AEC3-4DF0-ADC4-A9B239FA954F"))) { ResetAiBlocks[j].Storage[new Guid("FF814A67-AEC3-4DF0-ADC4-A9B239FA954F")] = ""; } Logger.MsgDebug("AI ModStorageComponent Wiped", DebugTypeEnum.BehaviorSetup); } MyAPIGateway.Parallel.Start(() => { for (int i = ResetAiBlocks.Count - 1; i >= 0; i--) { Logger.MsgDebug("Re-Registering AI", DebugTypeEnum.BehaviorSetup); RegisterBehaviorFromRemoteControl(ResetAiBlocks[i]); } ResetAiBlocks.Clear(); }); } } _barrageCounter++; if (Mode != BehaviorManagerMode.None) { try { ProcessParallelMethods(); ProcessMainThreadMethods(); } catch (Exception e) { Logger.MsgDebug("Exception in Main Behavior Processing", DebugTypeEnum.General); Logger.MsgDebug(e.ToString(), DebugTypeEnum.General); } } else { _behaviorCounter++; } if ((_barrageCounter % 10) == 0) { ProcessWeaponsBarrage(); _barrageCounter = 0; } if (_behaviorCounter == 15) { for (int i = Behaviors.Count - 1; i >= 0; i--) { if (Behaviors[i] == null || Behaviors[i].IsClosed() || Behaviors[i].BehaviorTerminated) { Behaviors.RemoveAt(i); continue; } } //Logger.MsgDebug("Start Parallel For All Behaviors", DebugTypeEnum.General); Mode = BehaviorManagerMode.Parallel; _behaviorCounter = 0; } }