/// <summary>Age a fruit tree if it's eligible for aging.</summary> /// <param name="tree">The tree to grow.</param> private void AgeFruitTree(FruitTree tree) { FruitTreeConfig config = this.Config.FruitTrees; // check if ageable if (!config.InstantlyAge || tree.growthStage.Value < FruitTree.treeStage || tree.daysUntilMature.Value <= -ModEntry.FruitTreeIridiumDays) { return; } // age tree tree.daysUntilMature.Value = -ModEntry.FruitTreeIridiumDays; }
/// <summary>Grow a fruit tree if it's eligible for growth.</summary> /// <param name="tree">The tree to grow.</param> /// <param name="location">The tree's location.</param> /// <param name="tile">The tree's tile position.</param> private void GrowFruitTree(FruitTree tree, GameLocation location, Vector2 tile) { FruitTreeConfig config = this.Config.FruitTrees; // check if growable bool isGrown = tree.growthStage.Value >= FruitTree.treeStage; bool isMature = tree.daysUntilMature.Value <= 0; if ((isGrown && isMature) || !this.CanGrowNow(location, config.InstantlyGrowInWinter)) { return; } // ignore if tree blocked if (!config.InstantlyGrowWhenInvalid) { foreach (Vector2 adjacentTile in Utility.getSurroundingTileLocationsArray(tile)) { bool occupied = location.isTileOccupied(adjacentTile) && ( !location.terrainFeatures.ContainsKey(tile) || !(location.terrainFeatures[tile] is HoeDirt) || ((HoeDirt)location.terrainFeatures[tile]).crop == null ); if (occupied) { return; } } } // grow tree if (!isGrown) { tree.growthStage.Value = FruitTree.treeStage; } if (!isMature) { tree.daysUntilMature.Value = 0; } }