Ejemplo n.º 1
0
        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);
                }
            });
        }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        private static void ProcessMainThreadMethods()
        {
            if (Mode != BehaviorManagerMode.MainThread)
            {
                return;
            }

            ProcessAutoPilotMain();
            ProcessWeaponsMain();
            ProcessTriggersMain();
            ProcessDespawnConditions();
            ProcessMainBehavior();
            Mode = BehaviorManagerMode.None;
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
            }
        }