mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-04-05 15:03:31 +00:00
Compare commits
8 Commits
fix-ios-co
...
378dfe8e22
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
378dfe8e22 | ||
|
|
61f0124beb | ||
|
|
ff5c57f6ba | ||
|
|
eac71a93d1 | ||
|
|
fa249728e5 | ||
|
|
84e8744387 | ||
|
|
27f0287986 | ||
|
|
109bbcfdb1 |
BIN
data/images/environment/foliagecolor.png
Normal file
BIN
data/images/environment/foliagecolor.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
data/images/environment/grasscolor.png
Normal file
BIN
data/images/environment/grasscolor.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
@@ -153,6 +153,7 @@ options.group.tweaks=Tweaks
|
|||||||
options.allowSprint=Allow sprint
|
options.allowSprint=Allow sprint
|
||||||
options.barOnTop=HUD above inventory
|
options.barOnTop=HUD above inventory
|
||||||
options.rpiCursor=Show Raspberry PI cursor
|
options.rpiCursor=Show Raspberry PI cursor
|
||||||
|
options.foliageTint=Tint Grass and Leaves
|
||||||
options.autoJump=Auto Jump
|
options.autoJump=Auto Jump
|
||||||
options.thirdperson=Third Person
|
options.thirdperson=Third Person
|
||||||
options.servervisible=Server Visible
|
options.servervisible=Server Visible
|
||||||
|
|||||||
@@ -209,6 +209,8 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/world/level/MobSpawner.cpp \
|
../../../src/world/level/MobSpawner.cpp \
|
||||||
../../../src/world/level/Region.cpp \
|
../../../src/world/level/Region.cpp \
|
||||||
../../../src/world/level/TickNextTickData.cpp \
|
../../../src/world/level/TickNextTickData.cpp \
|
||||||
|
../../../src/world/level/FoliageColor.cpp \
|
||||||
|
../../../src/world/level/GrassColor.cpp \
|
||||||
../../../src/world/level/biome/Biome.cpp \
|
../../../src/world/level/biome/Biome.cpp \
|
||||||
../../../src/world/level/biome/BiomeSource.cpp \
|
../../../src/world/level/biome/BiomeSource.cpp \
|
||||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||||
|
|||||||
@@ -183,6 +183,8 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
|
|||||||
../../../src/world/level/MobSpawner.cpp \
|
../../../src/world/level/MobSpawner.cpp \
|
||||||
../../../src/world/level/Region.cpp \
|
../../../src/world/level/Region.cpp \
|
||||||
../../../src/world/level/TickNextTickData.cpp \
|
../../../src/world/level/TickNextTickData.cpp \
|
||||||
|
../../../src/world/level/FoliageColor.cpp \
|
||||||
|
../../../src/world/level/GrassColor.cpp \
|
||||||
../../../src/world/level/biome/Biome.cpp \
|
../../../src/world/level/biome/Biome.cpp \
|
||||||
../../../src/world/level/biome/BiomeSource.cpp \
|
../../../src/world/level/biome/BiomeSource.cpp \
|
||||||
../../../src/world/level/chunk/LevelChunk.cpp \
|
../../../src/world/level/chunk/LevelChunk.cpp \
|
||||||
|
|||||||
@@ -90,6 +90,7 @@
|
|||||||
#include "../network/command/CommandServer.h"
|
#include "../network/command/CommandServer.h"
|
||||||
#include "gamemode/CreatorMode.h"
|
#include "gamemode/CreatorMode.h"
|
||||||
|
|
||||||
|
#include "../world/level/GrassColor.h"
|
||||||
static void checkGlError(const char* tag) {
|
static void checkGlError(const char* tag) {
|
||||||
#ifdef GLDEBUG
|
#ifdef GLDEBUG
|
||||||
while (1) {
|
while (1) {
|
||||||
@@ -1125,12 +1126,31 @@ void Minecraft::init()
|
|||||||
textures = new Textures(&options, platform());
|
textures = new Textures(&options, platform());
|
||||||
textures->addDynamicTexture(new WaterTexture());
|
textures->addDynamicTexture(new WaterTexture());
|
||||||
textures->addDynamicTexture(new WaterSideTexture());
|
textures->addDynamicTexture(new WaterSideTexture());
|
||||||
|
textures->addDynamicTexture(new FireTexture());
|
||||||
gui.texturesLoaded(textures);
|
gui.texturesLoaded(textures);
|
||||||
|
|
||||||
levelRenderer = new LevelRenderer(this);
|
levelRenderer = new LevelRenderer(this);
|
||||||
gameRenderer = new GameRenderer(this);
|
gameRenderer = new GameRenderer(this);
|
||||||
particleEngine = new ParticleEngine(level, textures);
|
particleEngine = new ParticleEngine(level, textures);
|
||||||
|
|
||||||
|
// 4j's code for reference
|
||||||
|
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
|
||||||
|
|
||||||
|
|
||||||
|
// my code
|
||||||
|
TextureId foliageId = (textures->loadTexture("environment/foliagecolor.png")); // loading the uh png for foliage color
|
||||||
|
int* foliagePixels = textures->loadTexturePixels(foliageId, "environment/foliagecolor.png");
|
||||||
|
// now i can finally initialize foliage color, probably not the best way to handle this but i cant be arsed rn
|
||||||
|
FoliageColor::init(foliagePixels);
|
||||||
|
|
||||||
|
TextureId grassId = (textures->loadTexture("environment/grasscolor.png")); // loading the uh png for foliage color
|
||||||
|
int* grassPixels = textures->loadTexturePixels(grassId, "environment/grasscolor.png");
|
||||||
|
GrassColor::init(grassPixels);
|
||||||
|
|
||||||
|
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
|
||||||
|
FoliageColor::setUseTint(tint);
|
||||||
|
GrassColor::setUseTint(tint);
|
||||||
|
|
||||||
// Platform specific initialization here
|
// Platform specific initialization here
|
||||||
font = new Font(&options, "font/default8.png", textures);
|
font = new Font(&options, "font/default8.png", textures);
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ OptionBool useTouchscreen("useTouchscreen", true);
|
|||||||
|
|
||||||
OptionBool serverVisible("servervisible", true);
|
OptionBool serverVisible("servervisible", true);
|
||||||
|
|
||||||
|
OptionBool foliageTint("foliagetint", false);
|
||||||
|
|
||||||
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
OptionInt keyForward("key.forward", Keyboard::KEY_W);
|
||||||
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
OptionInt keyLeft("key.left", Keyboard::KEY_A);
|
||||||
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
OptionInt keyBack("key.back", Keyboard::KEY_S);
|
||||||
@@ -136,6 +138,8 @@ void Options::initTable() {
|
|||||||
|
|
||||||
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
|
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
|
||||||
|
|
||||||
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
|
||||||
@@ -160,6 +164,7 @@ void Options::initTable() {
|
|||||||
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
|
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
|
||||||
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
|
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
|
||||||
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
|
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
|
||||||
|
m_options[OPTIONS_FOLIAGE_TINT] = &foliageTint;
|
||||||
|
|
||||||
m_options[OPTIONS_AUTOJUMP] = &autoJump;
|
m_options[OPTIONS_AUTOJUMP] = &autoJump;
|
||||||
m_options[OPTIONS_LAST_IP] = &lastIp;
|
m_options[OPTIONS_LAST_IP] = &lastIp;
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ enum OptionId {
|
|||||||
OPTIONS_LAST_IP,
|
OPTIONS_LAST_IP,
|
||||||
|
|
||||||
OPTIONS_RPI_CURSOR,
|
OPTIONS_RPI_CURSOR,
|
||||||
|
OPTIONS_FOLIAGE_TINT,
|
||||||
// Should be last!
|
// Should be last!
|
||||||
OPTIONS_COUNT
|
OPTIONS_COUNT
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -225,7 +225,8 @@ void OptionsScreen::generateOptionScreens() {
|
|||||||
|
|
||||||
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
|
||||||
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
|
||||||
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft);
|
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
|
||||||
|
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
|
||||||
|
|||||||
@@ -7,6 +7,10 @@
|
|||||||
#include "../../world/level/Region.h"
|
#include "../../world/level/Region.h"
|
||||||
#include "../../world/level/chunk/LevelChunk.h"
|
#include "../../world/level/chunk/LevelChunk.h"
|
||||||
#include "../../util/Mth.h"
|
#include "../../util/Mth.h"
|
||||||
|
|
||||||
|
#include "../../world/level/biome/BiomeSource.h"
|
||||||
|
|
||||||
|
#include "../../world/level/Level.h"
|
||||||
//#include "../../platform/time.h"
|
//#include "../../platform/time.h"
|
||||||
|
|
||||||
/*static*/ int Chunk::updates = 0;
|
/*static*/ int Chunk::updates = 0;
|
||||||
@@ -259,4 +263,4 @@ void Chunk::resetUpdates()
|
|||||||
{
|
{
|
||||||
updates = 0;
|
updates = 0;
|
||||||
//swRebuild.reset();
|
//swRebuild.reset();
|
||||||
}
|
}
|
||||||
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
#include "../../client/player/LocalPlayer.h"
|
#include "../../client/player/LocalPlayer.h"
|
||||||
|
|
||||||
|
#include "../../world/level/GrassColor.h"
|
||||||
|
|
||||||
#ifdef GFX_SMALLER_CHUNKS
|
#ifdef GFX_SMALLER_CHUNKS
|
||||||
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
|
||||||
#else
|
#else
|
||||||
@@ -143,6 +145,10 @@ void LevelRenderer::setLevel( Level* level )
|
|||||||
level->addListener(this);
|
level->addListener(this);
|
||||||
allChanged();
|
allChanged();
|
||||||
}
|
}
|
||||||
|
if (mc->options.getBooleanValue(OPTIONS_AMBIENT_OCCLUSION)) {
|
||||||
|
mc->useAmbientOcclusion = !mc->useAmbientOcclusion;
|
||||||
|
allChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LevelRenderer::allChanged()
|
void LevelRenderer::allChanged()
|
||||||
@@ -155,6 +161,11 @@ void LevelRenderer::allChanged()
|
|||||||
Tile::leaves_carried->setFancy(fancy);
|
Tile::leaves_carried->setFancy(fancy);
|
||||||
lastViewDistance = mc->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
lastViewDistance = mc->options.getIntValue(OPTIONS_VIEW_DISTANCE);
|
||||||
|
|
||||||
|
bool tint = mc->options.getBooleanValue(OPTIONS_FOLIAGE_TINT);
|
||||||
|
FoliageColor::setUseTint(tint);
|
||||||
|
GrassColor::setUseTint(tint);
|
||||||
|
|
||||||
|
|
||||||
int dist = (512 >> 3) << (3 - lastViewDistance);
|
int dist = (512 >> 3) << (3 - lastViewDistance);
|
||||||
if (lastViewDistance <= 2 && mc->isPowerVR())
|
if (lastViewDistance <= 2 && mc->isPowerVR())
|
||||||
dist = (int)((float)dist * 0.8f);
|
dist = (int)((float)dist * 0.8f);
|
||||||
|
|||||||
@@ -249,6 +249,37 @@ int Textures::crispBlend( int c0, int c1 )
|
|||||||
return (a << 24) | (r << 16) | (g << 8) | b;
|
return (a << 24) | (r << 16) | (g << 8) | b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// shredder here, moved the code from minecraft.cpp bcus that isnt the right place
|
||||||
|
// had to implement this because i couldn't find a similar function in the code to do this
|
||||||
|
int* Textures::loadTexturePixels(TextureId texId, const std::string& resourceName){
|
||||||
|
|
||||||
|
const TextureData* texture = getTemporaryTextureData(texId); // storing raw pixels
|
||||||
|
|
||||||
|
int size = texture->w * texture->h; // gets the size of our funny lil guy
|
||||||
|
int* pixels = new int[size]; // memory leaks be galore
|
||||||
|
unsigned char* raw = texture->data; // storing raw data into our beloved variable
|
||||||
|
for (int i = 0; i < (texture->w * texture->h); i++){
|
||||||
|
// my head hurts i hate working with this
|
||||||
|
|
||||||
|
|
||||||
|
// uh since each pixel stores r g b a, aka the color channels which are each one byte, we multiply them by 4 to move from one pixel to another
|
||||||
|
|
||||||
|
int r = raw[i * 4 + 0]; // gets us the first channel aka red
|
||||||
|
int g = raw[i * 4 + 1]; // gets us the second channel green
|
||||||
|
int b = raw[i * 4 + 2]; // gets us the third channel blue
|
||||||
|
int a = raw[i * 4 + 3]; // gets us the alpha channel
|
||||||
|
|
||||||
|
// woohoo pixels uh should have been seperated into their colors now hopefully
|
||||||
|
|
||||||
|
// r g b a
|
||||||
|
// ugh we now got to turn it into the AA RR GGBB format aak 0xAARRGGBB
|
||||||
|
// b gets 0 - 7 (8 bits), g gets 7 - 15 (8 bits), r gets 16 - 23 (8 bits), alpha gets the last ones 24 - 31 (8 bits),
|
||||||
|
pixels[i] = (a << 24) | (r << 16) | (g << 8) | (b); // shuld combine them into one 32 bit int unless i did something dumb
|
||||||
|
}
|
||||||
|
return pixels; // your meal has been prepared john colors
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///*public*/ int loadHttpTexture(std::string url, std::string backup) {
|
///*public*/ int loadHttpTexture(std::string url, std::string backup) {
|
||||||
// HttpTexture texture = httpTextures.get(url);
|
// HttpTexture texture = httpTextures.get(url);
|
||||||
// if (texture != NULL) {
|
// if (texture != NULL) {
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ public:
|
|||||||
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
|
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
|
||||||
const TextureData* getTemporaryTextureData(TextureId id);
|
const TextureData* getTemporaryTextureData(TextureId id);
|
||||||
|
|
||||||
|
int* loadTexturePixels(TextureId texId, const std::string& resourceName);
|
||||||
|
|
||||||
void tick(bool uploadToGraphicsCard);
|
void tick(bool uploadToGraphicsCard);
|
||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "../../world/level/tile/BedTile.h"
|
#include "../../world/level/tile/BedTile.h"
|
||||||
#include "../../world/level/tile/StemTile.h"
|
#include "../../world/level/tile/StemTile.h"
|
||||||
#include "../../world/level/tile/StairTile.h"
|
#include "../../world/level/tile/StairTile.h"
|
||||||
|
#include "../../world/level/tile/FireTile.h"
|
||||||
#include "../../world/Direction.h"
|
#include "../../world/Direction.h"
|
||||||
#include "../../world/Facing.h"
|
#include "../../world/Facing.h"
|
||||||
#include "tileentity/TileEntityRenderer.h"
|
#include "tileentity/TileEntityRenderer.h"
|
||||||
@@ -157,8 +158,8 @@ bool TileRenderer::tesselateInWorld( Tile* tt, int x, int y, int z )
|
|||||||
return tesselateRowInWorld(tt, x, y, z);
|
return tesselateRowInWorld(tt, x, y, z);
|
||||||
} else if (shape == Tile::SHAPE_TORCH) {
|
} else if (shape == Tile::SHAPE_TORCH) {
|
||||||
return tesselateTorchInWorld(tt, x, y, z);
|
return tesselateTorchInWorld(tt, x, y, z);
|
||||||
//} else if (shape == Tile::SHAPE_FIRE) {
|
} else if (shape == Tile::SHAPE_FIRE) {
|
||||||
// return tesselateFireInWorld(tt, x, y, z);
|
return tesselateFireInWorld(tt, x, y, z);
|
||||||
//} else if (shape == Tile::SHAPE_RED_DUST) {
|
//} else if (shape == Tile::SHAPE_RED_DUST) {
|
||||||
// return tesselateDustInWorld(tt, x, y, z);
|
// return tesselateDustInWorld(tt, x, y, z);
|
||||||
} else if (shape == Tile::SHAPE_LADDER) {
|
} else if (shape == Tile::SHAPE_LADDER) {
|
||||||
@@ -222,6 +223,278 @@ bool TileRenderer::tesselateTorchInWorld( Tile* tt, int x, int y, int z )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TileRenderer::tesselateFireInWorld( Tile* tt, int x, int y, int z )
|
||||||
|
{
|
||||||
|
// @todo: fire alpha transparency seems to be scuffed, also it seems i might have messed up the second layer while porting from lce/java , need to look into it - shredder
|
||||||
|
|
||||||
|
Tesselator& t = Tesselator::instance;
|
||||||
|
|
||||||
|
int tex = tt->getTexture(0);
|
||||||
|
|
||||||
|
if (fixedTexture >= 0) tex = fixedTexture;
|
||||||
|
|
||||||
|
float br = tt->getBrightness( level, x, y, z );
|
||||||
|
t.color( br, br, br );
|
||||||
|
|
||||||
|
int xt = ((tex & 0xf) << 4);
|
||||||
|
int yt = tex & 0xf0;
|
||||||
|
|
||||||
|
float u0 = (xt) / 256.0f;
|
||||||
|
float u1 = (xt + 15.99f) / 256.0f;
|
||||||
|
float v0 = (yt) / 256.0f;
|
||||||
|
float v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
float h = 1.4f;
|
||||||
|
|
||||||
|
if ( level->isSolidBlockingTile( x, y - 1, z ) || Tile::fire->canBurn( level, x, y - 1, z ) )
|
||||||
|
{
|
||||||
|
float x0 = x + 0.5f + 0.2f;
|
||||||
|
float x1 = x + 0.5f - 0.2f;
|
||||||
|
float z0 = z + 0.5f + 0.2f;
|
||||||
|
float z1 = z + 0.5f - 0.2f;
|
||||||
|
|
||||||
|
float x0_ = x + 0.5f - 0.3f;
|
||||||
|
float x1_ = x + 0.5f + 0.3f;
|
||||||
|
float z0_ = z + 0.5f - 0.3f;
|
||||||
|
float z1_ = z + 0.5f + 0.3f;
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
u0 = (xt) / 256.0f;
|
||||||
|
u1 = (xt + 15.99f) / 256.0f;
|
||||||
|
v0 = (yt) / 256.0f;
|
||||||
|
v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
x0 = x + 0.5f - 0.5f;
|
||||||
|
x1 = x + 0.5f + 0.5f;
|
||||||
|
z0 = z + 0.5f - 0.5f;
|
||||||
|
z1 = z + 0.5f + 0.5f;
|
||||||
|
|
||||||
|
x0_ = x + 0.5f - 0.4f;
|
||||||
|
x1_ = x + 0.5f + 0.4f;
|
||||||
|
z0_ = z + 0.5f - 0.4f;
|
||||||
|
z1_ = z + 0.5f + 0.4f;
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
|
||||||
|
u0 = (xt) / 256.0f;
|
||||||
|
u1 = (xt + 15.99f) / 256.0f;
|
||||||
|
v0 = (yt) / 256.0f;
|
||||||
|
v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float r = 0.2f;
|
||||||
|
float yo = 1 / 16.0f;
|
||||||
|
if ( ( ( x + y + z ) & 1 ) == 1 )
|
||||||
|
{
|
||||||
|
u0 = (xt) / 256.0f;
|
||||||
|
u1 = (xt + 15.99f) / 256.0f;
|
||||||
|
v0 = (yt) / 256.0f;
|
||||||
|
v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
}
|
||||||
|
if ( ( ( x / 2 + y / 2 + z / 2 ) & 1 ) == 1 )
|
||||||
|
{
|
||||||
|
float tmp = u1;
|
||||||
|
u1 = u0;
|
||||||
|
u0 = tmp;
|
||||||
|
}
|
||||||
|
if ( Tile::fire->canBurn( level, x - 1, y, z ) )
|
||||||
|
{
|
||||||
|
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
}
|
||||||
|
if ( Tile::fire->canBurn( level, x + 1, y, z ) )
|
||||||
|
{
|
||||||
|
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f - 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f - 0 ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
}
|
||||||
|
if ( Tile::fire->canBurn( level, x, y, z - 1 ) )
|
||||||
|
{
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
r ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
r ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
r ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
|
||||||
|
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
|
||||||
|
r ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
}
|
||||||
|
if ( Tile::fire->canBurn( level, x, y, z + 1 ) )
|
||||||
|
{
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
||||||
|
r ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
||||||
|
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
||||||
|
r ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
||||||
|
r ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
||||||
|
0.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
|
||||||
|
0.0f ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
|
||||||
|
r ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
}
|
||||||
|
if ( Tile::fire->canBurn( level, x, y + 1.0f, z ) )
|
||||||
|
{
|
||||||
|
double x0 = x + 0.5f + 0.5f;
|
||||||
|
double x1 = x + 0.5f - 0.5f;
|
||||||
|
double z0 = z + 0.5f + 0.5f;
|
||||||
|
double z1 = z + 0.5f - 0.5f;
|
||||||
|
|
||||||
|
double x0_ = x + 0.5f - 0.5f;
|
||||||
|
double x1_ = x + 0.5f + 0.5f;
|
||||||
|
double z0_ = z + 0.5f - 0.5f;
|
||||||
|
double z1_ = z + 0.5f + 0.5f;
|
||||||
|
|
||||||
|
u0 = (xt) / 256.0f;
|
||||||
|
u1 = (xt + 15.99f) / 256.0f;
|
||||||
|
v0 = (yt) / 256.0f;
|
||||||
|
v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
|
||||||
|
y += 1;
|
||||||
|
h = -0.2f;
|
||||||
|
|
||||||
|
if ( ( ( x + y + z ) & 1 ) == 0 )
|
||||||
|
{
|
||||||
|
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
|
||||||
|
0 ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
|
||||||
|
0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
|
||||||
|
1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
|
||||||
|
1 ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
u0 = (xt) / 256.0f;
|
||||||
|
u1 = (xt + 15.99f) / 256.0f;
|
||||||
|
v0 = (yt) / 256.0f;
|
||||||
|
v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
|
||||||
|
1.0f ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
|
||||||
|
0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
|
||||||
|
0 ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
||||||
|
h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
||||||
|
0.0f ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
||||||
|
0.0f ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
||||||
|
h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
|
||||||
|
u0 = (xt) / 256.0f;
|
||||||
|
u1 = (xt + 15.99f) / 256.0f;
|
||||||
|
v0 = (yt) / 256.0f;
|
||||||
|
v1 = (yt + 15.99f) / 256.0f;
|
||||||
|
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
||||||
|
h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
|
||||||
|
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
|
||||||
|
0.0f ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
||||||
|
0.0f ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
|
||||||
|
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
|
||||||
|
h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TileRenderer::tesselateLadderInWorld( Tile* tt, int x, int y, int z )
|
bool TileRenderer::tesselateLadderInWorld( Tile* tt, int x, int y, int z )
|
||||||
{
|
{
|
||||||
Tesselator& t = Tesselator::instance;
|
Tesselator& t = Tesselator::instance;
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ public:
|
|||||||
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
|
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
|
||||||
bool tesselateBedInWorld(Tile *tt, int x, int y, int z);
|
bool tesselateBedInWorld(Tile *tt, int x, int y, int z);
|
||||||
bool tesselateRowInWorld(Tile* tt, int x, int y, int z);
|
bool tesselateRowInWorld(Tile* tt, int x, int y, int z);
|
||||||
|
bool tesselateFireInWorld(Tile* tt, int x, int y, int z);
|
||||||
|
|
||||||
|
|
||||||
void tesselateTorch(Tile* tt, float x, float y, float z, float xxa, float zza);
|
void tesselateTorch(Tile* tt, float x, float y, float z, float xxa, float zza);
|
||||||
void tesselateCrossTexture(Tile* tt, int data, float x, float y, float z);
|
void tesselateCrossTexture(Tile* tt, int data, float x, float y, float z);
|
||||||
|
|||||||
@@ -206,3 +206,93 @@ void WaterSideTexture::tick() {
|
|||||||
pixels[i * 4 + 3] = a;
|
pixels[i * 4 + 3] = a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FireTexture::FireTexture()
|
||||||
|
: super(((Tile*)Tile::fire)->tex),
|
||||||
|
_tick(0),
|
||||||
|
_frame(0)
|
||||||
|
{
|
||||||
|
current = new float[16*20];
|
||||||
|
next = new float[16*20];
|
||||||
|
heat = new float[16*20];
|
||||||
|
heata = new float[16*20];
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; ++i) {
|
||||||
|
current[i] = 0;
|
||||||
|
next[i] = 0;
|
||||||
|
heat[i] = 0;
|
||||||
|
heata[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FireTexture::~FireTexture() {
|
||||||
|
delete[] current;
|
||||||
|
delete[] next;
|
||||||
|
delete[] heat;
|
||||||
|
delete[] heata;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// oh boy time to implement fire textures, i am so fucked - shredder
|
||||||
|
|
||||||
|
void FireTexture::tick() {
|
||||||
|
// loop generates fire texture on the empty texture grid, hopefully shouldnt be too taxing on older hardware - shredder
|
||||||
|
for (int x = 0; x < 16; x++) {
|
||||||
|
for (int y = 0; y < 20; y++) {
|
||||||
|
int count = 18;
|
||||||
|
float pow = this->current[x + (y + 1) % 20 * 16] * (float)(count);
|
||||||
|
for (int xx = x - 1; xx <= x + 1; xx++) {
|
||||||
|
for (int yy = y; yy <= y + 1; yy++) {
|
||||||
|
if (xx >= 0 && yy >= 0 && xx < 16 && yy < 20) {
|
||||||
|
pow += this->current[xx + yy * 16];
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this->next[x + y * 16] = pow / (float(count) * 1.06f);
|
||||||
|
if (y >= 19) {
|
||||||
|
this->next[x + y * 16] = float(Mth::random() * Mth::random() * Mth::random() * 4.0 + Mth::random() * 0.1f + 0.2f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// hopefully this doesn't cause any mysterious issues - shredder
|
||||||
|
float* tmp = next;
|
||||||
|
next = current;
|
||||||
|
current = tmp;
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; i++) {
|
||||||
|
float pow = this->current[i] * 1.8f;
|
||||||
|
if (pow > 1.0f) {
|
||||||
|
pow = 1.0f;
|
||||||
|
}
|
||||||
|
if (pow < 0.0f) {
|
||||||
|
pow = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int r = (int) (pow * 155.0f + 100.0f);
|
||||||
|
int g = (int)(pow * pow * 255.0f);
|
||||||
|
int b = (int)(pow * pow * pow * pow * pow * pow * pow * pow * pow * pow * 255.0f);
|
||||||
|
int a = 255;
|
||||||
|
if (pow < 0.5f) {
|
||||||
|
a = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @TODO: cant be arsed rn to implement the anaglyph3d check would be nice to check if it does - shredder
|
||||||
|
//if (this->anaglyph3d) {
|
||||||
|
// float rr = (r * 30 + g * 59 + b * 11) / 100;
|
||||||
|
// float gg = (r * 30 + g * 70) / 100;
|
||||||
|
// float bb = (r * 30 + b * 70) / 100;
|
||||||
|
// r = rr;
|
||||||
|
// g = gg;
|
||||||
|
// b = bb;
|
||||||
|
//}
|
||||||
|
|
||||||
|
pixels[i * 4 + 0] = r;
|
||||||
|
pixels[i * 4 + 1] = g;
|
||||||
|
pixels[i * 4 + 2] = b;
|
||||||
|
pixels[i * 4 + 3] = a;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -56,4 +56,21 @@ public:
|
|||||||
void tick();
|
void tick();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class FireTexture: public DynamicTexture
|
||||||
|
{
|
||||||
|
typedef DynamicTexture super;
|
||||||
|
int _tick;
|
||||||
|
int _frame;
|
||||||
|
|
||||||
|
float* current;
|
||||||
|
float* next;
|
||||||
|
float* heat;
|
||||||
|
float* heata;
|
||||||
|
|
||||||
|
public:
|
||||||
|
FireTexture();
|
||||||
|
~FireTexture();
|
||||||
|
|
||||||
|
void tick();
|
||||||
|
};
|
||||||
#endif /*NET_MINECRAFT_CLIENT_RENDERER_PTEXTURE__DynamicTexture_H__*/
|
#endif /*NET_MINECRAFT_CLIENT_RENDERER_PTEXTURE__DynamicTexture_H__*/
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public:
|
|||||||
setMaxDamage(64);
|
setMaxDamage(64);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
bool useOn(ItemInstance* instance, Player* player, Level* level, int x, int y, int z, int face, float clickX, float clickY, float clickZ) {
|
bool useOn(ItemInstance* instance, Player* player, Level* level, int x, int y, int z, int face, float clickX, float clickY, float clickZ) {
|
||||||
if (face == 0) y--;
|
if (face == 0) y--;
|
||||||
if (face == 1) y++;
|
if (face == 1) y++;
|
||||||
@@ -30,14 +30,14 @@ public:
|
|||||||
|
|
||||||
int targetType = level->getTile(x, y, z);
|
int targetType = level->getTile(x, y, z);
|
||||||
if (targetType == 0) {
|
if (targetType == 0) {
|
||||||
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, sharedRandom.nextFloat() * 0.4f + 0.8f);
|
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, random.nextFloat() * 0.4f + 0.8f);
|
||||||
level->setTile(x, y, z, Tile::fire->id);
|
level->setTile(x, y, z, ((Tile*)Tile::fire)->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
instance->hurt(1);
|
instance->hurt(1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_WORLD_ITEM__FlintAndSteelItem_H__*/
|
#endif /*NET_MINECRAFT_WORLD_ITEM__FlintAndSteelItem_H__*/
|
||||||
|
|||||||
13
src/world/level/FoliageColor.cpp
Normal file
13
src/world/level/FoliageColor.cpp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#include "FoliageColor.h"
|
||||||
|
|
||||||
|
// TODO: Probably move all the stuff from the header into here so it's a bit cleaner
|
||||||
|
bool FoliageColor::useTint = true;
|
||||||
|
|
||||||
|
int FoliageColor::get(float temp, float rain) {
|
||||||
|
rain *= temp;
|
||||||
|
int x = (int) ((1 - temp) * 255);
|
||||||
|
int y = (int) ((1 - rain) * 255);
|
||||||
|
return pixels[y << 8 | x];
|
||||||
|
}
|
||||||
|
|
||||||
|
int* FoliageColor::pixels = nullptr;
|
||||||
@@ -6,31 +6,49 @@
|
|||||||
class FoliageColor
|
class FoliageColor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// static void init(int[] pixels) {
|
static bool useTint;
|
||||||
// FoliageColor::pixels = pixels;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// static int get(float temp, float rain) {
|
|
||||||
// rain *= temp;
|
|
||||||
// int x = (int) ((1 - temp) * 255);
|
|
||||||
// int y = (int) ((1 - rain) * 255);
|
|
||||||
// return pixels[y << 8 | x];
|
|
||||||
// }
|
|
||||||
|
|
||||||
static int getEvergreenColor() {
|
static void setUseTint(bool value) {
|
||||||
return 0x619961;
|
useTint = value;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
Shredder here, Ive converted the unused commented out code into their correct syntax, though if i did something incorrectly feel free to take reference from the
|
||||||
|
commented out code
|
||||||
|
*/
|
||||||
|
|
||||||
static int getBirchColor() {
|
// static void init(int[] pixels) {
|
||||||
return 0x80a755;
|
// FoliageColor::pixels = pixels;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
// static int get(float temp, float rain) {
|
||||||
|
// rain *= temp;
|
||||||
|
// int x = (int) ((1 - temp) * 255);
|
||||||
|
// int y = (int) ((1 - rain) * 255);
|
||||||
|
// return pixels[y << 8 | x];
|
||||||
|
// }
|
||||||
|
|
||||||
static int getDefaultColor() {
|
|
||||||
return 0x48b518;
|
static void init(int* p) {
|
||||||
}
|
pixels = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get(float temp, float rain);
|
||||||
|
|
||||||
|
static int getEvergreenColor() {
|
||||||
|
return 0x619961;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int getBirchColor() {
|
||||||
|
return 0x80a755;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int getDefaultColor() {
|
||||||
|
return 0xFFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//static int pixels[256*256];
|
// static int pixels[256*256];
|
||||||
|
static int* pixels;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*NET_MINECRAFT_WORLD_LEVEL__FoliageColor_H__*/
|
#endif /*NET_MINECRAFT_WORLD_LEVEL__FoliageColor_H__*/
|
||||||
|
|||||||
13
src/world/level/GrassColor.cpp
Normal file
13
src/world/level/GrassColor.cpp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#include "GrassColor.h"
|
||||||
|
|
||||||
|
// TODO: Probably move all the stuff from the header into here so it's a bit cleaner
|
||||||
|
bool GrassColor::useTint = true;
|
||||||
|
|
||||||
|
int GrassColor::get(float temp, float rain) {
|
||||||
|
rain *= temp;
|
||||||
|
int x = (int) ((1 - temp) * 255);
|
||||||
|
int y = (int) ((1 - rain) * 255);
|
||||||
|
return pixels[y << 8 | x];
|
||||||
|
}
|
||||||
|
|
||||||
|
int* GrassColor::pixels = nullptr;
|
||||||
42
src/world/level/GrassColor.h
Normal file
42
src/world/level/GrassColor.h
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#ifndef NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__
|
||||||
|
#define NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__
|
||||||
|
|
||||||
|
//package net.minecraft.world.level;
|
||||||
|
|
||||||
|
class GrassColor
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static bool useTint;
|
||||||
|
|
||||||
|
static void setUseTint(bool value) {
|
||||||
|
useTint = value;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Shredder here, Ive converted the unused commented out code into their correct syntax, though if i did something incorrectly feel free to take reference from the
|
||||||
|
commented out code
|
||||||
|
*/
|
||||||
|
|
||||||
|
// static void init(int[] pixels) {
|
||||||
|
// GrassColor::pixels = pixels;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// static int get(float temp, float rain) {
|
||||||
|
// rain *= temp;
|
||||||
|
// int x = (int) ((1 - temp) * 255);
|
||||||
|
// int y = (int) ((1 - rain) * 255);
|
||||||
|
// return pixels[y << 8 | x];
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
static void init(int* p) {
|
||||||
|
pixels = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int get(float temp, float rain);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// static int pixels[256*256];
|
||||||
|
static int* pixels;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /*NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__*/
|
||||||
@@ -1599,8 +1599,8 @@ bool Level::containsFireTile(const AABB& box) {
|
|||||||
for (int z = z0; z < z1; z++) {
|
for (int z = z0; z < z1; z++) {
|
||||||
int t = getTile(x, y, z);
|
int t = getTile(x, y, z);
|
||||||
|
|
||||||
if (/*t == ((Tile*)(Tile::fire))->id
|
if (t == ((Tile*)(Tile::fire))->id
|
||||||
||*/ t == Tile::lava->id
|
|| t == Tile::lava->id
|
||||||
|| t == Tile::calmLava->id) {
|
|| t == Tile::calmLava->id) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,9 @@
|
|||||||
|
|
||||||
//package net.minecraft.world.level;
|
//package net.minecraft.world.level;
|
||||||
|
|
||||||
/*
|
|
||||||
class BiomeSource;
|
class BiomeSource;
|
||||||
|
/*
|
||||||
class TileEntity;
|
class TileEntity;
|
||||||
*/
|
*/
|
||||||
class Material;
|
class Material;
|
||||||
@@ -29,7 +30,7 @@ public:
|
|||||||
virtual bool isSolidRenderTile(int x, int i, int z) = 0;
|
virtual bool isSolidRenderTile(int x, int i, int z) = 0;
|
||||||
virtual bool isSolidBlockingTile(int x, int i, int z) = 0;
|
virtual bool isSolidBlockingTile(int x, int i, int z) = 0;
|
||||||
|
|
||||||
//virtual BiomeSource* getBiomeSource() = 0;
|
virtual BiomeSource* getBiomeSource() = 0;
|
||||||
virtual Biome* getBiome(int x, int z) = 0;
|
virtual Biome* getBiome(int x, int z) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "tile/Tile.h"
|
#include "tile/Tile.h"
|
||||||
#include "Level.h"
|
#include "Level.h"
|
||||||
|
|
||||||
|
|
||||||
Region::Region(Level* level, int x1, int y1, int z1, int x2, int y2, int z2) {
|
Region::Region(Level* level, int x1, int y1, int z1, int x2, int y2, int z2) {
|
||||||
this->level = level;
|
this->level = level;
|
||||||
|
|
||||||
@@ -135,6 +136,6 @@ Biome* Region::getBiome( int x, int z ) {
|
|||||||
return level->getBiome(x, z);
|
return level->getBiome(x, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
//BiomeSource getBiomeSource() {
|
BiomeSource* Region::getBiomeSource() {
|
||||||
// return level.getBiomeSource();
|
return level->getBiomeSource();
|
||||||
//}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "LevelSource.h"
|
#include "LevelSource.h"
|
||||||
|
|
||||||
|
|
||||||
class Level;
|
class Level;
|
||||||
class Material;
|
class Material;
|
||||||
class LevelChunk;
|
class LevelChunk;
|
||||||
@@ -27,6 +28,7 @@ public:
|
|||||||
int getData(int x, int y, int z);
|
int getData(int x, int y, int z);
|
||||||
const Material* getMaterial(int x, int y, int z);
|
const Material* getMaterial(int x, int y, int z);
|
||||||
Biome* getBiome(int x, int z);
|
Biome* getBiome(int x, int z);
|
||||||
|
BiomeSource* getBiomeSource() override;
|
||||||
private:
|
private:
|
||||||
int xc1, zc1;
|
int xc1, zc1;
|
||||||
LevelChunk*** chunks;
|
LevelChunk*** chunks;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include "../levelgen/feature/TreeFeature.h"
|
#include "../levelgen/feature/TreeFeature.h"
|
||||||
#include "../levelgen/feature/TallgrassFeature.h"
|
#include "../levelgen/feature/TallgrassFeature.h"
|
||||||
|
#include "../levelgen/feature/BasicTree.h"
|
||||||
|
|
||||||
#include "../../entity/EntityTypes.h"
|
#include "../../entity/EntityTypes.h"
|
||||||
#include "../../entity/MobCategory.h"
|
#include "../../entity/MobCategory.h"
|
||||||
@@ -140,7 +141,7 @@ void Biome::teardownBiomes() {
|
|||||||
Feature* Biome::getTreeFeature( Random* random )
|
Feature* Biome::getTreeFeature( Random* random )
|
||||||
{
|
{
|
||||||
if (random->nextInt(10) == 0) {
|
if (random->nextInt(10) == 0) {
|
||||||
//return /*new*/ BasicTree();
|
return new BasicTree(false);
|
||||||
}
|
}
|
||||||
return new TreeFeature(false);
|
return new TreeFeature(false);
|
||||||
}
|
}
|
||||||
@@ -148,6 +149,9 @@ Feature* Biome::getGrassFeature( Random* random ) {
|
|||||||
return new TallgrassFeature(Tile::tallgrass->id, TallGrass::TALL_GRASS);
|
return new TallgrassFeature(Tile::tallgrass->id, TallGrass::TALL_GRASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Biome* Biome::getBiome( float temperature, float downfall )
|
Biome* Biome::getBiome( float temperature, float downfall )
|
||||||
{
|
{
|
||||||
int a = (int) (temperature * 63);
|
int a = (int) (temperature * 63);
|
||||||
|
|||||||
@@ -69,11 +69,11 @@ Biome* BiomeSource::getBiome( int x, int z )
|
|||||||
return getBiomeBlock(x, z, 1, 1)[0];
|
return getBiomeBlock(x, z, 1, 1)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
//float BiomeSource::getTemperature( int x, int z )
|
float BiomeSource::getTemperature( int x, int z )
|
||||||
//{
|
{
|
||||||
// temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
|
temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
|
||||||
// return temperatures[0];
|
return temperatures[0];
|
||||||
//}
|
}
|
||||||
|
|
||||||
Biome** BiomeSource::getBiomeBlock( int x, int z, int w, int h )
|
Biome** BiomeSource::getBiomeBlock( int x, int z, int w, int h )
|
||||||
{
|
{
|
||||||
@@ -123,7 +123,7 @@ Biome** BiomeSource::getBiomeBlock( Biome** biomes__, int x, int z, int w, int h
|
|||||||
return biomes;
|
return biomes;
|
||||||
}
|
}
|
||||||
|
|
||||||
float* BiomeSource::getTemperatureBlock( /*float* temperatures__, */int x, int z, int w, int h )
|
float* BiomeSource::getTemperatureBlock( float* temperatures__, int x, int z, int w, int h )
|
||||||
{
|
{
|
||||||
//LOGI("gTempBlock: 1\n");
|
//LOGI("gTempBlock: 1\n");
|
||||||
//const int size = w * h;
|
//const int size = w * h;
|
||||||
@@ -164,8 +164,8 @@ float* BiomeSource::getTemperatureBlock( /*float* temperatures__, */int x, int z
|
|||||||
return temperatures;
|
return temperatures;
|
||||||
}
|
}
|
||||||
|
|
||||||
//float* BiomeSource::getDownfallBlock( /*float* downfalls__,*/ int x, int z, int w, int h )
|
float* BiomeSource::getDownfallBlock( float* downfalls__, int x, int z, int w, int h )
|
||||||
//{
|
{
|
||||||
// //const int size = w * h;
|
// //const int size = w * h;
|
||||||
// //if (lenDownfalls < size) {
|
// //if (lenDownfalls < size) {
|
||||||
// // delete[] downfalls;
|
// // delete[] downfalls;
|
||||||
@@ -173,6 +173,6 @@ float* BiomeSource::getTemperatureBlock( /*float* temperatures__, */int x, int z
|
|||||||
// // lenDownfalls = size;
|
// // lenDownfalls = size;
|
||||||
// //}
|
// //}
|
||||||
//
|
//
|
||||||
// downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
|
downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
|
||||||
// return downfalls;
|
return downfalls;
|
||||||
//}
|
}
|
||||||
|
|||||||
@@ -31,13 +31,13 @@ public:
|
|||||||
virtual Biome* getBiome(const ChunkPos& chunk);
|
virtual Biome* getBiome(const ChunkPos& chunk);
|
||||||
virtual Biome* getBiome(int x, int z);
|
virtual Biome* getBiome(int x, int z);
|
||||||
|
|
||||||
//virtual float getTemperature(int x, int z);
|
virtual float getTemperature(int x, int z);
|
||||||
|
|
||||||
// Note: The arrays returned here are temporary in the meaning that their
|
// Note: The arrays returned here are temporary in the meaning that their
|
||||||
// contents might change in the future. If you need to SAVE the
|
// contents might change in the future. If you need to SAVE the
|
||||||
// values, do a shallow copy to an array of your own.
|
// values, do a shallow copy to an array of your own.
|
||||||
virtual float* getTemperatureBlock(/*float* temperatures, */ int x, int z, int w, int h);
|
virtual float* getTemperatureBlock(float* temperatures, int x, int z, int w, int h);
|
||||||
//virtual float* getDownfallBlock(/*float* downfalls, */int x, int z, int w, int h);
|
virtual float* getDownfallBlock(float* downfalls, int x, int z, int w, int h);
|
||||||
virtual Biome** getBiomeBlock(int x, int z, int w, int h);
|
virtual Biome** getBiomeBlock(int x, int z, int w, int h);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include "Biome.h"
|
#include "Biome.h"
|
||||||
#include "../levelgen/feature/TreeFeature.h"
|
#include "../levelgen/feature/TreeFeature.h"
|
||||||
#include "../levelgen/feature/BirchFeature.h"
|
#include "../levelgen/feature/BirchFeature.h"
|
||||||
|
#include "../levelgen/feature/BasicTree.h"
|
||||||
|
|
||||||
class ForestBiome: public Biome
|
class ForestBiome: public Biome
|
||||||
{
|
{
|
||||||
@@ -15,7 +16,7 @@ public:
|
|||||||
return new BirchFeature();
|
return new BirchFeature();
|
||||||
}
|
}
|
||||||
if (random->nextInt(3) == 0) {
|
if (random->nextInt(3) == 0) {
|
||||||
//return new BasicTree();
|
return new BasicTree(false);
|
||||||
}
|
}
|
||||||
return new TreeFeature(false);
|
return new TreeFeature(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,14 @@
|
|||||||
#include "Biome.h"
|
#include "Biome.h"
|
||||||
#include "../../../util/Random.h"
|
#include "../../../util/Random.h"
|
||||||
#include "../levelgen/feature/TreeFeature.h"
|
#include "../levelgen/feature/TreeFeature.h"
|
||||||
|
#include "../levelgen/feature/BasicTree.h"
|
||||||
|
|
||||||
class RainforestBiome: public Biome
|
class RainforestBiome: public Biome
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Feature* getTreeFeature(Random* random) {
|
Feature* getTreeFeature(Random* random) {
|
||||||
if (random->nextInt(3) == 0) {
|
if (random->nextInt(3) == 0) {
|
||||||
//return new BasicTree();
|
return new BasicTree(false);
|
||||||
}
|
}
|
||||||
return new TreeFeature(false);
|
return new TreeFeature(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#if 0
|
|
||||||
|
|
||||||
#include "CanyonFeature.h"
|
#include "CanyonFeature.h"
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ void CanyonFeature::addTunnel( int xOffs, int zOffs, unsigned char* blocks, floa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CanyonFeature::addFeature( Level level, int x, int z, int xOffs, int zOffs, char* blocks )
|
void CanyonFeature::addFeature(Level* level, int x, int z, int xOffs, int zOffs,unsigned char* blocks)
|
||||||
{
|
{
|
||||||
if (random.nextInt(15) != 0) return;
|
if (random.nextInt(15) != 0) return;
|
||||||
|
|
||||||
@@ -151,6 +151,7 @@ void CanyonFeature::addFeature( Level level, int x, int z, int xOffs, int zOffs,
|
|||||||
float thickness = (random.nextFloat() * 2 + random.nextFloat()) + 1;
|
float thickness = (random.nextFloat() * 2 + random.nextFloat()) + 1;
|
||||||
|
|
||||||
addTunnel(xOffs, zOffs, blocks, xCave, yCave, zCave, thickness, yRot, xRot, 0, 0, 5.0);
|
addTunnel(xOffs, zOffs, blocks, xCave, yCave, zCave, thickness, yRot, xRot, 0, 0, 5.0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* //private
|
/* //private
|
||||||
@@ -165,4 +166,4 @@ void CanyonFeature::addFeature( Level level, int x, int z, int xOffs, int zOffs,
|
|||||||
for (int z = zOffs - r; z <= zOffs + r; z++) {
|
for (int z = zOffs - r; z <= zOffs + r; z++) {
|
||||||
random.setSeed((x * xScale + z * zScale) ^ level.seed);*/
|
random.setSeed((x * xScale + z * zScale) ^ level.seed);*/
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#ifndef NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
|
#ifndef NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
|
||||||
#define NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
|
#define NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
//package net.minecraft.world.level.levelgen;
|
//package net.minecraft.world.level.levelgen;
|
||||||
|
|
||||||
@@ -12,8 +12,8 @@ class CanyonFeature: public LargeFeature {
|
|||||||
/*protected*/
|
/*protected*/
|
||||||
void addTunnel(int xOffs, int zOffs, unsigned char* blocks, float xCave, float yCave, float zCave, float thickness, float yRot, float xRot, int step, int dist, float yScale);
|
void addTunnel(int xOffs, int zOffs, unsigned char* blocks, float xCave, float yCave, float zCave, float thickness, float yRot, float xRot, int step, int dist, float yScale);
|
||||||
/*protected*/
|
/*protected*/
|
||||||
void addFeature(Level level, int x, int z, int xOffs, int zOffs, char* blocks);
|
void addFeature(Level* level, int x, int z, int xOffs, int zOffs,unsigned char* blocks);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif /*NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__*/
|
#endif /*NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__*/
|
||||||
|
|||||||
@@ -370,6 +370,18 @@ void RandomLevelSource::postProcess(ChunkSource* parent, int xt, int zt) {
|
|||||||
}
|
}
|
||||||
//printf("placing tree at %d, %d, %d\n", x, y, z);
|
//printf("placing tree at %d, %d, %d\n", x, y, z);
|
||||||
}
|
}
|
||||||
|
// for (int i = 0; i < forests; i++) {
|
||||||
|
// int x = xo + random.nextInt(16) + 8;
|
||||||
|
// int z = zo + random.nextInt(16) + 8;
|
||||||
|
//int y = level->getHeightmap(x, z);
|
||||||
|
// Feature* tree = biome->getBasicTreeFeature(&random);
|
||||||
|
//if (tree) {
|
||||||
|
// tree->init(1, 1, 1);
|
||||||
|
// tree->place(level, &random, x, y, z);
|
||||||
|
// delete tree;
|
||||||
|
//}
|
||||||
|
////printf("placing tree at %d, %d, %d\n", x, y, z);
|
||||||
|
// }
|
||||||
|
|
||||||
for (int i = 0; i < 2; i++) {
|
for (int i = 0; i < 2; i++) {
|
||||||
int x = xo + random.nextInt(16) + 8;
|
int x = xo + random.nextInt(16) + 8;
|
||||||
@@ -461,7 +473,7 @@ void RandomLevelSource::postProcess(ChunkSource* parent, int xt, int zt) {
|
|||||||
MobSpawner::postProcessSpawnMobs(level, biome, xo + 8, zo + 8, 16, 16, &random);
|
MobSpawner::postProcessSpawnMobs(level, biome, xo + 8, zo + 8, 16, 16, &random);
|
||||||
|
|
||||||
//LOGI("Reading temp: 1\n");
|
//LOGI("Reading temp: 1\n");
|
||||||
float* temperatures = level->getBiomeSource()->getTemperatureBlock(/*NULL,*/ xo + 8, zo + 8, 16, 16);
|
float* temperatures = level->getBiomeSource()->getTemperatureBlock(NULL, xo + 8, zo + 8, 16, 16);
|
||||||
for (int x = xo + 8; x < xo + 8 + 16; x++)
|
for (int x = xo + 8; x < xo + 8 + 16; x++)
|
||||||
for (int z = zo + 8; z < zo + 8 + 16; z++) {
|
for (int z = zo + 8; z < zo + 8 + 16; z++) {
|
||||||
int xp = x - (xo + 8);
|
int xp = x - (xo + 8);
|
||||||
|
|||||||
446
src/world/level/levelgen/feature/BasicTree.h
Normal file
446
src/world/level/levelgen/feature/BasicTree.h
Normal file
@@ -0,0 +1,446 @@
|
|||||||
|
#ifndef NET_MINECRAFT_WORLD_LEVEL_LEVELGEN_FEATURE__BasicTree_H__
|
||||||
|
#define NET_MINECRAFT_WORLD_LEVEL_LEVELGEN_FEATURE__BasicTree_H__
|
||||||
|
|
||||||
|
//package net.minecraft.world.level.levelgen.feature;
|
||||||
|
|
||||||
|
#include "Feature.h"
|
||||||
|
|
||||||
|
#include "../../../../util/Random.h"
|
||||||
|
#include "../../Level.h"
|
||||||
|
|
||||||
|
#include "../../tile/TreeTile.h"
|
||||||
|
|
||||||
|
class Level;
|
||||||
|
|
||||||
|
class BasicTree : public Feature
|
||||||
|
{
|
||||||
|
typedef Feature super;
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
unsigned char axisConversionArray[6];
|
||||||
|
Random *rnd;
|
||||||
|
Level *thisLevel;
|
||||||
|
int origin[3];
|
||||||
|
int height;
|
||||||
|
int trunkHeight;
|
||||||
|
double trunkHeightScale;
|
||||||
|
double branchDensity;
|
||||||
|
double branchSlope;
|
||||||
|
double widthScale;
|
||||||
|
double foliageDensity;
|
||||||
|
int trunkWidth;
|
||||||
|
int heightVariance;
|
||||||
|
int foliageHeight;
|
||||||
|
int **foliageCoords;
|
||||||
|
int foliageCoordsLength;
|
||||||
|
void prepare(){
|
||||||
|
trunkHeight = (int) (height * trunkHeightScale);
|
||||||
|
if (trunkHeight >= height) trunkHeight = height - 1;
|
||||||
|
int clustersPerY = (int) (1.382 + pow(foliageDensity * height / 13.0, 2));
|
||||||
|
if (clustersPerY < 1) clustersPerY = 1;
|
||||||
|
int **tempFoliageCoords = new int *[clustersPerY * height];
|
||||||
|
for( int i = 0; i < clustersPerY * height; i++ )
|
||||||
|
{
|
||||||
|
tempFoliageCoords[i] = new int[4];
|
||||||
|
}
|
||||||
|
int y = origin[1] + height - foliageHeight;
|
||||||
|
int clusterCount = 1;
|
||||||
|
int trunkTop = origin[1] + trunkHeight;
|
||||||
|
int relativeY = y - origin[1];
|
||||||
|
|
||||||
|
tempFoliageCoords[0][0] = origin[0];
|
||||||
|
tempFoliageCoords[0][1] = y;
|
||||||
|
tempFoliageCoords[0][2] = origin[2];
|
||||||
|
tempFoliageCoords[0][3] = trunkTop;
|
||||||
|
y--;
|
||||||
|
|
||||||
|
while (relativeY >= 0)
|
||||||
|
{
|
||||||
|
int num = 0;
|
||||||
|
|
||||||
|
float shapefac = treeShape(relativeY);
|
||||||
|
if (shapefac < 0)
|
||||||
|
{
|
||||||
|
y--;
|
||||||
|
relativeY--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
double originOffset = 0.5;
|
||||||
|
while (num < clustersPerY)
|
||||||
|
{
|
||||||
|
double radius = widthScale * (shapefac * (rnd->nextFloat() + 0.328));
|
||||||
|
double angle = rnd->nextFloat() * 2.0 * 3.14159;
|
||||||
|
int x = Mth::floor(radius * sin(angle) + origin[0] + originOffset);
|
||||||
|
int z = Mth::floor(radius * cos(angle) + origin[2] + originOffset);
|
||||||
|
int checkStart[] = { x, y, z };
|
||||||
|
int checkEnd[] = { x, y + foliageHeight, z };
|
||||||
|
if (checkLine(checkStart, checkEnd) == -1) {
|
||||||
|
int checkBranchBase[] = { origin[0], origin[1], origin[2] };
|
||||||
|
double distance = sqrt(pow(abs(origin[0] - checkStart[0]), 2.0) + pow(abs(origin[2] - checkStart[2]), 2.0));
|
||||||
|
double branchHeight = distance * branchSlope;
|
||||||
|
if ((checkStart[1] - branchHeight) > trunkTop)
|
||||||
|
{
|
||||||
|
checkBranchBase[1] = trunkTop;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
checkBranchBase[1] = (int) (checkStart[1] - branchHeight);
|
||||||
|
}
|
||||||
|
if (checkLine(checkBranchBase, checkStart) == -1)
|
||||||
|
{
|
||||||
|
tempFoliageCoords[clusterCount][0] = x;
|
||||||
|
tempFoliageCoords[clusterCount][1] = y;
|
||||||
|
tempFoliageCoords[clusterCount][2] = z;
|
||||||
|
tempFoliageCoords[clusterCount][3] = checkBranchBase[1];
|
||||||
|
clusterCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
y--;
|
||||||
|
relativeY--;
|
||||||
|
}
|
||||||
|
|
||||||
|
foliageCoordsLength = clusterCount;
|
||||||
|
foliageCoords = tempFoliageCoords;
|
||||||
|
|
||||||
|
for( int i = clusterCount; i < clustersPerY * height; i++ )
|
||||||
|
{
|
||||||
|
delete [] tempFoliageCoords[i];
|
||||||
|
tempFoliageCoords[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void crossection(int x, int y, int z, float radius, unsigned char direction, int material)
|
||||||
|
{
|
||||||
|
|
||||||
|
int rad = (int) (radius + 0.618);
|
||||||
|
unsigned char secidx1 = axisConversionArray[direction];
|
||||||
|
unsigned char secidx2 = axisConversionArray[direction + 3];
|
||||||
|
int center[] = { x, y, z };
|
||||||
|
int position[] = { 0, 0, 0 };
|
||||||
|
int offset1 = -rad;
|
||||||
|
int offset2 = -rad;
|
||||||
|
int thismat;
|
||||||
|
position[direction] = center[direction];
|
||||||
|
while (offset1 <= rad)
|
||||||
|
{
|
||||||
|
position[secidx1] = center[secidx1] + offset1;
|
||||||
|
offset2 = -rad;
|
||||||
|
while (offset2 <= rad)
|
||||||
|
{
|
||||||
|
double thisdistance = pow(abs(offset1) + 0.5, 2) + pow(abs(offset2) + 0.5, 2);
|
||||||
|
if (thisdistance > radius * radius)
|
||||||
|
{
|
||||||
|
offset2++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
position[secidx2] = center[secidx2] + offset2;
|
||||||
|
|
||||||
|
thismat = thisLevel->getTile(position[0], position[1], position[2]);
|
||||||
|
|
||||||
|
if (!((thismat == 0) || (thismat == Tile::leaves->id)))
|
||||||
|
{
|
||||||
|
offset2++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
placeBlock(thisLevel, position[0], position[1], position[2], material, 0);
|
||||||
|
|
||||||
|
offset2++;
|
||||||
|
}
|
||||||
|
offset1++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
float treeShape(int y){
|
||||||
|
if (y < (((float) height) * 0.3)) return (float) -1.618;
|
||||||
|
float radius = ((float) height) / ((float) 2.0);
|
||||||
|
float adjacent = (((float) height) / ((float) 2.0)) - y;
|
||||||
|
float distance;
|
||||||
|
if (adjacent == 0) distance = radius;
|
||||||
|
else if (abs(adjacent) >= radius) distance = (float) 0.0;
|
||||||
|
else distance = (float) sqrt(pow(abs(radius), 2) - pow(abs(adjacent), 2));
|
||||||
|
distance *= (float) 0.5;
|
||||||
|
return distance;
|
||||||
|
}
|
||||||
|
float foliageShape(int y){
|
||||||
|
if ((y < 0) || (y >= foliageHeight)) return (float) -1;
|
||||||
|
else if ((y == 0) || (y == (foliageHeight - 1))) return (float) 2;
|
||||||
|
else return (float) 3;
|
||||||
|
}
|
||||||
|
void foliageCluster(int x, int y, int z){
|
||||||
|
|
||||||
|
int topy = y + foliageHeight;
|
||||||
|
int cury = topy - 1;
|
||||||
|
float radius;
|
||||||
|
while (cury >= y)
|
||||||
|
{
|
||||||
|
radius = foliageShape(cury - y);
|
||||||
|
crossection(x, cury, z, radius, (unsigned char) 1, Tile::leaves->id);
|
||||||
|
cury--;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void limb(int *start, int *end, int material)
|
||||||
|
{
|
||||||
|
int delta[] = { 0, 0, 0 };
|
||||||
|
unsigned char idx = 0;
|
||||||
|
unsigned char primidx = 0;
|
||||||
|
while (idx < 3)
|
||||||
|
{
|
||||||
|
delta[idx] = end[idx] - start[idx];
|
||||||
|
if (abs(delta[idx]) > abs(delta[primidx]))
|
||||||
|
{
|
||||||
|
primidx = idx;
|
||||||
|
}
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
if (delta[primidx] == 0) return;
|
||||||
|
unsigned char secidx1 = axisConversionArray[primidx];
|
||||||
|
unsigned char secidx2 = axisConversionArray[primidx + 3];
|
||||||
|
char primsign;
|
||||||
|
if (delta[primidx] > 0) primsign = 1;
|
||||||
|
else primsign = -1;
|
||||||
|
double secfac1 = ((double) delta[secidx1]) / ((double) delta[primidx]);
|
||||||
|
double secfac2 = ((double) delta[secidx2]) / ((double) delta[primidx]);
|
||||||
|
int coordinate[] = { 0, 0, 0 };
|
||||||
|
int primoffset = 0;
|
||||||
|
int endoffset = delta[primidx] + primsign;
|
||||||
|
while (primoffset != endoffset)
|
||||||
|
{
|
||||||
|
coordinate[primidx] = Mth::floor(start[primidx] + primoffset + 0.5);
|
||||||
|
coordinate[secidx1] = Mth::floor(start[secidx1] + (primoffset * secfac1) + 0.5);
|
||||||
|
coordinate[secidx2] = Mth::floor(start[secidx2] + (primoffset * secfac2) + 0.5);
|
||||||
|
|
||||||
|
int dir = 0;
|
||||||
|
int xdiff = abs(coordinate[0] - start[0]);
|
||||||
|
int zdiff = abs(coordinate[2] - start[2]);
|
||||||
|
int maxdiff = (std::max)(xdiff, zdiff);
|
||||||
|
|
||||||
|
if (maxdiff > 0)
|
||||||
|
{
|
||||||
|
if (xdiff == maxdiff)
|
||||||
|
{
|
||||||
|
dir = 0;
|
||||||
|
}
|
||||||
|
else if (zdiff == maxdiff)
|
||||||
|
{
|
||||||
|
dir = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
placeBlock(thisLevel, coordinate[0], coordinate[1], coordinate[2], material, dir);
|
||||||
|
primoffset += primsign;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void makeFoliage(){
|
||||||
|
int idx = 0;
|
||||||
|
int finish = foliageCoordsLength;
|
||||||
|
while (idx < finish)
|
||||||
|
{
|
||||||
|
int x = foliageCoords[idx][0];
|
||||||
|
int y = foliageCoords[idx][1];
|
||||||
|
int z = foliageCoords[idx][2];
|
||||||
|
foliageCluster(x, y, z);
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bool trimBranches(int localY){
|
||||||
|
if (localY < (height * 0.2)) return false;
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
void makeTrunk(){
|
||||||
|
int x = origin[0];
|
||||||
|
int startY = origin[1];
|
||||||
|
int topY = origin[1] + trunkHeight;
|
||||||
|
int z = origin[2];
|
||||||
|
int startCoord[] = { x, startY, z };
|
||||||
|
int endCoord[] = { x, topY, z };
|
||||||
|
limb(startCoord, endCoord, Tile::treeTrunk->id);
|
||||||
|
if (trunkWidth == 2)
|
||||||
|
{
|
||||||
|
startCoord[0] += 1;
|
||||||
|
endCoord[0] += 1;
|
||||||
|
limb(startCoord, endCoord, Tile::treeTrunk->id);
|
||||||
|
startCoord[2] += 1;
|
||||||
|
endCoord[2] += 1;
|
||||||
|
limb(startCoord, endCoord, Tile::treeTrunk->id);
|
||||||
|
startCoord[0] += -1;
|
||||||
|
endCoord[0] += -1;
|
||||||
|
limb(startCoord, endCoord, Tile::treeTrunk->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void makeBranches(){
|
||||||
|
int idx = 0;
|
||||||
|
int finish = foliageCoordsLength;
|
||||||
|
int baseCoord[] = { origin[0], origin[1], origin[2] };
|
||||||
|
while (idx < finish)
|
||||||
|
{
|
||||||
|
int *coordValues = foliageCoords[idx];
|
||||||
|
int endCoord[] = { coordValues[0], coordValues[1], coordValues[2] };
|
||||||
|
baseCoord[1] = coordValues[3];
|
||||||
|
int localY = baseCoord[1] - origin[1];
|
||||||
|
if (trimBranches(localY))
|
||||||
|
{
|
||||||
|
limb(baseCoord, endCoord, Tile::treeTrunk->id);
|
||||||
|
}
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int checkLine(int *start, int *end){
|
||||||
|
|
||||||
|
int delta[] = { 0, 0, 0 };
|
||||||
|
unsigned char idx = 0;
|
||||||
|
unsigned char primidx = 0;
|
||||||
|
while (idx < 3)
|
||||||
|
{
|
||||||
|
delta[idx] = end[idx] - start[idx];
|
||||||
|
if (abs(delta[idx]) > abs(delta[primidx]))
|
||||||
|
{
|
||||||
|
primidx = idx;
|
||||||
|
}
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
if (delta[primidx] == 0) return -1;
|
||||||
|
unsigned char secidx1 = axisConversionArray[primidx];
|
||||||
|
unsigned char secidx2 = axisConversionArray[primidx + 3];
|
||||||
|
char primsign;
|
||||||
|
if (delta[primidx] > 0) primsign = 1;
|
||||||
|
else primsign = -1;
|
||||||
|
double secfac1 = ((double) delta[secidx1]) / ((double) delta[primidx]);
|
||||||
|
double secfac2 = ((double) delta[secidx2]) / ((double) delta[primidx]);
|
||||||
|
int coordinate[] = { 0, 0, 0 };
|
||||||
|
int primoffset = 0;
|
||||||
|
int endoffset = delta[primidx] + primsign;
|
||||||
|
int thismat;
|
||||||
|
while (primoffset != endoffset)
|
||||||
|
{
|
||||||
|
coordinate[primidx] = start[primidx] + primoffset;
|
||||||
|
coordinate[secidx1] = Mth::floor(start[secidx1] + (primoffset * secfac1));
|
||||||
|
coordinate[secidx2] = Mth::floor(start[secidx2] + (primoffset * secfac2));
|
||||||
|
thismat = thisLevel->getTile(coordinate[0], coordinate[1], coordinate[2]);
|
||||||
|
if (!((thismat == 0) || (thismat == Tile::leaves->id)))
|
||||||
|
{
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
primoffset += primsign;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (primoffset == endoffset)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return abs(primoffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bool checkLocation(){
|
||||||
|
|
||||||
|
int startPosition[] = { origin[0], origin[1], origin[2] };
|
||||||
|
int endPosition[] = { origin[0], origin[1] + height - 1, origin[2] };
|
||||||
|
|
||||||
|
|
||||||
|
int baseMaterial = thisLevel->getTile(origin[0], origin[1] - 1, origin[2]);
|
||||||
|
if (!((baseMaterial == 2) || (baseMaterial == 3)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int allowedHeight = checkLine(startPosition, endPosition);
|
||||||
|
if (allowedHeight == -1)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (allowedHeight < 6)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
height = allowedHeight;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
BasicTree(bool doUpdate){
|
||||||
|
axisConversionArray[0] = 2;
|
||||||
|
axisConversionArray[1] = 0;
|
||||||
|
axisConversionArray[2] = 0;
|
||||||
|
axisConversionArray[3] = 1;
|
||||||
|
axisConversionArray[4] = 2;
|
||||||
|
axisConversionArray[5] = 1;
|
||||||
|
rnd = new Random();
|
||||||
|
origin[0] = 0;
|
||||||
|
origin[1] = 0;
|
||||||
|
origin[2] = 0;
|
||||||
|
height = 0;
|
||||||
|
trunkHeight = 0;
|
||||||
|
trunkHeightScale = 0.618;
|
||||||
|
branchDensity = 1.0;
|
||||||
|
branchSlope = 0.381;
|
||||||
|
widthScale = 1.0;
|
||||||
|
foliageDensity = 1.0;
|
||||||
|
trunkWidth = 1;
|
||||||
|
heightVariance = 12;
|
||||||
|
foliageHeight = 4;
|
||||||
|
foliageCoords = NULL;
|
||||||
|
foliageCoordsLength = 0;
|
||||||
|
}
|
||||||
|
virtual ~BasicTree(){
|
||||||
|
delete rnd;
|
||||||
|
|
||||||
|
for( int i = 0; i < foliageCoordsLength; i++ )
|
||||||
|
{
|
||||||
|
delete [] foliageCoords[i];
|
||||||
|
}
|
||||||
|
delete [] foliageCoords;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void init(double heightInit, double widthInit, double foliageDensityInit){
|
||||||
|
|
||||||
|
heightVariance = (int) (heightInit * 12);
|
||||||
|
if (heightInit > 0.5) foliageHeight = 5;
|
||||||
|
widthScale = widthInit;
|
||||||
|
foliageDensity = foliageDensityInit;
|
||||||
|
}
|
||||||
|
virtual bool place(Level *level, Random *random, int x, int y, int z){
|
||||||
|
|
||||||
|
thisLevel = level;
|
||||||
|
int seed = random->nextLong();
|
||||||
|
rnd->setSeed(seed);
|
||||||
|
origin[0] = x;
|
||||||
|
origin[1] = y;
|
||||||
|
origin[2] = z;
|
||||||
|
if (height == 0)
|
||||||
|
{
|
||||||
|
height = 5 + rnd->nextInt(heightVariance);
|
||||||
|
}
|
||||||
|
if (!(checkLocation()))
|
||||||
|
{
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
prepare();
|
||||||
|
|
||||||
|
makeFoliage();
|
||||||
|
|
||||||
|
makeTrunk();
|
||||||
|
|
||||||
|
makeBranches();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif /*NET_MINECRAFT_WORLD_LEVEL_LEVELGEN_FEATURE__BasicTree_H__*/
|
||||||
@@ -38,7 +38,7 @@ public:
|
|||||||
setFlammable(Tile::tnt->id, FLAME_MEDIUM, BURN_INSTANT);
|
setFlammable(Tile::tnt->id, FLAME_MEDIUM, BURN_INSTANT);
|
||||||
setFlammable(Tile::cloth->id, FLAME_EASY, BURN_EASY);
|
setFlammable(Tile::cloth->id, FLAME_EASY, BURN_EASY);
|
||||||
|
|
||||||
//setTicking(true); //@fire
|
setTicking(true); //@fire
|
||||||
}
|
}
|
||||||
|
|
||||||
AABB* getAABB(Level* level, int x, int y, int z) {
|
AABB* getAABB(Level* level, int x, int y, int z) {
|
||||||
@@ -70,9 +70,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void tick(Level* level, int x, int y, int z, Random* random) {
|
void tick(Level* level, int x, int y, int z, Random* random) {
|
||||||
return; //@fire
|
|
||||||
|
|
||||||
bool infiniBurn = false;//level->getTile(x, y - 1, z) == Tile::hellRock->id;
|
bool infiniBurn = level->getTile(x, y - 1, z) == Tile::netherrack->id;
|
||||||
|
|
||||||
int age = level->getData(x, y, z);
|
int age = level->getData(x, y, z);
|
||||||
if (age < 15) {
|
if (age < 15) {
|
||||||
@@ -148,7 +148,6 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void neighborChanged(Level* level, int x, int y, int z, int type) {
|
void neighborChanged(Level* level, int x, int y, int z, int type) {
|
||||||
return; //@fire
|
|
||||||
if (!level->isSolidBlockingTile(x, y - 1, z) && !isValidFireLocation(level, x, y, z)) {
|
if (!level->isSolidBlockingTile(x, y - 1, z) && !isValidFireLocation(level, x, y, z)) {
|
||||||
level->setTile(x, y, z, 0);
|
level->setTile(x, y, z, 0);
|
||||||
return;
|
return;
|
||||||
@@ -156,7 +155,6 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void onPlace(Level* level, int x, int y, int z) {
|
void onPlace(Level* level, int x, int y, int z) {
|
||||||
return; //@fire
|
|
||||||
if (!level->isSolidBlockingTile(x, y - 1, z) && !isValidFireLocation(level, x, y, z)) {
|
if (!level->isSolidBlockingTile(x, y - 1, z) && !isValidFireLocation(level, x, y, z)) {
|
||||||
level->setTile(x, y, z, 0);
|
level->setTile(x, y, z, 0);
|
||||||
return;
|
return;
|
||||||
@@ -169,7 +167,6 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ignite(Level* level, int x, int y, int z) {
|
void ignite(Level* level, int x, int y, int z) {
|
||||||
return; //@fire
|
|
||||||
|
|
||||||
bool lit = false;
|
bool lit = false;
|
||||||
if (!lit) lit = tryIgnite(level, x, y + 1, z);
|
if (!lit) lit = tryIgnite(level, x, y + 1, z);
|
||||||
@@ -184,11 +181,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void animateTick(Level* level, int x, int y, int z, Random* random) {
|
void animateTick(Level* level, int x, int y, int z, Random* random) {
|
||||||
return; //@fire
|
|
||||||
|
|
||||||
//if (random.nextInt(24) == 0) {
|
if (random->nextInt(24) == 0) {
|
||||||
// level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "fire.fire", 1 + random.nextFloat(), random.nextFloat() * 0.7f + 0.3f);
|
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "fire.fire", 1 + random->nextFloat(), random->nextFloat() * 0.7f + 0.3f);
|
||||||
//}
|
}
|
||||||
|
|
||||||
if (level->isSolidBlockingTile(x, y - 1, z) || Tile::fire->canBurn(level, x, y - 1, z)) {
|
if (level->isSolidBlockingTile(x, y - 1, z) || Tile::fire->canBurn(level, x, y - 1, z)) {
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
@@ -248,7 +244,6 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void checkBurn(Level* level, int x, int y, int z, int chance, Random* random) {
|
void checkBurn(Level* level, int x, int y, int z, int chance, Random* random) {
|
||||||
return; //@fire
|
|
||||||
|
|
||||||
int odds = burnOdds[level->getTile(x, y, z)];
|
int odds = burnOdds[level->getTile(x, y, z)];
|
||||||
if (random->nextInt(chance) < odds) {
|
if (random->nextInt(chance) < odds) {
|
||||||
@@ -265,7 +260,6 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool isValidFireLocation(Level* level, int x, int y, int z) {
|
bool isValidFireLocation(Level* level, int x, int y, int z) {
|
||||||
return false; //@fire
|
|
||||||
|
|
||||||
if (canBurn(level, x + 1, y, z)) return true;
|
if (canBurn(level, x + 1, y, z)) return true;
|
||||||
if (canBurn(level, x - 1, y, z)) return true;
|
if (canBurn(level, x - 1, y, z)) return true;
|
||||||
@@ -278,7 +272,6 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getFireOdds(Level* level, int x, int y, int z) {
|
int getFireOdds(Level* level, int x, int y, int z) {
|
||||||
return 0; //@fire
|
|
||||||
|
|
||||||
int odds = 0;
|
int odds = 0;
|
||||||
if (!level->isEmptyTile(x, y, z)) return 0;
|
if (!level->isEmptyTile(x, y, z)) return 0;
|
||||||
@@ -294,7 +287,6 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool tryIgnite(Level* level, int x, int y, int z) {
|
bool tryIgnite(Level* level, int x, int y, int z) {
|
||||||
return false; //@fire
|
|
||||||
|
|
||||||
int t = level->getTile(x, y, z);
|
int t = level->getTile(x, y, z);
|
||||||
if (t == Tile::fire->id) return true;
|
if (t == Tile::fire->id) return true;
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
#include "GrassTile.h"
|
#include "GrassTile.h"
|
||||||
#include "../material/Material.h"
|
#include "../material/Material.h"
|
||||||
#include "../../entity/item/ItemEntity.h"
|
#include "../../entity/item/ItemEntity.h"
|
||||||
|
#include "../GrassColor.h"
|
||||||
|
#include "../Level.h"
|
||||||
|
#include "../LevelSource.h"
|
||||||
|
#include "../biome/BiomeSource.h"
|
||||||
|
#include "../../../client/Minecraft.h"
|
||||||
|
|
||||||
GrassTile::GrassTile(int id)
|
GrassTile::GrassTile(int id)
|
||||||
: super(id, Material::dirt)
|
: super(id, Material::dirt)
|
||||||
@@ -24,11 +29,18 @@ int GrassTile::getTexture( int face, int data ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int GrassTile::getColor( LevelSource* level, int x, int y, int z ) {
|
int GrassTile::getColor( LevelSource* level, int x, int y, int z ) {
|
||||||
//level.getBiomeSource().getBiomeBlock(x, z, 1, 1);
|
|
||||||
//float temp = level.getBiomeSource().temperatures[0];
|
|
||||||
//float rain = level.getBiomeSource().downfalls[0];
|
|
||||||
|
|
||||||
return 0x339933;//GrassColor.get(temp, rain);
|
if(!GrassColor::useTint){
|
||||||
|
return 0x339933;
|
||||||
|
}
|
||||||
|
|
||||||
|
level->getBiomeSource()->getBiomeBlock(x, z, 1, 1);
|
||||||
|
float temp = level->getBiomeSource()->temperatures[0];
|
||||||
|
float rain = level->getBiomeSource()->downfalls[0];
|
||||||
|
|
||||||
|
// return 0x339933;//GrassColor.get(temp, rain); // we need to hook this up with OPTION_FOLIAGE_TINT
|
||||||
|
|
||||||
|
return GrassColor::get(temp, rain);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GrassTile::tick( Level* level, int x, int y, int z, Random* random ) {
|
void GrassTile::tick( Level* level, int x, int y, int z, Random* random ) {
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class GrassTile: public Tile
|
|||||||
{
|
{
|
||||||
typedef Tile super;
|
typedef Tile super;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static const int MIN_BRIGHTNESS = 4;
|
static const int MIN_BRIGHTNESS = 4;
|
||||||
|
|
||||||
GrassTile(int id);
|
GrassTile(int id);
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
#include "../../item/Item.h"
|
#include "../../item/Item.h"
|
||||||
#include "../../item/ItemInstance.h"
|
#include "../../item/ItemInstance.h"
|
||||||
#include "../FoliageColor.h"
|
#include "../FoliageColor.h"
|
||||||
|
#include "../LevelSource.h"
|
||||||
|
#include "../biome/BiomeSource.h"
|
||||||
|
|
||||||
class Entity;
|
class Entity;
|
||||||
|
|
||||||
@@ -54,8 +56,16 @@ public:
|
|||||||
if (data == BIRCH_LEAF) {
|
if (data == BIRCH_LEAF) {
|
||||||
return FoliageColor::getBirchColor();
|
return FoliageColor::getBirchColor();
|
||||||
}
|
}
|
||||||
|
if (!FoliageColor::useTint){
|
||||||
|
return FoliageColor::getDefaultColor();
|
||||||
|
}
|
||||||
|
|
||||||
return FoliageColor::getDefaultColor();
|
// return FoliageColor::getDefaultColor(); we need to hook this up with OPTION_FOLIAGE_TINT
|
||||||
|
level->getBiomeSource()->getBiomeBlock(x, z, 1, 1);
|
||||||
|
float temperature = level->getBiomeSource()->temperatures[0];
|
||||||
|
float rainfall = level->getBiomeSource()->downfalls[0];
|
||||||
|
return FoliageColor::get(temperature, rainfall);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onRemove(Level* level, int x, int y, int z) {
|
void onRemove(Level* level, int x, int y, int z) {
|
||||||
|
|||||||
Reference in New Issue
Block a user