forked from Kolyah35/minecraft-pe-0.6.1
118 lines
2.2 KiB
C++
Executable File
118 lines
2.2 KiB
C++
Executable File
#include "FallingTile.h"
|
|
#include "../../level/Level.h"
|
|
#include "../../../util/Random.h"
|
|
#include "../../../nbt/CompoundTag.h"
|
|
|
|
|
|
FallingTile::FallingTile( Level* level )
|
|
: Entity(level),
|
|
tile(0),
|
|
data(0)
|
|
{
|
|
init();
|
|
}
|
|
|
|
FallingTile::FallingTile( Level* level, float x, float y, float z, int tile, int data)
|
|
: Entity(level),
|
|
tile(tile),
|
|
data(data)
|
|
{
|
|
init();
|
|
|
|
setPos(x, y, z);
|
|
xo = xOld = x;
|
|
yo = yOld = y;
|
|
zo = zOld = z;
|
|
}
|
|
|
|
void FallingTile::init() {
|
|
entityRendererId = ER_FALLINGTILE_RENDERER;
|
|
|
|
time = 0;
|
|
blocksBuilding = true;
|
|
setSize(0.98f, 0.98f);
|
|
heightOffset = bbHeight / 2.0f;
|
|
|
|
makeStepSound = false;
|
|
|
|
xd = 0;
|
|
yd = 0;
|
|
zd = 0;
|
|
}
|
|
|
|
bool FallingTile::isPickable() {
|
|
return !removed;
|
|
}
|
|
|
|
void FallingTile::tick() {
|
|
if (tile == 0) {
|
|
remove();
|
|
return;
|
|
}
|
|
|
|
xo = x;
|
|
yo = y;
|
|
zo = z;
|
|
time++;
|
|
|
|
yd -= 0.04f;
|
|
move(xd, yd, zd);
|
|
xd *= 0.98f;
|
|
yd *= 0.98f;
|
|
zd *= 0.98f;
|
|
|
|
if (!level->isClientSide) {
|
|
int xt = Mth::floor(x);
|
|
int yt = Mth::floor(y);
|
|
int zt = Mth::floor(z);
|
|
|
|
if (time == 1) {
|
|
if (level->getTile(xt, yt, zt) == tile) {
|
|
level->setTile(xt, yt, zt, 0);
|
|
} else {
|
|
remove();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (onGround) {
|
|
xd *= 0.7f;
|
|
zd *= 0.7f;
|
|
yd *= -0.5f;
|
|
|
|
remove();
|
|
if (level->mayPlace(tile, xt, yt, zt, true, 1) && level->setTileAndData(xt, yt, zt, tile, data)) {
|
|
} else if (!level->isClientSide) {
|
|
//spawnAtLocation(tile, 1);
|
|
}
|
|
} else if (time > SharedConstants::TicksPerSecond * 5 && !level->isClientSide) {
|
|
//spawnAtLocation(tile, 1);
|
|
remove();
|
|
}
|
|
}
|
|
}
|
|
|
|
float FallingTile::getShadowHeightOffs() {
|
|
return 0;
|
|
}
|
|
|
|
Level* FallingTile::getLevel() {
|
|
return level;
|
|
}
|
|
|
|
void FallingTile::addAdditonalSaveData( CompoundTag* tag ) {
|
|
tag->putByte("Tile", (char) tile);
|
|
tag->putByte("Data", (char) data);
|
|
tag->putByte("Time", (char) time);
|
|
}
|
|
|
|
void FallingTile::readAdditionalSaveData( CompoundTag* tag ) {
|
|
tile = tag->getByte("Tile");
|
|
data = tag->getByte("Data");
|
|
time = tag->getByte("Time");
|
|
}
|
|
|
|
int FallingTile::getEntityTypeId() const {
|
|
return EntityTypes::IdFallingTile;
|
|
}
|