示例#1
0
    static bool isPlantWild(KPrefabID plant)
    {
        if (plant.GetComponent <BasicForagePlantPlanted>() != null)
        {
            return(true);
        }

        ReceptacleMonitor receptacleMonitor = plant.GetComponent <ReceptacleMonitor>();

        if (receptacleMonitor != null)
        {
            if (!receptacleMonitor.Replanted)
            {
                return(true);
            }

            var plantablePlot = receptacleMonitor.GetReceptacle();
            if (plantablePlot != null)
            {
                if (plantablePlot.GetComponent <WildPlanterBox>() || plantablePlot.GetComponent <WildFarmTile>())
                {
                    return(true);
                }
            }
        }
        return(false);
    }
示例#2
0
        private static void Attack(KPrefabID creature)
        {
            var health = creature.GetComponent <Health>();

            if (health == null)
            {
                return;
            }
            health.Damage(Random.Range(0f, 1f) * creature.GetComponent <AttackableBase>().GetDamageMultiplier());
        }
示例#3
0
        private void AttackCreature(KPrefabID creature)
        {
            var health = creature.GetComponent <Health>();

            if (!(bool)health)
            {
                return;
            }
            health.Damage(Random.Range(0f, 1f) * creature.GetComponent <AttackableBase>().GetDamageMultiplier());
        }
 public void RestoreTargetFromInstanceID()
 {
     if (target_instance_id != -1 && target == null)
     {
         KPrefabID instance = KPrefabIDTracker.Get().GetInstance(target_instance_id);
         if ((bool)instance)
         {
             IAssignableIdentity component = instance.GetComponent <IAssignableIdentity>();
             if (component != null)
             {
                 SetTarget(component, instance.gameObject);
             }
             else
             {
                 Debug.LogWarningFormat("RestoreTargetFromInstanceID target ID {0} was found but it wasn't an IAssignableIdentity, destroying proxy object.", target_instance_id);
                 Util.KDestroyGameObject(base.gameObject);
             }
         }
         else
         {
             Debug.LogWarningFormat("RestoreTargetFromInstanceID target ID {0} was not found, destroying proxy object.", target_instance_id);
             Util.KDestroyGameObject(base.gameObject);
         }
     }
 }
    private static int CountNearbyPlants(int cell, int radius)
    {
        int x = 0;
        int y = 0;

        Grid.PosToXY(Grid.CellToPos(cell), out x, out y);
        int num = radius * 2;

        x -= radius;
        y -= radius;
        ListPool <ScenePartitionerEntry, GameScenePartitioner> .PooledList pooledList = ListPool <ScenePartitionerEntry, GameScenePartitioner> .Allocate();

        GameScenePartitioner.Instance.GatherEntries(x, y, num, num, GameScenePartitioner.Instance.plants, pooledList);
        int num2 = 0;

        foreach (ScenePartitionerEntry item in pooledList)
        {
            KPrefabID kPrefabID = (KPrefabID)item.obj;
            if (!(bool)kPrefabID.GetComponent <TreeBud>())
            {
                num2++;
            }
        }
        pooledList.Recycle();
        return(num2);
    }
 protected override void OnSpawn()
 {
     base.OnSpawn();
     UpdateTint();
     UpdateStatusString();
     base.OnAssign += OnNewAssignment;
     if (assignee == null)
     {
         MinionStorage component = GetComponent <MinionStorage>();
         if ((bool)component)
         {
             List <MinionStorage.Info> storedMinionInfo = component.GetStoredMinionInfo();
             if (storedMinionInfo.Count > 0)
             {
                 MinionStorage.Info info             = storedMinionInfo[0];
                 Ref <KPrefabID>    serializedMinion = info.serializedMinion;
                 if (serializedMinion != null && serializedMinion.GetId() != -1)
                 {
                     KPrefabID            kPrefabID  = serializedMinion.Get();
                     StoredMinionIdentity component2 = kPrefabID.GetComponent <StoredMinionIdentity>();
                     component2.ValidateProxy();
                     Assign(component2);
                 }
             }
         }
     }
 }
 private void CheckTarget()
 {
     if (target == null)
     {
         KPrefabID instance = KPrefabIDTracker.Get().GetInstance(target_instance_id);
         if ((Object)instance != (Object)null)
         {
             target = instance.GetComponent <IAssignableIdentity>();
             if (target != null)
             {
                 MinionIdentity minionIdentity = target as MinionIdentity;
                 if ((bool)minionIdentity)
                 {
                     minionIdentity.ValidateProxy();
                 }
                 else
                 {
                     StoredMinionIdentity storedMinionIdentity = target as StoredMinionIdentity;
                     if ((bool)storedMinionIdentity)
                     {
                         storedMinionIdentity.ValidateProxy();
                     }
                 }
             }
         }
     }
 }
示例#8
0
    protected override void OnSpawn()
    {
        base.OnSpawn();
        RegisterInGrid(true);
        SetGridRestrictions(null, DefaultPermission);
        foreach (KeyValuePair <Ref <KPrefabID>, Permission> savedPermission in savedPermissions)
        {
            SetGridRestrictions(savedPermission.Key.Get(), savedPermission.Value);
        }
        ListPool <Tuple <MinionAssignablesProxy, Permission>, AccessControl> .PooledList pooledList = ListPool <Tuple <MinionAssignablesProxy, Permission>, AccessControl> .Allocate();

        for (int num = savedPermissions.Count - 1; num >= 0; num--)
        {
            KPrefabID kPrefabID = savedPermissions[num].Key.Get();
            if ((Object)kPrefabID != (Object)null)
            {
                MinionIdentity component = kPrefabID.GetComponent <MinionIdentity>();
                if ((Object)component != (Object)null)
                {
                    pooledList.Add(new Tuple <MinionAssignablesProxy, Permission>(component.assignableProxy.Get(), savedPermissions[num].Value));
                    savedPermissions.RemoveAt(num);
                    ClearGridRestrictions(kPrefabID);
                }
            }
        }
        foreach (Tuple <MinionAssignablesProxy, Permission> item in pooledList)
        {
            SetPermission(item.first, item.second);
        }
        pooledList.Recycle();
        SetStatusItem();
    }
示例#9
0
    public void SerializeMinion(GameObject minion)
    {
        CleanupBadReferences();
        KPrefabID kPrefabID = CreateSerializedMinion(minion);
        Info      item      = new Info(kPrefabID.GetComponent <StoredMinionIdentity>().storedName, new Ref <KPrefabID>(kPrefabID));

        serializedMinions.Add(item);
    }
示例#10
0
    public RancherChore(KPrefabID rancher_station)
        : base(Db.Get().ChoreTypes.Ranch, (IStateMachineTarget)rancher_station, (ChoreProvider)null, false, (Action <Chore>)null, (Action <Chore>)null, (Action <Chore>)null, PriorityScreen.PriorityClass.basic, 5, false, true, 0, false, ReportManager.ReportType.WorkTime)
    {
        AddPrecondition(IsCreatureAvailableForRanching, rancher_station.GetSMI <RanchStation.Instance>());
        AddPrecondition(ChorePreconditions.instance.HasSkillPerk, Db.Get().SkillPerks.CanUseRanchStation.Id);
        AddPrecondition(ChorePreconditions.instance.IsScheduledTime, Db.Get().ScheduleBlockTypes.Work);
        AddPrecondition(ChorePreconditions.instance.CanMoveTo, rancher_station.GetComponent <Building>());
        Operational component = rancher_station.GetComponent <Operational>();

        AddPrecondition(ChorePreconditions.instance.IsOperational, component);
        Deconstructable component2 = rancher_station.GetComponent <Deconstructable>();

        AddPrecondition(ChorePreconditions.instance.IsNotMarkedForDeconstruction, component2);
        BuildingEnabledButton component3 = rancher_station.GetComponent <BuildingEnabledButton>();

        AddPrecondition(ChorePreconditions.instance.IsNotMarkedForDisable, component3);
        base.smi = new RancherChoreStates.Instance(rancher_station);
        SetPrioritizable(rancher_station.GetComponent <Prioritizable>());
    }
示例#11
0
            public static void Prefix(ICollection <int> visited_cells, KCompactedVector <CavityInfo> ___cavityInfos, HandleVector <int> .Handle[] ___CellCavityID)
            {
                int maxRoomSize = TuningData <RoomProber.Tuning> .Get().maxRoomSize;

                foreach (int current in visited_cells)
                {
                    HandleVector <int> .Handle handle = ___CellCavityID [current];
                    if (handle.IsValid())
                    {
                        CavityInfo data = ___cavityInfos.GetData(handle);
                        if (0 < data.numCells && data.numCells <= maxRoomSize)
                        {
                            GameObject gameObject = Grid.Objects [current, (int)ObjectLayer.Plants];
                            if (gameObject != null)
                            {
                                KPrefabID component = gameObject.GetComponent <KPrefabID> ();
                                bool      flag2     = false;
                                foreach (KPrefabID current2 in data.buildings)
                                {
                                    if (component.InstanceID == current2.InstanceID)
                                    {
                                        flag2 = true;
                                        break;
                                    }
                                }
                                foreach (KPrefabID current3 in data.plants)
                                {
                                    if (component.InstanceID == current3.InstanceID)
                                    {
                                        flag2 = true;
                                        break;
                                    }
                                }
                                if (!flag2)
                                {
                                    if (component.GetComponent <Deconstructable> ())
                                    {
                                        data.AddBuilding(component);
                                    }
                                    else
                                    {
                                        if (component.HasTag(GameTags.Plant) && !component.HasTag("ForestTreeBranch".ToTag()))
                                        {
                                            data.AddPlants(component);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
示例#12
0
    public MessageTarget(KPrefabID prefab_id)
    {
        prefabId.Set(prefab_id);
        position = prefab_id.transform.GetPosition();
        name     = "Unknown";
        KSelectable component = prefab_id.GetComponent <KSelectable>();

        if ((Object)component != (Object)null)
        {
            name = component.GetName();
        }
        prefab_id.Subscribe(-1940207677, OnAbsorbedBy);
    }
    private void RebuildDirtyCavities(ICollection <int> visited_cells)
    {
        int maxRoomSize = TuningData <Tuning> .Get().maxRoomSize;

        foreach (int visited_cell in visited_cells)
        {
            HandleVector <int> .Handle handle = CellCavityID[visited_cell];
            if (handle.IsValid())
            {
                CavityInfo data = cavityInfos.GetData(handle);
                if (0 < data.numCells && data.numCells <= maxRoomSize)
                {
                    GameObject gameObject = Grid.Objects[visited_cell, 1];
                    if ((UnityEngine.Object)gameObject != (UnityEngine.Object)null)
                    {
                        KPrefabID component = gameObject.GetComponent <KPrefabID>();
                        bool      flag      = false;
                        foreach (KPrefabID building in data.buildings)
                        {
                            if (component.InstanceID == building.InstanceID)
                            {
                                flag = true;
                                break;
                            }
                        }
                        foreach (KPrefabID plant in data.plants)
                        {
                            if (component.InstanceID == plant.InstanceID)
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (!flag)
                        {
                            if ((bool)component.GetComponent <Deconstructable>())
                            {
                                data.AddBuilding(component);
                            }
                            else if (component.HasTag(GameTags.Plant) && !component.HasTag("ForestTreeBranch".ToTag()))
                            {
                                data.AddPlants(component);
                            }
                        }
                    }
                }
            }
        }
        visited_cells.Clear();
    }
    public bool IsFuelTankAboveMinimumLevel()
    {
        KPrefabID storedOutfit = GetStoredOutfit();

        if ((UnityEngine.Object)storedOutfit != (UnityEngine.Object)null)
        {
            JetSuitTank component = storedOutfit.GetComponent <JetSuitTank>();
            if ((UnityEngine.Object)component == (UnityEngine.Object)null)
            {
                return(true);
            }
            return(component.PercentFull() >= TUNING.EQUIPMENT.SUITS.MINIMUM_USABLE_SUIT_CHARGE);
        }
        return(false);
    }
示例#15
0
    private KToggleMenu.ToggleInfo[] GetFillers()
    {
        HashSet <Tag> hashSet = new HashSet <Tag>();
        List <KToggleMenu.ToggleInfo> list = new List <KToggleMenu.ToggleInfo>();

        foreach (Pickupable item in Components.Pickupables.Items)
        {
            KPrefabID kPrefabID = item.KPrefabID;
            if (kPrefabID.HasTag(GameTags.Filler) && hashSet.Add(kPrefabID.PrefabTag))
            {
                string text = kPrefabID.GetComponent <PrimaryElement>().Element.id.ToString();
                list.Add(new KToggleMenu.ToggleInfo(text, null, Action.NumActions));
            }
        }
        return(list.ToArray());
    }
 public void SetupDeliverables()
 {
     foreach (GameObject item in base.sm.fetcher.Get <Storage>(base.smi).items)
     {
         if (!((UnityEngine.Object)item == (UnityEngine.Object)null))
         {
             KPrefabID component = item.GetComponent <KPrefabID>();
             if (!((UnityEngine.Object)component == (UnityEngine.Object)null))
             {
                 Pickupable component2 = component.GetComponent <Pickupable>();
                 if ((UnityEngine.Object)component2 != (UnityEngine.Object)null)
                 {
                     deliverables.Add(component2);
                 }
             }
         }
     }
 }
示例#17
0
            public static bool Prefix(SuitLocker __instance)
            {
                if (OxygenNotNeededConfigChecker.ForceLoad || CustomGameSettings.Instance.GetCurrentQualitySetting(OxygenNotNeededPatches.WorldRequiresOxygen).id == "Enabled")
                {
                    KPrefabID storedOutfit = __instance.GetStoredOutfit();
                    if ((UnityEngine.Object)storedOutfit == (UnityEngine.Object)null)
                    {
                        return(false);
                    }

                    SuitTank component = storedOutfit.GetComponent <SuitTank>();
                    component.amount = component.capacity;
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
 public bool CheckStoredMinionIsAssignee()
 {
     foreach (MinionStorage.Info item in GetComponent <MinionStorage>().GetStoredMinionInfo())
     {
         MinionStorage.Info current = item;
         if (current.serializedMinion != null)
         {
             KPrefabID kPrefabID = current.serializedMinion.Get();
             if (!((Object)kPrefabID == (Object)null))
             {
                 StoredMinionIdentity component  = kPrefabID.GetComponent <StoredMinionIdentity>();
                 Assignable           component2 = GetComponent <Assignable>();
                 if (component2.assignee == component.assignableProxy.Get())
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
    private void FuelSuit(float dt)
    {
        KPrefabID storedOutfit = suit_locker.GetStoredOutfit();

        if (!((UnityEngine.Object)storedOutfit == (UnityEngine.Object)null))
        {
            GameObject fuel = GetFuel();
            if (!((UnityEngine.Object)fuel == (UnityEngine.Object)null))
            {
                PrimaryElement component = fuel.GetComponent <PrimaryElement>();
                if (!((UnityEngine.Object)component == (UnityEngine.Object)null))
                {
                    JetSuitTank component2 = storedOutfit.GetComponent <JetSuitTank>();
                    float       a          = 375f * dt / 600f;
                    a = Mathf.Min(a, 25f - component2.amount);
                    a = Mathf.Min(component.Mass, a);
                    component.Mass    -= a;
                    component2.amount += a;
                }
            }
        }
    }