1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-22 06:23:04 +01:00
Files
OpenRCT2/src/openrct2-ui/scripting/ScImageManager.hpp
2021-12-07 20:55:27 +00:00

88 lines
2.7 KiB
C++

/*****************************************************************************
* Copyright (c) 2014-2021 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
#ifdef ENABLE_SCRIPTING
# include <openrct2/drawing/Image.h>
# include <openrct2/scripting/Duktape.hpp>
# include <openrct2/sprites.h>
namespace OpenRCT2::Scripting
{
class ScImageManager
{
private:
duk_context* _ctx{};
public:
ScImageManager(duk_context* ctx)
: _ctx(ctx)
{
}
static void Register(duk_context* ctx)
{
dukglue_register_method(ctx, &ScImageManager::getPredefinedRange, "getPredefinedRange");
dukglue_register_method(ctx, &ScImageManager::getAvailableAllocationRanges, "getAvailableAllocationRanges");
}
private:
DukValue getPredefinedRange(const std::string& name) const
{
if (name == "g1")
{
return CreateImageIndexRange(0, SPR_G1_END);
}
else if (name == "g2")
{
return CreateImageIndexRange(SPR_G2_BEGIN, SPR_G2_END - SPR_G2_BEGIN);
}
else if (name == "csg")
{
return CreateImageIndexRange(SPR_CSG_BEGIN, SPR_CSG_END - SPR_CSG_BEGIN);
}
else if (name == "allocated")
{
return CreateImageIndexRange(SPR_IMAGE_LIST_BEGIN, SPR_IMAGE_LIST_END - SPR_IMAGE_LIST_BEGIN);
}
else
{
return ToDuk(_ctx, nullptr);
}
}
DukValue getAvailableAllocationRanges() const
{
auto ranges = GetAvailableAllocationRanges();
duk_push_array(_ctx);
duk_uarridx_t index = 0;
for (const auto& range : ranges)
{
auto value = CreateImageIndexRange(range.BaseId, range.Count);
value.push();
duk_put_prop_index(_ctx, /* duk stack index */ -2, index);
index++;
}
return DukValue::take_from_stack(_ctx);
}
DukValue CreateImageIndexRange(size_t start, size_t count) const
{
DukObject obj(_ctx);
obj.Set("start", static_cast<uint32_t>(start));
obj.Set("count", static_cast<uint32_t>(count));
return obj.Take();
}
};
} // namespace OpenRCT2::Scripting
#endif