mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-15 11:03:00 +01:00
Merge pull request #21999 from spacek531/add-flag-too-json
Allow setting “no draw on zoom flag” in image JSON
This commit is contained in:
@@ -322,7 +322,8 @@ namespace OpenRCT2::Scripting
|
||||
auto importMode = getImportModeFromPalette(pixelData.Palette);
|
||||
auto pngData = DukGetDataFromBufferLikeObject(pixelData.Data);
|
||||
auto image = Imaging::ReadFromBuffer(pngData, imageFormat);
|
||||
ImageImportMeta meta = { { 0, 0 }, palette, ImportFlags::RLE, importMode };
|
||||
uint8_t flags = EnumToFlag(ImportFlags::RLE);
|
||||
ImageImportMeta meta = { { 0, 0 }, palette, flags, importMode };
|
||||
|
||||
ImageImporter importer;
|
||||
auto importResult = importer.Import(image, meta);
|
||||
|
||||
@@ -498,7 +498,8 @@ int32_t CommandLineForSprite(const char** argv, int32_t argc)
|
||||
}
|
||||
}
|
||||
|
||||
ImageImportMeta meta = { { xOffset, yOffset }, Palette::OpenRCT2, ImportFlags::RLE, gSpriteMode };
|
||||
uint8_t importFlags = EnumToFlag(ImportFlags::RLE);
|
||||
ImageImportMeta meta = { { xOffset, yOffset }, Palette::OpenRCT2, importFlags, gSpriteMode };
|
||||
auto importResult = SpriteImageImport(imagePath, meta);
|
||||
if (!importResult.has_value())
|
||||
return -1;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "../core/Imaging.h"
|
||||
#include "../core/Json.hpp"
|
||||
#include "../util/Util.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <stdexcept>
|
||||
@@ -37,7 +38,7 @@ namespace OpenRCT2::Drawing
|
||||
{
|
||||
throw std::invalid_argument("Image is not paletted, it has bit depth of " + std::to_string(image.Depth));
|
||||
}
|
||||
const bool isRLE = meta.importFlags & ImportFlags::RLE;
|
||||
const bool isRLE = HasFlag(meta.importFlags, ImportFlags::RLE);
|
||||
|
||||
auto pixels = GetPixels(image, meta);
|
||||
auto buffer = isRLE ? EncodeRLE(pixels.data(), meta.srcSize) : EncodeRaw(pixels.data(), meta.srcSize);
|
||||
@@ -49,6 +50,8 @@ namespace OpenRCT2::Drawing
|
||||
outElement.x_offset = meta.offset.x;
|
||||
outElement.y_offset = meta.offset.y;
|
||||
outElement.zoomed_offset = meta.zoomedOffset;
|
||||
if (HasFlag(meta.importFlags, ImportFlags::NoDrawOnZoom))
|
||||
outElement.flags |= G1_FLAG_NO_ZOOM_DRAW;
|
||||
|
||||
ImageImporter::ImportResult result;
|
||||
result.Element = outElement;
|
||||
@@ -388,9 +391,14 @@ namespace OpenRCT2::Drawing
|
||||
auto yOffset = Json::GetNumber<int16_t>(input["y"]);
|
||||
auto keepPalette = Json::GetString(input["palette"]) == "keep";
|
||||
auto palette = keepPalette ? Palette::KeepIndices : Palette::OpenRCT2;
|
||||
uint8_t flags = 0;
|
||||
|
||||
auto raw = Json::GetString(input["format"]) == "raw";
|
||||
auto flags = raw ? ImportFlags::None : ImportFlags::RLE;
|
||||
if (!raw)
|
||||
flags |= EnumToFlag(ImportFlags::RLE);
|
||||
|
||||
if (Json::GetBoolean("noDrawOnZoom"))
|
||||
flags |= EnumToFlag(ImportFlags::NoDrawOnZoom);
|
||||
|
||||
auto srcX = Json::GetNumber<int16_t>(input["srcX"]);
|
||||
auto srcY = Json::GetNumber<int16_t>(input["srcY"]);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "../core/Imaging.h"
|
||||
#include "../core/JsonFwd.hpp"
|
||||
#include "../util/Util.h"
|
||||
#include "Drawing.h"
|
||||
|
||||
#include <string_view>
|
||||
@@ -27,10 +28,10 @@ namespace OpenRCT2::Drawing
|
||||
Dithering,
|
||||
};
|
||||
|
||||
enum ImportFlags : uint8_t
|
||||
enum class ImportFlags : uint8_t
|
||||
{
|
||||
None = 0,
|
||||
RLE = 1 << 1,
|
||||
RLE,
|
||||
NoDrawOnZoom,
|
||||
};
|
||||
|
||||
enum class Palette : uint8_t
|
||||
@@ -43,7 +44,7 @@ namespace OpenRCT2::Drawing
|
||||
{
|
||||
ScreenCoordsXY offset{};
|
||||
Palette palette = Palette::OpenRCT2;
|
||||
ImportFlags importFlags = ImportFlags::RLE;
|
||||
uint8_t importFlags = EnumToFlag(ImportFlags::RLE);
|
||||
ImportMode importMode = ImportMode::Default;
|
||||
ScreenCoordsXY srcOffset{};
|
||||
ScreenSize srcSize{};
|
||||
|
||||
@@ -127,6 +127,12 @@ template<typename TEnum> constexpr auto EnumValue(TEnum enumerator) noexcept
|
||||
return static_cast<std::underlying_type_t<TEnum>>(enumerator);
|
||||
}
|
||||
|
||||
template<typename T> constexpr bool HasFlag(uint64_t holder, T v)
|
||||
{
|
||||
static_assert(std::is_enum_v<T>);
|
||||
return (holder & EnumToFlag(v)) != 0;
|
||||
}
|
||||
|
||||
constexpr uint8_t HiByte(uint16_t value)
|
||||
{
|
||||
return static_cast<uint8_t>(value >> 8);
|
||||
|
||||
Reference in New Issue
Block a user