2020-09-27 20:48:01 -03:00
|
|
|
#include "framework.h"
|
|
|
|
#include "generic_bridge.h"
|
|
|
|
#include "floordata.h"
|
|
|
|
#include "level.h"
|
|
|
|
|
|
|
|
void InitialiseBridge(short itemNumber)
|
|
|
|
{
|
|
|
|
FLOOR_INFO::AddFloor(itemNumber);
|
|
|
|
FLOOR_INFO::AddCeiling(itemNumber);
|
|
|
|
}
|
|
|
|
|
|
|
|
int BridgeFloor(short itemNumber, int x, int y, int z)
|
|
|
|
{
|
|
|
|
auto item = &g_Level.Items[itemNumber];
|
2020-09-28 10:02:24 -03:00
|
|
|
return item->pos.yPos + GetOffset(&item->pos, x, z);
|
2020-09-27 20:48:01 -03:00
|
|
|
}
|
|
|
|
|
|
|
|
int BridgeCeiling(short itemNumber, int x, int y, int z)
|
|
|
|
{
|
|
|
|
auto item = &g_Level.Items[itemNumber];
|
2020-09-28 10:02:24 -03:00
|
|
|
return item->pos.yPos + GetOffset(&item->pos, x, z);
|
2020-09-27 20:48:01 -03:00
|
|
|
}
|
|
|
|
|
2020-09-28 10:02:24 -03:00
|
|
|
int GetOffset(PHD_3DPOS* pos, int x, int z)
|
2020-09-27 20:48:01 -03:00
|
|
|
{
|
2020-09-28 10:02:24 -03:00
|
|
|
auto vector = FLOOR_INFO::GetSectorPoint(x, z);
|
2020-09-27 20:48:01 -03:00
|
|
|
auto matrix = Matrix::CreateRotationZ(TO_RAD(pos->yRot));
|
|
|
|
auto result = Vector2::Transform(Vector2(vector.x, vector.y), matrix);
|
2020-09-28 10:02:24 -03:00
|
|
|
return tan(TO_RAD(pos->zRot)) * result.x - tan(TO_RAD(pos->xRot)) * result.y;
|
2020-09-27 20:48:01 -03:00
|
|
|
}
|