mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-04 13:42:55 +01:00
Expose obj image offset and num images to plugins (#17567)
Co-authored-by: Duncan <duncans_pumpkin@hotmail.co.uk>
This commit is contained in:
@@ -106,6 +106,7 @@ The following people are not part of the development team, but have been contrib
|
||||
* Josh Trzebiatowski (trzejos) - Ride and scenery filtering
|
||||
* (kyphii) - Extended color selection
|
||||
* Phumdol Lookthipnapha (beam41) - Misc.
|
||||
* Nikolas Parshook (nparshook) - Misc.
|
||||
* Wenzhao Qiu (qwzhaox) - Misc.
|
||||
|
||||
## Bug fixes
|
||||
|
||||
28
distribution/openrct2.d.ts
vendored
28
distribution/openrct2.d.ts
vendored
@@ -221,11 +221,13 @@ declare global {
|
||||
* @param type The object type.
|
||||
* @param index The index.
|
||||
*/
|
||||
getObject(type: ObjectType, index: number): LoadedObject;
|
||||
getObject(type: ObjectType, index: number): LoadedImageObject;
|
||||
getObject(type: "music", index: number): LoadedObject;
|
||||
getObject(type: "ride", index: number): RideObject;
|
||||
getObject(type: "small_scenery", index: number): SmallSceneryObject;
|
||||
|
||||
getAllObjects(type: ObjectType): LoadedObject[];
|
||||
getAllObjects(type: ObjectType): LoadedImageObject[];
|
||||
getAllObjects(type: "music"): LoadedObject[];
|
||||
getAllObjects(type: "ride"): RideObject[];
|
||||
|
||||
/**
|
||||
@@ -1585,7 +1587,7 @@ declare global {
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the definition of a loaded object (.DAT or .json) such a ride type or scenery item.
|
||||
* Represents the definition of a loaded object (.DAT or .json) such as ride type or scenery item.
|
||||
*/
|
||||
interface LoadedObject {
|
||||
/**
|
||||
@@ -1617,10 +1619,26 @@ declare global {
|
||||
readonly name: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the definition of a loaded object that has one or more associated images.
|
||||
*/
|
||||
interface LoadedImageObject extends LoadedObject {
|
||||
/**
|
||||
* Id of the objects base image. This is also known as the preview image.
|
||||
*/
|
||||
readonly baseImageId: number;
|
||||
|
||||
/**
|
||||
* The number of images for this object.
|
||||
* Use this in conjunction with the baseImageId to iterate over an objects images.
|
||||
*/
|
||||
readonly numImages: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the object definition of a ride or stall.
|
||||
*/
|
||||
interface RideObject extends LoadedObject {
|
||||
interface RideObject extends LoadedImageObject {
|
||||
/**
|
||||
* The description of the ride / stall in the player's current language.
|
||||
*/
|
||||
@@ -1727,7 +1745,7 @@ declare global {
|
||||
/**
|
||||
* Represents the object definition of a small scenery item such a tree.
|
||||
*/
|
||||
interface SmallSceneryObject extends LoadedObject {
|
||||
interface SmallSceneryObject extends LoadedImageObject {
|
||||
/**
|
||||
* Raw bit flags that describe characteristics of the scenery item.
|
||||
*/
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "../core/IStream.hpp"
|
||||
#include "../core/Json.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../object/Object.h"
|
||||
#include "../object/ObjectRepository.h"
|
||||
@@ -62,13 +61,13 @@ void BannerObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.name = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.image = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = LoadImages();
|
||||
}
|
||||
|
||||
void BannerObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(_legacyType.name);
|
||||
GfxObjectFreeImages(_legacyType.image, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.name = 0;
|
||||
_legacyType.image = 0;
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include "../core/Json.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../localisation/Localisation.h"
|
||||
|
||||
void EntranceObject::ReadLegacy(IReadObjectContext* context, OpenRCT2::IStream* stream)
|
||||
@@ -30,13 +29,13 @@ void EntranceObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.string_idx = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.image_id = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image_id = LoadImages();
|
||||
}
|
||||
|
||||
void EntranceObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(_legacyType.string_idx);
|
||||
GfxObjectFreeImages(_legacyType.image_id, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.string_idx = 0;
|
||||
_legacyType.image_id = 0;
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "../core/IStream.hpp"
|
||||
#include "../core/Json.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../interface/Cursors.h"
|
||||
#include "../localisation/Localisation.h"
|
||||
#include "../object/Object.h"
|
||||
@@ -66,7 +65,7 @@ void FootpathItemObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.name = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.image = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = LoadImages();
|
||||
|
||||
_legacyType.scenery_tab_id = OBJECT_ENTRY_INDEX_NULL;
|
||||
}
|
||||
@@ -74,7 +73,7 @@ void FootpathItemObject::Load()
|
||||
void FootpathItemObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(_legacyType.name);
|
||||
GfxObjectFreeImages(_legacyType.image, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.name = 0;
|
||||
_legacyType.image = 0;
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "../core/IStream.hpp"
|
||||
#include "../core/Json.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../world/Footpath.h"
|
||||
|
||||
@@ -38,7 +37,7 @@ void FootpathObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.string_idx = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.image = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = LoadImages();
|
||||
_legacyType.bridge_image = _legacyType.image + 109;
|
||||
|
||||
_pathSurfaceDescriptor.Name = _legacyType.string_idx;
|
||||
@@ -63,7 +62,7 @@ void FootpathObject::Load()
|
||||
void FootpathObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(_legacyType.string_idx);
|
||||
GfxObjectFreeImages(_legacyType.image, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.string_idx = 0;
|
||||
_legacyType.image = 0;
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
|
||||
#include "../core/IStream.hpp"
|
||||
#include "../core/Json.hpp"
|
||||
#include "../drawing/Image.h"
|
||||
|
||||
void FootpathRailingsObject::Load()
|
||||
{
|
||||
@@ -21,7 +20,7 @@ void FootpathRailingsObject::Load()
|
||||
auto numImages = GetImageTable().GetCount();
|
||||
if (numImages != 0)
|
||||
{
|
||||
PreviewImageId = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
PreviewImageId = LoadImages();
|
||||
BridgeImageId = PreviewImageId + 37;
|
||||
RailingsImageId = PreviewImageId + 1;
|
||||
}
|
||||
@@ -39,7 +38,7 @@ void FootpathRailingsObject::Load()
|
||||
void FootpathRailingsObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(NameStringId);
|
||||
GfxObjectFreeImages(PreviewImageId, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
NameStringId = 0;
|
||||
PreviewImageId = 0;
|
||||
|
||||
@@ -23,7 +23,7 @@ void FootpathSurfaceObject::Load()
|
||||
auto numImages = GetImageTable().GetCount();
|
||||
if (numImages != 0)
|
||||
{
|
||||
PreviewImageId = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
PreviewImageId = LoadImages();
|
||||
BaseImageId = PreviewImageId + 1;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ void FootpathSurfaceObject::Load()
|
||||
void FootpathSurfaceObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(NameStringId);
|
||||
GfxObjectFreeImages(PreviewImageId, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
NameStringId = 0;
|
||||
PreviewImageId = 0;
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "../core/Json.hpp"
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../interface/Cursors.h"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../world/Banner.h"
|
||||
@@ -114,7 +113,7 @@ void LargeSceneryObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.name = LanguageAllocateObjectString(GetName());
|
||||
_baseImageId = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_baseImageId = LoadImages();
|
||||
_legacyType.image = _baseImageId;
|
||||
|
||||
_legacyType.tiles = _tiles.data();
|
||||
@@ -137,7 +136,7 @@ void LargeSceneryObject::Load()
|
||||
void LargeSceneryObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(_legacyType.name);
|
||||
GfxObjectFreeImages(_baseImageId, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.name = 0;
|
||||
_baseImageId = _legacyType.image = 0;
|
||||
|
||||
@@ -74,13 +74,13 @@ void MusicObject::Load()
|
||||
}
|
||||
|
||||
_hasPreview = !!GetImageTable().GetCount();
|
||||
_previewImageId = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_previewImageId = LoadImages();
|
||||
}
|
||||
|
||||
void MusicObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(NameStringId);
|
||||
GfxObjectFreeImages(_previewImageId, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_hasPreview = false;
|
||||
_previewImageId = 0;
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../core/ZipStream.hpp"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../localisation/LocalisationService.h"
|
||||
#include "../localisation/StringIds.h"
|
||||
@@ -182,6 +183,23 @@ std::string Object::GetName(int32_t language) const
|
||||
return GetString(language, ObjectStringID::NAME);
|
||||
}
|
||||
|
||||
ImageIndex Object::LoadImages()
|
||||
{
|
||||
if (_baseImageId == ImageIndexUndefined)
|
||||
{
|
||||
_baseImageId = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
}
|
||||
return _baseImageId;
|
||||
}
|
||||
|
||||
void Object::UnloadImages()
|
||||
{
|
||||
if (_baseImageId != ImageIndexUndefined)
|
||||
{
|
||||
GfxObjectFreeImages(_baseImageId, GetImageTable().GetCount());
|
||||
}
|
||||
}
|
||||
|
||||
void RCTObjectEntry::SetName(std::string_view value)
|
||||
{
|
||||
std::memset(name, ' ', sizeof(name));
|
||||
|
||||
@@ -196,6 +196,7 @@ private:
|
||||
ObjectGeneration _generation{};
|
||||
bool _usesFallbackImages{};
|
||||
bool _isCompatibilityObject{};
|
||||
ImageIndex _baseImageId{ ImageIndexUndefined };
|
||||
|
||||
protected:
|
||||
StringTable& GetStringTable()
|
||||
@@ -326,6 +327,14 @@ public:
|
||||
{
|
||||
return GetImageTable().GetCount();
|
||||
}
|
||||
|
||||
ImageIndex GetBaseImageId() const
|
||||
{
|
||||
return _baseImageId;
|
||||
}
|
||||
|
||||
uint32_t LoadImages();
|
||||
void UnloadImages();
|
||||
};
|
||||
#ifdef __WARN_SUGGEST_FINAL_TYPES__
|
||||
# pragma GCC diagnostic pop
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../entity/Yaw.hpp"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../rct2/DATLimits.h"
|
||||
@@ -257,7 +256,7 @@ void RideObject::Load()
|
||||
_legacyType.naming.Name = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.naming.Description = LanguageAllocateObjectString(GetDescription());
|
||||
_legacyType.capacity = LanguageAllocateObjectString(GetCapacity());
|
||||
_legacyType.images_offset = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.images_offset = LoadImages();
|
||||
_legacyType.vehicle_preset_list = &_presetColours;
|
||||
|
||||
int32_t currentCarImagesOffset = _legacyType.images_offset + RCT2::ObjectLimits::MaxRideTypesPerRideEntry;
|
||||
@@ -326,7 +325,7 @@ void RideObject::Unload()
|
||||
LanguageFreeObjectString(_legacyType.naming.Name);
|
||||
LanguageFreeObjectString(_legacyType.naming.Description);
|
||||
LanguageFreeObjectString(_legacyType.capacity);
|
||||
GfxObjectFreeImages(_legacyType.images_offset, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.naming.Name = 0;
|
||||
_legacyType.naming.Description = 0;
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../entity/Staff.h"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../world/Scenery.h"
|
||||
@@ -58,14 +57,14 @@ void SceneryGroupObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.name = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.image = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = LoadImages();
|
||||
_legacyType.SceneryEntries.clear();
|
||||
}
|
||||
|
||||
void SceneryGroupObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(_legacyType.name);
|
||||
GfxObjectFreeImages(_legacyType.image, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.name = 0;
|
||||
_legacyType.image = 0;
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../interface/Cursors.h"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../world/Scenery.h"
|
||||
@@ -74,7 +73,7 @@ void SmallSceneryObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.name = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.image = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = LoadImages();
|
||||
|
||||
_legacyType.scenery_tab_id = OBJECT_ENTRY_INDEX_NULL;
|
||||
|
||||
@@ -89,7 +88,7 @@ void SmallSceneryObject::Load()
|
||||
void SmallSceneryObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(_legacyType.name);
|
||||
GfxObjectFreeImages(_legacyType.image, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.name = 0;
|
||||
_legacyType.image = 0;
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include "../core/Json.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../localisation/Localisation.h"
|
||||
#include "../world/Banner.h"
|
||||
|
||||
@@ -25,7 +24,7 @@ void StationObject::Load()
|
||||
auto numImages = GetImageTable().GetCount();
|
||||
if (numImages != 0)
|
||||
{
|
||||
BaseImageId = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
BaseImageId = LoadImages();
|
||||
|
||||
uint32_t shelterOffset = (Flags & STATION_OBJECT_FLAGS::IS_TRANSPARENT) ? 32 : 16;
|
||||
if (numImages > shelterOffset)
|
||||
@@ -38,7 +37,7 @@ void StationObject::Load()
|
||||
void StationObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(NameStringId);
|
||||
GfxObjectFreeImages(BaseImageId, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
NameStringId = 0;
|
||||
BaseImageId = ImageIndexUndefined;
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#include "../core/Json.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../localisation/Localisation.h"
|
||||
#include "ObjectManager.h"
|
||||
|
||||
@@ -22,7 +21,7 @@ void TerrainEdgeObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
NameStringId = LanguageAllocateObjectString(GetName());
|
||||
IconImageId = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
IconImageId = LoadImages();
|
||||
|
||||
// First image is icon followed by edge images
|
||||
BaseImageId = IconImageId + 1;
|
||||
@@ -31,7 +30,7 @@ void TerrainEdgeObject::Load()
|
||||
void TerrainEdgeObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(NameStringId);
|
||||
GfxObjectFreeImages(IconImageId, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
NameStringId = 0;
|
||||
IconImageId = 0;
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#include "../core/Json.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../localisation/Localisation.h"
|
||||
#include "../world/Location.hpp"
|
||||
#include "ObjectManager.h"
|
||||
@@ -25,7 +24,7 @@ void TerrainSurfaceObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
NameStringId = LanguageAllocateObjectString(GetName());
|
||||
IconImageId = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
IconImageId = LoadImages();
|
||||
if ((Flags & SMOOTH_WITH_SELF) || (Flags & SMOOTH_WITH_OTHER))
|
||||
{
|
||||
PatternBaseImageId = IconImageId + 1;
|
||||
@@ -41,7 +40,7 @@ void TerrainSurfaceObject::Load()
|
||||
void TerrainSurfaceObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(NameStringId);
|
||||
GfxObjectFreeImages(IconImageId, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
NameStringId = 0;
|
||||
IconImageId = 0;
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include "../core/Json.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../drawing/Drawing.h"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../interface/Cursors.h"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../world/Banner.h"
|
||||
@@ -56,13 +55,13 @@ void WallObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.name = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.image = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image = LoadImages();
|
||||
}
|
||||
|
||||
void WallObject::Unload()
|
||||
{
|
||||
LanguageFreeObjectString(_legacyType.name);
|
||||
GfxObjectFreeImages(_legacyType.image, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
|
||||
_legacyType.name = 0;
|
||||
_legacyType.image = 0;
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include "../common.h"
|
||||
#include "../core/IStream.hpp"
|
||||
#include "../core/Json.hpp"
|
||||
#include "../drawing/Image.h"
|
||||
#include "../localisation/Formatter.h"
|
||||
#include "../localisation/Language.h"
|
||||
#include "../localisation/StringIds.h"
|
||||
@@ -38,7 +37,7 @@ void WaterObject::Load()
|
||||
{
|
||||
GetStringTable().Sort();
|
||||
_legacyType.string_idx = LanguageAllocateObjectString(GetName());
|
||||
_legacyType.image_id = GfxObjectAllocateImages(GetImageTable().GetImages(), GetImageTable().GetCount());
|
||||
_legacyType.image_id = LoadImages();
|
||||
_legacyType.palette_index_1 = _legacyType.image_id + 1;
|
||||
_legacyType.palette_index_2 = _legacyType.image_id + 4;
|
||||
|
||||
@@ -47,7 +46,7 @@ void WaterObject::Load()
|
||||
|
||||
void WaterObject::Unload()
|
||||
{
|
||||
GfxObjectFreeImages(_legacyType.image_id, GetImageTable().GetCount());
|
||||
UnloadImages();
|
||||
LanguageFreeObjectString(_legacyType.string_idx);
|
||||
|
||||
_legacyType.string_idx = 0;
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace OpenRCT2
|
||||
|
||||
namespace OpenRCT2::Scripting
|
||||
{
|
||||
static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 72;
|
||||
static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 73;
|
||||
|
||||
// Versions marking breaking changes.
|
||||
static constexpr int32_t API_VERSION_33_PEEP_DEPRECATION = 33;
|
||||
|
||||
@@ -44,6 +44,8 @@ namespace OpenRCT2::Scripting
|
||||
dukglue_register_property(ctx, &ScObject::identifier_get, nullptr, "identifier");
|
||||
dukglue_register_property(ctx, &ScObject::legacyIdentifier_get, nullptr, "legacyIdentifier");
|
||||
dukglue_register_property(ctx, &ScObject::name_get, nullptr, "name");
|
||||
dukglue_register_property(ctx, &ScObject::baseImageId_get, nullptr, "baseImageId");
|
||||
dukglue_register_property(ctx, &ScObject::numImages_get, nullptr, "numImages");
|
||||
}
|
||||
|
||||
static std::optional<ObjectType> StringToObjectType(std::string_view type)
|
||||
@@ -126,6 +128,26 @@ namespace OpenRCT2::Scripting
|
||||
return {};
|
||||
}
|
||||
|
||||
uint32_t baseImageId_get() const
|
||||
{
|
||||
auto obj = GetObject();
|
||||
if (obj != nullptr)
|
||||
{
|
||||
return obj->GetBaseImageId();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t numImages_get() const
|
||||
{
|
||||
auto obj = GetObject();
|
||||
if (obj != nullptr)
|
||||
{
|
||||
return obj->GetNumImages();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected:
|
||||
Object* GetObject() const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user