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; }
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; } }
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; } }) ); } ); }
public static void SetCurrentCount(this LogicCritterCountSensor instance, int count) { Traverse.Create(instance).Field("currentCount").SetValue(count); }
public static int GetCurrentCount(this LogicCritterCountSensor instance) { return(Traverse.Create(instance).Field("currentCount").GetValue <int>()); }