コード例 #1
0
        public static bool Prefix(
            LogicCritterCountSensor __instance,
            bool ___activateOnGreaterThan,
            int ___countThreshold,
            KSelectable ___selectable,
            float dt)
        {
            var roomOfGameObject = Game.Instance.roomProber.GetRoomOfGameObject(__instance.gameObject);

            if (roomOfGameObject != null)
            {
//                Debug.Log("房间系统" + roomOfGameObject);
                var currentCount = 0;

                var context = __instance.FindOrAddComponent <LogicCritterCountSensorContext>();

                if (context.CountCreatures)
                {
                    var count = roomOfGameObject.cavity.creatures.Count;
//                    Debug.Log("小动物:" + count);
                    currentCount += count;
                }

                if (context.CountEggs)
                {
                    var count = roomOfGameObject.cavity.eggs.Count;
//                    Debug.Log("蛋:" + count);
                    currentCount += count;
                }

                __instance.SetCurrentCount(currentCount);

                Traverse.Create(__instance).Method("SetState", new[] { typeof(bool) }, new object[]
                {
                    !___activateOnGreaterThan
                            ? currentCount <___countThreshold
                                            : currentCount> ___countThreshold
                })
                .GetValue();
                if (!___selectable.HasStatusItem(Db.Get().BuildingStatusItems.NotInAnyRoom))
                {
                    return(false);
                }
                ___selectable.RemoveStatusItem(Traverse.Create(__instance).Field("roomStatusGUID").GetValue <Guid>());
            }
            else
            {
//                Debug.Log("没有房间");

                if (!___selectable.HasStatusItem(Db.Get().BuildingStatusItems.NotInAnyRoom))
                {
                    Traverse.Create(__instance).Field("roomStatusGUID")
                    .SetValue(___selectable.AddStatusItem(Db.Get().BuildingStatusItems.NotInAnyRoom));
                }
                Traverse.Create(__instance).Method("SetState", new[] { typeof(bool) }, new object[] { false })
                .GetValue();
            }

            return(false);
        }
    public override void DoPostConfigureComplete(GameObject go)
    {
        GeneratedBuildings.MakeBuildingAlwaysOperational(go);
        GeneratedBuildings.RegisterLogicPorts(go, OUTPUT_PORT);
        LogicCritterCountSensor logicCritterCountSensor = go.AddOrGet <LogicCritterCountSensor>();

        logicCritterCountSensor.manuallyControlled = false;
    }
コード例 #3
0
    private void OnCopySettings(object data)
    {
        GameObject gameObject             = (GameObject)data;
        LogicCritterCountSensor component = gameObject.GetComponent <LogicCritterCountSensor>();

        if ((UnityEngine.Object)component != (UnityEngine.Object)null)
        {
            countThreshold        = component.countThreshold;
            activateOnGreaterThan = component.activateOnGreaterThan;
        }
    }
コード例 #4
0
        public static void Postfix(LogicCritterCountSensor __instance)
        {
            __instance.Subscribe(GameHashes.RefreshUserMenu.ToInt(),
                                 data =>
            {
                Debug.Log(__instance);
                Debug.Log(data);

                var context = __instance.FindOrAddComponent <LogicCritterCountSensorContext>();

                LocString text = "";
                switch (context.GetState())
                {
                case 1:
                    text = Languages.COUNT_CREATURES;
                    break;

                case 2:
                    text = Languages.COUNT_EGG;
                    break;

                case 3:
                    text = Languages.COUNT_CREATURES_AND_EGG;
                    break;

                default:
                    text = Languages.COUNT_ERRORS;
                    break;
                }

                Game.Instance.userMenu.AddButton(__instance.gameObject,
                                                 new KIconButtonMenu.ButtonInfo("action_power", text, delegate
                {
                    var state = context.GetState() - 1;
                    state     = (state + 1) % 3;
                    switch (state)
                    {
                    case 0:
                        context.CountCreatures = true;
                        context.CountEggs      = false;
                        break;

                    case 1:
                        context.CountCreatures = false;
                        context.CountEggs      = true;
                        break;

                    case 2:
                        context.CountCreatures = true;
                        context.CountEggs      = true;
                        break;

                    default:
                        context.CountCreatures = true;
                        context.CountEggs      = true;
                        break;
                    }
                })
                                                 );
            }
                                 );
        }
コード例 #5
0
 public static void SetCurrentCount(this LogicCritterCountSensor instance, int count)
 {
     Traverse.Create(instance).Field("currentCount").SetValue(count);
 }
コード例 #6
0
 public static int GetCurrentCount(this LogicCritterCountSensor instance)
 {
     return(Traverse.Create(instance).Field("currentCount").GetValue <int>());
 }