Esempio n. 1
0
 public IdleCellQuery Reset(MinionBrain brain, int max_cost)
 {
     this.brain = brain;
     maxCost    = max_cost;
     targetCell = Grid.InvalidCell;
     return(this);
 }
 public SafeCellSensor(Sensors sensors)
     : base(sensors)
 {
     navigator = GetComponent <Navigator>();
     brain     = GetComponent <MinionBrain>();
     prefabid  = GetComponent <KPrefabID>();
 }
Esempio n. 3
0
 /// <summary>
 /// Applied before Update runs.
 /// </summary>
 internal static bool Prefix(MinionBrain ___brain)
 {
     // A slim bit slow, but only run 1-2 times a frame, and way faster than what
     // the sensor does by default
     return(___brain != null && recreation != null && (!___brain.TryGetComponent(
                                                           out Schedulable schedulable) || ScheduleManager.Instance.IsAllowed(
                                                           schedulable, recreation)));
 }
Esempio n. 4
0
 public Context(KMonoBehaviour cmp)
 {
     cell                  = Grid.PosToCell(cmp);
     navigator             = cmp.GetComponent <Navigator>();
     oxygenBreather        = cmp.GetComponent <OxygenBreather>();
     minionBrain           = cmp.GetComponent <MinionBrain>();
     temperatureTransferer = cmp.GetComponent <SimTemperatureTransfer>();
     primaryElement        = cmp.GetComponent <PrimaryElement>();
 }
 public SafeCellQuery Reset(MinionBrain brain, bool avoid_light)
 {
     this.brain       = brain;
     targetCell       = PathFinder.InvalidCell;
     targetCost       = 2147483647;
     targetCellFlags  = (SafeFlags)0;
     this.avoid_light = avoid_light;
     return(this);
 }
 protected override void OnSpawn()
 {
     base.OnSpawn();
     kbac = GetComponent <KBatchedAnimController>();
     mb   = GetComponent <MinionBrain>();
     if (autoRun)
     {
         PlaySequence();
     }
 }
Esempio n. 7
0
        /// <summary>
        /// Adds a brain to update asynchronously.
        /// </summary>
        /// <param name="brain">The Duplicant brain to update.</param>
        internal void AddBrain(MinionBrain brain)
        {
            var nav = brain.Navigator;

            if (nav != null)
            {
                // What PathProberSensor did
                nav.UpdateProbe(false);
            }
            brainsToUpdate.Add(new BrainPair(brain, nav));
        }
Esempio n. 8
0
            /// <summary>
            /// Applied before Update runs.
            /// </summary>
            internal static bool Prefix(MinionBrain ___brain)
            {
                var  inst = ScheduleManager.Instance;
                bool run  = ___brain != null;

                if (run && ___brain.TryGetComponent(out Schedulable schedulable) && inst !=
                    null && recreation != null)
                {
                    var block = schedulable.GetSchedule().GetBlock(Schedule.GetBlockIdx());
                    run = block.IsAllowed(recreation) || (finishTasks != null && block.
                                                          IsAllowed(finishTasks));
                }
                return(run);
            }
Esempio n. 9
0
        public Leah(World world, int snoID, TagMap tags)
            : base(world, snoID, tags)
        {
            Brain = new MinionBrain(this);

            // lookup GameBalance MonsterLevels.gam asset
            var monsterLevels = (GameBalance)Mooege.Common.MPQ.MPQStorage.Data.Assets[SNOGroup.GameBalance][19760].Data;
            var monsterData   = (Monster.Target as MonsterFF);

            // always use normal difficulty levels for now
            if (monsterData.Level.Normal >= 0 && monsterData.Level.Normal < monsterLevels.MonsterLevel.Count)
            {
                //this.Brain = new MonsterBrain(this);
                this.Attributes[GameAttribute.Level]         = monsterData.Level.Normal;
                this.Attributes[GameAttribute.Hitpoints_Max] = monsterLevels.MonsterLevel[monsterData.Level.Normal].F0;
                this.Attributes[GameAttribute.Hitpoints_Cur] = this.Attributes[GameAttribute.Hitpoints_Max_Total];
                this.WalkSpeed = 0.5f * monsterData.Floats[129];  // TODO: this is probably multiplied by something erekose the 0.3 is because he is way too fast otherwise
            }
        }
Esempio n. 10
0
 public MingleCellSensor(Sensors sensors)
     : base(sensors)
 {
     navigator = GetComponent <Navigator>();
     brain     = GetComponent <MinionBrain>();
 }
Esempio n. 11
0
 public DrawNavGridQuery Reset(MinionBrain brain)
 {
     return(this);
 }
    public static SafeFlags GetFlags(int cell, MinionBrain brain, bool avoid_light = false)
    {
        int num = Grid.CellAbove(cell);

        if (!Grid.IsValidCell(num))
        {
            return((SafeFlags)0);
        }
        if (Grid.Solid[cell] || Grid.Solid[num])
        {
            return((SafeFlags)0);
        }
        if (Grid.IsTileUnderConstruction[cell] || Grid.IsTileUnderConstruction[num])
        {
            return((SafeFlags)0);
        }
        bool flag  = brain.IsCellClear(cell);
        bool flag2 = !Grid.Element[cell].IsLiquid;
        bool flag3 = !Grid.Element[num].IsLiquid;
        bool flag4 = Grid.Temperature[cell] > 285.15f && Grid.Temperature[cell] < 303.15f;
        bool flag5 = brain.OxygenBreather.IsBreathableElementAtCell(cell, Grid.DefaultOffset);
        bool flag6 = !brain.Navigator.NavGrid.NavTable.IsValid(cell, NavType.Ladder) && !brain.Navigator.NavGrid.NavTable.IsValid(cell, NavType.Pole);
        bool flag7 = !brain.Navigator.NavGrid.NavTable.IsValid(cell, NavType.Tube);
        bool flag8 = !avoid_light || SleepChore.IsLightLevelOk(cell);

        if (cell == Grid.PosToCell(brain))
        {
            flag5 = !brain.OxygenBreather.IsSuffocating;
        }
        SafeFlags safeFlags = (SafeFlags)0;

        if (flag)
        {
            safeFlags |= SafeFlags.IsClear;
        }
        if (flag4)
        {
            safeFlags |= SafeFlags.CorrectTemperature;
        }
        if (flag5)
        {
            safeFlags |= SafeFlags.IsBreathable;
        }
        if (flag6)
        {
            safeFlags |= SafeFlags.IsNotLadder;
        }
        if (flag7)
        {
            safeFlags |= SafeFlags.IsNotTube;
        }
        if (flag2)
        {
            safeFlags |= SafeFlags.IsNotLiquid;
        }
        if (flag3)
        {
            safeFlags |= SafeFlags.IsNotLiquidOnMyFace;
        }
        if (flag8)
        {
            safeFlags |= SafeFlags.IsLightOk;
        }
        return(safeFlags);
    }