Skip to content

Commit

Permalink
Small refactoring
Browse files Browse the repository at this point in the history
* Introduced nullability
* Fixed some nullability problems
* Refactored old C# style to more recent ones
* Removed unused usings
* Removed some unused code
* Fixed some spelling mistakes
* Updated engenious to newer version(for better nullability compatibility)
  • Loading branch information
jvbsl committed Dec 12, 2021
1 parent b0ec13e commit ed2bdce
Show file tree
Hide file tree
Showing 353 changed files with 2,251 additions and 5,266 deletions.
47 changes: 21 additions & 26 deletions OctoAwesome/OctoAwesome.Basics/Biomes/BiomeBase.cs
Original file line number Diff line number Diff line change
@@ -1,43 +1,39 @@
using OctoAwesome.Noise;

using System;
using System.Buffers;
using System.Buffers;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OctoAwesome.Basics.Noise;

namespace OctoAwesome.Basics.Biomes
{

public abstract class BiomeBase : IBiome
{
public IPlanet Planet { get; private set; }

public List<IBiome> SubBiomes { get; protected set; }

public INoise BiomeNoiseGenerator { get; protected set; }

public float MinValue { get; protected set; }

public float MaxValue { get; protected set; }

public float ValueRangeOffset { get; protected set; }

public float ValueRange { get; protected set; }

public BiomeBase(IPlanet planet, float minValue, float maxValue, float valueRangeOffset, float valueRange)
public IPlanet Planet { get; }
public List<IBiome> SubBiomes { get; }
public INoise BiomeNoiseGenerator { get; }
public float MinValue { get; }
public float MaxValue { get; }
public float ValueRangeOffset { get; }
public float ValueRange { get; }
protected BiomeBase(IPlanet planet, float minValue, float maxValue, float valueRangeOffset, float valueRange, INoise biomeNoiseGenerator)
{
SubBiomes = new List<IBiome>();
Planet = planet;
MinValue = minValue;
MaxValue = maxValue;
ValueRangeOffset = valueRangeOffset;
ValueRange = valueRange;
BiomeNoiseGenerator = biomeNoiseGenerator;
}

public virtual float[] GetHeightmap(Index2 chunkIndex, float[] heightmap)
public virtual void GetHeightmap(Index2 chunkIndex, float[] heightmap)
{

chunkIndex = new Index2(chunkIndex.X * Chunk.CHUNKSIZE_X, chunkIndex.Y * Chunk.CHUNKSIZE_Y);
float[] heights = ArrayPool<float>.Shared.Rent(Chunk.CHUNKSIZE_X * Chunk.CHUNKSIZE_Y);
for (int i = 0; i < heights.Length; i++)
Expand All @@ -52,7 +48,6 @@ public virtual float[] GetHeightmap(Index2 chunkIndex, float[] heightmap)
}
}
ArrayPool<float>.Shared.Return(heights);
return heightmap;
}
}
}
13 changes: 4 additions & 9 deletions OctoAwesome/OctoAwesome.Basics/Biomes/FlatlandBiome.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
using OctoAwesome.Noise;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OctoAwesome.Basics.Noise;

namespace OctoAwesome.Basics.Biomes
{
class FlatlandBiome : BiomeBase
public class FlatlandBiome : BiomeBase
{
public FlatlandBiome(IPlanet planet, float minValue, float maxValue, float valueRangeOffset, float valueRange)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange,
new SimplexNoiseGenerator(planet.Seed + 2) { FrequencyX = 1f / 256, FrequencyY = 1f / 256, Persistence = 0.25f, Octaves = 3, Factor = 1f })
{
BiomeNoiseGenerator = new SimplexNoiseGenerator(planet.Seed + 2) { FrequencyX = 1f / 256, FrequencyY = 1f / 256, Persistance = 0.25f, Octaves = 3, Factor = 1f };

}
}
}
12 changes: 4 additions & 8 deletions OctoAwesome/OctoAwesome.Basics/Biomes/HighMountainBiome.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
using OctoAwesome.Noise;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OctoAwesome.Basics.Noise;

namespace OctoAwesome.Basics.Biomes
{
class HighMountainBiome : BiomeBase
public class HighMountainBiome : BiomeBase
{
public HighMountainBiome(IPlanet planet, float minValue, float maxValue, float valueRangeOffset, float valueRange)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange,
new SimplexNoiseGenerator(planet.Seed + 2) { FrequencyX = 1f / 256, FrequencyY = 1f / 256, FrequencyZ = 1f / 256, Persistence = 0.5f, Octaves = 6, Factor = 1f })
{
BiomeNoiseGenerator = new SimplexNoiseGenerator(planet.Seed + 2) { FrequencyX = 1f / 256, FrequencyY = 1f / 256, FrequencyZ = 1f / 256, Persistance = 0.5f, Octaves = 6, Factor = 1f };
}
}
}
10 changes: 3 additions & 7 deletions OctoAwesome/OctoAwesome.Basics/Biomes/HillsBiome.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
using OctoAwesome.Noise;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OctoAwesome.Basics.Noise;

namespace OctoAwesome.Basics.Biomes
{
public class HillsBiome : BiomeBase
{
public HillsBiome(IPlanet planet, float minValue, float maxValue, float valueRangeOffset, float valueRange)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange,
new SimplexNoiseGenerator(planet.Seed + 2) { FrequencyX = 1f / 256, FrequencyY = 1f / 256, FrequencyZ = 1f / 256, Persistence = 0.4f, Octaves = 4, Factor = 1f })
{
BiomeNoiseGenerator = new SimplexNoiseGenerator(planet.Seed + 2) { FrequencyX = 1f / 256, FrequencyY = 1f / 256, FrequencyZ = 1f / 256, Persistance = 0.4f, Octaves = 4, Factor = 1f };
}
}
}
14 changes: 5 additions & 9 deletions OctoAwesome/OctoAwesome.Basics/Biomes/IBiome.cs
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
using OctoAwesome.Noise;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OctoAwesome.Basics.Noise;

namespace OctoAwesome.Basics.Biomes
{

public interface IBiome
{

IPlanet Planet { get; }
float MinValue { get; }
float MaxValue { get; }

float ValueRangeOffset { get; }
float ValueRange { get; }

INoise BiomeNoiseGenerator { get; }

float[] GetHeightmap(Index2 chunkIndex, float[] heightmap);
void GetHeightmap(Index2 chunkIndex, float[] heightmap);
}
}
27 changes: 9 additions & 18 deletions OctoAwesome/OctoAwesome.Basics/Biomes/LandBiomeGenerator.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,24 @@
using OctoAwesome.Noise;

using System;
using System;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OctoAwesome.Basics.Noise;

namespace OctoAwesome.Basics.Biomes
{

public class LandBiomeGenerator : LargeBiomeBase
{
public LandBiomeGenerator(IPlanet planet, float minVal, float maxVal, float valueRangeOffset, float valueRange)
: base(planet, valueRangeOffset, valueRange)
public LandBiomeGenerator(IPlanet planet, float minValue, float maxValue, float valueRangeOffset, float valueRange)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange,
new SimplexNoiseGenerator(planet.Seed + 1) { FrequencyX = 1f / 1000, FrequencyY = 1f / 1000, Persistence = 0.25f, Octaves = 5, Factor = 1f })
{
BiomeNoiseGenerator = new SimplexNoiseGenerator(planet.Seed + 1) { FrequencyX = 1f / 1000, FrequencyY = 1f / 1000, Persistance = 0.25f, Octaves = 5, Factor = 1f };

MinValue = minVal;
MaxValue = maxVal;

SubBiomes.Add(new FlatlandBiome(planet, 0f, 0.2f, 0f, 0.1f));
SubBiomes.Add(new HillsBiome(planet, 0.3f, 0.5f, 0.1f, 0.4f));
SubBiomes.Add(new HighMountainBiome(planet, 0.8f, 1f, 0.2f, 0.8f));

SortSubBiomes();
}

public override float[] GetHeightmap(Index2 chunkIndex, float[] heightmap)
public override void GetHeightmap(Index2 chunkIndex, float[] heightmap)
{
Index2 blockIndex = new Index2(chunkIndex.X * Chunk.CHUNKSIZE_X, chunkIndex.Y * Chunk.CHUNKSIZE_Y);

Expand Down Expand Up @@ -54,7 +46,7 @@ public override float[] GetHeightmap(Index2 chunkIndex, float[] heightmap)
int biome2;
int biome1 = ChooseBiome(region, out biome2);

float interpolationValue = 0f;
float interpolationValue;
if (biome2 != -1)
{
interpolationValue = CalculateInterpolationValue(region, SubBiomes[biome1], SubBiomes[biome2]);
Expand All @@ -66,7 +58,6 @@ public override float[] GetHeightmap(Index2 chunkIndex, float[] heightmap)
}
ArrayPool<float>.Shared.Return(regions);
ArrayPool<float>.Shared.Return(biomeValues);
return heightmap;
}
}
}
Expand Down
36 changes: 12 additions & 24 deletions OctoAwesome/OctoAwesome.Basics/Biomes/LargeBiomeBase.cs
Original file line number Diff line number Diff line change
@@ -1,32 +1,28 @@
using OctoAwesome.Noise;

using System;
using System.Collections.Generic;
using System;
using System.Diagnostics;
using System.Linq;
using System.Text;
using OctoAwesome.Basics.Noise;

namespace OctoAwesome.Basics.Biomes
{

public abstract class LargeBiomeBase : BiomeBase
{


public LargeBiomeBase(IPlanet planet, float valueRangeOffset, float valueRange)
: base(planet, 0, 0, valueRangeOffset, valueRange)
public LargeBiomeBase(IPlanet planet, float minValue, float maxValue, float valueRangeOffset, float valueRange, INoise biomeNoiseGenerator)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange, biomeNoiseGenerator)
{
}

protected void SortSubBiomes()
{
SubBiomes = SubBiomes.OrderBy(a => a.MinValue).ToList();
SubBiomes.Sort((a, b) => a.MinValue.CompareTo(b.MinValue));

if (SubBiomes.Count > 0 && (SubBiomes.First().MinValue > 0f || SubBiomes.Last().MaxValue < 1f))
{
throw new InvalidOperationException("MinValue oder MaxValue der Biome nicht in gültigem Bereich");
}
}

protected IBiome ChooseBiome(float value, out IBiome secondBiome)
protected IBiome? ChooseBiome(float value, out IBiome? secondBiome)
{
secondBiome = null;
bool betweenPossible = false;
Expand All @@ -43,7 +39,6 @@ protected IBiome ChooseBiome(float value, out IBiome secondBiome)
}
return null;
}

protected int ChooseBiome(float value, out int secondBiome)
{
secondBiome = -1;
Expand All @@ -61,35 +56,28 @@ protected int ChooseBiome(float value, out int secondBiome)
}
return -1;
}

protected float CalculateInterpolationValue(float region, out IBiome biome1, out IBiome biome2)
protected float CalculateInterpolationValue(float region, out IBiome? biome1, out IBiome? biome2)
{
biome1 = ChooseBiome(region, out biome2);

return CalculateInterpolationValue(region, biome1, biome2);
}

protected float CalculateInterpolationValue(float region, IBiome biome1, IBiome biome2)
protected float CalculateInterpolationValue(float region, IBiome? biome1, IBiome? biome2)
{
if (biome2 != null)
{
Debug.Assert(biome1 != null, nameof(biome1) + " != null");
float diff = biome2.MinValue - biome1.MaxValue;
region -= biome1.MaxValue;
region /= diff;
return CurveFunction(region);
}
else if (biome1 != null)
{
return 0f;
}

return 0f;
}

protected virtual float CurveFunction(float inputValue)
{
return inputValue;
}

public override float[] GetHeightmap(Index2 chunkIndex, float[] heightmap) => base.GetHeightmap(chunkIndex, heightmap);
}
}
20 changes: 5 additions & 15 deletions OctoAwesome/OctoAwesome.Basics/Biomes/OceanBiomeGenerator.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
using OctoAwesome.Noise;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OctoAwesome.Basics.Biomes
namespace OctoAwesome.Basics.Biomes
{

public class OceanBiomeGenerator : LargeBiomeBase
{
public OceanBiomeGenerator(IPlanet planet, float minVal, float maxVal, float valueRangeOffset, float valueRange)
: base(planet, valueRangeOffset, valueRange)
public OceanBiomeGenerator(IPlanet planet, float minValue, float maxValue, float valueRangeOffset, float valueRange)
: base(planet, minValue, maxValue, valueRangeOffset, valueRange, null!) // TODO: currently no noise value is used for the biome floor
{
MinValue = minVal;
MaxValue = maxVal;
}

public override float[] GetHeightmap(Index2 chunkIndex, float[] heightmap)
public override void GetHeightmap(Index2 chunkIndex, float[] heightmap)
{

chunkIndex = new Index2(chunkIndex.X * Chunk.CHUNKSIZE_X, chunkIndex.Y * Chunk.CHUNKSIZE_Y);
Expand All @@ -28,7 +19,6 @@ public override float[] GetHeightmap(Index2 chunkIndex, float[] heightmap)
heightmap[(y * Chunk.CHUNKSIZE_X) + x] = 0f;
}
}
return heightmap;
}
}
}
Loading

0 comments on commit ed2bdce

Please sign in to comment.