- 添加新的UI控件系统(Core.h, ScalarControls.h, VectorControls.h, UI.h) - 更新SceneManager支持场景层级管理 - 优化SelectionManager选择管理 - 改进InspectorPanel/GameViewPanel/HierarchyPanel等面板 - 更新RHI文档说明Vulkan实现计划
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
#include "SceneViewPanel.h"
|
|
#include <imgui.h>
|
|
#include <imgui_internal.h>
|
|
|
|
namespace XCEngine {
|
|
namespace Editor {
|
|
|
|
SceneViewPanel::SceneViewPanel() : Panel("Scene") {}
|
|
|
|
void SceneViewPanel::Render() {
|
|
ImGui::Begin(m_name.c_str(), nullptr, ImGuiWindowFlags_None);
|
|
|
|
ImVec2 canvasSize = ImGui::GetContentRegionAvail();
|
|
ImDrawList* drawList = ImGui::GetWindowDrawList();
|
|
ImVec2 canvasPos = ImGui::GetCursorScreenPos();
|
|
|
|
ImU32 bgColor = IM_COL32(30, 30, 30, 255);
|
|
drawList->AddRectFilled(canvasPos, ImVec2(canvasPos.x + canvasSize.x, canvasPos.y + canvasSize.y), bgColor);
|
|
|
|
RenderGrid();
|
|
|
|
ImGui::End();
|
|
}
|
|
|
|
void SceneViewPanel::RenderGrid() {
|
|
ImDrawList* drawList = ImGui::GetWindowDrawList();
|
|
ImVec2 canvasPos = ImGui::GetCursorScreenPos();
|
|
ImVec2 canvasSize = ImGui::GetContentRegionAvail();
|
|
|
|
float gridSize = 50.0f;
|
|
ImU32 gridColor = IM_COL32(50, 50, 50, 255);
|
|
|
|
for (float x = fmodf(0, gridSize); x < canvasSize.x; x += gridSize) {
|
|
drawList->AddLine(
|
|
ImVec2(canvasPos.x + x, canvasPos.y),
|
|
ImVec2(canvasPos.x + x, canvasPos.y + canvasSize.y),
|
|
gridColor
|
|
);
|
|
}
|
|
|
|
for (float y = fmodf(0, gridSize); y < canvasSize.y; y += gridSize) {
|
|
drawList->AddLine(
|
|
ImVec2(canvasPos.x, canvasPos.y + y),
|
|
ImVec2(canvasPos.x + canvasSize.x, canvasPos.y + y),
|
|
gridColor
|
|
);
|
|
}
|
|
|
|
const char* label = "Scene View";
|
|
ImVec2 labelSize = ImGui::CalcTextSize(label);
|
|
ImVec2 labelPos(canvasPos.x + 10, canvasPos.y + 10);
|
|
drawList->AddText(labelPos, IM_COL32(100, 100, 100, 255), label);
|
|
}
|
|
|
|
}
|
|
} |