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; } }
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; } }
private void UpdatePlantStage(PlantSpriteStage oldValue, PlantSpriteStage newValue) { if (plantCurrentStage != newValue) { plantCurrentStage = newValue; UpdateSprite(); } }
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(); } }
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); }
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; } }
/// <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); }