Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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();
     }
 }
Esempio n. 3
0
        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;
                    }
                }
            }
        }
Esempio n. 4
0
    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);
    }