Track data (#605)

* Add TrackData as a seperate file

* Add additional flag for unused item

* Fix minor formatting issue and copy issue

* Switch to arrays to further enforce limits

* Add xcode braces
This commit is contained in:
Duncan 2020-09-06 15:57:17 +01:00 committed by GitHub
parent 22725c1a04
commit a7463ff3f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 369 additions and 181 deletions

306
src/openloco/TrackData.cpp Normal file
View File

@ -0,0 +1,306 @@
#include "TrackData.h"
#include <array>
#include <cassert>
namespace openloco::map::TrackData
{
const std::vector<PreviewTrack> trackPiece0 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece1 = {
PreviewTrack{ 0, 0, 0, 0, 0, 9, 0 },
PreviewTrack{ 1, 0, 32, 0, 0, 4, PreviewTrackFlags::diagonal },
PreviewTrack{ 2, -32, 0, 0, 0, 1, PreviewTrackFlags::diagonal },
PreviewTrack{ 3, -32, 32, 0, 0, 6, 0 },
};
const std::vector<PreviewTrack> trackPiece2 = {
PreviewTrack{ 0, 0, 0, 0, 0, 7, 0 },
};
const std::vector<PreviewTrack> trackPiece3 = {
PreviewTrack{ 0, 0, 0, 0, 0, 11, 0 },
};
const std::vector<PreviewTrack> trackPiece4 = {
PreviewTrack{ 0, 0, 0, 0, 0, 7, 0 },
PreviewTrack{ 1, 0, -32, 0, 0, 8, PreviewTrackFlags::diagonal },
PreviewTrack{ 2, -32, 0, 0, 0, 2, 0 },
PreviewTrack{ 3, -32, -32, 0, 0, 7, 0 },
};
const std::vector<PreviewTrack> trackPiece5 = {
PreviewTrack{ 0, 0, 0, 0, 0, 11, 0 },
PreviewTrack{ 1, 0, 32, 0, 0, 4, PreviewTrackFlags::diagonal },
PreviewTrack{ 2, -32, 0, 0, 0, 1, 0 },
PreviewTrack{ 3, -32, 32, 0, 0, 11, 0 },
};
const std::vector<PreviewTrack> trackPiece6 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
PreviewTrack{ 1, -32, 0, 0, 0, 7, 0 },
PreviewTrack{ 2, -32, -32, 0, 0, 13, 0 },
PreviewTrack{ 3, -64, -32, 0, 0, 7, 0 },
PreviewTrack{ 4, -64, -64, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece7 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
PreviewTrack{ 1, -32, 0, 0, 0, 11, 0 },
PreviewTrack{ 2, -32, 32, 0, 0, 14, 0 },
PreviewTrack{ 3, -64, 32, 0, 0, 11, 0 },
PreviewTrack{ 4, -64, 64, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece8 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
PreviewTrack{ 1, -32, 0, 0, 0, 7, 0 },
PreviewTrack{ 2, -32, -32, 0, 0, 8, 0 },
PreviewTrack{ 3, -64, 0, 0, 0, 2, PreviewTrackFlags::diagonal },
PreviewTrack{ 4, -64, -32, 0, 0, 3, 0 },
};
const std::vector<PreviewTrack> trackPiece9 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
PreviewTrack{ 1, -32, 0, 0, 0, 11, 0 },
PreviewTrack{ 2, -32, 32, 0, 0, 4, 0 },
PreviewTrack{ 3, -64, 0, 0, 0, 1, PreviewTrackFlags::diagonal },
PreviewTrack{ 4, -64, 32, 0, 0, 6, 0 },
};
const std::vector<PreviewTrack> trackPiece10 = {
PreviewTrack{ 0, 0, 0, 0, 0, 9, 0 },
PreviewTrack{ 1, -32, 0, 0, 0, 1, 0 },
PreviewTrack{ 2, 0, 32, 0, 0, 4, PreviewTrackFlags::diagonal },
PreviewTrack{ 3, -32, 32, 0, 0, 14, 0 },
PreviewTrack{ 4, -64, 32, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece11 = {
PreviewTrack{ 0, 0, 0, 0, 0, 9, 0 },
PreviewTrack{ 1, 0, 32, 0, 0, 4, 0 },
PreviewTrack{ 2, -32, 0, 0, 0, 1, PreviewTrackFlags::diagonal },
PreviewTrack{ 3, -32, 32, 0, 0, 11, 0 },
PreviewTrack{ 4, -32, 64, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece12 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
PreviewTrack{ 1, -32, 0, 0, 0, 6, 0 },
PreviewTrack{ 2, -32, -32, 0, 0, 9, 0 },
PreviewTrack{ 3, -64, -32, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece13 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
PreviewTrack{ 1, -32, 0, 0, 0, 9, 0 },
PreviewTrack{ 2, -32, 32, 0, 0, 6, 0 },
PreviewTrack{ 3, -64, 32, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece14 = {
PreviewTrack{ 0, 0, 0, 0, 16, 15, PreviewTrackFlags::unk4 },
PreviewTrack{ 1, -32, 0, 0, 16, 207, PreviewTrackFlags::unk4 },
};
const std::vector<PreviewTrack> trackPiece15 = {
PreviewTrack{ 0, 0, 0, -16, 16, 63, PreviewTrackFlags::unk4 },
PreviewTrack{ 1, -32, 0, -16, 16, 15, PreviewTrackFlags::unk4 },
};
const std::vector<PreviewTrack> trackPiece16 = {
PreviewTrack{ 0, 0, 0, 0, 16, 207, PreviewTrackFlags::unk3 | PreviewTrackFlags::unk2 },
};
const std::vector<PreviewTrack> trackPiece17 = {
PreviewTrack{ 0, 0, 0, -16, 16, 63, PreviewTrackFlags::unk1 | PreviewTrackFlags::unk0 },
};
const std::vector<PreviewTrack> trackPiece18 = {
PreviewTrack{ 0, 0, 0, 0, 16, 7, PreviewTrackFlags::unk4 },
PreviewTrack{ 1, 0, -32, 0, 16, 8, PreviewTrackFlags::diagonal | PreviewTrackFlags::unk4 },
PreviewTrack{ 2, -32, 0, 0, 16, 2, PreviewTrackFlags::unk4 },
PreviewTrack{ 3, -32, -32, 0, 16, 103, PreviewTrackFlags::unk4 },
};
const std::vector<PreviewTrack> trackPiece19 = {
PreviewTrack{ 0, 0, 0, 0, 16, 11, PreviewTrackFlags::unk4 },
PreviewTrack{ 1, 0, 32, 0, 16, 4, PreviewTrackFlags::diagonal | PreviewTrackFlags::unk4 },
PreviewTrack{ 2, -32, 0, 0, 16, 1, PreviewTrackFlags::unk4 },
PreviewTrack{ 3, -32, 32, 0, 16, 155, PreviewTrackFlags::unk4 },
};
const std::vector<PreviewTrack> trackPiece20 = {
PreviewTrack{ 0, 0, 0, -16, 16, 55, PreviewTrackFlags::unk4 },
PreviewTrack{ 1, 0, -32, -16, 16, 8, PreviewTrackFlags::diagonal | PreviewTrackFlags::unk4 },
PreviewTrack{ 2, -32, 0, -16, 16, 2, PreviewTrackFlags::unk4 },
PreviewTrack{ 3, -32, -32, -16, 16, 7, PreviewTrackFlags::unk4 },
};
const std::vector<PreviewTrack> trackPiece21 = {
PreviewTrack{ 0, 0, 0, -16, 16, 59, PreviewTrackFlags::unk4 },
PreviewTrack{ 1, 0, 32, -16, 16, 4, PreviewTrackFlags::diagonal | PreviewTrackFlags::unk4 },
PreviewTrack{ 2, -32, 0, -16, 16, 1, PreviewTrackFlags::unk4 },
PreviewTrack{ 3, -32, 32, -16, 16, 11, PreviewTrackFlags::unk4 },
};
const std::vector<PreviewTrack> trackPiece22 = {
PreviewTrack{ 0, 0, 0, 0, 16, 71, PreviewTrackFlags::unk3 | PreviewTrackFlags::unk2 },
PreviewTrack{ 1, 0, -32, 16, 0, 8, PreviewTrackFlags::diagonal | PreviewTrackFlags::unk4 },
PreviewTrack{ 2, -32, 0, 16, 0, 2, PreviewTrackFlags::unk4 },
PreviewTrack{ 3, -32, -32, 16, 16, 103, PreviewTrackFlags::unk2 | PreviewTrackFlags::unk1 },
};
const std::vector<PreviewTrack> trackPiece23 = {
PreviewTrack{ 0, 0, 0, 0, 16, 139, PreviewTrackFlags::unk3 | PreviewTrackFlags::unk2 },
PreviewTrack{ 1, 0, 32, 16, 0, 4, PreviewTrackFlags::diagonal | PreviewTrackFlags::unk4 },
PreviewTrack{ 2, -32, 0, 16, 0, 1, PreviewTrackFlags::unk4 },
PreviewTrack{ 3, -32, 32, 16, 16, 155, PreviewTrackFlags::unk3 | PreviewTrackFlags::unk0 },
};
const std::vector<PreviewTrack> trackPiece24 = {
PreviewTrack{ 0, 0, 0, -16, 16, 55, PreviewTrackFlags::unk1 | PreviewTrackFlags::unk0 },
PreviewTrack{ 1, 0, -32, -16, 0, 8, PreviewTrackFlags::diagonal | PreviewTrackFlags::unk4 },
PreviewTrack{ 2, -32, 0, -16, 0, 2, PreviewTrackFlags::unk4 },
PreviewTrack{ 3, -32, -32, -32, 16, 23, PreviewTrackFlags::unk3 | PreviewTrackFlags::unk0 },
};
const std::vector<PreviewTrack> trackPiece25 = {
PreviewTrack{ 0, 0, 0, -16, 16, 59, PreviewTrackFlags::unk1 | PreviewTrackFlags::unk0 },
PreviewTrack{ 1, 0, 32, -16, 0, 4, PreviewTrackFlags::diagonal | PreviewTrackFlags::unk4 },
PreviewTrack{ 2, -32, 0, -16, 0, 1, PreviewTrackFlags::unk4 },
PreviewTrack{ 3, -32, 32, -32, 16, 43, PreviewTrackFlags::unk2 | PreviewTrackFlags::unk1 },
};
const std::vector<PreviewTrack> trackPiece26 = {
PreviewTrack{ 0, 0, 0, 0, 0, 6, 0 },
};
const std::vector<PreviewTrack> trackPiece27 = {
PreviewTrack{ 0, 0, 0, 0, 0, 9, 0 },
};
const std::vector<PreviewTrack> trackPiece28 = {
PreviewTrack{ 0, 0, 0, 0, 0, 2, 0 },
};
const std::vector<PreviewTrack> trackPiece29 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece30 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece31 = {
PreviewTrack{ 0, 0, 0, 0, 0, 1, 0 },
};
const std::vector<PreviewTrack> trackPiece32 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece33 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece34 = {
PreviewTrack{ 0, 0, 0, 0, 16, 198, PreviewTrackFlags::unk3 | PreviewTrackFlags::unk2 },
};
const std::vector<PreviewTrack> trackPiece35 = {
PreviewTrack{ 0, 0, 0, 0, 16, 201, PreviewTrackFlags::unk3 | PreviewTrackFlags::unk2 },
};
const std::vector<PreviewTrack> trackPiece36 = {
PreviewTrack{ 0, 0, 0, -16, 16, 54, PreviewTrackFlags::unk1 | PreviewTrackFlags::unk0 },
};
const std::vector<PreviewTrack> trackPiece37 = {
PreviewTrack{ 0, 0, 0, -16, 16, 57, PreviewTrackFlags::unk1 | PreviewTrackFlags::unk0 },
};
const std::vector<PreviewTrack> trackPiece38 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece39 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece40 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece41 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> trackPiece42 = {
PreviewTrack{ 0, 0, 0, 0, 0, 3, 0 },
};
const std::vector<PreviewTrack> trackPiece43 = {
PreviewTrack{ 0, 0, 0, 0, 0, 3, 0 },
};
// 0x004F73D8
const std::array<std::vector<PreviewTrack>, 44> trackPieces = { {
trackPiece0,
trackPiece1,
trackPiece2,
trackPiece3,
trackPiece4,
trackPiece5,
trackPiece6,
trackPiece7,
trackPiece8,
trackPiece9,
trackPiece10,
trackPiece11,
trackPiece12,
trackPiece13,
trackPiece14,
trackPiece15,
trackPiece16,
trackPiece17,
trackPiece18,
trackPiece19,
trackPiece20,
trackPiece21,
trackPiece22,
trackPiece23,
trackPiece24,
trackPiece25,
trackPiece26,
trackPiece27,
trackPiece28,
trackPiece29,
trackPiece30,
trackPiece31,
trackPiece32,
trackPiece33,
trackPiece34,
trackPiece35,
trackPiece36,
trackPiece37,
trackPiece38,
trackPiece39,
trackPiece40,
trackPiece41,
trackPiece42,
trackPiece43,
} };
const std::vector<PreviewTrack> roadPiece0 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> roadPiece1 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> roadPiece2 = {
PreviewTrack{ 0, 0, 0, 0, 0, 15, 0 },
};
const std::vector<PreviewTrack> roadPiece3 = {
PreviewTrack{ 0, 0, 0, 0, 0, 7, 0 },
PreviewTrack{ 1, 0, -32, 0, 0, 8, PreviewTrackFlags::diagonal },
PreviewTrack{ 2, -32, 0, 0, 0, 2, 0 },
PreviewTrack{ 3, -32, -32, 0, 0, 7, 0 },
};
const std::vector<PreviewTrack> roadPiece4 = {
PreviewTrack{ 0, 0, 0, 0, 0, 11, 0 },
PreviewTrack{ 1, 0, 32, 0, 0, 4, PreviewTrackFlags::diagonal },
PreviewTrack{ 2, -32, 0, 0, 0, 1, 0 },
PreviewTrack{ 3, -32, 32, 0, 0, 11, 0 },
};
const std::vector<PreviewTrack> roadPiece5 = {
PreviewTrack{ 0, 0, 0, 0, 16, 15, PreviewTrackFlags::unk4 },
PreviewTrack{ 1, -32, 0, 0, 16, 207, PreviewTrackFlags::unk4 },
};
const std::vector<PreviewTrack> roadPiece6 = {
PreviewTrack{ 0, 0, 0, -16, 16, 63, PreviewTrackFlags::unk4 },
PreviewTrack{ 1, -32, 0, -16, 16, 15, PreviewTrackFlags::unk4 },
};
const std::vector<PreviewTrack> roadPiece7 = {
PreviewTrack{ 0, 0, 0, 0, 16, 207, PreviewTrackFlags::unk3 | PreviewTrackFlags::unk2 },
};
const std::vector<PreviewTrack> roadPiece8 = {
PreviewTrack{ 0, 0, 0, -16, 16, 63, PreviewTrackFlags::unk1 | PreviewTrackFlags::unk0 },
};
const std::vector<PreviewTrack> roadPiece9 = {
PreviewTrack{ 0, 0, 0, 0, 0, 3, 0 },
};
// 0x004F6D1C
const std::array<std::vector<PreviewTrack>, 10> roadPieces = { { roadPiece0, roadPiece1, roadPiece2, roadPiece3, roadPiece4, roadPiece5, roadPiece6, roadPiece7, roadPiece8, roadPiece9 } };
const std::vector<PreviewTrack>& getTrackPiece(size_t trackId)
{
assert(trackId < trackPieces.size());
return trackPieces[trackId];
}
const std::vector<PreviewTrack>& getRoadPiece(size_t trackId)
{
assert(trackId < roadPieces.size());
return roadPieces[trackId];
}
}

35
src/openloco/TrackData.h Normal file
View File

@ -0,0 +1,35 @@
#pragma once
#include "types.hpp"
#include <vector>
namespace openloco::map::TrackData
{
#pragma pack(push, 1)
struct PreviewTrack
{
uint8_t index; // 0x00
int16_t x; // 0x01
int16_t y; // 0x03
int16_t z; // 0x05
uint8_t var_07;
uint8_t var_08;
uint8_t flags; // 0x09
};
#pragma pack(pop)
namespace PreviewTrackFlags
{
constexpr uint8_t unk0 = 1 << 0;
constexpr uint8_t unk1 = 1 << 1;
constexpr uint8_t unk2 = 1 << 2;
constexpr uint8_t unk3 = 1 << 3;
constexpr uint8_t unk4 = 1 << 4;
constexpr uint8_t unused = 1 << 6; // Not set on any track piece
constexpr uint8_t diagonal = 1 << 7;
}
const std::vector<PreviewTrack>& getTrackPiece(size_t trackId);
const std::vector<PreviewTrack>& getRoadPiece(size_t trackId);
}

View File

@ -69,6 +69,7 @@
<ClCompile Include="Title.cpp" />
<ClCompile Include="town.cpp" />
<ClCompile Include="townmgr.cpp" />
<ClCompile Include="TrackData.cpp" />
<ClCompile Include="tutorial.cpp" />
<ClCompile Include="ui.cpp" />
<ClCompile Include="ui\dropdown.cpp" />
@ -222,6 +223,7 @@
<ClInclude Include="Title.h" />
<ClInclude Include="town.h" />
<ClInclude Include="townmgr.h" />
<ClInclude Include="TrackData.h" />
<ClInclude Include="tutorial.h" />
<ClInclude Include="types.hpp" />
<ClInclude Include="ui.h" />
@ -286,4 +288,4 @@
<_NuGetTargetFallbackMoniker>$(_NuGetTargetFallbackMoniker);native,Version=v0.0</_NuGetTargetFallbackMoniker>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>
</Project>

View File

@ -11,24 +11,6 @@ using namespace openloco::map::tilemgr;
namespace openloco::ui::windows::construction
{
#pragma pack(push, 1)
struct previewTrack
{
uint8_t index; // 0x00
int16_t x; // 0x01
int16_t y; // 0x03
int16_t z; // 0x05
uint8_t var_07;
uint8_t var_08;
uint8_t flags; // 0x09
};
#pragma pack(pop)
enum previewTrackFlags
{
diagonal = 1 << 7,
};
static loco_global<uint8_t[31], 0x005045FA> _byte_5045FA;
static loco_global<uint8_t, 0x00522095> _byte_522095;
static loco_global<uint8_t, 0x00522096> _byte_522096;

View File

@ -1,3 +1,4 @@
#include "../../TrackData.h"
#include "../../audio/audio.h"
#include "../../companymgr.h"
#include "../../graphics/image_ids.h"
@ -28,124 +29,6 @@ namespace openloco::ui::windows::construction::construction
static loco_global<int32_t, 0x00E3F0B8> gCurrentRotation;
static loco_global<previewTrack[1], 0x004F6D44> _unk_4F6D44;
static loco_global<previewTrack[1], 0x004F6D4F> _unk_4F6D4F;
static loco_global<previewTrack[1], 0x004F6D5A> _unk_4F6D5A;
static loco_global<previewTrack[4], 0x004F6D65> _unk_4F6D65;
static loco_global<previewTrack[4], 0x004F6D8E> _unk_4F6D8E;
static loco_global<previewTrack[2], 0x004F6DB7> _unk_4F6DB7;
static loco_global<previewTrack[2], 0x004F6DCC> _unk_4F6DCC;
static loco_global<previewTrack[1], 0x004F6DE1> _unk_4F6DE1;
static loco_global<previewTrack[1], 0x004F6DEC> _unk_4F6DEC;
static loco_global<previewTrack[1], 0x004F6DF7> _unk_4F6DF7;
// 0x004F6D1C
const previewTrack* roadPieces[] = {
_unk_4F6D44,
_unk_4F6D4F,
_unk_4F6D5A,
_unk_4F6D65,
_unk_4F6D8E,
_unk_4F6DB7,
_unk_4F6DCC,
_unk_4F6DE1,
_unk_4F6DEC,
_unk_4F6DF7,
};
static loco_global<previewTrack[1], 0x004F7488> _unk_4F7488;
static loco_global<previewTrack[4], 0x004F7493> _unk_4F7493;
static loco_global<previewTrack[1], 0x004F74BC> _unk_4F74BC;
static loco_global<previewTrack[1], 0x004F74C7> _unk_4F74C7;
static loco_global<previewTrack[4], 0x004F74D2> _unk_4F74D2;
static loco_global<previewTrack[4], 0x004F74FB> _unk_4F74FB;
static loco_global<previewTrack[5], 0x004F7524> _unk_4F7524;
static loco_global<previewTrack[5], 0x004F7557> _unk_4F7557;
static loco_global<previewTrack[5], 0x004F758A> _unk_4F758A;
static loco_global<previewTrack[5], 0x004F75BD> _unk_4F75BD;
static loco_global<previewTrack[5], 0x004F75F0> _unk_4F75F0;
static loco_global<previewTrack[5], 0x004F7623> _unk_4F7623;
static loco_global<previewTrack[4], 0x004F7656> _unk_4F7656;
static loco_global<previewTrack[4], 0x004F767F> _unk_4F767F;
static loco_global<previewTrack[2], 0x004F76A8> _unk_4F76A8;
static loco_global<previewTrack[2], 0x004F76BD> _unk_4F76BD;
static loco_global<previewTrack[1], 0x004F76D2> _unk_4F76D2;
static loco_global<previewTrack[1], 0x004F76DD> _unk_4F76DD;
static loco_global<previewTrack[4], 0x004F76E8> _unk_4F76E8;
static loco_global<previewTrack[4], 0x004F7711> _unk_4F7711;
static loco_global<previewTrack[4], 0x004F773A> _unk_4F773A;
static loco_global<previewTrack[4], 0x004F7763> _unk_4F7763;
static loco_global<previewTrack[4], 0x004F778C> _unk_4F778C;
static loco_global<previewTrack[4], 0x004F77B5> _unk_4F77B5;
static loco_global<previewTrack[4], 0x004F77DE> _unk_4F77DE;
static loco_global<previewTrack[4], 0x004F7807> _unk_4F7807;
static loco_global<previewTrack[1], 0x004F7830> _unk_4F7830;
static loco_global<previewTrack[1], 0x004F783B> _unk_4F783B;
static loco_global<previewTrack[1], 0x004F7846> _unk_4F7846;
static loco_global<previewTrack[1], 0x004F7851> _unk_4F7851;
static loco_global<previewTrack[1], 0x004F785C> _unk_4F785C;
static loco_global<previewTrack[1], 0x004F7867> _unk_4F7867;
static loco_global<previewTrack[1], 0x004F7872> _unk_4F7872;
static loco_global<previewTrack[1], 0x004F787D> _unk_4F787D;
static loco_global<previewTrack[1], 0x004F7888> _unk_4F7888;
static loco_global<previewTrack[1], 0x004F7893> _unk_4F7893;
static loco_global<previewTrack[1], 0x004F789E> _unk_4F789E;
static loco_global<previewTrack[1], 0x004F78A9> _unk_4F78A9;
static loco_global<previewTrack[1], 0x004F78B4> _unk_4F78B4;
static loco_global<previewTrack[1], 0x004F78BF> _unk_4F78BF;
static loco_global<previewTrack[1], 0x004F78CA> _unk_4F78CA;
static loco_global<previewTrack[1], 0x004F78D5> _unk_4F78D5;
static loco_global<previewTrack[1], 0x004F78E0> _unk_4F78E0;
static loco_global<previewTrack[1], 0x004F78EB> _unk_4F78EB;
// 0x004F73D8
const previewTrack* trackPieces[] = {
_unk_4F7488,
_unk_4F7493,
_unk_4F74BC,
_unk_4F74C7,
_unk_4F74D2,
_unk_4F74FB,
_unk_4F7524,
_unk_4F7557,
_unk_4F758A,
_unk_4F75BD,
_unk_4F75F0,
_unk_4F7623,
_unk_4F7656,
_unk_4F767F,
_unk_4F76A8,
_unk_4F76BD,
_unk_4F76D2,
_unk_4F76DD,
_unk_4F76E8,
_unk_4F7711,
_unk_4F773A,
_unk_4F7763,
_unk_4F778C,
_unk_4F77B5,
_unk_4F77DE,
_unk_4F7807,
_unk_4F7830,
_unk_4F783B,
_unk_4F7846,
_unk_4F7851,
_unk_4F785C,
_unk_4F7867,
_unk_4F7872,
_unk_4F787D,
_unk_4F7888,
_unk_4F7893,
_unk_4F789E,
_unk_4F78A9,
_unk_4F78B4,
_unk_4F78BF,
_unk_4F78CA,
_unk_4F78D5,
_unk_4F78E0,
_unk_4F78EB,
};
namespace TrackPiece
{
enum
@ -410,20 +293,18 @@ namespace openloco::ui::windows::construction::construction
roadId = road->id;
}
auto roadPiece = roadPieces[roadId];
auto i = 0;
const auto& roadPiece = openloco::map::TrackData::getRoadPiece(roadId);
auto posId = 0;
rotation &= 3;
while (roadPiece[i].index != 0xFF)
for (const auto& roadPart : roadPiece)
{
if (roadPiece[i].flags & previewTrackFlags::diagonal)
if (roadPart.flags & openloco::map::TrackData::PreviewTrackFlags::diagonal)
{
i++;
continue;
}
map_pos pos = { roadPiece[i].x, roadPiece[i].y };
map_pos pos = { roadPart.x, roadPart.y };
pos = rotate2dCoordinate(pos, rotation);
@ -431,7 +312,6 @@ namespace openloco::ui::windows::construction::construction
pos.y += y;
_mapSelectedTiles[posId] = pos;
posId++;
i++;
}
_mapSelectedTiles[posId].x = -1;
@ -607,19 +487,17 @@ namespace openloco::ui::windows::construction::construction
trackId = track->id;
}
auto trackPiece = trackPieces[trackId];
auto i = 0;
const auto& trackPiece = openloco::map::TrackData::getTrackPiece(trackId);
auto posId = 0;
rotation &= 3;
while (trackPiece[i].index != 0xFF)
for (const auto& trackPart : trackPiece)
{
if (trackPiece[i].flags & previewTrackFlags::diagonal)
if (trackPart.flags & openloco::map::TrackData::PreviewTrackFlags::diagonal)
{
i++;
continue;
}
map_pos pos = { trackPiece[i].x, trackPiece[i].y };
map_pos pos = { trackPart.x, trackPart.y };
pos = rotate2dCoordinate(pos, rotation);
@ -627,7 +505,6 @@ namespace openloco::ui::windows::construction::construction
pos.y += y;
_mapSelectedTiles[posId] = pos;
posId++;
i++;
}
_mapSelectedTiles[posId].x = -1;
@ -1820,15 +1697,13 @@ namespace openloco::ui::windows::construction::construction
auto maxRetries = 0;
if (input::hasKeyModifier(input::key_modifier::shift) || _byte_113605D != 1)
{
auto roadPiece = roadPieces[_byte_1136065];
i = 0;
const auto& roadPiece = openloco::map::TrackData::getRoadPiece(_byte_1136065);
auto maxRoadPieceHeight = 0;
while (roadPiece[i].index != 0xFF)
for (const auto& roadPart : roadPiece)
{
if (maxRoadPieceHeight > roadPiece[i].z)
maxRoadPieceHeight = roadPiece[i].z;
i++;
if (maxRoadPieceHeight > roadPart.z)
maxRoadPieceHeight = roadPart.z;
}
roadHeight -= maxRoadPieceHeight;
@ -1925,15 +1800,13 @@ namespace openloco::ui::windows::construction::construction
auto maxRetries = 0;
if (input::hasKeyModifier(input::key_modifier::shift) || _byte_113605D != 1)
{
auto trackPiece = trackPieces[_byte_1136065];
i = 0;
const auto& trackPiece = openloco::map::TrackData::getTrackPiece(_byte_1136065);
auto maxTrackPieceHeight = 0;
while (trackPiece[i].index != 0xFF)
for (const auto& trackPart : trackPiece)
{
if (maxTrackPieceHeight > trackPiece[i].z)
maxTrackPieceHeight = trackPiece[i].z;
i++;
if (maxTrackPieceHeight > trackPart.z)
maxTrackPieceHeight = trackPart.z;
}
trackHeight -= maxTrackPieceHeight;
@ -2139,17 +2012,12 @@ namespace openloco::ui::windows::construction::construction
if (gfx::clipDrawpixelinfo(&clipped, dpi, x, y, width, height))
{
auto roadPiece = roadPieces[_lastSelectedTrackPieceId];
auto i = 0;
const auto& roadPiece = openloco::map::TrackData::getRoadPiece(_lastSelectedTrackPieceId);
const auto& lastRoadPart = roadPiece.back();
while (roadPiece[i + 1].index != 0xFF)
{
i++;
}
map_pos3 pos3D = { lastRoadPart.x, lastRoadPart.y, lastRoadPart.z };
map_pos3 pos3D = { roadPiece[i].x, roadPiece[i].y, roadPiece[i].z };
if (roadPiece[i].flags & (1 << 6))
if (lastRoadPart.flags & openloco::map::TrackData::PreviewTrackFlags::unused)
{
pos3D.x = 0;
pos3D.y = 0;
@ -2194,17 +2062,12 @@ namespace openloco::ui::windows::construction::construction
if (gfx::clipDrawpixelinfo(&clipped, dpi, x, y, width, height))
{
auto trackPiece = trackPieces[_lastSelectedTrackPieceId];
auto i = 0;
const auto& trackPiece = openloco::map::TrackData::getTrackPiece(_lastSelectedTrackPieceId);
const auto& lastTrackPart = trackPiece.back();
while (trackPiece[i + 1].index != 0xFF)
{
i++;
}
map_pos3 pos3D = { lastTrackPart.x, lastTrackPart.y, lastTrackPart.z };
map_pos3 pos3D = { trackPiece[i].x, trackPiece[i].y, trackPiece[i].z };
if (trackPiece[i].flags & (1 << 6))
if (lastTrackPart.flags & openloco::map::TrackData::PreviewTrackFlags::unused)
{
pos3D.x = 0;
pos3D.y = 0;