Close #10051: Create TrackDesignSceneryElement

This commit is contained in:
Tulio Leao 2019-10-08 12:13:34 -03:00 committed by Michael Steenbeek
parent dd6d028c5b
commit 6be7c42a3d
4 changed files with 32 additions and 12 deletions

View File

@ -179,8 +179,16 @@ public:
for (uint8_t endFlag = _stream.ReadValue<uint8_t>(); endFlag != 0xFF; endFlag = _stream.ReadValue<uint8_t>())
{
_stream.SetPosition(_stream.GetPosition() - 1);
rct_td6_scenery_element sceneryElement{};
_stream.Read(&sceneryElement, sizeof(rct_td6_scenery_element));
rct_td6_scenery_element t6SceneryElement{};
_stream.Read(&t6SceneryElement, sizeof(rct_td6_scenery_element));
TrackDesignSceneryElement sceneryElement{};
sceneryElement.scenery_object = t6SceneryElement.scenery_object;
sceneryElement.x = t6SceneryElement.x;
sceneryElement.y = t6SceneryElement.y;
sceneryElement.z = t6SceneryElement.z;
sceneryElement.flags = t6SceneryElement.flags;
sceneryElement.primary_colour = t6SceneryElement.primary_colour;
sceneryElement.secondary_colour = t6SceneryElement.secondary_colour;
td->scenery_elements.push_back(sceneryElement);
}

View File

@ -809,7 +809,7 @@ static void track_design_update_max_min_coordinates(int16_t x, int16_t y, int16_
}
static bool TrackDesignPlaceSceneryElementGetEntry(
uint8_t& entry_type, uint8_t& entry_index, const rct_td6_scenery_element& scenery)
uint8_t& entry_type, uint8_t& entry_index, const TrackDesignSceneryElement& scenery)
{
if (!find_object_in_entry_group(&scenery.scenery_object, &entry_type, &entry_index))
{
@ -850,7 +850,7 @@ static bool TrackDesignPlaceSceneryElementGetEntry(
}
static bool TrackDesignPlaceSceneryElementRemoveGhost(
CoordsXY mapCoord, const rct_td6_scenery_element& scenery, uint8_t rotation, int32_t originZ)
CoordsXY mapCoord, const TrackDesignSceneryElement& scenery, uint8_t rotation, int32_t originZ)
{
uint8_t entry_type, entry_index;
if (TrackDesignPlaceSceneryElementGetEntry(entry_type, entry_index, scenery))
@ -905,7 +905,7 @@ static bool TrackDesignPlaceSceneryElementRemoveGhost(
return true;
}
static bool TrackDesignPlaceSceneryElementGetPlaceZ(const rct_td6_scenery_element& scenery)
static bool TrackDesignPlaceSceneryElementGetPlaceZ(const TrackDesignSceneryElement& scenery)
{
int32_t z = scenery.z * 8 + _trackDesignPlaceZ;
if (z < _trackDesignPlaceSceneryZ)
@ -920,7 +920,7 @@ static bool TrackDesignPlaceSceneryElementGetPlaceZ(const rct_td6_scenery_elemen
}
static bool TrackDesignPlaceSceneryElement(
CoordsXY mapCoord, uint8_t mode, const rct_td6_scenery_element& scenery, uint8_t rotation, int32_t originZ)
CoordsXY mapCoord, uint8_t mode, const TrackDesignSceneryElement& scenery, uint8_t rotation, int32_t originZ)
{
if (_trackDesignPlaceOperation == PTD_OPERATION_DRAW_OUTLINES && mode == 0)
{
@ -1193,7 +1193,7 @@ static bool TrackDesignPlaceSceneryElement(
* rct2: 0x006D0964
*/
static int32_t track_design_place_all_scenery(
const std::vector<rct_td6_scenery_element>& sceneryList, int32_t originX, int32_t originY, int32_t originZ)
const std::vector<TrackDesignSceneryElement>& sceneryList, int32_t originX, int32_t originY, int32_t originZ)
{
for (uint8_t mode = 0; mode <= 1; mode++)
{

View File

@ -30,6 +30,18 @@ struct TrackDesignEntranceElement
int16_t y;
};
/* Track Scenery entry size: 0x16 */
struct TrackDesignSceneryElement
{
rct_object_entry scenery_object; // 0x00
int8_t x; // 0x10
int8_t y; // 0x11
int8_t z; // 0x12
uint8_t flags; // 0x13 direction quadrant tertiary colour
uint8_t primary_colour; // 0x14
uint8_t secondary_colour; // 0x15
};
/**
* Track design structure.
*/
@ -87,7 +99,7 @@ struct TrackDesign
std::vector<rct_td46_maze_element> maze_elements;
std::vector<TrackDesignTrackElement> track_elements;
std::vector<TrackDesignEntranceElement> entrance_elements;
std::vector<rct_td6_scenery_element> scenery_elements;
std::vector<TrackDesignSceneryElement> scenery_elements;
std::string name;
@ -190,7 +202,7 @@ void track_design_save_select_tile_element(int32_t interactionType, CoordsXY loc
bool track_design_are_entrance_and_exit_placed();
extern std::vector<rct_td6_scenery_element> _trackSavedTileElementsDesc;
extern std::vector<TrackDesignSceneryElement> _trackSavedTileElementsDesc;
extern std::vector<const TileElement*> _trackSavedTileElements;
#endif

View File

@ -40,7 +40,7 @@ bool gTrackDesignSaveMode = false;
ride_id_t gTrackDesignSaveRideIndex = RIDE_ID_NULL;
std::vector<const TileElement*> _trackSavedTileElements;
std::vector<rct_td6_scenery_element> _trackSavedTileElementsDesc;
std::vector<TrackDesignSceneryElement> _trackSavedTileElementsDesc;
static bool track_design_save_should_select_scenery_around(ride_id_t rideIndex, TileElement* tileElement);
static void track_design_save_select_nearby_scenery_for_tile(ride_id_t rideIndex, int32_t cx, int32_t cy);
@ -193,7 +193,7 @@ static void track_design_save_push_tile_element(CoordsXY loc, TileElement* tileE
static void track_design_save_push_tile_element_desc(
const rct_object_entry* entry, CoordsXYZ loc, uint8_t flags, uint8_t primaryColour, uint8_t secondaryColour)
{
rct_td6_scenery_element item{};
TrackDesignSceneryElement item{};
item.scenery_object = *entry;
item.x = loc.x / 32;
item.y = loc.y / 32;
@ -363,7 +363,7 @@ static void track_design_save_pop_tile_element_desc(const rct_object_entry* entr
size_t removeIndex = SIZE_MAX;
for (size_t i = 0; i < _trackSavedTileElementsDesc.size(); i++)
{
rct_td6_scenery_element* item = &_trackSavedTileElementsDesc[i];
TrackDesignSceneryElement* item = &_trackSavedTileElementsDesc[i];
if (item->x != loc.x / 32)
continue;
if (item->y != loc.y / 32)