public string SaveSaplingData(SaplingData saplingData) { m_stringBuilder.Length = 0; m_stringBuilder.Append(HumanReadableConverter.ConvertToString(saplingData.Point)); m_stringBuilder.Append(';'); m_stringBuilder.Append(HumanReadableConverter.ConvertToString(saplingData.Type)); m_stringBuilder.Append(';'); m_stringBuilder.Append(HumanReadableConverter.ConvertToString(saplingData.MatureTime)); return(m_stringBuilder.ToString()); }
public void AddSapling(SaplingData saplingData) { m_saplings[saplingData.Point] = saplingData; m_enumerator = m_saplings.Values.GetEnumerator(); }
public void MatureSapling(SaplingData saplingData) { if (!(m_subsystemGameInfo.TotalElapsedGameTime >= saplingData.MatureTime)) { return; } int x = saplingData.Point.X; int y = saplingData.Point.Y; int z = saplingData.Point.Z; TerrainChunk chunkAtCell = base.SubsystemTerrain.Terrain.GetChunkAtCell(x - 6, z - 6); TerrainChunk chunkAtCell2 = base.SubsystemTerrain.Terrain.GetChunkAtCell(x - 6, z + 6); TerrainChunk chunkAtCell3 = base.SubsystemTerrain.Terrain.GetChunkAtCell(x + 6, z - 6); TerrainChunk chunkAtCell4 = base.SubsystemTerrain.Terrain.GetChunkAtCell(x + 6, z + 6); if (chunkAtCell != null && chunkAtCell.State == TerrainChunkState.Valid && chunkAtCell2 != null && chunkAtCell2.State == TerrainChunkState.Valid && chunkAtCell3 != null && chunkAtCell3.State == TerrainChunkState.Valid && chunkAtCell4 != null && chunkAtCell4.State == TerrainChunkState.Valid) { int cellContents = base.SubsystemTerrain.Terrain.GetCellContents(x, y - 1, z); if (cellContents == 2 || cellContents == 8) { if (base.SubsystemTerrain.Terrain.GetCellLight(x, y + 1, z) >= 9) { bool flag = false; for (int i = x - 1; i <= x + 1; i++) { for (int j = z - 1; j <= z + 1; j++) { int cellContents2 = base.SubsystemTerrain.Terrain.GetCellContents(i, y - 1, j); if (BlocksManager.Blocks[cellContents2] is WaterBlock) { flag = true; break; } } } float num = 0f; if (m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Creative) { num = 1f; } else { int num2 = base.SubsystemTerrain.Terrain.GetTemperature(x, z) + SubsystemWeather.GetTemperatureAdjustmentAtHeight(y); int num3 = base.SubsystemTerrain.Terrain.GetHumidity(x, z); if (flag) { num2 = (num2 + 10) / 2; num3 = MathUtils.Max(num3, 12); } num = 2f * PlantsManager.CalculateTreeProbability(saplingData.Type, num2, num3, y); } if (m_random.Bool(num)) { base.SubsystemTerrain.ChangeCell(x, y, z, Terrain.MakeBlockValue(0, 0, 0)); if (!GrowTree(x, y, z, saplingData.Type)) { base.SubsystemTerrain.ChangeCell(x, y, z, Terrain.MakeBlockValue(28, 0, 0)); } } else { base.SubsystemTerrain.ChangeCell(x, y, z, Terrain.MakeBlockValue(28, 0, 0)); } } else if (m_subsystemGameInfo.TotalElapsedGameTime > saplingData.MatureTime + 1200.0) { base.SubsystemTerrain.ChangeCell(x, y, z, Terrain.MakeBlockValue(28, 0, 0)); } } else { base.SubsystemTerrain.ChangeCell(x, y, z, Terrain.MakeBlockValue(28, 0, 0)); } } else { saplingData.MatureTime = m_subsystemGameInfo.TotalElapsedGameTime; } }