1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-24 23:34:37 +01:00
Files
OpenRCT2/src/openrct2/world/TilePointerIndex.hpp
James103 73738bbdc8 Replace 2022 with 2023 in copyright headers
Replace all instances of the year 2022 with 2023 in all copyright headers
2023-01-01 11:58:01 +01:00

56 lines
1.5 KiB
C++

/*****************************************************************************
* Copyright (c) 2014-2023 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#pragma once
#include "Location.hpp"
#include <cassert>
#include <cstdint>
#include <vector>
template<typename T> class TilePointerIndex
{
std::vector<T*> TilePointers;
uint16_t MapSize{};
public:
TilePointerIndex() = default;
explicit TilePointerIndex(const uint16_t mapSize, T* tileElements, size_t count)
{
MapSize = mapSize;
TilePointers.reserve(MapSize * MapSize);
size_t index = 0;
for (size_t y = 0; y < MapSize; y++)
{
for (size_t x = 0; x < MapSize; x++)
{
assert(index < count);
TilePointers.emplace_back(&tileElements[index]);
do
{
index++;
} while (!tileElements[index - 1].IsLastForTile());
}
}
}
T* GetFirstElementAt(TileCoordsXY coords)
{
return TilePointers[coords.x + (coords.y * MapSize)];
}
void SetTile(TileCoordsXY coords, T* tileElement)
{
TilePointers[coords.x + (coords.y * MapSize)] = tileElement;
}
};