|
|
|
@ -12,7 +12,8 @@
|
|
|
|
#include <assets/types/image.h>
|
|
|
|
#include <assets/types/image.h>
|
|
|
|
#include <editor/editor.h>
|
|
|
|
#include <editor/editor.h>
|
|
|
|
#include <core/core.h>
|
|
|
|
#include <core/core.h>
|
|
|
|
#include <graphics/graphics.h>
|
|
|
|
#include <renderer/renderer2D.h>
|
|
|
|
|
|
|
|
#include <renderer/frame_buffer.h>
|
|
|
|
#include <sstream>
|
|
|
|
#include <sstream>
|
|
|
|
|
|
|
|
|
|
|
|
#include <utils/stb/std_image_write.h>
|
|
|
|
#include <utils/stb/std_image_write.h>
|
|
|
|
@ -21,7 +22,7 @@ namespace lunarium { namespace editor
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TileSetView::TileSetView(MapEditor* editor)
|
|
|
|
TileSetView::TileSetView(MapEditor* editor)
|
|
|
|
: Panel("Tile Set View", PanelDockZone::DDZ_RIGHT, true, ImGuiWindowFlags_HorizontalScrollbar),
|
|
|
|
: Panel("Tile Set View", PanelDockZone::DDZ_RIGHT, true, ImGuiWindowFlags_HorizontalScrollbar),
|
|
|
|
mpEditor(editor), mpSelectedTileSet(nullptr), mpViewImage(nullptr), mFrameBuffer(-1),
|
|
|
|
mpEditor(editor), mpSelectedTileSet(nullptr), mpViewImage(nullptr), mFrameBuffer(nullptr),
|
|
|
|
mViewOffset({0, 0}), mViewZoom(1.0f), mMouseDown(false)
|
|
|
|
mViewOffset({0, 0}), mViewZoom(1.0f), mMouseDown(false)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
@ -68,26 +69,28 @@ namespace lunarium { namespace editor
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (mpSelectedTileSet)
|
|
|
|
if (mpSelectedTileSet)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (mFrameBuffer == -1)
|
|
|
|
if (!mFrameBuffer)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mFrameBuffer = Core::Graphics().CreateRenderTexture(mpSelectedTileSet->GetImage()->GetWidth(), mpSelectedTileSet->GetImage()->GetHeight(), 4);
|
|
|
|
mFrameBuffer = FrameBuffer::Create(mpSelectedTileSet->GetImage()->GetWidth(), mpSelectedTileSet->GetImage()->GetHeight());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Color prev = Core::Graphics().GetClearColor();
|
|
|
|
// Color prev = Core::Graphics().GetClearColor();
|
|
|
|
Core::Graphics().SetClearColor(Color::Transparent());
|
|
|
|
// Core::Graphics().SetClearColor(Color::Transparent());
|
|
|
|
Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat);
|
|
|
|
// Core::GetInstance().BeginRenderToTexture(mFrameBuffer).LogIfFailed(Editor::LogCat);
|
|
|
|
|
|
|
|
|
|
|
|
mpSelectedTileSet->Render(&Core::Graphics());
|
|
|
|
// mpSelectedTileSet->Render(&Core::Graphics());
|
|
|
|
|
|
|
|
|
|
|
|
// Draw selected tile highlight
|
|
|
|
// // Draw selected tile highlight
|
|
|
|
if (mSelectedTile.X >= 0 && mSelectedTile.Y >= 0)
|
|
|
|
// if (mSelectedTile.X >= 0 && mSelectedTile.Y >= 0)
|
|
|
|
{
|
|
|
|
// {
|
|
|
|
Rectangle selection = mpSelectedTileSet->GetTileRect(mSelectedTile);
|
|
|
|
// Rectangle selection = mpSelectedTileSet->GetTileRect(mSelectedTile);
|
|
|
|
Core::Graphics().DrawBox(selection, Color::Red(), 1.5f);
|
|
|
|
// Core::Graphics().DrawBox(selection, Color::Red(), 1.5f);
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mpViewImage = Core::GetInstance().EndRenderToTexture();
|
|
|
|
|
|
|
|
// Core::Graphics().SetClearColor(prev);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mpViewImage = Core::GetInstance().EndRenderToTexture();
|
|
|
|
|
|
|
|
Core::Graphics().SetClearColor(prev);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// //stbi_flip_vertically_on_write(1);
|
|
|
|
// //stbi_flip_vertically_on_write(1);
|
|
|
|
// stbi_write_png("tileset_test_image.png", mpViewImage->GetWidth(), mpViewImage->GetHeight(), 4,
|
|
|
|
// stbi_write_png("tileset_test_image.png", mpViewImage->GetWidth(), mpViewImage->GetHeight(), 4,
|
|
|
|
@ -150,7 +153,7 @@ namespace lunarium { namespace editor
|
|
|
|
|
|
|
|
|
|
|
|
if (mpViewImage)
|
|
|
|
if (mpViewImage)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ImGui::Image((ImTextureID)mpViewImage->GetGLTextureID64(),
|
|
|
|
ImGui::Image((ImTextureID)mpViewImage->GetGLID64(),
|
|
|
|
ImVec2(mpViewImage->GetWidth(), mpViewImage->GetHeight()), ImVec2(0, 1), ImVec2(1, 0)); // the last 2 params are flipping the image on the y
|
|
|
|
ImVec2(mpViewImage->GetWidth(), mpViewImage->GetHeight()), ImVec2(0, 1), ImVec2(1, 0)); // the last 2 params are flipping the image on the y
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -188,10 +191,9 @@ namespace lunarium { namespace editor
|
|
|
|
void TileSetView::Invalidate(bool remake_frame_buffer)
|
|
|
|
void TileSetView::Invalidate(bool remake_frame_buffer)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
mInvalidate = true;
|
|
|
|
mInvalidate = true;
|
|
|
|
if (remake_frame_buffer && mFrameBuffer != -1)
|
|
|
|
if (remake_frame_buffer && mFrameBuffer)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Core::Graphics().DestroyRenderTexture(mFrameBuffer);
|
|
|
|
FrameBuffer::Destroy(&mFrameBuffer);
|
|
|
|
mFrameBuffer = -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}}
|
|
|
|
}}
|