Made Inspector Better, and fixed Load/Craete Scene

This commit is contained in:
OusmBlueNinja 2025-04-29 09:19:11 -05:00
parent 70e8155d22
commit ca8392d819
10 changed files with 325 additions and 96 deletions

View File

@ -10,24 +10,24 @@ Collapsed=1
[Window][WindowOverViewport_11111111] [Window][WindowOverViewport_11111111]
Pos=0,19 Pos=0,19
Size=1920,1158 Size=1280,701
Collapsed=0 Collapsed=0
[Window][Inspector] [Window][Inspector]
Pos=1402,19 Pos=762,19
Size=518,1158 Size=518,701
Collapsed=0 Collapsed=0
DockId=0x00000006,0 DockId=0x00000006,0
[Window][Scene Tree] [Window][Scene Tree]
Pos=0,19 Pos=0,19
Size=342,575 Size=342,348
Collapsed=0 Collapsed=0
DockId=0x00000003,0 DockId=0x00000003,0
[Window][Viewport] [Window][Viewport]
Pos=344,19 Pos=344,19
Size=1056,847 Size=416,390
Collapsed=0 Collapsed=0
DockId=0x00000007,0 DockId=0x00000007,0
@ -36,14 +36,14 @@ Size=1280,19
Collapsed=0 Collapsed=0
[Window][Performance Info] [Window][Performance Info]
Pos=344,868 Pos=344,411
Size=1056,309 Size=416,309
Collapsed=0 Collapsed=0
DockId=0x00000008,2 DockId=0x00000008,2
[Window][Console] [Window][Console]
Pos=344,868 Pos=344,411
Size=1056,309 Size=416,309
Collapsed=0 Collapsed=0
DockId=0x00000008,0 DockId=0x00000008,0
@ -54,8 +54,8 @@ Collapsed=0
DockId=0x00000007,1 DockId=0x00000007,1
[Window][Profiler] [Window][Profiler]
Pos=344,868 Pos=344,411
Size=1056,309 Size=416,309
Collapsed=0 Collapsed=0
DockId=0x00000008,3 DockId=0x00000008,3
@ -78,14 +78,14 @@ Collapsed=0
DockId=0x00000008,1 DockId=0x00000008,1
[Window][Color Correction] [Window][Color Correction]
Pos=344,868 Pos=344,411
Size=1056,309 Size=416,309
Collapsed=0 Collapsed=0
DockId=0x00000008,1 DockId=0x00000008,1
[Window][Asset Browser] [Window][Asset Browser]
Pos=0,596 Pos=0,369
Size=342,581 Size=342,351
Collapsed=0 Collapsed=0
DockId=0x00000004,0 DockId=0x00000004,0
@ -95,7 +95,7 @@ Size=325,75
Collapsed=0 Collapsed=0
[Docking][Data] [Docking][Data]
DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1920,1158 Split=X DockSpace ID=0x11111111 Window=0x1BBC0F80 Pos=0,19 Size=1280,701 Split=X
DockNode ID=0x00000005 Parent=0x11111111 SizeRef=1400,1158 Split=X DockNode ID=0x00000005 Parent=0x11111111 SizeRef=1400,1158 Split=X
DockNode ID=0x00000001 Parent=0x00000005 SizeRef=342,701 Split=Y Selected=0x12EF0F59 DockNode ID=0x00000001 Parent=0x00000005 SizeRef=342,701 Split=Y Selected=0x12EF0F59
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,575 HiddenTabBar=1 Selected=0x12EF0F59 DockNode ID=0x00000003 Parent=0x00000001 SizeRef=342,575 HiddenTabBar=1 Selected=0x12EF0F59

View File

@ -1,2 +1 @@
[LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\Inspector.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto [LINK] g++ src\build\Engine.o src\build\main.o src\build\Renderer.o src\build\Components\AnimationComponent.o src\build\Components\CameraComponent.o src\build\Components\LightComponent.o src\build\Components\ParticleComponent.o src\build\Components\PhysicsComponent.o src\build\Components\ScriptComponent.o src\build\Components\SpriteComponent.o src\build\Components\TextComonent.o src\build\Components\TilemapComponent.o src\build\core\utils\AssetManager.o src\build\core\utils\EngineConfig.o src\build\core\utils\ExceptionHandler.o src\build\core\utils\FileDialog.o src\build\core\utils\input.o src\build\core\utils\LoadingWindow.o src\build\core\utils\Logging.o src\build\core\utils\Profiler.o src\build\core\utils\Texture.o src\build\core\utils\utils.o src\build\editor\windows\AssetBrowser.o src\build\editor\windows\Inspector.o src\build\Entitys\Object.o src\build\utils\GameObjectsList.o src\build\utils\Shader.o src\build\utils\UID.o src\build\lapi.o src\build\lauxlib.o src\build\lbaselib.o src\build\lcode.o src\build\lcorolib.o src\build\lctype.o src\build\ldblib.o src\build\ldebug.o src\build\ldo.o src\build\ldump.o src\build\lfunc.o src\build\lgc.o src\build\linit.o src\build\liolib.o src\build\llex.o src\build\lmathlib.o src\build\lmem.o src\build\loadlib.o src\build\lobject.o src\build\lopcodes.o src\build\loslib.o src\build\lparser.o src\build\lstate.o src\build\lstring.o src\build\lstrlib.o src\build\ltable.o src\build\ltablib.o src\build\ltm.o src\build\lua.o src\build\luac.o src\build\lundump.o src\build\lutf8lib.o src\build\lvm.o src\build\lzio.o src\build\imgui.o src\build\imgui_demo.o src\build\imgui_draw.o src\build\imgui_impl_glfw.o src\build\imgui_impl_opengl3.o src\build\imgui_tables.o src\build\imgui_widgets.o src\build\aabb.o src\build\arena_allocator.o src\build\array.o src\build\bitset.o src\build\body.o src\build\broad_phase.o src\build\constraint_graph.o src\build\contact.o src\build\contact_solver.o src\build\core.o src\build\distance.o src\build\distance_joint.o src\build\dynamic_tree.o src\build\geometry.o src\build\hull.o src\build\id_pool.o src\build\island.o src\build\joint.o src\build\manifold.o src\build\math_functions.o src\build\motor_joint.o src\build\mouse_joint.o src\build\mover.o src\build\prismatic_joint.o src\build\revolute_joint.o src\build\sensor.o src\build\shape.o src\build\solver.o src\build\solver_set.o src\build\table.o src\build\timer.o src\build\types.o src\build\weld_joint.o src\build\wheel_joint.o src\build\world.o src\build\xxhash.o -o src\build\app.exe -LC:\msys64\mingw64\lib -lglfw3 -lglew32 -lopengl32 -lgdi32 -lyaml-cpp -lcomdlg32 -lssl -lcrypto
[RUN] Executed app.exe successfully.

View File

@ -0,0 +1,110 @@
engine_version: 0.1.0
scene_name: Smoke
scene_hash: bb44d49b100c99a58dbbebf7385e4813ce7d55b8aa64a8e00f2fb9949af8306e
format_version: 1
objects:
- name: Smoke and Light
uid: dc6b14507c5f4cd6be29402f26a43bed
id: 3
position: [53, -28]
rotation: 0
layer: 0
visable: true
components:
- type: ParticleComponent
maxParticles: 10000
emissionRate: 10000
lifeMin: 0.00999999978
lifeMax: 0.800000012
sizeMin: 10
sizeMax: 100
speedMin: 100
speedMax: 300
direction: [0, 0]
spread: 6.27445841
startColor: [1, 0, 1, 0.149019614]
endColor: [0.588235378, 0, 1, 0]
loop: true
burst: false
roundness: 0
- type: LightComponent
color:
- 1
- 0
- 1
intensity: 1
radius: 300
falloff: 1
type: 0
children: []
- name: Backround
uid: d395b3d1c59140298babbce87efbabc9
id: 4
position: [1028, 0]
rotation: 0
layer: 0
visable: true
components:
- type: SpriteComponent
texture: 4
normalMap: 5
renderType: Lit
children: []
color_correction:
brightness: 1
saturation: 1
gamma: 1
bloom: false
intensity: 1.99000001
threshold: 0.219999999
Assets:
- uaid: 5
path: C:\Users\spenc\OneDrive\Pictures\textures\ganges_river_pebbles_nor_gl_1k.png
filename: ganges_river_pebbles_nor_gl_1k.png
filetype: png
type: 0
size: [1024, 1024]
hash: 6711b00700d4c94a
channels: 4
format: GL_RGBA
lastModified: 1744565594
- uaid: 4
path: C:\Users\spenc\OneDrive\Pictures\textures\ganges_river_pebbles_diff_1k.png
filename: ganges_river_pebbles_diff_1k.png
filetype: png
type: 0
size: [1024, 1024]
hash: 0349580fcbf62155
channels: 4
format: GL_RGBA
lastModified: 1744565605
- uaid: 3
path: C:\Users\spenc\OneDrive\Pictures\Pixel Holy Spell Effect 32x32 Pack 3\01.png
filename: 01.png
filetype: png
type: 0
size: [704, 576]
hash: 82866fcf3324b785
channels: 4
format: GL_RGBA
lastModified: 1687052108
- uaid: 2
path: C:\Users\spenc\OneDrive\Pictures\Pixel Holy Spell Effect 32x32 Pack 3\00.png
filename: 00.png
filetype: png
type: 0
size: [1216, 192]
hash: 2b0b3c20179d6f12
channels: 4
format: GL_RGBA
lastModified: 1687052065
- uaid: 1
path: C:\Users\spenc\OneDrive\Pictures\6656e7221e49a1774d2fb280357e56f8d25d9d95.png
filename: 6656e7221e49a1774d2fb280357e56f8d25d9d95.png
filetype: png
type: 0
size: [1024, 1024]
hash: e8aaee6025f21557
channels: 4
format: GL_RGBA
lastModified: 1744577923

View File

@ -1,12 +1,12 @@
engine_version: 0.1.0 engine_version: 0.1.0
scene_name: test scene_name: test
scene_hash: 2a85407931385c3ec75b04912f97447151603fb317700b3a5b33a0c86182db25 scene_hash: 5176ce6547df4e17907193d5cfbbb474091eefafd718c7920a34526eaa69172f
format_version: 1 format_version: 1
objects: objects:
- name: NewObject - name: NewObject
uid: dc6b14507c5f4cd6be29402f26a43bed uid: dc6b14507c5f4cd6be29402f26a43bed
id: 3 id: 3
position: [48.2000008, -72] position: [158, -28]
rotation: 0 rotation: 0
layer: 0 layer: 0
visable: true visable: true
@ -16,14 +16,14 @@ objects:
emissionRate: 10000 emissionRate: 10000
lifeMin: 0.00999999978 lifeMin: 0.00999999978
lifeMax: 0.800000012 lifeMax: 0.800000012
sizeMin: 5 sizeMin: 10
sizeMax: 10 sizeMax: 100
speedMin: 100 speedMin: 100
speedMax: 300 speedMax: 300
direction: [0, 0] direction: [0, 0]
spread: 6.28318548 spread: 6.27445841
startColor: [0.0588235296, 0, 1, 1] startColor: [1, 0, 1, 0.149019614]
endColor: [1, 0, 0.911765099, 0] endColor: [0.588235378, 0, 1, 0]
loop: true loop: true
burst: false burst: false
roundness: 0 roundness: 0
@ -31,7 +31,7 @@ objects:
color: color:
- 1 - 1
- 0 - 0
- 0.941176414 - 1
intensity: 1 intensity: 1
radius: 300 radius: 300
falloff: 1 falloff: 1
@ -54,30 +54,30 @@ color_correction:
brightness: 1 brightness: 1
saturation: 1 saturation: 1
gamma: 1 gamma: 1
bloom: true bloom: false
intensity: 1.20000005 intensity: 1.99000001
threshold: 0.170000002 threshold: 0.219999999
Assets: Assets:
- uaid: 5 - uaid: 1
path: C:\Users\spenc\OneDrive\Pictures\textures\ganges_river_pebbles_nor_gl_1k.png path: C:\Users\spenc\OneDrive\Pictures\6656e7221e49a1774d2fb280357e56f8d25d9d95.png
filename: ganges_river_pebbles_nor_gl_1k.png filename: 6656e7221e49a1774d2fb280357e56f8d25d9d95.png
filetype: png filetype: png
type: 0 type: 0
size: [1024, 1024] size: [1024, 1024]
hash: 6711b00700d4c94a hash: e8aaee6025f21557
channels: 4 channels: 4
format: GL_RGBA format: GL_RGBA
lastModified: 1744565594 lastModified: 1744577924
- uaid: 4 - uaid: 2
path: C:\Users\spenc\OneDrive\Pictures\textures\ganges_river_pebbles_diff_1k.png path: C:\Users\spenc\OneDrive\Pictures\Pixel Holy Spell Effect 32x32 Pack 3\00.png
filename: ganges_river_pebbles_diff_1k.png filename: 00.png
filetype: png filetype: png
type: 0 type: 0
size: [1024, 1024] size: [1216, 192]
hash: 0349580fcbf62155 hash: 2b0b3c20179d6f12
channels: 4 channels: 4
format: GL_RGBA format: GL_RGBA
lastModified: 1744565605 lastModified: 1687052064
- uaid: 3 - uaid: 3
path: C:\Users\spenc\OneDrive\Pictures\Pixel Holy Spell Effect 32x32 Pack 3\01.png path: C:\Users\spenc\OneDrive\Pictures\Pixel Holy Spell Effect 32x32 Pack 3\01.png
filename: 01.png filename: 01.png
@ -88,23 +88,23 @@ Assets:
channels: 4 channels: 4
format: GL_RGBA format: GL_RGBA
lastModified: 1687052107 lastModified: 1687052107
- uaid: 2 - uaid: 4
path: C:\Users\spenc\OneDrive\Pictures\Pixel Holy Spell Effect 32x32 Pack 3\00.png path: C:\Users\spenc\OneDrive\Pictures\textures\ganges_river_pebbles_diff_1k.png
filename: 00.png filename: ganges_river_pebbles_diff_1k.png
filetype: png
type: 0
size: [1216, 192]
hash: 2b0b3c20179d6f12
channels: 4
format: GL_RGBA
lastModified: 1687052065
- uaid: 1
path: C:\Users\spenc\OneDrive\Pictures\6656e7221e49a1774d2fb280357e56f8d25d9d95.png
filename: 6656e7221e49a1774d2fb280357e56f8d25d9d95.png
filetype: png filetype: png
type: 0 type: 0
size: [1024, 1024] size: [1024, 1024]
hash: e8aaee6025f21557 hash: 0349580fcbf62155
channels: 4 channels: 4
format: GL_RGBA format: GL_RGBA
lastModified: 1744577923 lastModified: 1744565605
- uaid: 5
path: C:\Users\spenc\OneDrive\Pictures\textures\ganges_river_pebbles_nor_gl_1k.png
filename: ganges_river_pebbles_nor_gl_1k.png
filetype: png
type: 0
size: [1024, 1024]
hash: 6711b00700d4c94a
channels: 4
format: GL_RGBA
lastModified: 1744565594

View File

@ -666,7 +666,7 @@ void Engine::Run()
{ {
if (ImGui::MenuItem("Save Scene")) if (ImGui::MenuItem("Save Scene"))
{ {
std::string file = OpenFileDialog(FileDialogType::Scenes); std::string file = CreateFileDialog(FileDialogType::Scenes);
if (!file.empty()) if (!file.empty())
SaveScene(file); SaveScene(file);
selected = nullptr; selected = nullptr;

View File

@ -1,5 +1,7 @@
#pragma once #pragma once
#include <algorithm> #include <algorithm>
#include <glm/glm.hpp>
#include <imgui.h>
namespace core namespace core
{ {
@ -14,6 +16,17 @@ namespace core
Color(float _r, float _g, float _b, float _a = 1.0f) Color(float _r, float _g, float _b, float _a = 1.0f)
: r(_r), g(_g), b(_b), a(_a) {} : r(_r), g(_g), b(_b), a(_a) {}
// Conversions
Color(const glm::vec3 &v, float _a = 1.0f)
: r(v.x), g(v.y), b(v.z), a(_a) {}
Color(const ImVec4 &v)
: r(v.x), g(v.y), b(v.z), a(v.w) {}
operator glm::vec3() const { return {r, g, b}; }
operator glm::vec4() const { return {r, g, b, a}; }
operator ImVec4() const { return {r, g, b, a}; }
// Add // Add
Color operator+(const Color &other) const Color operator+(const Color &other) const
{ {

View File

@ -1,4 +1,8 @@
#pragma once #pragma once
#include <cmath>
#include <algorithm>
#include <ostream>
#include <glm/glm.hpp>
namespace core namespace core
{ {
@ -10,42 +14,84 @@ namespace core
float x{0}, y{0}, z{0}; float x{0}, y{0}, z{0};
Vec3() = default; Vec3() = default;
Vec3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {} Vec3(float x, float y, float z) : x(x), y(y), z(z) {}
Vec3(float v) : x(v), y(v), z(v) {}
Vec3(const glm::vec3 &v) : x(v.x), y(v.y), z(v.z) {}
Vec3 &operator+=(const Vec3 &o) operator glm::vec3() const { return {x, y, z}; }
Vec3 operator+(const Vec3 &rhs) const { return {x + rhs.x, y + rhs.y, z + rhs.z}; }
Vec3 operator-(const Vec3 &rhs) const { return {x - rhs.x, y - rhs.y, z - rhs.z}; }
Vec3 operator*(float scalar) const { return {x * scalar, y * scalar, z * scalar}; }
Vec3 operator/(float scalar) const { return {x / scalar, y / scalar, z / scalar}; }
Vec3 operator*(const Vec3 &rhs) const { return {x * rhs.x, y * rhs.y, z * rhs.z}; }
Vec3 &operator+=(const Vec3 &rhs) { x += rhs.x; y += rhs.y; z += rhs.z; return *this; }
Vec3 &operator-=(const Vec3 &rhs) { x -= rhs.x; y -= rhs.y; z -= rhs.z; return *this; }
Vec3 &operator*=(float scalar) { x *= scalar; y *= scalar; z *= scalar; return *this; }
Vec3 &operator/=(float scalar) { x /= scalar; y /= scalar; z /= scalar; return *this; }
Vec3 operator-() const { return {-x, -y, -z}; }
bool operator==(const Vec3 &rhs) const { return x == rhs.x && y == rhs.y && z == rhs.z; }
bool operator!=(const Vec3 &rhs) const { return !(*this == rhs); }
float Length() const { return std::sqrt(x * x + y * y + z * z); }
float LengthSquared() const { return x * x + y * y + z * z; }
Vec3 Normalized() const
{ {
x += o.x; float len = Length();
y += o.y; return len != 0 ? *this / len : Vec3(0.0f);
z += o.z;
return *this;
}
Vec3 &operator-=(const Vec3 &o)
{
x -= o.x;
y -= o.y;
z -= o.z;
return *this;
}
Vec3 &operator*=(float s)
{
x *= s;
y *= s;
z *= s;
return *this;
}
Vec3 &operator/=(float s)
{
x /= s;
y /= s;
z /= s;
return *this;
} }
friend Vec3 operator+(Vec3 a, const Vec3 &b) { return a += b; } void Normalize()
friend Vec3 operator-(Vec3 a, const Vec3 &b) { return a -= b; } {
friend Vec3 operator*(Vec3 v, float s) { return v *= s; } float len = Length();
friend Vec3 operator/(Vec3 v, float s) { return v /= s; } if (len != 0)
{
x /= len;
y /= len;
z /= len;
}
}
float Dot(const Vec3 &rhs) const { return x * rhs.x + y * rhs.y + z * rhs.z; }
Vec3 Cross(const Vec3 &rhs) const
{
return Vec3(
y * rhs.z - z * rhs.y,
z * rhs.x - x * rhs.z,
x * rhs.y - y * rhs.x
);
}
void Clamp(const Vec3 &min, const Vec3 &max)
{
x = std::max(min.x, std::min(x, max.x));
y = std::max(min.y, std::min(y, max.y));
z = std::max(min.z, std::min(z, max.z));
}
static Vec3 Lerp(const Vec3 &a, const Vec3 &b, float t)
{
return a + (b - a) * t;
}
static float Distance(const Vec3 &a, const Vec3 &b)
{
return (a - b).Length();
}
friend std::ostream &operator<<(std::ostream &os, const Vec3 &v)
{
return os << "(" << v.x << ", " << v.y << ", " << v.z << ")";
}
}; };
} inline Vec3 operator*(float scalar, const Vec3 &v) { return v * scalar; }
}
} // namespace types
} // namespace core

View File

@ -2,6 +2,7 @@
#define NOMINMAX #define NOMINMAX
#include <windows.h> #include <windows.h>
#include <commdlg.h> #include <commdlg.h>
#include <fstream>
#include <unordered_map> #include <unordered_map>
#include <string> #include <string>
#include <filesystem> #include <filesystem>
@ -9,17 +10,18 @@
// Correctly null-terminated filter strings // Correctly null-terminated filter strings
static std::unordered_map<FileDialogType, const char*> filters = { static std::unordered_map<FileDialogType, const char*> filters = {
{ FileDialogType::Images, "Image Files\0*.png;*.jpg;*.jpeg;*.bmp;*.tga;*.gif;*.dds\0" }, { FileDialogType::Images, "Image Files\0*.png;*.jpg;*.jpeg;*.bmp;*.tga;*.gif;*.dds\0All Files\0*.*\0" },
{ FileDialogType::Scenes, "CreateScene Files\0*.cene;*.cscene;*.yaml\0" }, { FileDialogType::Scenes, "CreateScene Files\0*.cene;*.cscene;*.yaml\0All Files\0*.*\0" },
{ FileDialogType::Audio, "Audio Files\0*.mp3;*.wav;*.ogg;*.flac;*.aac\0" }, { FileDialogType::Audio, "Audio Files\0*.mp3;*.wav;*.ogg;*.flac;*.aac\0All Files\0*.*\0" },
{ FileDialogType::Scripts, "Lua Scripts\0*.lua\0" }, { FileDialogType::Scripts, "Lua Scripts\0*.lua\0All Files\0*.*\0" },
{ FileDialogType::Shaders, "Shader Files\0*.glsl;*.vert;*.frag;*.hlsl\0" }, { FileDialogType::Shaders, "Shader Files\0*.glsl;*.vert;*.frag;*.hlsl\0All Files\0*.*\0" },
{ FileDialogType::Fonts, "Font Files\0*.ttf;*.otf;*.fnt\0" }, { FileDialogType::Fonts, "Font Files\0*.ttf;*.otf;*.fnt\0All Files\0*.*\0" },
{ FileDialogType::Models, "3D Models\0*.obj;*.fbx;*.gltf;*.dae\0" }, { FileDialogType::Models, "3D Models\0*.obj;*.fbx;*.gltf;*.dae\0All Files\0*.*\0" },
{ FileDialogType::All, "All Files\0*.*\0" } { FileDialogType::All, "All Files\0*.*\0" }
}; };
std::string OpenFileDialog(FileDialogType type) { std::string OpenFileDialog(FileDialogType type) {
char file[260] = { 0 }; char file[260] = { 0 };
OPENFILENAMEA ofn = {}; OPENFILENAMEA ofn = {};
@ -55,3 +57,47 @@ std::string SaveFileDialog(FileDialogType type) {
return result ? std::string(file) : ""; return result ? std::string(file) : "";
} }
std::string CreateFileDialog(FileDialogType type) {
char file[260] = { 0 };
OPENFILENAMEA ofn = {};
ofn.lStructSize = sizeof(ofn);
const char* filterStr = filters.count(type) ? filters[type] : filters[FileDialogType::All];
ofn.lpstrFilter = filterStr;
ofn.lpstrFile = file;
ofn.nMaxFile = sizeof(file);
ofn.Flags = OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR;
const char* defaultExt = nullptr;
switch (type) {
case FileDialogType::Images: defaultExt = "png"; break;
case FileDialogType::Scenes: defaultExt = "cene"; break;
case FileDialogType::Audio: defaultExt = "mp3"; break;
case FileDialogType::Scripts: defaultExt = "lua"; break;
case FileDialogType::Shaders: defaultExt = "glsl"; break;
case FileDialogType::Fonts: defaultExt = "ttf"; break;
case FileDialogType::Models: defaultExt = "obj"; break;
default: defaultExt = "txt"; break;
}
ofn.lpstrDefExt = defaultExt;
auto originalPath = std::filesystem::current_path();
bool result = GetSaveFileNameA(&ofn);
std::filesystem::current_path(originalPath);
if (result && file[0] != '\0') {
std::filesystem::path filePath(file);
if (!std::filesystem::exists(filePath)) {
std::ofstream outFile(filePath, std::ios::out | std::ios::trunc);
outFile.close();
}
return filePath.string();
}
return "";
}

View File

@ -15,3 +15,5 @@ enum class FileDialogType {
std::string OpenFileDialog(FileDialogType type); std::string OpenFileDialog(FileDialogType type);
std::string SaveFileDialog(FileDialogType type); std::string SaveFileDialog(FileDialogType type);
std::string CreateFileDialog(FileDialogType type);

View File

@ -380,7 +380,20 @@ void DrawInspectorUI(std::shared_ptr<Object> selected)
ImGui::DragFloat("Size Max", &settings.sizeMax, 0.1f, 0.1f, 100.0f); ImGui::DragFloat("Size Max", &settings.sizeMax, 0.1f, 0.1f, 100.0f);
ImGui::DragFloat("Speed Min", &settings.speedMin, 1.0f, 0.0f, 1000.0f); ImGui::DragFloat("Speed Min", &settings.speedMin, 1.0f, 0.0f, 1000.0f);
ImGui::DragFloat("Speed Max", &settings.speedMax, 1.0f, 0.0f, 1000.0f); ImGui::DragFloat("Speed Max", &settings.speedMax, 1.0f, 0.0f, 1000.0f);
ImGui::DragFloat2("Direction", &settings.direction.x, 0.01f);
{
float directionAngleDeg = glm::degrees(std::atan2(settings.direction.y, settings.direction.x));
if (directionAngleDeg < 0.0f)
directionAngleDeg += 360.0f;
if (ImGui::DragFloat("Direction", &directionAngleDeg, 0.5f, 0.0f, 360.0f))
{
float rad = glm::radians(directionAngleDeg);
settings.direction.x = std::cos(rad);
settings.direction.y = std::sin(rad);
}
}
{ {
float spreadDeg = glm::degrees(settings.spread); float spreadDeg = glm::degrees(settings.spread);