Пример #1
0
    private HarvestDesignatable GetMostMatureBranch(out float max_maturity)
    {
        max_maturity = 0f;
        HarvestDesignatable result = null;

        Ref <HarvestDesignatable>[] array = buds;
        for (int i = 0; i < array.Length; i++)
        {
            HarvestDesignatable harvestDesignatable = array[i]?.Get();
            if ((Object)harvestDesignatable != (Object)null)
            {
                AmountInstance amountInstance = Db.Get().Amounts.Maturity.Lookup(harvestDesignatable);
                if (amountInstance != null)
                {
                    float num = amountInstance.value / amountInstance.GetMax();
                    if (num > max_maturity)
                    {
                        max_maturity = num;
                        result       = harvestDesignatable;
                    }
                }
            }
        }
        return(result);
    }
Пример #2
0
 public TreeBud GetBranchAtPosition(int idx)
 {
     if (buds[idx] != null)
     {
         HarvestDesignatable harvestDesignatable = buds[idx].Get();
         return((!((Object)harvestDesignatable != (Object)null)) ? null : harvestDesignatable.GetComponent <TreeBud>());
     }
     return(null);
 }
Пример #3
0
 private void YieldWood()
 {
     Ref <HarvestDesignatable>[] array = buds;
     for (int i = 0; i < array.Length; i++)
     {
         HarvestDesignatable harvestDesignatable = array[i]?.Get();
         if ((Object)harvestDesignatable != (Object)null)
         {
             harvestDesignatable.Trigger(-216549700, null);
         }
     }
 }
 protected override void OnSpawn()
 {
     harvestDesignatable = GetComponent <HarvestDesignatable>();
     Subscribe(2127324410, ForceCancelHarvestDelegate);
     SetWorkTime(10f);
     Subscribe(2127324410, OnCancelDelegate);
     faceTargetWhenWorking = true;
     Components.Harvestables.Add(this);
     attributeConverter            = Db.Get().AttributeConverters.HarvestSpeed;
     attributeExperienceMultiplier = DUPLICANTSTATS.ATTRIBUTE_LEVELING.PART_DAY_EXPERIENCE;
     skillExperienceSkillGroup     = Db.Get().SkillGroups.Farming.Id;
     skillExperienceMultiplier     = SKILLS.PART_DAY_EXPERIENCE;
 }
Пример #5
0
    public void ConsumeMass(float mass_to_consume)
    {
        float max_maturity;
        HarvestDesignatable mostMatureBranch = GetMostMatureBranch(out max_maturity);

        if ((bool)mostMatureBranch)
        {
            Growing component = mostMatureBranch.GetComponent <Growing>();
            if ((bool)component)
            {
                component.ConsumeMass(mass_to_consume);
            }
        }
    }
Пример #6
0
    public void OnBranchRemoved(int idx, TreeBud treeBud)
    {
        if (idx < 0 || idx >= buds.Length)
        {
            Debug.Assert(false, "invalid branch index " + idx);
        }
        HarvestDesignatable component           = treeBud.GetComponent <HarvestDesignatable>();
        HarvestDesignatable harvestDesignatable = (buds[idx] == null) ? null : buds[idx].Get();

        if ((Object)component != (Object)harvestDesignatable)
        {
            Debug.LogWarningFormat(base.gameObject, "OnBranchRemoved branch {0} does not match known branch {1}", component, harvestDesignatable);
        }
        buds[idx] = null;
    }
Пример #7
0
    public GameObject CreatePrefab()
    {
        string         id          = "GasGrass";
        string         name        = STRINGS.CREATURES.SPECIES.GASGRASS.NAME;
        string         desc        = STRINGS.CREATURES.SPECIES.GASGRASS.DESC;
        float          mass        = 1f;
        KAnimFile      anim        = Assets.GetAnim("gassygrass_kanim");
        string         initialAnim = "idle_empty";
        EffectorValues tIER        = DECOR.BONUS.TIER3;
        GameObject     gameObject  = EntityTemplates.CreatePlacedEntity(id, name, desc, mass, anim, initialAnim, Grid.SceneLayer.BuildingFront, 1, 3, tIER, default(EffectorValues), SimHashes.Creature, null, 255f);

        EntityTemplates.ExtendEntityToBasicPlant(gameObject, 218.15f, 0f, 348.15f, 373.15f, null, true, 0f, 0.15f, "GasGrassHarvested", true, true, true, true, 2400f);
        EntityTemplates.ExtendPlantToIrrigated(gameObject, new PlantElementAbsorber.ConsumeInfo[1]
        {
            new PlantElementAbsorber.ConsumeInfo
            {
                tag = GameTags.Chlorine,
                massConsumptionRate = 0.000833333354f
            }
        });
        gameObject.AddOrGet <StandardCropPlant>();
        HarvestDesignatable harvestDesignatable = gameObject.AddOrGet <HarvestDesignatable>();

        harvestDesignatable.defaultHarvestStateWhenPlanted = false;
        CropSleepingMonitor.Def def = gameObject.AddOrGetDef <CropSleepingMonitor.Def>();
        def.lightIntensityThreshold = 20000f;
        def.prefersDarkness         = false;
        GameObject plant = gameObject;

        SeedProducer.ProductionType productionType = SeedProducer.ProductionType.Hidden;
        initialAnim = "GasGrassSeed";
        desc        = STRINGS.CREATURES.SPECIES.SEEDS.GASGRASS.NAME;
        name        = STRINGS.CREATURES.SPECIES.SEEDS.GASGRASS.DESC;
        anim        = Assets.GetAnim("seed_gassygrass_kanim");
        List <Tag> list = new List <Tag>();

        list.Add(GameTags.CropSeed);
        list = list;
        GameObject seed = EntityTemplates.CreateAndRegisterSeedForPlant(plant, productionType, initialAnim, desc, name, anim, "object", 1, list, SingleEntityReceptacle.ReceptacleDirection.Top, default(Tag), 2, STRINGS.CREATURES.SPECIES.GASGRASS.DOMESTICATEDDESC, EntityTemplates.CollisionShape.CIRCLE, 0.2f, 0.2f, null, string.Empty, false);

        EntityTemplates.CreateAndRegisterPreviewForPlant(seed, "GasGrass_preview", Assets.GetAnim("gassygrass_kanim"), "place", 1, 1);
        SoundEventVolumeCache.instance.AddVolume("gassygrass_kanim", "GasGrass_grow", NOISE_POLLUTION.CREATURES.TIER3);
        SoundEventVolumeCache.instance.AddVolume("gassygrass_kanim", "GasGrass_harvest", NOISE_POLLUTION.CREATURES.TIER3);
        return(gameObject);
    }
Пример #8
0
 private void UpdateAllBudsHarvestStatus(object data = null)
 {
     Ref <HarvestDesignatable>[] array = buds;
     foreach (Ref <HarvestDesignatable> @ref in array)
     {
         if (@ref != null)
         {
             HarvestDesignatable harvestDesignatable = @ref.Get();
             if ((Object)harvestDesignatable == (Object)null)
             {
                 Debug.LogWarning("harvest_designatable was null");
             }
             else
             {
                 UpdateBudHarvestState(harvestDesignatable);
             }
         }
     }
 }
Пример #9
0
 public void TrySpawnRandomBud(object data = null, float growth_percentage = 0f)
 {
     if (!uprooted.IsUprooted)
     {
         spawn_choices.Clear();
         int num = 0;
         for (int i = 0; i < buds.Length; i++)
         {
             Vector3 budPosition = GetBudPosition(i);
             int     cell        = Grid.PosToCell(budPosition);
             if ((buds[i] == null || (Object)buds[i].Get() == (Object)null) && CanGrowInto(cell))
             {
                 spawn_choices.Add(i);
             }
             else if (buds[i] != null && (Object)buds[i].Get() != (Object)null)
             {
                 num++;
             }
         }
         if (num < maxBuds)
         {
             spawn_choices.Shuffle();
             if (spawn_choices.Count > 0)
             {
                 int        num2         = spawn_choices[0];
                 Vector3    budPosition2 = GetBudPosition(num2);
                 GameObject gameObject   = Util.KInstantiate(Assets.GetPrefab(budPrefabID), budPosition2);
                 gameObject.SetActive(true);
                 gameObject.GetComponent <Growing>().OverrideMaturityLevel(growth_percentage);
                 gameObject.GetComponent <TreeBud>().SetTrunkPosition(this, num2);
                 HarvestDesignatable component = gameObject.GetComponent <HarvestDesignatable>();
                 buds[num2] = new Ref <HarvestDesignatable>(component);
                 UpdateBudHarvestState(component);
                 TryRollNewSeed();
             }
         }
     }
 }
Пример #10
0
    public void Refresh(HarvestDesignatable target_harvestable)
    {
        Image          image          = bar.GetComponent <HierarchyReferences>().GetReference("Fill") as Image;
        AmountInstance amountInstance = Db.Get().Amounts.Maturity.Lookup(target_harvestable);

        if (amountInstance != null)
        {
            float         num           = amountInstance.value / amountInstance.GetMax();
            RectTransform rectTransform = image.rectTransform;
            Vector2       offsetMin     = image.rectTransform.offsetMin;
            rectTransform.offsetMin = new Vector2(offsetMin.x, 3f);
            if (bar.activeSelf != !target_harvestable.CanBeHarvested())
            {
                bar.SetActive(!target_harvestable.CanBeHarvested());
            }
            float         num2           = (!target_harvestable.CanBeHarvested()) ? (19f - 19f * num + 3f) : 3f;
            RectTransform rectTransform2 = image.rectTransform;
            Vector2       offsetMax      = image.rectTransform.offsetMax;
            rectTransform2.offsetMax = new Vector2(offsetMax.x, 0f - num2);
        }
        else if (bar.activeSelf)
        {
            bar.SetActive(false);
        }
        WiltCondition component = target_harvestable.GetComponent <WiltCondition>();

        if ((Object)component != (Object)null)
        {
            for (int i = 0; i < horizontal_containers.Length; i++)
            {
                horizontal_containers[i].SetActive(false);
            }
            foreach (KeyValuePair <WiltCondition.Condition, GameObject> condition_icon in condition_icons)
            {
                condition_icon.Value.SetActive(false);
            }
            if (component.IsWilting())
            {
                vertical_container.SetActive(true);
                image.color = wilting_color;
                List <WiltCondition.Condition> list = component.CurrentWiltSources();
                if (list.Count > 0)
                {
                    for (int j = 0; j < list.Count; j++)
                    {
                        if (condition_icons.ContainsKey(list[j]))
                        {
                            condition_icons[list[j]].SetActive(true);
                            horizontal_containers[j / 2].SetActive(true);
                            condition_icons[list[j]].transform.SetParent(horizontal_containers[j / 2].transform);
                        }
                    }
                }
            }
            else
            {
                vertical_container.SetActive(false);
                image.color = growing_color;
            }
        }
        else
        {
            image.color = growing_color;
            vertical_container.SetActive(false);
        }
    }
Пример #11
0
    private void UpdateBudHarvestState(HarvestDesignatable bud)
    {
        HarvestDesignatable component = GetComponent <HarvestDesignatable>();

        bud.SetHarvestWhenReady(component.HarvestWhenReady);
    }