mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-04-06 15:33:32 +00:00
141 lines
3.2 KiB
C++
Executable File
141 lines
3.2 KiB
C++
Executable File
#include "Dimension.h"
|
|
#include "NormalDayCycleDimension.h"
|
|
|
|
//#include "../levelgen/SimpleLevelSource.h"
|
|
#include "../levelgen/RandomLevelSource.h"
|
|
#include "../Level.h"
|
|
#include "../biome/BiomeSource.h"
|
|
#include "../chunk/ChunkSource.h"
|
|
#include "../tile/Tile.h"
|
|
#include "../../../util/Mth.h"
|
|
|
|
|
|
Dimension::Dimension()
|
|
: foggy(false),
|
|
ultraWarm(false),
|
|
hasCeiling(false),
|
|
biomeSource(NULL),
|
|
id(0)
|
|
{
|
|
}
|
|
|
|
Dimension::~Dimension()
|
|
{
|
|
delete biomeSource;
|
|
}
|
|
|
|
void Dimension::init( Level* level )
|
|
{
|
|
this->level = level;
|
|
init();
|
|
updateLightRamp();
|
|
}
|
|
|
|
void Dimension::init()
|
|
{
|
|
biomeSource = new BiomeSource(level);
|
|
}
|
|
|
|
/*virtual*/
|
|
bool Dimension::isValidSpawn(int x, int z) {
|
|
int topTile = level->getTopTile(x, z);
|
|
|
|
if (topTile == Tile::invisible_bedrock->id)
|
|
return false;
|
|
|
|
//if (topTile != Tile::sand->id) return false;
|
|
if (!Tile::tiles[topTile]->isSolidRender()) return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
float Dimension::getTimeOfDay(long time, float a) {
|
|
return 1;
|
|
}
|
|
|
|
ChunkSource* Dimension::createRandomLevelSource() {
|
|
return new RandomLevelSource(
|
|
level,
|
|
level->getSeed(),
|
|
level->getLevelData()->getGeneratorVersion(),
|
|
!level->isClientSide && level->getLevelData()->getSpawnMobs());
|
|
//return new PerformanceTestChunkSource(level);
|
|
}
|
|
|
|
|
|
void Dimension::updateLightRamp()
|
|
{
|
|
float ambientLight = 0.05f;
|
|
for (int i = 0; i <= 15; /*Level::MAX_BRIGHTNESS;*/ i++) {
|
|
float v = (1 - i / (float) (16 /*Level::MAX_BRIGHTNESS*/));
|
|
// Boosted ambient lightning by ten times.
|
|
brightnessRamp[i] = ((1 - v) / (v * 3 + 1)) * (1 - ambientLight) + ambientLight * 3;
|
|
}
|
|
}
|
|
|
|
float* Dimension::getSunriseColor( float td, float a )
|
|
{
|
|
float span = 0.4f;
|
|
float tt = Mth::cos(td * Mth::PI * 2) - 0.0f;
|
|
float mid = -0.0f;
|
|
if (tt >= mid - span && tt <= mid + span) {
|
|
float aa = ((tt - mid) / span) * 0.5f + 0.5f;
|
|
float mix = 1 - (((1 - Mth::sin(aa * Mth::PI))) * 0.99f);
|
|
mix = mix * mix;
|
|
sunriseCol[0] = (aa * 0.3f + 0.7f);
|
|
sunriseCol[1] = (aa * aa * 0.7f + 0.2f);
|
|
sunriseCol[2] = (aa * aa * 0.0f + 0.2f);
|
|
sunriseCol[3] = mix;
|
|
return sunriseCol;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
Vec3 Dimension::getFogColor( float td, float a )
|
|
{
|
|
float br = Mth::cos(td * Mth::PI * 2) * 2 + 0.5f;
|
|
if (br < 0.0f) br = 0.0f;
|
|
if (br > 1.0f) br = 1.0f;
|
|
|
|
float r = ((fogColor >> 16) & 0xff) / 255.0f;
|
|
float g = ((fogColor >> 8) & 0xff) / 255.0f;
|
|
float b = ((fogColor) & 0xff) / 255.0f;
|
|
r *= br * 0.94f + 0.06f;
|
|
g *= br * 0.94f + 0.06f;
|
|
b *= br * 0.91f + 0.09f;
|
|
return Vec3(r, g, b);
|
|
//return Vec3(0.752941f, 0.847059f, 1);
|
|
}
|
|
|
|
bool Dimension::mayRespawn()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
Dimension* Dimension::getNew( int id )
|
|
{
|
|
if (id == NORMAL) return new Dimension();
|
|
if (id == NORMAL_DAYCYCLE) return new NormalDayCycleDimension();
|
|
return NULL;
|
|
}
|
|
|
|
//
|
|
// DimensionFactory
|
|
//
|
|
#include "../storage/LevelData.h"
|
|
Dimension* DimensionFactory::createDefaultDimension(LevelData* data )
|
|
{
|
|
int dimensionId = Dimension::NORMAL;
|
|
|
|
switch(data->getGameType()) {
|
|
case GameType::Survival: dimensionId = Dimension::NORMAL_DAYCYCLE;
|
|
break;
|
|
case GameType::Creative:
|
|
default:
|
|
dimensionId = Dimension::NORMAL;
|
|
break;
|
|
}
|
|
|
|
return Dimension::getNew(dimensionId);
|
|
}
|