mirror of https://github.com/OpenRCT2/OpenRCT2.git
Load general properties and fix entrance positions
This commit is contained in:
parent
6baa70ced9
commit
2fc8e06a95
|
@ -13,6 +13,7 @@
|
||||||
#include "object/ObjectManager.h"
|
#include "object/ObjectManager.h"
|
||||||
#include "object/ObjectRepository.h"
|
#include "object/ObjectRepository.h"
|
||||||
#include "scenario/Scenario.h"
|
#include "scenario/Scenario.h"
|
||||||
|
#include "world/Entrance.h"
|
||||||
#include "world/Map.h"
|
#include "world/Map.h"
|
||||||
#include "world/Park.h"
|
#include "world/Park.h"
|
||||||
|
|
||||||
|
@ -297,6 +298,7 @@ void ParkFile::Load(const std::string_view& path)
|
||||||
void ParkFile::Import()
|
void ParkFile::Import()
|
||||||
{
|
{
|
||||||
ReadTilesChunk();
|
ReadTilesChunk();
|
||||||
|
ReadGeneralChunk();
|
||||||
}
|
}
|
||||||
|
|
||||||
ParkFile::Header ParkFile::ReadHeader(std::istream& fs)
|
ParkFile::Header ParkFile::ReadHeader(std::istream& fs)
|
||||||
|
@ -358,6 +360,39 @@ std::string ParkFile::ReadString()
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ParkFile::ReadGeneralChunk()
|
||||||
|
{
|
||||||
|
if (SeekChunk(ParkFileChunkType::GENERAL))
|
||||||
|
{
|
||||||
|
gScenarioTicks = ReadValue<uint64_t>();
|
||||||
|
gDateMonthTicks = ReadValue<uint32_t>();
|
||||||
|
gDateMonthsElapsed = ReadValue<uint16_t>();
|
||||||
|
gScenarioSrand0 = ReadValue<uint32_t>();
|
||||||
|
gScenarioSrand1 = ReadValue<uint32_t>();
|
||||||
|
gInitialCash = ReadValue<money32>();
|
||||||
|
gGuestInitialCash = ReadValue<money16>();
|
||||||
|
gGuestInitialHunger = ReadValue<uint8_t>();
|
||||||
|
gGuestInitialThirst = ReadValue<uint8_t>();
|
||||||
|
|
||||||
|
size_t numPeepSpawns = ReadArray();
|
||||||
|
for (size_t i = 0; i < numPeepSpawns; i++)
|
||||||
|
{
|
||||||
|
gPeepSpawns[i].x = ReadValue<uint32_t>();
|
||||||
|
gPeepSpawns[i].y = ReadValue<uint32_t>();
|
||||||
|
gPeepSpawns[i].z = ReadValue<uint32_t>();
|
||||||
|
gPeepSpawns[i].direction = ReadValue<uint8_t>();
|
||||||
|
ReadNextArrayElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
gLandPrice = ReadValue<money16>();
|
||||||
|
gConstructionRightsPrice = ReadValue<money16>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw std::runtime_error("No general chunk found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ParkFile::ReadTilesChunk()
|
void ParkFile::ReadTilesChunk()
|
||||||
{
|
{
|
||||||
if (SeekChunk(ParkFileChunkType::TILES))
|
if (SeekChunk(ParkFileChunkType::TILES))
|
||||||
|
@ -371,6 +406,7 @@ void ParkFile::ReadTilesChunk()
|
||||||
ReadBuffer(gTileElements, numElements * sizeof(TileElement));
|
ReadBuffer(gTileElements, numElements * sizeof(TileElement));
|
||||||
|
|
||||||
map_update_tile_pointers();
|
map_update_tile_pointers();
|
||||||
|
UpdateParkEntranceLocations();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -70,6 +70,7 @@ namespace OpenRCT2
|
||||||
void WriteGeneralChunk();
|
void WriteGeneralChunk();
|
||||||
void WriteTilesChunk();
|
void WriteTilesChunk();
|
||||||
|
|
||||||
|
void ReadGeneralChunk();
|
||||||
void ReadTilesChunk();
|
void ReadTilesChunk();
|
||||||
|
|
||||||
Header ReadHeader(std::istream& fs);
|
Header ReadHeader(std::istream& fs);
|
||||||
|
|
|
@ -214,6 +214,33 @@ void fix_park_entrance_locations(void)
|
||||||
gParkEntrances.end());
|
gParkEntrances.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UpdateParkEntranceLocations()
|
||||||
|
{
|
||||||
|
reset_park_entrance();
|
||||||
|
|
||||||
|
size_t entranceIndex = 0;
|
||||||
|
tile_element_iterator it;
|
||||||
|
tile_element_iterator_begin(&it);
|
||||||
|
while (tile_element_iterator_next(&it))
|
||||||
|
{
|
||||||
|
auto entranceElement = it.element->AsEntrance();
|
||||||
|
if (entranceElement != nullptr && entranceElement->GetEntranceType() == ENTRANCE_TYPE_PARK_ENTRANCE
|
||||||
|
&& entranceElement->GetSequenceIndex() == 0 && !entranceElement->IsGhost())
|
||||||
|
{
|
||||||
|
auto& entrance = gParkEntrances[entranceIndex];
|
||||||
|
entrance.x = it.x * 32;
|
||||||
|
entrance.y = it.y * 32;
|
||||||
|
entrance.z = it.element->base_height * 8;
|
||||||
|
entrance.direction = it.element->GetDirection();
|
||||||
|
entranceIndex++;
|
||||||
|
if (entranceIndex >= MAX_PARK_ENTRANCES)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t EntranceElement::GetStationIndex() const
|
uint8_t EntranceElement::GetStationIndex() const
|
||||||
{
|
{
|
||||||
return StationIndex;
|
return StationIndex;
|
||||||
|
|
|
@ -56,5 +56,6 @@ void maze_entrance_hedge_replacement(const CoordsXYE& entrance);
|
||||||
void maze_entrance_hedge_removal(const CoordsXYE& entrance);
|
void maze_entrance_hedge_removal(const CoordsXYE& entrance);
|
||||||
|
|
||||||
void fix_park_entrance_locations();
|
void fix_park_entrance_locations();
|
||||||
|
void UpdateParkEntranceLocations();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue