コード例 #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);
        }
コード例 #2
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;
                    }
                })
                                                 );
            }
                                 );
        }