50 lines
1.6 KiB
C++
50 lines
1.6 KiB
C++
#include "gamelib/aas2/aas2_local.h"
|
|
|
|
bool idAAS2Local::GetAreaCells(const int areaNumber, const int subdivisionSize,
|
|
int* const subdivisionX, int* const subdivisionY) const {
|
|
if (file == nullptr || areaNumber <= 0 || subdivisionSize <= 0) {
|
|
return false;
|
|
}
|
|
|
|
const idBounds bounds = file->AreaBounds(areaNumber);
|
|
|
|
*subdivisionX = static_cast<int>(bounds[1].x - bounds[0].x) /
|
|
subdivisionSize + 1;
|
|
*subdivisionY = static_cast<int>(bounds[1].y - bounds[0].y) /
|
|
subdivisionSize + 1;
|
|
return true;
|
|
}
|
|
|
|
bool idAAS2Local::WorldPosToCellPos(const int areaNumber,
|
|
const int subdivisionSize, const idVec3& origin,
|
|
int* const subdivisionX, int* const subdivisionY) const {
|
|
if (file == nullptr || areaNumber <= 0 || subdivisionSize <= 0) {
|
|
return false;
|
|
}
|
|
|
|
const idBounds bounds = file->AreaBounds(areaNumber);
|
|
|
|
*subdivisionX = static_cast<int>(
|
|
(origin.x - bounds[0].x) / static_cast<float>(subdivisionSize));
|
|
*subdivisionY = static_cast<int>(
|
|
(origin.y - bounds[0].y) / static_cast<float>(subdivisionSize));
|
|
return true;
|
|
}
|
|
|
|
bool idAAS2Local::CellPosToWorldPos(const int areaNumber,
|
|
const int subdivisionSize, const int subdivisionX,
|
|
const int subdivisionY, idVec3& worldPosition,
|
|
const bool findZ) const {
|
|
(void)findZ;
|
|
if (file == nullptr || areaNumber <= 0) {
|
|
return false;
|
|
}
|
|
|
|
const idBounds bounds = file->AreaBounds(areaNumber);
|
|
|
|
worldPosition.x = bounds[0].x + subdivisionSize * subdivisionX;
|
|
worldPosition.y = bounds[0].y + subdivisionSize * subdivisionY;
|
|
worldPosition.z = bounds[1].z;
|
|
return true;
|
|
}
|