mirror of
https://github.com/neoStudiosLCE/neoLegacy.git
synced 2026-08-20 09:57:09 +00:00
fix: sunflower (somewhat)
This commit is contained in:
parent
3409dfb821
commit
893f3a9f19
|
|
@ -4199,7 +4199,11 @@ bool TileRenderer::tesselateCrossInWorld( Tile* tt, int x, int y, int z )
|
||||||
{
|
{
|
||||||
const int data = level->getData(x, y, z);
|
const int data = level->getData(x, y, z);
|
||||||
const bool isUpper = (data & TallGrass2::UPPER_BIT) != 0;
|
const bool isUpper = (data & TallGrass2::UPPER_BIT) != 0;
|
||||||
const int lowerData = isUpper ? level->getData(x, y - 1, z) : data;
|
int lowerData = data;
|
||||||
|
if (isUpper && level->getTile(x, y - 1, z) == Tile::double_plant_Id)
|
||||||
|
{
|
||||||
|
lowerData = level->getData(x, y - 1, z);
|
||||||
|
}
|
||||||
const int variant = lowerData & ~TallGrass2::UPPER_BIT;
|
const int variant = lowerData & ~TallGrass2::UPPER_BIT;
|
||||||
|
|
||||||
if (isUpper && variant == TallGrass2::SUNFLOWER)
|
if (isUpper && variant == TallGrass2::SUNFLOWER)
|
||||||
|
|
@ -4274,6 +4278,15 @@ bool TileRenderer::tesselateCrossInWorld( Tile* tt, int x, int y, int z )
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int renderData = data;
|
||||||
|
if (isUpper)
|
||||||
|
{
|
||||||
|
renderData = (lowerData & ~TallGrass2::UPPER_BIT) | TallGrass2::UPPER_BIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
tesselateCrossTexture(tt, renderData, xt, yt, zt, 1);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
tesselateCrossTexture( tt, level->getData( x, y, z ), xt, yt, zt, 1 );
|
tesselateCrossTexture( tt, level->getData( x, y, z ), xt, yt, zt, 1 );
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ public:
|
||||||
|
|
||||||
Tag* tag = it->second;
|
Tag* tag = it->second;
|
||||||
|
|
||||||
if (!tag || tag->getId() != Tag::TAG_STRING)
|
if (!tag || tag->getId() != Tag::TAG_String)
|
||||||
return L"";
|
return L"";
|
||||||
|
|
||||||
StringTag* stringTag = static_cast<StringTag*>(tag);
|
StringTag* stringTag = static_cast<StringTag*>(tag);
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,12 @@ Tile::BlockState TallGrass2::getBlockState(int data)
|
||||||
|
|
||||||
Tile::BlockState TallGrass2::getBlockState(LevelSource* level, int x, int y, int z)
|
Tile::BlockState TallGrass2::getBlockState(LevelSource* level, int x, int y, int z)
|
||||||
{
|
{
|
||||||
return Tile::BlockState(level->getData(x, y, z) & 0xF);
|
int data = level->getData(x, y, z) & 0xF;
|
||||||
|
if ((data & UPPER_BIT) != 0 && level->getTile(x, y - 1, z) == id)
|
||||||
|
{
|
||||||
|
data = (level->getData(x, y - 1, z) & ~UPPER_BIT) | UPPER_BIT;
|
||||||
|
}
|
||||||
|
return Tile::BlockState(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -147,7 +152,12 @@ Icon* TallGrass2::getTexture(LevelSource* level, int x, int y, int z, int face)
|
||||||
{
|
{
|
||||||
int data = level->getData(x, y, z);
|
int data = level->getData(x, y, z);
|
||||||
bool isUpper = (data & UPPER_BIT) != 0;
|
bool isUpper = (data & UPPER_BIT) != 0;
|
||||||
int variant = data & ~UPPER_BIT;
|
int variantData = data;
|
||||||
|
if (isUpper && level->getTile(x, y - 1, z) == id)
|
||||||
|
{
|
||||||
|
variantData = level->getData(x, y - 1, z);
|
||||||
|
}
|
||||||
|
int variant = variantData & ~UPPER_BIT;
|
||||||
if (variant < 0 || variant >= VARIANT_COUNT) variant = 0;
|
if (variant < 0 || variant >= VARIANT_COUNT) variant = 0;
|
||||||
return isUpper ? iconTop[variant] : iconBottom[variant];
|
return isUpper ? iconTop[variant] : iconBottom[variant];
|
||||||
}
|
}
|
||||||
|
|
@ -157,7 +167,13 @@ int TallGrass2::getVariant(LevelSource* level, int x, int y, int z)
|
||||||
{
|
{
|
||||||
int data = level->getData(x, y, z);
|
int data = level->getData(x, y, z);
|
||||||
bool isUpper = (data & UPPER_BIT) != 0;
|
bool isUpper = (data & UPPER_BIT) != 0;
|
||||||
int lowerData = isUpper ? level->getData(x, y - 1, z) : data;
|
int lowerData = data;
|
||||||
|
|
||||||
|
if (isUpper && level->getTile(x, y - 1, z) == id)
|
||||||
|
{
|
||||||
|
lowerData = level->getData(x, y - 1, z);
|
||||||
|
}
|
||||||
|
|
||||||
int variant = lowerData & ~UPPER_BIT;
|
int variant = lowerData & ~UPPER_BIT;
|
||||||
if (variant < 0 || variant >= VARIANT_COUNT) variant = 0;
|
if (variant < 0 || variant >= VARIANT_COUNT) variant = 0;
|
||||||
return variant;
|
return variant;
|
||||||
|
|
@ -184,7 +200,12 @@ int TallGrass2::getColor(LevelSource* level, int x, int y, int z)
|
||||||
|
|
||||||
int TallGrass2::getColor(LevelSource* level, int x, int y, int z, int data)
|
int TallGrass2::getColor(LevelSource* level, int x, int y, int z, int data)
|
||||||
{
|
{
|
||||||
int variant = data & ~UPPER_BIT;
|
int variantData = data;
|
||||||
|
if ((data & UPPER_BIT) != 0 && level->getTile(x, y - 1, z) == id)
|
||||||
|
{
|
||||||
|
variantData = level->getData(x, y - 1, z);
|
||||||
|
}
|
||||||
|
int variant = variantData & ~UPPER_BIT;
|
||||||
if (variant < 0 || variant >= VARIANT_COUNT) variant = 0;
|
if (variant < 0 || variant >= VARIANT_COUNT) variant = 0;
|
||||||
if (!isGrassColored(variant)) return 0xFFFFFF;
|
if (!isGrassColored(variant)) return 0xFFFFFF;
|
||||||
return level->getBiome(x, z)->getGrassColor();
|
return level->getBiome(x, z)->getGrassColor();
|
||||||
|
|
@ -248,11 +269,29 @@ void TallGrass2::neighborChanged(Level* level, int x, int y, int z, int type)
|
||||||
if (upperTileId == id)
|
if (upperTileId == id)
|
||||||
level->removeTile(x, y + 1, z);
|
level->removeTile(x, y + 1, z);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int expectedUpperData = variant | UPPER_BIT;
|
||||||
|
int upperData = level->getData(x, y + 1, z) & 0xF;
|
||||||
|
if (upperData != expectedUpperData)
|
||||||
|
{
|
||||||
|
level->setData(x, y + 1, z, expectedUpperData, Tile::UPDATE_CLIENTS, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (level->getTile(x, y - 1, z) != id)
|
if (level->getTile(x, y - 1, z) != id)
|
||||||
level->removeTile(x, y, z);
|
level->removeTile(x, y, z);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int expectedUpperData = (level->getData(x, y - 1, z) & ~UPPER_BIT) | UPPER_BIT;
|
||||||
|
int selfData = data & 0xF;
|
||||||
|
if (selfData != expectedUpperData)
|
||||||
|
{
|
||||||
|
level->setData(x, y, z, expectedUpperData, Tile::UPDATE_CLIENTS, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -271,21 +310,35 @@ void TallGrass2::tick(Level* level, int x, int y, int z, Random* random)
|
||||||
if (upperTileId == id)
|
if (upperTileId == id)
|
||||||
level->removeTile(x, y + 1, z);
|
level->removeTile(x, y + 1, z);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int expectedUpperData = (data & ~UPPER_BIT) | UPPER_BIT;
|
||||||
|
int upperData = level->getData(x, y + 1, z) & 0xF;
|
||||||
|
if (upperData != expectedUpperData)
|
||||||
|
{
|
||||||
|
level->setData(x, y + 1, z, expectedUpperData, Tile::UPDATE_CLIENTS, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int TallGrass2::getResource(int data, Random* random, int playerBonusLevel)
|
int TallGrass2::getResource(int data, Random* random, int playerBonusLevel)
|
||||||
{
|
{
|
||||||
(void)random;
|
|
||||||
(void)playerBonusLevel;
|
(void)playerBonusLevel;
|
||||||
|
|
||||||
if ((data & ~UPPER_BIT) == SUNFLOWER)
|
int variant = data & ~UPPER_BIT;
|
||||||
{
|
if (variant < 0 || variant >= VARIANT_COUNT) variant = 0;
|
||||||
return Tile::double_plant_Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
if (variant == TALL_GRASS)
|
||||||
|
{
|
||||||
|
if (random->nextInt(8) == 0)
|
||||||
|
{
|
||||||
|
return Item::wheat_seeds->id;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return Tile::double_plant_Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TallGrass2::getResourceCountForLootBonus(int bonusLevel, Random* random)
|
int TallGrass2::getResourceCountForLootBonus(int bonusLevel, Random* random)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue