mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge pull request #16156 from Iikorni/bounding-box
Refactor ride-specific bounding boxes into uniform BoundBox structs
This commit is contained in:
commit
88a13f7b70
|
@ -315,6 +315,7 @@
|
||||||
<ClInclude Include="object\WallObject.h" />
|
<ClInclude Include="object\WallObject.h" />
|
||||||
<ClInclude Include="object\WaterObject.h" />
|
<ClInclude Include="object\WaterObject.h" />
|
||||||
<ClInclude Include="OpenRCT2.h" />
|
<ClInclude Include="OpenRCT2.h" />
|
||||||
|
<ClInclude Include="paint\Boundbox.h" />
|
||||||
<ClInclude Include="paint\Paint.Entity.h" />
|
<ClInclude Include="paint\Paint.Entity.h" />
|
||||||
<ClInclude Include="paint\Paint.h" />
|
<ClInclude Include="paint\Paint.h" />
|
||||||
<ClInclude Include="paint\Painter.h" />
|
<ClInclude Include="paint\Painter.h" />
|
||||||
|
@ -1001,4 +1002,4 @@
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
* Copyright (c) 2014-2022 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 "../world/Location.hpp"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
struct BoundBoxXY
|
||||||
|
{
|
||||||
|
CoordsXY length{};
|
||||||
|
CoordsXY offset{};
|
||||||
|
|
||||||
|
constexpr BoundBoxXY() = default;
|
||||||
|
constexpr BoundBoxXY(CoordsXY _length, CoordsXY _offset)
|
||||||
|
: length(_length)
|
||||||
|
, offset(_offset)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BoundBoxXYZ
|
||||||
|
{
|
||||||
|
CoordsXYZ length{};
|
||||||
|
CoordsXYZ offset{};
|
||||||
|
|
||||||
|
constexpr BoundBoxXYZ() = default;
|
||||||
|
constexpr BoundBoxXYZ(CoordsXYZ _length, CoordsXYZ _offset)
|
||||||
|
: length(_length)
|
||||||
|
, offset(_offset)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
|
@ -14,6 +14,7 @@
|
||||||
#include "../sprites.h"
|
#include "../sprites.h"
|
||||||
#include "../util/Math.hpp"
|
#include "../util/Math.hpp"
|
||||||
#include "../world/Surface.h"
|
#include "../world/Surface.h"
|
||||||
|
#include "Boundbox.h"
|
||||||
#include "Paint.h"
|
#include "Paint.h"
|
||||||
#include "tile_element/Paint.TileElement.h"
|
#include "tile_element/Paint.TileElement.h"
|
||||||
|
|
||||||
|
@ -306,13 +307,9 @@ static constexpr const uint16_t* WoodenCurveSupportImageIds[12] = {
|
||||||
nullptr,
|
nullptr,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct unk_supports_desc_bound_box {
|
|
||||||
CoordsXYZ offset;
|
|
||||||
CoordsXYZ length;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct unk_supports_desc {
|
struct unk_supports_desc {
|
||||||
unk_supports_desc_bound_box bounding_box;
|
BoundBoxXYZ bounding_box;
|
||||||
uint8_t var_6;
|
uint8_t var_6;
|
||||||
uint8_t var_7;
|
uint8_t var_7;
|
||||||
};
|
};
|
||||||
|
@ -595,7 +592,7 @@ bool wooden_a_supports_paint_setup(
|
||||||
{
|
{
|
||||||
auto imageId = imageTemplate.WithIndex(WoodenCurveSupportImageIds[supportType][special]);
|
auto imageId = imageTemplate.WithIndex(WoodenCurveSupportImageIds[supportType][special]);
|
||||||
|
|
||||||
unk_supports_desc_bound_box bBox = byte_97B23C[special].bounding_box;
|
const BoundBoxXYZ& bBox = byte_97B23C[special].bounding_box;
|
||||||
|
|
||||||
if (byte_97B23C[special].var_6 == 0 || session.WoodenSupportsPrependTo == nullptr)
|
if (byte_97B23C[special].var_6 == 0 || session.WoodenSupportsPrependTo == nullptr)
|
||||||
{
|
{
|
||||||
|
@ -768,7 +765,7 @@ bool wooden_b_supports_paint_setup(
|
||||||
{ // byte_97B23C[special].var_7 is never 0
|
{ // byte_97B23C[special].var_7 is never 0
|
||||||
auto imageId = imageTemplate.WithIndex(WoodenCurveSupportImageIds[supportType][specialIndex]);
|
auto imageId = imageTemplate.WithIndex(WoodenCurveSupportImageIds[supportType][specialIndex]);
|
||||||
|
|
||||||
const unk_supports_desc_bound_box& boundBox = supportsDesc.bounding_box;
|
const BoundBoxXYZ& boundBox = supportsDesc.bounding_box;
|
||||||
|
|
||||||
if (supportsDesc.var_6 == 0 || session.WoodenSupportsPrependTo == nullptr)
|
if (supportsDesc.var_6 == 0 || session.WoodenSupportsPrependTo == nullptr)
|
||||||
{
|
{
|
||||||
|
@ -1303,7 +1300,7 @@ bool path_a_supports_paint_setup(
|
||||||
ImageIndex imageIndex = pathPaintInfo.BridgeImageId + 55 + specialIndex;
|
ImageIndex imageIndex = pathPaintInfo.BridgeImageId + 55 + specialIndex;
|
||||||
|
|
||||||
const unk_supports_desc& supportsDesc = byte_98D8D4[specialIndex];
|
const unk_supports_desc& supportsDesc = byte_98D8D4[specialIndex];
|
||||||
const unk_supports_desc_bound_box& boundBox = supportsDesc.bounding_box;
|
const BoundBoxXYZ& boundBox = supportsDesc.bounding_box;
|
||||||
|
|
||||||
if (supportsDesc.var_6 == 0 || session.WoodenSupportsPrependTo == nullptr)
|
if (supportsDesc.var_6 == 0 || session.WoodenSupportsPrependTo == nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include "../../entity/EntityRegistry.h"
|
#include "../../entity/EntityRegistry.h"
|
||||||
#include "../../interface/Viewport.h"
|
#include "../../interface/Viewport.h"
|
||||||
|
#include "../../paint/Boundbox.h"
|
||||||
#include "../../paint/Paint.h"
|
#include "../../paint/Paint.h"
|
||||||
#include "../../paint/Supports.h"
|
#include "../../paint/Supports.h"
|
||||||
#include "../../ride/Vehicle.h"
|
#include "../../ride/Vehicle.h"
|
||||||
|
@ -17,13 +18,7 @@
|
||||||
#include "../Track.h"
|
#include "../Track.h"
|
||||||
#include "../TrackPaint.h"
|
#include "../TrackPaint.h"
|
||||||
|
|
||||||
struct rct_crooked_house_bound_box
|
static constexpr const BoundBoxXY CrookedHouseData[] = {
|
||||||
{
|
|
||||||
CoordsXY offset;
|
|
||||||
CoordsXY length;
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr const rct_crooked_house_bound_box crooked_house_data[] = {
|
|
||||||
{
|
{
|
||||||
{ 6, 0 },
|
{ 6, 0 },
|
||||||
{ 42, 24 },
|
{ 42, 24 },
|
||||||
|
@ -75,7 +70,7 @@ static void PaintCrookedHouseStructure(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& boundBox = crooked_house_data[segment];
|
const auto& boundBox = CrookedHouseData[segment];
|
||||||
auto imageTemplate = ImageId::FromUInt32(session.TrackColours[SCHEME_MISC]);
|
auto imageTemplate = ImageId::FromUInt32(session.TrackColours[SCHEME_MISC]);
|
||||||
auto imageIndex = rideEntry->Cars[0].base_image_id + direction;
|
auto imageIndex = rideEntry->Cars[0].base_image_id + direction;
|
||||||
PaintAddImageAsParent(
|
PaintAddImageAsParent(
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "../../entity/EntityRegistry.h"
|
#include "../../entity/EntityRegistry.h"
|
||||||
#include "../../entity/Guest.h"
|
#include "../../entity/Guest.h"
|
||||||
#include "../../interface/Viewport.h"
|
#include "../../interface/Viewport.h"
|
||||||
|
#include "../../paint/Boundbox.h"
|
||||||
#include "../../paint/Paint.h"
|
#include "../../paint/Paint.h"
|
||||||
#include "../../paint/Supports.h"
|
#include "../../paint/Supports.h"
|
||||||
#include "../Ride.h"
|
#include "../Ride.h"
|
||||||
|
@ -32,18 +33,12 @@ static constexpr const uint8_t edges_1x4_nw_se[] = {
|
||||||
EDGE_NE | EDGE_SW | EDGE_SE,
|
EDGE_NE | EDGE_SW | EDGE_SE,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ferris_wheel_bound_box
|
|
||||||
{
|
|
||||||
CoordsXY length;
|
|
||||||
CoordsXY offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** rct2: 0x008A8CA8 */
|
/** rct2: 0x008A8CA8 */
|
||||||
static constexpr ferris_wheel_bound_box FerrisWheelData[] = {
|
static constexpr BoundBoxXY FerrisWheelData[] = {
|
||||||
{ { 31, 16 }, { 1, 8 } },
|
{ { 1, 8 }, { 31, 16 } },
|
||||||
{ { 16, 31 }, { 8, 1 } },
|
{ { 8, 1 }, { 16, 31 } },
|
||||||
{ { 31, 16 }, { 1, 8 } },
|
{ { 1, 8 }, { 31, 16 } },
|
||||||
{ { 16, 31 }, { 8, 1 } },
|
{ { 8, 1 }, { 16, 31 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void PaintFerrisWheelRiders(
|
static void PaintFerrisWheelRiders(
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include "../../entity/EntityRegistry.h"
|
#include "../../entity/EntityRegistry.h"
|
||||||
#include "../../interface/Viewport.h"
|
#include "../../interface/Viewport.h"
|
||||||
|
#include "../../paint/Boundbox.h"
|
||||||
#include "../../paint/Paint.h"
|
#include "../../paint/Paint.h"
|
||||||
#include "../../paint/Supports.h"
|
#include "../../paint/Supports.h"
|
||||||
#include "../Ride.h"
|
#include "../Ride.h"
|
||||||
|
@ -17,13 +18,7 @@
|
||||||
#include "../TrackPaint.h"
|
#include "../TrackPaint.h"
|
||||||
#include "../Vehicle.h"
|
#include "../Vehicle.h"
|
||||||
|
|
||||||
struct haunted_house_bound_box
|
static constexpr BoundBoxXY HauntedHouseData[] = {
|
||||||
{
|
|
||||||
CoordsXY offset;
|
|
||||||
CoordsXY length;
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr haunted_house_bound_box haunted_house_data[] = {
|
|
||||||
{ { 6, 0 }, { 42, 24 } }, { { 0, 0 }, { 0, 0 } }, { { -16, -16 }, { 32, 32 } },
|
{ { 6, 0 }, { 42, 24 } }, { { 0, 0 }, { 0, 0 } }, { { -16, -16 }, { 32, 32 } },
|
||||||
{ { 0, 0 }, { 0, 0 } }, { { 0, 6 }, { 24, 42 } }, { { 0, 0 }, { 0, 0 } },
|
{ { 0, 0 }, { 0, 0 } }, { { 0, 6 }, { 24, 42 } }, { { 0, 0 }, { 0, 0 } },
|
||||||
};
|
};
|
||||||
|
@ -45,7 +40,7 @@ static void PaintHauntedHouseStructure(
|
||||||
frameNum = vehicle->Pitch;
|
frameNum = vehicle->Pitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& boundBox = haunted_house_data[part];
|
const auto& boundBox = HauntedHouseData[part];
|
||||||
auto imageTemplate = ImageId::FromUInt32(session.TrackColours[SCHEME_MISC]);
|
auto imageTemplate = ImageId::FromUInt32(session.TrackColours[SCHEME_MISC]);
|
||||||
auto baseImageIndex = rideEntry->Cars[0].base_image_id;
|
auto baseImageIndex = rideEntry->Cars[0].base_image_id;
|
||||||
auto imageIndex = baseImageIndex + direction;
|
auto imageIndex = baseImageIndex + direction;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "../../entity/EntityRegistry.h"
|
#include "../../entity/EntityRegistry.h"
|
||||||
#include "../../interface/Viewport.h"
|
#include "../../interface/Viewport.h"
|
||||||
#include "../../object/StationObject.h"
|
#include "../../object/StationObject.h"
|
||||||
|
#include "../../paint/Boundbox.h"
|
||||||
#include "../../paint/Paint.h"
|
#include "../../paint/Paint.h"
|
||||||
#include "../../paint/Supports.h"
|
#include "../../paint/Supports.h"
|
||||||
#include "../Ride.h"
|
#include "../Ride.h"
|
||||||
|
@ -36,14 +37,6 @@ enum
|
||||||
SPR_MAGIC_CARPET_PENDULUM_SW = 22102,
|
SPR_MAGIC_CARPET_PENDULUM_SW = 22102,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bound_box
|
|
||||||
{
|
|
||||||
int16_t x;
|
|
||||||
int16_t y;
|
|
||||||
int16_t width;
|
|
||||||
int16_t height;
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr const int16_t MagicCarpetOscillationZ[] = {
|
static constexpr const int16_t MagicCarpetOscillationZ[] = {
|
||||||
-2, -1, 1, 5, 10, 16, 23, 30, 37, 45, 52, 59, 65, 70, 74, 76, 77, 76, 74, 70, 65, 59, 52, 45, 37, 30, 23, 16, 10, 5, 1, -1,
|
-2, -1, 1, 5, 10, 16, 23, 30, 37, 45, 52, 59, 65, 70, 74, 76, 77, 76, 74, 70, 65, 59, 52, 45, 37, 30, 23, 16, 10, 5, 1, -1,
|
||||||
};
|
};
|
||||||
|
@ -53,11 +46,11 @@ static constexpr const int8_t MagicCarpetOscillationXY[] = {
|
||||||
0, -5, -11, -17, -22, -26, -29, -30, -31, -30, -29, -26, -22, -17, -11, -5,
|
0, -5, -11, -17, -22, -26, -29, -30, -31, -30, -29, -26, -22, -17, -11, -5,
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr const bound_box MagicCarpetBounds[] = {
|
static constexpr const BoundBoxXY MagicCarpetBounds[] = {
|
||||||
{ 0, 8, 32, 16 },
|
{ { 0, 8 }, { 32, 16 } },
|
||||||
{ 8, 0, 16, 32 },
|
{ { 8, 0 }, { 16, 32 } },
|
||||||
{ 0, 8, 32, 16 },
|
{ { 0, 8 }, { 32, 16 } },
|
||||||
{ 8, 0, 16, 32 },
|
{ { 8, 0 }, { 16, 32 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
static ImageIndex GetMagicCarpetFrameImage(Plane plane, Direction direction)
|
static ImageIndex GetMagicCarpetFrameImage(Plane plane, Direction direction)
|
||||||
|
@ -202,16 +195,16 @@ static void PaintMagicCarpetStructure(
|
||||||
session.CurrentlyDrawnEntity = vehicle;
|
session.CurrentlyDrawnEntity = vehicle;
|
||||||
}
|
}
|
||||||
|
|
||||||
bound_box bb = MagicCarpetBounds[direction];
|
BoundBoxXY bb = MagicCarpetBounds[direction];
|
||||||
CoordsXYZ offset, bbOffset, bbSize;
|
CoordsXYZ offset, bbOffset, bbSize;
|
||||||
offset.x = (direction & 1) ? 0 : axisOffset;
|
offset.x = (direction & 1) ? 0 : axisOffset;
|
||||||
offset.y = (direction & 1) ? axisOffset : 0;
|
offset.y = (direction & 1) ? axisOffset : 0;
|
||||||
offset.z = height + 7;
|
offset.z = height + 7;
|
||||||
bbOffset.x = bb.x;
|
bbOffset.x = bb.offset.x;
|
||||||
bbOffset.y = bb.y;
|
bbOffset.y = bb.offset.y;
|
||||||
bbOffset.z = height + 7;
|
bbOffset.z = height + 7;
|
||||||
bbSize.x = bb.width;
|
bbSize.x = bb.length.x;
|
||||||
bbSize.y = bb.height;
|
bbSize.y = bb.length.y;
|
||||||
bbSize.z = 127;
|
bbSize.z = 127;
|
||||||
|
|
||||||
PaintMagicCarpetFrame(session, Plane::Back, direction, offset, bbOffset, bbSize);
|
PaintMagicCarpetFrame(session, Plane::Back, direction, offset, bbOffset, bbSize);
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "../../entity/EntityRegistry.h"
|
#include "../../entity/EntityRegistry.h"
|
||||||
#include "../../interface/Viewport.h"
|
#include "../../interface/Viewport.h"
|
||||||
#include "../../object/StationObject.h"
|
#include "../../object/StationObject.h"
|
||||||
|
#include "../../paint/Boundbox.h"
|
||||||
#include "../../paint/Paint.h"
|
#include "../../paint/Paint.h"
|
||||||
#include "../../paint/Supports.h"
|
#include "../../paint/Supports.h"
|
||||||
#include "../Ride.h"
|
#include "../Ride.h"
|
||||||
|
@ -34,20 +35,12 @@ static constexpr const uint32_t SwingingInverterShipAnimatingBaseSpriteOffset[]
|
||||||
33,
|
33,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct swinging_inverter_ship_bound_box
|
|
||||||
{
|
|
||||||
int16_t length_x;
|
|
||||||
int16_t length_y;
|
|
||||||
int16_t offset_x;
|
|
||||||
int16_t offset_y;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** rct2: 0x01428020 */
|
/** rct2: 0x01428020 */
|
||||||
static constexpr const swinging_inverter_ship_bound_box swinging_inverter_ship_bounds[] = {
|
static constexpr const BoundBoxXY SwingingInverterShipBounds[] = {
|
||||||
{ 32, 16, 0, 8 },
|
{ { 0, 8 }, { 32, 16 } },
|
||||||
{ 16, 32, 8, 0 },
|
{ { 8, 0 }, { 16, 32 } },
|
||||||
{ 32, 16, 0, 8 },
|
{ { 0, 8 }, { 32, 16 } },
|
||||||
{ 16, 32, 8, 0 },
|
{ { 8, 0 }, { 16, 32 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -72,10 +65,10 @@ static void PaintSwingingInverterShipStructure(
|
||||||
if (rideEntry == nullptr)
|
if (rideEntry == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto& boundBox = swinging_inverter_ship_bounds[direction];
|
const auto& boundBox = SwingingInverterShipBounds[direction];
|
||||||
CoordsXYZ offset((direction & 1) ? 0 : axisOffset, (direction & 1) ? axisOffset : 0, height);
|
CoordsXYZ offset((direction & 1) ? 0 : axisOffset, (direction & 1) ? axisOffset : 0, height);
|
||||||
CoordsXYZ bbLength(boundBox.length_x, boundBox.length_y, 127);
|
CoordsXYZ bbLength(boundBox.length.x, boundBox.length.y, 127);
|
||||||
CoordsXYZ bbOffset(boundBox.offset_x, boundBox.offset_y, height);
|
CoordsXYZ bbOffset(boundBox.offset.x, boundBox.offset.y, height);
|
||||||
|
|
||||||
Vehicle* vehicle = nullptr;
|
Vehicle* vehicle = nullptr;
|
||||||
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)
|
if (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK)
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "../../entity/EntityRegistry.h"
|
#include "../../entity/EntityRegistry.h"
|
||||||
#include "../../interface/Viewport.h"
|
#include "../../interface/Viewport.h"
|
||||||
#include "../../object/StationObject.h"
|
#include "../../object/StationObject.h"
|
||||||
|
#include "../../paint/Boundbox.h"
|
||||||
#include "../../paint/Paint.h"
|
#include "../../paint/Paint.h"
|
||||||
#include "../../paint/Supports.h"
|
#include "../../paint/Supports.h"
|
||||||
#include "../Ride.h"
|
#include "../Ride.h"
|
||||||
|
@ -25,15 +26,6 @@ static constexpr const uint8_t track_map_1x5[][5] = {
|
||||||
{ 0, 4, 3, 2, 1 },
|
{ 0, 4, 3, 2, 1 },
|
||||||
{ 0, 1, 2, 3, 4 },
|
{ 0, 1, 2, 3, 4 },
|
||||||
};
|
};
|
||||||
|
|
||||||
struct swinging_ship_bound_box
|
|
||||||
{
|
|
||||||
int16_t length_x;
|
|
||||||
int16_t length_y;
|
|
||||||
int16_t offset_x;
|
|
||||||
int16_t offset_y;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** rct2: 0x008A83B0 */
|
/** rct2: 0x008A83B0 */
|
||||||
static constexpr const uint32_t SwingingShipBaseSpriteOffset[] = {
|
static constexpr const uint32_t SwingingShipBaseSpriteOffset[] = {
|
||||||
0,
|
0,
|
||||||
|
@ -43,11 +35,11 @@ static constexpr const uint32_t SwingingShipBaseSpriteOffset[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/** rct2: 0x008A83C0 */
|
/** rct2: 0x008A83C0 */
|
||||||
static constexpr const swinging_ship_bound_box SwingingShipData[] = {
|
static constexpr const BoundBoxXY SwingingShipData[] = {
|
||||||
{ 31, 16, 1, 8 },
|
{ { 1, 8 }, { 31, 16 } },
|
||||||
{ 16, 31, 8, 1 },
|
{ { 8, 1 }, { 16, 31 } },
|
||||||
{ 31, 16, 1, 8 },
|
{ { 1, 8 }, { 31, 16 } },
|
||||||
{ 16, 31, 8, 1 },
|
{ { 8, 1 }, { 16, 31 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -108,8 +100,8 @@ static void PaintSwingingShipStructure(
|
||||||
|
|
||||||
const auto& bounds = SwingingShipData[direction];
|
const auto& bounds = SwingingShipData[direction];
|
||||||
CoordsXYZ offset((direction & 1) ? 0 : axisOffset, (direction & 1) ? axisOffset : 0, height + 7);
|
CoordsXYZ offset((direction & 1) ? 0 : axisOffset, (direction & 1) ? axisOffset : 0, height + 7);
|
||||||
CoordsXYZ bbLength(bounds.length_x, bounds.length_y, 80);
|
CoordsXYZ bbLength(bounds.length.x, bounds.length.y, 80);
|
||||||
CoordsXYZ bbOffset(bounds.offset_x, bounds.offset_y, height + 7);
|
CoordsXYZ bbOffset(bounds.offset.x, bounds.offset.y, height + 7);
|
||||||
|
|
||||||
auto baseImageId = rideEntry->Cars[0].base_image_id + SwingingShipBaseSpriteOffset[direction];
|
auto baseImageId = rideEntry->Cars[0].base_image_id + SwingingShipBaseSpriteOffset[direction];
|
||||||
if (vehicle != nullptr)
|
if (vehicle != nullptr)
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "../../common.h"
|
#include "../../common.h"
|
||||||
#include "../../interface/Viewport.h"
|
#include "../../interface/Viewport.h"
|
||||||
#include "../../object/StationObject.h"
|
#include "../../object/StationObject.h"
|
||||||
|
#include "../../paint/Boundbox.h"
|
||||||
#include "../../paint/Paint.h"
|
#include "../../paint/Paint.h"
|
||||||
#include "../../paint/Supports.h"
|
#include "../../paint/Supports.h"
|
||||||
#include "../../world/Map.h"
|
#include "../../world/Map.h"
|
||||||
|
@ -271,57 +272,32 @@ static constexpr const uint32_t ghost_train_track_pieces_right_eight_to_diag[4][
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr const CoordsXY ghost_train_track_pieces_right_eight_to_diag_bounds[4][4] = {
|
static constexpr const BoundBoxXY GhostTrainTrackPiecesRightEightToDiagBoxes[4][4] = {
|
||||||
{
|
{
|
||||||
{ 32, 20 },
|
{ { 0, 6 }, { 32, 20 } },
|
||||||
{ 32, 16 },
|
{ { 0, 16 }, { 32, 16 } },
|
||||||
{ 16, 16 },
|
{ { 0, 0 }, { 16, 16 } },
|
||||||
{ 16, 16 },
|
{ { 16, 0 }, { 16, 16 } },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ 20, 32 },
|
{ { 6, 0 }, { 20, 32 } },
|
||||||
{ 16, 32 },
|
{ { 16, 0 }, { 16, 32 } },
|
||||||
{ 16, 16 },
|
{ { 0, 16 }, { 16, 16 } },
|
||||||
{ 16, 16 },
|
{ { 0, 0 }, { 16, 16 } },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ 32, 20 },
|
|
||||||
{ 34, 16 },
|
|
||||||
{ 28, 28 },
|
|
||||||
{ 16, 18 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{ 20, 32 },
|
|
||||||
{ 16, 32 },
|
|
||||||
{ 16, 16 },
|
|
||||||
{ 16, 16 },
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr const CoordsXY ghost_train_track_pieces_right_eight_to_diag_offset[4][4] = {
|
{ { 0, 6 }, { 32, 20 } },
|
||||||
{
|
{ { 0, 0 }, { 34, 16 } },
|
||||||
{ 0, 6 },
|
{ { 4, 4 }, { 28, 28 } },
|
||||||
{ 0, 16 },
|
{ { 0, 16 }, { 16, 18 } },
|
||||||
{ 0, 0 },
|
|
||||||
{ 16, 0 },
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ 6, 0 },
|
|
||||||
{ 16, 0 },
|
{ { 6, 0 }, { 20, 32 } },
|
||||||
{ 0, 16 },
|
{ { 0, 0 }, { 16, 32 } },
|
||||||
{ 0, 0 },
|
{ { 16, 0 }, { 16, 16 } },
|
||||||
},
|
{ { 16, 16 }, { 16, 16 } },
|
||||||
{
|
|
||||||
{ 0, 6 },
|
|
||||||
{ 0, 0 },
|
|
||||||
{ 4, 4 },
|
|
||||||
{ 0, 16 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{ 6, 0 },
|
|
||||||
{ 0, 0 },
|
|
||||||
{ 16, 0 },
|
|
||||||
{ 16, 16 },
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -352,57 +328,30 @@ static constexpr const uint32_t ghost_train_track_pieces_left_eight_to_diag[4][4
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr const CoordsXY ghost_train_track_pieces_left_eight_to_diag_bounds[4][4] = {
|
static constexpr const BoundBoxXY GhostTrainTrackPiecesLeftEightToDiagBoxes[4][4] = {
|
||||||
{
|
{
|
||||||
{ 32, 20 },
|
{ { 0, 6 }, { 32, 20 } },
|
||||||
{ 32, 16 },
|
{ { 0, 0 }, { 32, 16 } },
|
||||||
{ 16, 16 },
|
{ { 0, 16 }, { 16, 16 } },
|
||||||
{ 16, 16 },
|
{ { 16, 16 }, { 16, 16 } },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ 20, 32 },
|
{ { 6, 0 }, { 20, 32 } },
|
||||||
{ 16, 34 },
|
{ { 0, 0 }, { 16, 34 } },
|
||||||
{ 16, 16 },
|
{ { 16, 16 }, { 16, 16 } },
|
||||||
{ 18, 16 },
|
{ { 16, 0 }, { 18, 16 } },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ 32, 20 },
|
{ { 0, 6 }, { 32, 20 } },
|
||||||
{ 32, 16 },
|
{ { 0, 16 }, { 32, 16 } },
|
||||||
{ 16, 16 },
|
{ { 16, 0 }, { 16, 16 } },
|
||||||
{ 16, 16 },
|
{ { 0, 0 }, { 16, 16 } },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ 20, 32 },
|
{ { 6, 0 }, { 20, 32 } },
|
||||||
{ 16, 32 },
|
{ { 16, 0 }, { 16, 32 } },
|
||||||
{ 16, 16 },
|
{ { 0, 0 }, { 16, 16 } },
|
||||||
{ 16, 16 },
|
{ { 0, 16 }, { 16, 16 } },
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr const CoordsXY ghost_train_track_pieces_left_eight_to_diag_offset[4][4] = {
|
|
||||||
{
|
|
||||||
{ 0, 6 },
|
|
||||||
{ 0, 0 },
|
|
||||||
{ 0, 16 },
|
|
||||||
{ 16, 16 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{ 6, 0 },
|
|
||||||
{ 0, 0 },
|
|
||||||
{ 16, 16 },
|
|
||||||
{ 16, 0 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{ 0, 6 },
|
|
||||||
{ 0, 16 },
|
|
||||||
{ 16, 0 },
|
|
||||||
{ 0, 0 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{ 6, 0 },
|
|
||||||
{ 16, 0 },
|
|
||||||
{ 0, 0 },
|
|
||||||
{ 0, 16 },
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -761,23 +710,16 @@ static void paint_monorail_track_s_bend_left(
|
||||||
trackSequence = 3 - trackSequence;
|
trackSequence = 3 - trackSequence;
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr CoordsXY offsetList[] = {
|
static constexpr BoundBoxXY boxList[] = {
|
||||||
{ 0, 6 },
|
{ { 0, 6 }, { 32, 20 } },
|
||||||
{ 0, 0 },
|
{ { 0, 0 }, { 32, 26 } },
|
||||||
{ 0, 6 },
|
{ { 0, 6 }, { 32, 26 } },
|
||||||
{ 0, 6 },
|
{ { 0, 6 }, { 32, 20 } },
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr CoordsXY boundsList[] = {
|
|
||||||
{ 32, 20 },
|
|
||||||
{ 32, 26 },
|
|
||||||
{ 32, 26 },
|
|
||||||
{ 32, 20 },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t imageId = monorail_track_pieces_s_bend_left[direction & 1][trackSequence] | session.TrackColours[SCHEME_TRACK];
|
uint32_t imageId = monorail_track_pieces_s_bend_left[direction & 1][trackSequence] | session.TrackColours[SCHEME_TRACK];
|
||||||
CoordsXY offset = offsetList[trackSequence];
|
const CoordsXY& offset = boxList[trackSequence].offset;
|
||||||
CoordsXY bounds = boundsList[trackSequence];
|
const CoordsXY& bounds = boxList[trackSequence].length;
|
||||||
if (direction == 0 || direction == 2)
|
if (direction == 0 || direction == 2)
|
||||||
{
|
{
|
||||||
PaintAddImageAsParent(session, imageId, { offset.x, offset.y, height }, { bounds.x, bounds.y, 3 });
|
PaintAddImageAsParent(session, imageId, { offset.x, offset.y, height }, { bounds.x, bounds.y, 3 });
|
||||||
|
@ -865,23 +807,13 @@ static void paint_monorail_track_s_bend_right(
|
||||||
trackSequence = 3 - trackSequence;
|
trackSequence = 3 - trackSequence;
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr CoordsXY offsetList[] = {
|
static constexpr BoundBoxXY boxList[] = {
|
||||||
{ 0, 6 },
|
{ { 0, 6 }, { 32, 20 } }, { { 0, 6 }, { 32, 26 } }, { { 0, 0 }, { 32, 26 } }, { { 0, 6 }, { 32, 20 } }
|
||||||
{ 0, 6 },
|
|
||||||
{ 0, 0 },
|
|
||||||
{ 0, 6 },
|
|
||||||
};
|
|
||||||
|
|
||||||
static constexpr CoordsXY boundsList[] = {
|
|
||||||
{ 32, 20 },
|
|
||||||
{ 32, 26 },
|
|
||||||
{ 32, 26 },
|
|
||||||
{ 32, 20 },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t imageId = monorail_track_pieces_s_bend_right[direction & 1][trackSequence] | session.TrackColours[SCHEME_TRACK];
|
uint32_t imageId = monorail_track_pieces_s_bend_right[direction & 1][trackSequence] | session.TrackColours[SCHEME_TRACK];
|
||||||
CoordsXY offset = offsetList[trackSequence];
|
const CoordsXY& offset = boxList[trackSequence].offset;
|
||||||
CoordsXY bounds = boundsList[trackSequence];
|
const CoordsXY& bounds = boxList[trackSequence].length;
|
||||||
if (direction == 0 || direction == 2)
|
if (direction == 0 || direction == 2)
|
||||||
{
|
{
|
||||||
PaintAddImageAsParent(session, imageId, { offset.x, offset.y, height }, { bounds.x, bounds.y, 3 });
|
PaintAddImageAsParent(session, imageId, { offset.x, offset.y, height }, { bounds.x, bounds.y, 3 });
|
||||||
|
@ -1018,8 +950,8 @@ static void paint_monorail_track_left_eighth_to_diag(
|
||||||
if (index >= 0)
|
if (index >= 0)
|
||||||
{
|
{
|
||||||
uint32_t imageId = ghost_train_track_pieces_left_eight_to_diag[direction][index] | session.TrackColours[SCHEME_TRACK];
|
uint32_t imageId = ghost_train_track_pieces_left_eight_to_diag[direction][index] | session.TrackColours[SCHEME_TRACK];
|
||||||
const CoordsXY offset = ghost_train_track_pieces_left_eight_to_diag_offset[direction][index];
|
const CoordsXY& offset = GhostTrainTrackPiecesLeftEightToDiagBoxes[direction][index].offset;
|
||||||
const CoordsXY bounds = ghost_train_track_pieces_left_eight_to_diag_bounds[direction][index];
|
const CoordsXY& bounds = GhostTrainTrackPiecesLeftEightToDiagBoxes[direction][index].length;
|
||||||
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { bounds.x, bounds.y, 2 }, { offset.x, offset.y, height });
|
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { bounds.x, bounds.y, 2 }, { offset.x, offset.y, height });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1086,8 +1018,8 @@ static void paint_monorail_track_right_eighth_to_diag(
|
||||||
if (index >= 0)
|
if (index >= 0)
|
||||||
{
|
{
|
||||||
uint32_t imageId = ghost_train_track_pieces_right_eight_to_diag[direction][index] | session.TrackColours[SCHEME_TRACK];
|
uint32_t imageId = ghost_train_track_pieces_right_eight_to_diag[direction][index] | session.TrackColours[SCHEME_TRACK];
|
||||||
const CoordsXY offset = ghost_train_track_pieces_right_eight_to_diag_offset[direction][index];
|
const CoordsXY offset = GhostTrainTrackPiecesRightEightToDiagBoxes[direction][index].offset;
|
||||||
const CoordsXY bounds = ghost_train_track_pieces_right_eight_to_diag_bounds[direction][index];
|
const CoordsXY bounds = GhostTrainTrackPiecesRightEightToDiagBoxes[direction][index].length;
|
||||||
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { bounds.x, bounds.y, 2 }, { offset.x, offset.y, height });
|
PaintAddImageAsParent(session, imageId, { 0, 0, height }, { bounds.x, bounds.y, 2 }, { offset.x, offset.y, height });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue