Esempio n. 1
0
    private void SyncStage(PlantSpriteStage newStage)
    {
        if (newStage == plantSyncStage)
        {
            return;
        }

        plantSyncStage = newStage;
        switch (plantSyncStage)
        {
        case PlantSpriteStage.None:
            plantSprite.PushClear();
            break;

        case PlantSpriteStage.FullyGrown:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.FullyGrownSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Dead:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.DeadSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Growing:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.GrowthSprites[growingPlantStage]);
            plantSprite.PushTexture();
            break;
        }
    }
Esempio n. 2
0
    private void SyncStage(PlantSpriteStage newStage)
    {
        if (newStage == plantSyncStage)
        {
            return;
        }

        plantSyncStage = newStage;
        switch (plantSyncStage)
        {
        case PlantSpriteStage.None:
            plantSprite.PushClear();
            break;

        case PlantSpriteStage.FullyGrown:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.FullyGrownSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Dead:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.DeadSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Growing:
            if (growingPlantStage >= plantData.GrowthSprites.Count)
            {
                Logger.Log($"Plant data does not contain growthsprites for index: {growingPlantStage} in plantData.GrowthSprites. Plant: {plantData.Plantname}");
                return;
            }
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.GrowthSprites[growingPlantStage]);
            plantSprite.PushTexture();
            break;
        }
    }
Esempio n. 3
0
 private void UpdatePlantStage(PlantSpriteStage oldValue, PlantSpriteStage newValue)
 {
     if (plantCurrentStage != newValue)
     {
         plantCurrentStage = newValue;
         UpdateSprite();
     }
 }
Esempio n. 4
0
    public void ReceiveMessage(string plantString, int growingStage, PlantSpriteStage spriteStage,
                               bool harvestSync, bool weedSync, bool waterSync, bool nutrimentSync)
    {
        plantSyncString = plantString;

        SyncHarvest(harvestSync);
        SyncWeed(weedSync);
        SyncWater(waterSync);
        SyncNutriment(nutrimentSync);

        if (DefaultPlantData.PlantDictionary.ContainsKey(plantSyncString))
        {
            plantData = DefaultPlantData.PlantDictionary[plantSyncString].plantData;
        }

        growingPlantStage = growingStage;

        plantSyncStage = spriteStage;

        if (plantData == null)
        {
            //FIXME "BOD PLZ FIX BOTANY PLANT DATA IS NULL!"
            return;
        }
        switch (plantSyncStage)
        {
        case PlantSpriteStage.None:
            plantSprite.PushClear();
            break;

        case PlantSpriteStage.FullyGrown:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.FullyGrownSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Dead:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.DeadSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Growing:
            if (growingPlantStage >= plantData.GrowthSprites.Count)
            {
                Logger.Log($"Plant data does not contain growthsprites for index: {growingPlantStage} in plantData.GrowthSprites. Plant: {plantData.Plantname}");
                return;
            }
            plantSprite.spriteData =
                SpriteFunctions.SetupSingleSprite(plantData.GrowthSprites[growingPlantStage]);
            plantSprite.PushTexture();
            break;
        }
    }
    private void SyncStage(PlantSpriteStage newStage)
    {
        if (newStage == plantSyncStage)
        {
            return;
        }

        plantSyncStage = newStage;
        if (plantData == null)
        {
            //FIXME: BOD PLZ FIX BOTANY PLANT DATA IS NULL!
            return;
        }
        switch (plantSyncStage)
        {
        case PlantSpriteStage.None:
            plantSprite.PushClear();
            break;

        case PlantSpriteStage.FullyGrown:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.FullyGrownSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Dead:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.DeadSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Growing:
            if (growingPlantStage >= plantData.GrowthSprites.Count)
            {
                Logger.Log($"Plant data does not contain growthsprites for index: {growingPlantStage} in plantData.GrowthSprites. Plant: {plantData.Plantname}");
                return;
            }
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.GrowthSprites[growingPlantStage]);
            plantSprite.PushTexture();
            break;
        }

        //Force a refresh on nearby clients
        if (isServer)
        {
            SendUpdateToNearbyPlayers();
        }
    }
Esempio n. 6
0
        private void CropDeath()
        {
            if (plantData.PlantTrays.Contains(PlantTrays.Weed_Adaptation))
            {
                reagentContainer.Add(new ReagentMix(nutriment, plantData.Potency));
            }

            if (plantData.PlantTrays.Contains(PlantTrays.Fungal_Vitality))
            {
                reagentContainer.Add(new ReagentMix(water, plantData.Potency));
            }

            growingPlantStage = 0;
            plantCurrentStage = PlantSpriteStage.Dead;
            UpdateSprite();
            plantData = null;
            readyProduce.Clear();
            UpdateHarvestFlag(showHarvestFlag, false);
        }
Esempio n. 7
0
    public void ReceiveMessage(string plantString, int growingStage, PlantSpriteStage spriteStage,
                               bool harvestSync, bool weedSync, bool waterSync, bool nutrimentSync)
    {
        plantSyncString = plantString;

        SyncHarvest(harvestSync);
        SyncWeed(weedSync);
        SyncWater(waterSync);
        SyncNutriment(nutrimentSync);

        if (DefaultPlantData.PlantDictionary.ContainsKey(plantSyncString))
        {
            plantData = DefaultPlantData.PlantDictionary[plantSyncString].plantData;
        }

        growingPlantStage = growingStage;

        plantSyncStage = spriteStage;
        switch (plantSyncStage)
        {
        case PlantSpriteStage.None:
            plantSprite.PushClear();
            break;

        case PlantSpriteStage.FullyGrown:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.FullyGrownSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Dead:
            plantSprite.spriteData = SpriteFunctions.SetupSingleSprite(plantData.DeadSprite);
            plantSprite.PushTexture();
            break;

        case PlantSpriteStage.Growing:
            plantSprite.spriteData =
                SpriteFunctions.SetupSingleSprite(plantData.GrowthSprites[growingPlantStage]);
            plantSprite.PushTexture();
            break;
        }
    }
Esempio n. 8
0
        /// <summary>
        /// Server updates plant status and updates clients as needed
        /// </summary>
        public override void UpdateMe()
        {
            //Only server checks plant status, wild plants do not grow
            if (!isServer || isWild)
            {
                return;
            }

            //Only update at set rate
            tickCount += Time.deltaTime;
            if (tickCount < tickRate)
            {
                return;
            }

            tickCount = 0f;


            if (HasPlant)
            {
                //Up plants age
                plantData.Age++;

                //Weeds checks
                if (weedLevel < 10)
                {
                    weedLevel = weedLevel + ((0.1f) * (plantData.WeedGrowthRate / 10f));
                    if (weedLevel > 10)
                    {
                        weedLevel = 10;
                    }
                }

                if (weedLevel > 9.5f && !plantData.PlantTrays.Contains(PlantTrays.Weed_Adaptation))
                {
                    plantData.Health += (((plantData.WeedResistance - 110f) / 100f) * (weedLevel / 10f) * 5);
                    //Logger.Log("plantData.weed > " + plantData.PlantHealth);
                }

                //Water Checks
                if (reagentContainer[water] > 0)
                {
                    reagentContainer.Subtract(new ReagentMix(water, .1f));
                }
                else if (!plantData.PlantTrays.Contains(PlantTrays.Fungal_Vitality))
                {
                    plantData.Health += (plantData.Endurance - 101f) / 100f;
                }


                //Growth and harvest checks
                if (!ReadyToHarvest)
                {
                    plantData.NextGrowthStageProgress += (int)Math.Ceiling(plantData.GrowthSpeed / 5f);

                    if (plantData.NextGrowthStageProgress > 100)
                    {
                        plantData.NextGrowthStageProgress = 0;
                        if (reagentContainer[nutriment] > 0 || plantData.PlantTrays.Contains(PlantTrays.Weed_Adaptation))
                        {
                            if (!plantData.PlantTrays.Contains(PlantTrays.Weed_Adaptation))
                            {
                                if (reagentContainer[nutriment] > 0)
                                {
                                    reagentContainer.Subtract(new ReagentMix(nutriment, 1));
                                }
                            }

                            if ((growingPlantStage + 1) < plantData.GrowthSpritesSOs.Count)
                            {
                                growingPlantStage = growingPlantStage + 1;
                                UpdateSprite();
                                plantCurrentStage = PlantSpriteStage.Growing;
                            }
                            else
                            {
                                if (!ReadyToHarvest)
                                {
                                    //plantData.NaturalMutation(modification);
                                    plantCurrentStage = PlantSpriteStage.FullyGrown;
                                    ProduceCrop();
                                }
                                UpdateHarvestFlag(showHarvestFlag, true);
                                UpdateSprite();
                            }
                        }
                        else
                        {
                            plantData.Health += (((plantData.Endurance - 101f) / 100f) * 5);
                            //Logger.Log("plantData.Nutriment > " + plantData.PlantHealth);
                        }
                    }
                }

                //Health checks
                if (plantData.Health < 0)
                {
                    CropDeath();
                }
                else if (plantData.Age > plantData.Lifespan * 2500)
                {
                    CropDeath();
                }
            }
            //Empty tray checks
            else
            {
                if (weedLevel < 10)
                {
                    weedLevel += 0.01f;
                    if (weedLevel > 10)
                    {
                        weedLevel = 10;
                    }
                }

                // If there is no living plant in the tray and weed level is at least 10, choose a seed from the "Potential Weeds" list to grow in the tray.
                if (plantData == null)
                {
                    if (weedLevel >= 10)
                    {
                        var data = potentialWeeds[random.Next(potentialWeeds.Count)];
                        plantData         = PlantData.CreateNewPlant(data.plantData);
                        growingPlantStage = 0;
                        plantCurrentStage = PlantSpriteStage.Growing;
                        weedLevel         = 0;
                        //hasPlant = true;
                        UpdateSprite();
                    }
                }
            }


            UpdateNutrimentFlag(showNutrimenetFlag, reagentContainer[nutriment] < 25);

            UpdateWaterFlag(showWaterFlag, reagentContainer[water] < 25);
            UpdateWeedsFlag(showWeedsFlag, weedLevel > 5);
        }
    public static PlantTrayMessage SendToNearbyPlayers(GameObject tray,
                                                       string plant, int growingStage, PlantSpriteStage spriteStage,
                                                       bool harvestNotifier, bool weedNotifier, bool waterNotifier,
                                                       bool nutrimentNotifier)
    {
        PlantTrayMessage msg = new PlantTrayMessage
        {
            Tray                  = tray.NetId(),
            PlantSyncString       = plant,
            GrowingPlantStage     = growingStage,
            PlantSyncStage        = spriteStage,
            SyncHarvestNotifier   = harvestNotifier,
            SyncNutrimentNotifier = nutrimentNotifier,
            SyncWaterNotifier     = waterNotifier,
            SyncWeedNotifier      = weedNotifier
        };

        msg.SendToNearbyPlayers(tray.transform.position);
        return(msg);
    }