예제 #1
0
        private static bool Prefix(OxygenBreather __instance, ref SimHashes __result, ref int cell, ref CellOffset[] offsets)
        {
            //Debug.Log(" === AmphibiousMod_OxygenBreather_GetBreathableElementAtCell === ");

            Klei.AI.Traits traits = __instance.gameObject.GetComponent <Klei.AI.Traits>();
            bool           flag   = traits.GetTraitIds().Contains("Amphibious");

            //Debug.Log(" === AmphibiousMod_OxygenBreather_GetBreathableElementAtCell === " + flag);
            if (!flag)
            {
                return(true);
            }

            if (offsets == null)
            {
                offsets = __instance.breathableCells;
            }

            //this.GetMouthCellAtCell(cell, offsets);
            int mouthCellAtCell = (int)GetMouthCellAtCellM.Invoke(__instance, new object[] { cell, offsets });

            if (!Grid.IsValidCell(mouthCellAtCell))
            {
                __result = SimHashes.Vacuum;
                return(false);
            }
            Element element = Grid.Element[mouthCellAtCell];

            __result = ((!element.IsGas || !element.HasTag(GameTags.Breathable)) && (!element.IsLiquid || !element.HasTag(GameTags.AnyWater)) || !(Grid.Mass[mouthCellAtCell] > __instance.noOxygenThreshold)) ? SimHashes.Vacuum : element.id;
            return(false);
        }
예제 #2
0
        private static bool Prefix(TemperatureMonitor.Instance __instance, ref bool __result)
        {
            Klei.AI.Traits traits = __instance.gameObject.GetComponent <Klei.AI.Traits>();
            bool           flag   = traits.GetTraitIds().Contains("Ice");

            if (!flag)
            {
                return(true);
            }
            __result = false;
            return(false);
        }
예제 #3
0
        // DLC specific functions

        public static int PilotWithTrait(string traitId)
        {
            int count = 0;

            foreach (MinionResume resume in Components.MinionResumes)
            {
                if (resume.HasMasteredSkill("RocketPiloting1"))
                {
                    Klei.AI.Traits traits = resume.gameObject.GetComponent <Klei.AI.Traits>();
                    if (traits != null)
                    {
                        if (traits.HasTrait(traitId))
                        {
                            count++;
                        }
                    }
                }
            }
            return(count);
        }
예제 #4
0
        private static bool Prefix(GasBreatherFromWorldProvider __instance, ref bool __result, ref OxygenBreather oxygen_breather, ref float gas_consumed)
        {
            //Debug.Log(" === AmphibiousMod_GasBreatherFromWorldProvider_ConsumeGas === ");
            Klei.AI.Traits traits = oxygen_breather.gameObject.GetComponent <Klei.AI.Traits>();
            bool           flag   = traits.GetTraitIds().Contains("Amphibious");

            if (!flag)
            {
                return(true);
            }

            SimHashes getBreathableElement = oxygen_breather.GetBreathableElement;

            if (getBreathableElement == SimHashes.Vacuum)
            {
                __result = false;
                return(false);
            }
            //HandleVector<Game.ComplexCallbackInfo<Sim.MassConsumedCallback>>.Handle handle = Game.Instance.massConsumedCallbackManager.Add(OnSimConsumeCallback, __instance, "GasBreatherFromWorldProvider");
            //SimMessages.ConsumeMass(oxygen_breather.mouthCell, getBreathableElement, gas_consumed/5f, 3, handle.index);
            SimMessages.ConsumeMass(oxygen_breather.mouthCell, getBreathableElement, gas_consumed / 5f, 1);
            __result = true;
            return(false);
        }