Fix raising blocks height

This commit is contained in:
asasas9500 2020-11-14 14:35:27 -03:00
parent efd37b3290
commit 1b96701d5e
3 changed files with 36 additions and 10 deletions

View file

@ -40,20 +40,20 @@ void ControlRaisingBlock(short itemNumber)
{
if (item->triggerFlags == -1)
{
AlterFloorHeight(item, -255);
//AlterFloorHeight(item, -255);
}
else if (item->triggerFlags == -3)
{
AlterFloorHeight(item, -1023);
//AlterFloorHeight(item, -1023);
}
else
{
AlterFloorHeight(item, -item->itemFlags[7]);
//AlterFloorHeight(item, -item->itemFlags[7]);
}
}
else
{
AlterFloorHeight(item, -item->itemFlags[7]);
//AlterFloorHeight(item, -item->itemFlags[7]);
}
item->itemFlags[2] = 1;
@ -93,22 +93,22 @@ void ControlRaisingBlock(short itemNumber)
{
if (item->triggerFlags == -1)
{
AlterFloorHeight(item, 255);
//AlterFloorHeight(item, 255);
item->itemFlags[2] = 0;
}
else if (item->triggerFlags == -3)
{
AlterFloorHeight(item, 1023);
//AlterFloorHeight(item, 1023);
item->itemFlags[2] = 0;
}
else
{
AlterFloorHeight(item, item->itemFlags[7]);
//AlterFloorHeight(item, item->itemFlags[7]);
}
}
else
{
AlterFloorHeight(item, item->itemFlags[7]);
//AlterFloorHeight(item, item->itemFlags[7]);
}
item->itemFlags[2] = 0;
@ -134,3 +134,25 @@ void ControlRaisingBlock(short itemNumber)
item->itemFlags[1] -= 64;
}
}
std::tuple<std::optional<int>, bool> RaisingBlockFloor(short itemNumber, int x, int y, int z)
{
const auto& item = g_Level.Items[itemNumber];
if (abs(item.pos.xPos - x) <= SECTOR(1) / 2 && abs(item.pos.zPos - z) <= SECTOR(1) / 2)
{
auto height = item.pos.yPos - item.itemFlags[7] * item.itemFlags[1] / 4096;
return std::make_tuple(std::optional{height}, y > height && y < item.pos.yPos);
}
return std::make_tuple(std::nullopt, false);
}
std::tuple<std::optional<int>, bool> RaisingBlockCeiling(short itemNumber, int x, int y, int z)
{
const auto& item = g_Level.Items[itemNumber];
if (abs(item.pos.xPos - x) <= SECTOR(1) / 2 && abs(item.pos.zPos - z) <= SECTOR(1) / 2)
{
auto height = item.pos.yPos - item.itemFlags[7] * item.itemFlags[1] / 4096;
return std::make_tuple(std::optional{item.pos.yPos}, y > height && y < item.pos.yPos);
}
return std::make_tuple(std::nullopt, false);
}

View file

@ -2,3 +2,5 @@
void InitialiseRaisingBlock(short itemNumber);
void ControlRaisingBlock(short itemNumber);
std::tuple<std::optional<int>, bool> RaisingBlockFloor(short itemNumber, int x, int y, int z);
std::tuple<std::optional<int>, bool> RaisingBlockCeiling(short itemNumber, int x, int y, int z);

View file

@ -903,6 +903,8 @@ static void StartObject(OBJECT_INFO *obj)
{
obj->initialise = InitialiseRaisingBlock;
obj->control = ControlRaisingBlock;
obj->floor = RaisingBlockFloor;
obj->ceiling = RaisingBlockCeiling;
obj->saveFlags = true;
}
}