2020-09-27 20:48:01 -03:00
|
|
|
#pragma once
|
|
|
|
#include "phd_global.h"
|
|
|
|
|
2020-11-10 22:31:29 -03:00
|
|
|
int GetOffset(short angle, int x, int z);
|
|
|
|
|
2020-11-11 15:01:45 -03:00
|
|
|
template <int tilt>
|
|
|
|
std::tuple<std::optional<int>, bool> BridgeFloor(short itemNumber, int x, int y, int z)
|
2020-11-10 22:31:29 -03:00
|
|
|
{
|
|
|
|
const auto& item = g_Level.Items[itemNumber];
|
|
|
|
if (abs(item.pos.xPos - x) <= SECTOR(1) / 2 && abs(item.pos.zPos - z) <= SECTOR(1) / 2)
|
2020-11-11 15:01:45 -03:00
|
|
|
{
|
|
|
|
auto height = item.pos.yPos + tilt * (GetOffset(item.pos.yRot, x, z) / 4 + SECTOR(1) / 8);
|
2020-12-20 14:04:27 -03:00
|
|
|
return std::make_tuple(std::optional{height}, y > height && y <= height + SECTOR(1) / 16);
|
2020-11-11 15:01:45 -03:00
|
|
|
}
|
|
|
|
return std::make_tuple(std::nullopt, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <int tilt>
|
|
|
|
std::tuple<std::optional<int>, bool> BridgeCeiling(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 + tilt * (GetOffset(item.pos.yRot, x, z) / 4 + SECTOR(1) / 8);
|
2020-12-20 14:04:27 -03:00
|
|
|
return std::make_tuple(std::optional{height + SECTOR(1) / 16}, y >= height && y < height + SECTOR(1) / 16);
|
2020-11-11 15:01:45 -03:00
|
|
|
}
|
|
|
|
return std::make_tuple(std::nullopt, false);
|
2020-11-10 22:31:29 -03:00
|
|
|
}
|