So the answer is my code. As the @DMGregory pointed in my question post comments I could use my determination function to find out which biome I can find. Like this:
enum BiomeType { SNOWY_WASTELANDS, //etc. }
public BiomeType getBiomeType(Vector2 position)
{
float moisture = m_moisture[position];
float temperature = m_temperature[position];
if (moisture >= 0.0f && moisture <= 0.3f)
{
if (temperature <= 0.3f)
return BiomeType.SNOWY_WASTELANDS;
else if (temperature <= 0.6f)
return BiomeType.Biome2;
else
return BiomeType.Biome3;
}
else
{
if (moisture <= 0.6f)
return BiomeType.Blabla;
else if (moisture <= 0.8f)
return BiomeType.Blablabla2;
else
return BiomeType.Blablabla3;
}
}
And I could always calculate it on loading times so I don't have to do it every time when I move like so:
public void _Ready()
{
m_biomeInfo = new Dictionary<Vector2, BiomeType>();
for (int x = 0; x < WORLD_WIDTH; x++)
{
for (int y = 0; y < WOLRD_HEIGHT; y++)
{
Vector2 position = new Vector2(x, y);
BiomeType biomeType;
//calculate biome for position here
m_biomeInfo[position] = biomeType;
}
}
}
public BiomeType getBiomeType(Vector2 position)
{
return m_biomeInfo[position];
}
This wouldn't work for infinite worlds, so I think the only way to calculate it on fly. It depends on the game tho for example you could connect biomes with right tiles and find out which current tile is player standing on. This would work while your ground tiles are unique to biome like "DESERT_GROUND_TILE" in my case.