content browser and textures on entity sprites

This commit is contained in:
Erris
2026-02-27 10:45:44 +01:00
parent cee0f42164
commit 9de9609dee
23 changed files with 809 additions and 213 deletions

View File

@@ -1,8 +1,13 @@
#ifndef EDITOR_HPP
#define EDITOR_HPP
#include <filesystem>
#include <open_engine.hpp>
#include "open_engine/application.hpp"
#include "open_engine/scene/entity.hpp"
#include "open_engine/scene/scene_serializer.hpp"
#include "panels/content_browser.hpp"
#include "panels/scene_hierarchy.hpp"
#include <glm/ext/matrix_transform.hpp>
@@ -71,6 +76,13 @@ namespace OpenEngine {
scene = CreateRef<Scene>();
auto command_line_args = Application::Get().GetCommandLineArgs();
if (command_line_args.count > 1) {
auto scene_path = command_line_args[1];
SceneSerializer serializer(scene);
serializer.Deserialize(scene_path);
}
editor_camera = EditorCamera(30.0f, 1920.0f/1080.0f, 0.1f, 1000.0f);
/*
@@ -255,6 +267,15 @@ namespace OpenEngine {
uint32_t texture_id = framebuffer->GetColorAttachmentRendererID();
ImGui::Image((void*)(uint64_t)texture_id, ImVec2{ viewport_size.x, viewport_size.y }, ImVec2{ 0, 1 }, ImVec2{ 1, 0 });
if (ImGui::BeginDragDropTarget()) {
if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("CONTENT_BROWSER_PAYLOAD")) {
std::filesystem::path path = (const char*)payload->Data;
if (path.extension() == ".oes")
OpenScene(path);
}
ImGui::EndDragDropTarget();
}
viewport_bounds[0] = { imgui_cursor_position.x, imgui_cursor_position.y };
viewport_bounds[1] = { imgui_cursor_position.x + viewport_size.x,
imgui_cursor_position.y + viewport_size.y };
@@ -337,6 +358,18 @@ namespace OpenEngine {
guizmo_operation = -1;
};
void OpenScene(const std::string& file)
{
if (!file.empty()) {
scene = CreateRef<Scene>();
scene->OnViewportResize((uint32_t)viewport_size.x, (uint32_t)viewport_size.y);
scene_hierarchy.Init(scene);
SceneSerializer serializer(scene);
serializer.Deserialize(file);
}
}
void OnImGuiRender() override
{
OE_PROFILE_FUNCTION();
@@ -355,15 +388,8 @@ namespace OpenEngine {
}
if (ImGui::MenuItem("Open Scene", "Ctrl+O")) {
std::string file = FileDialogs::OpenFile("useless");
OE_DEBUG("loading filename: {}", file);
if (!file.empty()) {
scene = CreateRef<Scene>();
scene->OnViewportResize((uint32_t)viewport_size.x, (uint32_t)viewport_size.y);
scene_hierarchy.Init(scene);
SceneSerializer serializer(scene);
serializer.Deserialize(file);
}
OE_DEBUG("loading scene: {}", file);
OpenScene(file);
}
if (ImGui::MenuItem("New Scene", "Ctrl+N")) {
scene = CreateRef<Scene>();
@@ -383,6 +409,7 @@ namespace OpenEngine {
DrawStats();
scene_hierarchy.OnImGuiRender();
brower.OnImGuiRender();
DrawViewport();
ImGui::ShowDemoWindow();
@@ -390,6 +417,7 @@ namespace OpenEngine {
};
private:
ContentBrowserPanel brower;
std::vector<Time::ProfilingResult> profiling_results;
glm::vec2 world_pos_cursor = { 0.0f, 0.0f };
@@ -406,13 +434,15 @@ namespace OpenEngine {
Ref<Scene> scene;
Entity selected_entity;
std::vector<Entity> entities;
};
}
class EditorApp : public OpenEngine::Application
{
public:
EditorApp();
EditorApp(OpenEngine::ApplicationCommandLineArgs args);
~EditorApp();
};