1
0
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:
Michael Steenbeek
2024-08-07 20:34:47 +02:00
committed by GitHub
5 changed files with 25 additions and 8 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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"]);

View File

@@ -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{};

View File

@@ -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);