private static bool CanRanchableBeRanchedAtRanchStation(RanchableMonitor.Instance ranchable, Instance ranch_station, CavityInfo ranch_cavity_info, int ranch_cell) { if (!ranchable.IsRunning()) { return(false); } if (ranchable.targetRanchStation != ranch_station && ranchable.targetRanchStation != null && ranchable.targetRanchStation.IsRunning()) { return(false); } if (!ranch_station.def.isCreatureEligibleToBeRanchedCb(ranchable.gameObject, ranch_station)) { return(false); } if (!ranchable.GetComponent <ChoreConsumer>().IsChoreEqualOrAboveCurrentChorePriority <RanchedStates>()) { return(false); } int cell = Grid.PosToCell(ranchable.transform.GetPosition()); CavityInfo cavityForCell = Game.Instance.roomProber.GetCavityForCell(cell); if (cavityForCell == null || cavityForCell != ranch_cavity_info) { return(false); } int navigationCost = ranchable.GetComponent <Navigator>().GetNavigationCost(ranch_cell); if (navigationCost == -1) { return(false); } return(true); }
private static void RanchCreature(Instance smi) { Debug.Assert(smi.ranchStation != null, "smi.ranchStation was null"); RanchableMonitor.Instance targetRanchable = smi.ranchStation.targetRanchable; if (!targetRanchable.IsNullOrStopped()) { KPrefabID component = targetRanchable.GetComponent <KPrefabID>(); smi.sm.rancher.Get(smi).Trigger(937885943, component.PrefabTag.Name); smi.ranchStation.RanchCreature(); } }
public void FindRanchable() { int targetRanchCell = GetTargetRanchCell(); CavityInfo cavityForCell = Game.Instance.roomProber.GetCavityForCell(targetRanchCell); if (cavityForCell == null || cavityForCell.room == null || cavityForCell.room.roomType != Db.Get().RoomTypes.CreaturePen) { TriggerRanchStationNoLongerAvailable(); } else { if (this.targetRanchable != null && !CanRanchableBeRanchedAtRanchStation(this.targetRanchable, this, cavityForCell, targetRanchCell)) { TriggerRanchStationNoLongerAvailable(); } if (this.targetRanchable.IsNullOrStopped()) { CavityInfo cavityForCell2 = Game.Instance.roomProber.GetCavityForCell(targetRanchCell); RanchableMonitor.Instance targetRanchable = null; if (cavityForCell2 != null && cavityForCell2.creatures != null) { foreach (KPrefabID creature in cavityForCell2.creatures) { if (!((UnityEngine.Object)creature == (UnityEngine.Object)null)) { RanchableMonitor.Instance sMI = creature.GetSMI <RanchableMonitor.Instance>(); if (!sMI.IsNullOrStopped() && CanRanchableBeRanchedAtRanchStation(sMI, this, cavityForCell2, targetRanchCell)) { targetRanchable = sMI; break; } } } } this.targetRanchable = targetRanchable; if (!this.targetRanchable.IsNullOrStopped()) { this.targetRanchable.targetRanchStation = this; } } } }
public override void DoPostConfigureComplete(GameObject go) { GeneratedBuildings.RegisterLogicPorts(go, LogicOperationalController.INPUT_PORTS_0_0); go.AddOrGet <LogicOperationalController>(); RanchStation.Def def = go.AddOrGetDef <RanchStation.Def>(); def.isCreatureEligibleToBeRanchedCb = ((GameObject creature_go, RanchStation.Instance ranch_station_smi) => !creature_go.GetComponent <Effects>().HasEffect("Ranched")); def.onRanchCompleteCb = delegate(GameObject creature_go) { RanchableMonitor.Instance sMI = creature_go.GetSMI <RanchableMonitor.Instance>(); RanchStation.Instance targetRanchStation = sMI.targetRanchStation; RancherChore.RancherChoreStates.Instance sMI2 = targetRanchStation.GetSMI <RancherChore.RancherChoreStates.Instance>(); GameObject go2 = targetRanchStation.GetSMI <RancherChore.RancherChoreStates.Instance>().sm.rancher.Get(sMI2); float num2 = 1f + go2.GetAttributes().Get(Db.Get().Attributes.Ranching.Id).GetTotalValue() * 0.1f; creature_go.GetComponent <Effects>().Add("Ranched", true).timeRemaining *= num2; }; def.ranchedPreAnim = "grooming_pre"; def.ranchedLoopAnim = "grooming_loop"; def.ranchedPstAnim = "grooming_pst"; def.getTargetRanchCell = delegate(RanchStation.Instance smi) { int num = Grid.InvalidCell; if (!smi.IsNullOrStopped()) { num = Grid.CellRight(Grid.PosToCell(smi.transform.GetPosition())); if (!smi.targetRanchable.IsNullOrStopped() && smi.targetRanchable.HasTag(GameTags.Creatures.Flyer)) { num = Grid.CellAbove(num); } } return(num); }; RoomTracker roomTracker = go.AddOrGet <RoomTracker>(); roomTracker.requiredRoomType = Db.Get().RoomTypes.CreaturePen.Id; roomTracker.requirement = RoomTracker.Requirement.Required; SkillPerkMissingComplainer skillPerkMissingComplainer = go.AddOrGet <SkillPerkMissingComplainer>(); skillPerkMissingComplainer.requiredSkillPerk = Db.Get().SkillPerks.CanWrangleCreatures.Id; Prioritizable.AddRef(go); }