Vesper 0.5.1
Vesper is short form for the Latin word for "Bat", as Vesper is designed to be small, lightweight, and easily handle things like particles and flocking behaviors in accordance with the nature of bats. \n It is meant to be a particle simulation, VFX editor, and CAN be used secondarily as a small game engine.
GitHub | Vesper Updates | Creator
Loading...
Searching...
No Matches
Vesper::EditorLayer Class Reference

#include <EditorLayer.h>

Inheritance diagram for Vesper::EditorLayer:
Vesper::Layer

Public Member Functions

 EditorLayer ()
virtual ~EditorLayer ()=default
virtual void OnAttach () override
 Called when the layer is attached to the application.
virtual void OnDetach () override
 Called when the layer is detached from the application.
virtual void OnUpdate (Timestep ts) override
 Called every frame to update the layer with the given timestep.
virtual void OnImGuiRender () override
 Called when the layer should render its ImGui components.
virtual void OnEvent (Event &e) override
 Called when an event is dispatched to the layer.
Public Member Functions inherited from Vesper::Layer
 Layer (const std::string &name="Layer")
 Constructs a Layer with an optional name for debugging purposes.
virtual ~Layer ()
virtual void OnRender ()
 Called when the layer should render its contents.
const std::string & GetName () const
 Retrieves the name of the layer for debugging purposes.

Private Types

enum class  SceneState { Edit = 0 , Play = 1 , Simulate = 2 }

Private Member Functions

bool OnKeyPressed (KeyPressedEvent &e)
void NewScene ()
void OpenScene ()
void SaveSceneAs ()
void ResetScene ()

Private Attributes

SceneHierarchyPanel m_SceneHierarchyPanel
Ref< Scenem_ActiveScene
Ref< Scenem_EditorScene
SceneState m_SceneState = SceneState::Edit
bool m_ViewportFocused = false
bool m_ViewportHovered = false
glm::vec2 m_ViewportSize = {0,0}
glm::vec2 m_ViewportBounds [2] = { {0,0}, {0,0} }
bool m_PrimaryCamera = true
Entity m_CameraEntity
int m_GizmoType = -1
float m_TranslationSnap = 0.5f
float m_RotationSnap = 45.0f
float m_ScaleSnap = 0.5f
OrthographicCameraController m_CameraController
float lastFrameTime = 0.0f
Entity m_FireEntity
Entity m_SmokeEntity
Ref< VertexArraym_SquareVA
Ref< Shaderm_FlatColorShader
Ref< Texture2Dm_CheckerboardTexture
Ref< Texture2Dm_SpriteSheetFire
Ref< Texture2Dm_SpriteSheetSmoke
Ref< Texture2Dm_SpriteSheetTown
Ref< Texture2Dm_SpriteSheetCrystals
Ref< Texture2Dm_SpriteSheetRocks
Ref< Texture2Dm_SpriteSheetCursedLands
Ref< SubTexture2Dm_SubTextureFire
Ref< SubTexture2Dm_SubTextureSmoke
Ref< SubTexture2Dm_SubTextureTown
Ref< Framebufferm_Framebuffer
EditorCamera m_EditorCamera
float m_textureScale = 1.0f
float m_squareRotation = 25.0f
float m_specialQuadRotation = 0.5f
int ParticleEmitCount = 100
ParticleSystem m_ParticleSystem
ParticleProps m_ParticleProps
bool scene1 = false
bool scene2 = false
bool scene3 = false
bool scene4 = false
bool useEntityScene = true
glm::vec4 m_SquareColor = { 0.2f, 0.3f, 0.8f, 1.0f }
glm::vec4 m_TextureTintColor1 = { 1.0f, 1.0f, 1.0f, 1.0f }
glm::vec4 m_TextureTintColor2 = { 1.0f, 1.0f, 1.0f, 1.0f }
glm::vec4 m_BackgroundColor = { 0.1f, 0.1f, 0.1f, 1.0f }
glm::vec4 m_ClearColor = { 0.1f, 0.3f, 0.3f, 1.0f }
glm::vec4 m_SpecialQuadColor = { 0.9f, 0.2f, 0.8f, 1.0f }
bool m_UseSpecialQuadColor = false
std::unordered_map< char, Ref< SubTexture2D > > s_TextureMap

Additional Inherited Members

Protected Attributes inherited from Vesper::Layer
std::string m_DebugName
 The name of the layer assigned at creation, used for debugging.

Member Enumeration Documentation

◆ SceneState

enum class Vesper::EditorLayer::SceneState
strongprivate
Enumerator
Edit 
Play 
Simulate 
39 {
40 Edit = 0, Play = 1, Simulate = 2
41 };

Constructor & Destructor Documentation

◆ EditorLayer()

Vesper::EditorLayer::EditorLayer ( )
38 : Layer("Sandbox2D"), m_CameraController(1280.0f / 720.0f, true)
39 {
41 }
#define VZ_PROFILE_FUNCTION()
Definition Instrumentor.h:240
OrthographicCameraController m_CameraController
Definition EditorLayer.h:53
Layer(const std::string &name="Layer")
Constructs a Layer with an optional name for debugging purposes.
Definition Layer.cpp:6

References EditorLayer().

Referenced by EditorLayer(), and Vesper::VesperEditor::VesperEditor().

◆ ~EditorLayer()

virtual Vesper::EditorLayer::~EditorLayer ( )
virtualdefault

Member Function Documentation

◆ NewScene()

void Vesper::EditorLayer::NewScene ( )
private
722 {
724 m_ActiveScene->OnViewportResize((uint32_t)m_ViewportSize.x, (uint32_t)m_ViewportSize.y);
726 }
glm::vec2 m_ViewportSize
Definition EditorLayer.h:45
Ref< Scene > m_ActiveScene
Definition EditorLayer.h:35
SceneHierarchyPanel m_SceneHierarchyPanel
Definition EditorLayer.h:33
constexpr Ref< T > CreateRef(Args &&... args)
Creates a Ref (shared_ptr) for the given type and constructor arguments.
Definition Defines_Macros.h:72

Referenced by OnImGuiRender(), and OnKeyPressed().

◆ OnAttach()

void Vesper::EditorLayer::OnAttach ( )
overridevirtual

Called when the layer is attached to the application.

TODO: move to resource manager TODO: fix pathing

TODO: Get an automatic path to resource that is NOT hardcoded

Reimplemented from Vesper::Layer.

46 {
48
49 // Texture / SubTexture setup
50 {
53 m_CheckerboardTexture = Texture2D::Create("../../Vesper-Editor/assets/textures/Checkerboard.png");
54 m_SpriteSheetFire = Texture2D::Create("../../Vesper-Editor/assets/textures/sheets/fire_01.png");
55 m_SpriteSheetSmoke = Texture2D::Create("../../Vesper-Editor/assets/textures/sheets/fire_02.png");
56 m_SpriteSheetTown = Texture2D::Create("../../Vesper-Editor/assets/textures/sheets/town_tilesheet.png");
57 m_SpriteSheetCrystals = Texture2D::Create("../../Vesper-Editor/assets/textures/sheets/craftpix/Crystals/Crystals.png");
58 m_SpriteSheetRocks = Texture2D::Create("../../Vesper-Editor/assets/textures/sheets/craftpix/Rocks/Rocks_source.png");
59 m_SpriteSheetCursedLands = Texture2D::Create("../../Vesper-Editor/assets/textures/sheets/craftpix/CursedLand/Tiled_files/Objects.png");
60
63 m_SubTextureTown = SubTexture2D::CreateFromCoords(m_SpriteSheetTown, { 4.25, 0.75 }, { 64, 64 }, { 1, 1 });
65 s_TextureMap['G'] = SubTexture2D::CreateFromCoords(m_SpriteSheetTown, { 4.25, 0.75 }, { 64, 64 }, { 1, 1 });
66 s_TextureMap['C'] = SubTexture2D::CreateFromCoords(m_SpriteSheetCrystals, { 0, 1.25 }, { 64, 64 }, { 1, 1 });
67 s_TextureMap['R'] = SubTexture2D::CreateFromCoords(m_SpriteSheetRocks, { 0, 3.75 }, { 64, 64 }, { 1, 1 });
68 s_TextureMap['P'] = SubTexture2D::CreateFromCoords(m_SpriteSheetCursedLands, { 0, 1.875 }, { 128, 128 }, { 1, 1 });
69 }
70
71
72 // Particle setup
73 {
74 m_ParticleProps.Position = { 0.0f, 0.0f, 0.0f };
75 m_ParticleProps.Velocity = { 0.0f, 0.0f, 0.0f };
76 m_ParticleProps.VelocityVariation = { 1.0f, 1.0f, 0.0f };
77 m_ParticleProps.ColorBegin = { 1.0f, 0.5f, 0.2f, 1.0f };
78 m_ParticleProps.ColorEnd = { 0.2f, 0.3f, 0.8f, 1.0f };
79 m_ParticleProps.SizeBegin = 0.5f;
80 m_ParticleProps.SizeEnd = 0.0f;
81 m_ParticleProps.LifeTime = 3.0f;
82 m_ParticleProps.Rotation = 0.0f;
83 m_ParticleProps.RotationVariation = 27.0f;
84 m_ParticleSystem = ParticleSystem(10000);
85 m_ParticleSystem.SetParticleProps(m_ParticleProps);
86 }
87
88 // Framebuffer/Viewport setup
89 {
90 FramebufferSpecification fbSpec;
91 fbSpec.Width = 1280;
92 fbSpec.Height = 720;
94 }
95
96 // Scene setup
97 {
98 //m_CameraController.SetZoomLevel(5.5f);
100
101#if 0
102 m_CameraEntity = m_ActiveScene->CreateEntity("Primary Camera Entity");
103
104 auto& pCam = m_CameraEntity.AddComponent<CameraComponent>();
105 pCam.Primary = true;
106 pCam.Camera.SetPerspective(glm::radians(45.0f), 0.1f, 1000.0f);
107 auto& pos = m_CameraEntity.GetComponent<TransformComponent>().Translation;
108 pos.x += 1.25f;
109 pos.z += 5.0f;
110
111 auto fbSpec = m_Framebuffer->GetSpecification();
112 m_ActiveScene->OnViewportResize(fbSpec.Width, fbSpec.Height);
113
114 // Animation 1
115 {
116 auto square = m_ActiveScene->CreateEntity("Fire Animation");
117 auto& transform = square.GetComponent<TransformComponent>();
118 transform.Translation = (glm::vec3(-0.5f, 0.0f, -1.5f));
119
120 square.AddComponent<SpriteRendererComponent>(glm::vec4{ 0.8f, 0.8f, 0.2f, 1.0f });
121 std::vector<Ref<SubTexture2D>> fireFrames;
122 for (int x = 0; x < 63; x++)
123 {
124 for (int y = 0; y < 2; y++)
125 {
126 fireFrames.push_back(SubTexture2D::CreateFromCoords(m_SpriteSheetFire, { (float)y, (float)x }, { 128, 128 }));
127 }
128 }
129 TextureAnimationComponent texAnim(fireFrames, 0.05f);
130 square.AddComponent<TextureAnimationComponent>(texAnim);
131 m_FireEntity = square;
132 }
133
134 // Animation 2
135 {
136 auto square = m_ActiveScene->CreateEntity("Smoke Animation");
137 auto& transform = square.GetComponent<TransformComponent>();
138 // adjust the position of the square entity
139 transform.Translation = (glm::vec3(0.5f, 0.0f, 1.5f));
140
141 square.AddComponent<SpriteRendererComponent>(glm::vec4{ 0.8f, 0.8f, 0.2f, 1.0f });
142 std::vector<Ref<SubTexture2D>> smokeFrames;
143 for (int x = 0; x < 63; x++)
144 {
145 for (int y = 0; y < 2; y++)
146 {
147 smokeFrames.push_back(SubTexture2D::CreateFromCoords(m_SpriteSheetSmoke, { (float)y, (float)x }, { 128, 128 }));
148 }
149
150 }
151 TextureAnimationComponent texAnim(smokeFrames, 0.05f);
152 square.AddComponent<TextureAnimationComponent>(texAnim);
153 m_SmokeEntity = square;
154 }
155
156 auto quadEntity = m_ActiveScene->CreateEntity("Quad Entity");
157 quadEntity.AddComponent<SpriteRendererComponent>(glm::vec4{ 0.2f, 0.3f, 0.8f, 1.0f });
158 quadEntity.GetComponent<TransformComponent>().Scale = { 0.5f, 0.5f, 1.0f };
159 quadEntity.GetComponent<TransformComponent>().Translation = { 1.5f, 0.0f, 0.0f };
160
161
162 class CameraController : public ScriptableEntity {
163 public:
164 void OnCreate()
165 {
166 GetComponent<TransformComponent>().Translation = (glm::vec3(Random::RangeF1(-3.0f, 3.0f), Random::RangeF1(-3.0f, 3.0f), 0.0f));
167
168 }
169
170 void OnDestroy()
171 {
172
173 }
174
175 void OnUpdate(Timestep ts)
176 {
177 auto& transform = GetComponent<TransformComponent>().GetTransform();
178 float speed = 5.0f;
179
180
181 if (Input::IsKeyPressed(VZ_KEY_A))
182 transform[3][0] -= speed * ts;
183
184 if (Input::IsKeyPressed(VZ_KEY_D))
185 transform[3][0] += speed * ts;
186
187 if (Input::IsKeyPressed(VZ_KEY_W))
188 transform[3][1] += speed * ts;
189
190 if (Input::IsKeyPressed(VZ_KEY_S))
191 transform[3][1] -= speed * ts;
192 }
193
194 };
195
196 m_CameraEntity.AddComponent<NativeScriptComponent>().Bind<CameraController>();
197 m_SecondaryCameraEntity.AddComponent<NativeScriptComponent>().Bind<CameraController>();
198
199#endif
200
202
203 SceneSerializer serializer(m_ActiveScene);
204
206
207 if (VZ_EDITOR_USE_DEFAULT_SCENE) {
209 std::string loadedScene = FileSystem::GetAbsolutePath("../../" + std::string(VZ_EDITOR_DEFAULT_SCENE));
210
211 bool valid = serializer.Deserialize(loadedScene);
212 if (!valid) {
213 VZ_CORE_ERROR("Failed to load default scene: " + loadedScene);
214 VZ_CORE_ERROR("Attempted Scene: " + std::string(VZ_EDITOR_DEFAULT_SCENE));
215 VZ_CORE_ERROR("Current Working Directory: " + FileSystem::GetCurrentWorkingDirectory());
216 VZ_CORE_ERROR("Absolute Path Attempted: " + FileSystem::GetAbsolutePath(loadedScene));
217 VZ_CORE_ERROR("Error loading the scene, please check the paths and file availability.");
218 }
219 else {
220 VZ_CORE_INFO("Successfully loaded the default scene: " + loadedScene);
221 }
222 }
223 m_EditorCamera = EditorCamera(30.0f, 1.778f, 0.1f, 1000.0f);
224 }
225
226
227 }
#define VZ_CORE_INFO(...)
info: general information about application flow
Definition Log.h:37
#define VZ_CORE_ERROR(...)
error: indicates an error that has occurred
Definition Log.h:41
std::unordered_map< char, Ref< SubTexture2D > > s_TextureMap
Definition EditorLayer.h:101
ParticleProps m_ParticleProps
Definition EditorLayer.h:87
Ref< SubTexture2D > m_SubTextureSmoke
Definition EditorLayer.h:71
Ref< Texture2D > m_SpriteSheetCursedLands
Definition EditorLayer.h:68
ParticleSystem m_ParticleSystem
Definition EditorLayer.h:86
EditorCamera m_EditorCamera
Definition EditorLayer.h:79
Ref< Texture2D > m_SpriteSheetCrystals
Definition EditorLayer.h:66
Ref< SubTexture2D > m_SubTextureTown
Definition EditorLayer.h:72
Ref< Texture2D > m_CheckerboardTexture
Definition EditorLayer.h:61
Entity m_CameraEntity
Definition EditorLayer.h:48
Ref< Texture2D > m_SpriteSheetRocks
Definition EditorLayer.h:67
Ref< SubTexture2D > m_SubTextureFire
Definition EditorLayer.h:70
Entity m_SmokeEntity
Definition EditorLayer.h:56
Entity m_FireEntity
Definition EditorLayer.h:56
Ref< Framebuffer > m_Framebuffer
Definition EditorLayer.h:77
Ref< Texture2D > m_SpriteSheetFire
Definition EditorLayer.h:63
Ref< Texture2D > m_SpriteSheetSmoke
Definition EditorLayer.h:64
Ref< Texture2D > m_SpriteSheetTown
Definition EditorLayer.h:65
static void Initialize()
Definition WindowsPlatformUtils.cpp:66
static std::string GetCurrentWorkingDirectory()
Definition WindowsPlatformUtils.cpp:97
static std::string GetAbsolutePath(const std::string &relativePath)
Definition WindowsPlatformUtils.cpp:104
static Ref< Framebuffer > Create(const FramebufferSpecification &spec)
Creates a framebuffer with the given specification.
Definition Framebuffer.cpp:9
static Ref< SubTexture2D > CreateFromCoords(const Ref< Texture2D > &texture, const glm::vec2 &coords, const glm::vec2 &cellSize, const glm::vec2 &spriteSize={1, 1})
Creates a SubTexture2D from a grid of cells within the given texture.
Definition SubTexture2D.cpp:17
static Ref< Texture2D > Create(uint32_t width, uint32_t height)
Definition Texture.cpp:10

References Vesper::SceneSerializer::Deserialize(), Vesper::FramebufferSpecification::Height, Vesper::FileSystem::Initialize(), and Vesper::FramebufferSpecification::Width.

◆ OnDetach()

void Vesper::EditorLayer::OnDetach ( )
overridevirtual

Called when the layer is detached from the application.

Reimplemented from Vesper::Layer.

230 {
232 }

◆ OnEvent()

void Vesper::EditorLayer::OnEvent ( Event & event)
overridevirtual

Called when an event is dispatched to the layer.

Parameters
eventThe event being dispatched.

Reimplemented from Vesper::Layer.

658 {
659 m_CameraController.OnEvent(e);
661 m_EditorCamera.OnEvent(e);
662 }
663
664 EventDispatcher dispatcher(e);
665 dispatcher.Dispatch<KeyPressedEvent>(VZ_BIND_EVENT_FN(EditorLayer::OnKeyPressed));
666
667 }
#define VZ_BIND_EVENT_FN(fn)
Binds a member function as an event handler.
Definition Defines_Macros.h:17
@ Edit
Definition EditorLayer.h:40
bool OnKeyPressed(KeyPressedEvent &e)
Definition EditorLayer.cpp:669
SceneState m_SceneState
Definition EditorLayer.h:42

References Edit, Vesper::EventDispatcher::EventDispatcher(), m_SceneState, and OnKeyPressed().

◆ OnImGuiRender()

void Vesper::EditorLayer::OnImGuiRender ( )
overridevirtual

Called when the layer should render its ImGui components.

Reimplemented from Vesper::Layer.

426 {
428
429 static bool dockspaceOpen = true;
430 static bool opt_fullscreen = true;
431 static bool opt_padding = false;
432 static ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_None;
433
434 // We are using the ImGuiWindowFlags_NoDocking flag to make the parent window not dockable into,
435 // because it would be confusing to have two docking targets within each others.
436 ImGuiWindowFlags window_flags = ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoDocking;
437 if (opt_fullscreen)
438 {
439 const ImGuiViewport* viewport = ImGui::GetMainViewport();
440 ImGui::SetNextWindowPos(viewport->WorkPos);
441 ImGui::SetNextWindowSize(viewport->WorkSize);
442 ImGui::SetNextWindowViewport(viewport->ID);
443 ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
444 ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
445 window_flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove;
446 window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus;
447 }
448
449 // When using ImGuiDockNodeFlags_PassthruCentralNode, DockSpace() will render our background
450 // and handle the pass-thru hole, so we ask Begin() to not render a background.
451 if (dockspace_flags & ImGuiDockNodeFlags_PassthruCentralNode)
452 window_flags |= ImGuiWindowFlags_NoBackground;
453
454 // Important: note that we proceed even if Begin() returns false (aka window is collapsed).
455 // This is because we want to keep our DockSpace() active. If a DockSpace() is inactive,
456 // all active windows docked into it will lose their parent and become undocked.
457 // We cannot preserve the docking relationship between an active window and an inactive docking, otherwise
458 // any change of dockspace/settings would lead to windows being stuck in limbo and never being visible.
459 if (!opt_padding)
460 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
461 ImGui::Begin("DockSpace Demo", &dockspaceOpen, window_flags);
462 if (!opt_padding)
463 ImGui::PopStyleVar();
464
465 if (opt_fullscreen)
466 ImGui::PopStyleVar(2);
467
468 // Submit the DockSpace
469 ImGuiIO& io = ImGui::GetIO();
470 ImGuiStyle& style = ImGui::GetStyle();
471 float minWinSize = style.WindowMinSize.x = 370.0f;
472
473 if (io.ConfigFlags & ImGuiConfigFlags_DockingEnable)
474 {
475 ImGuiID dockspace_id = ImGui::GetID("MyDockSpace");
476 ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags);
477 }
478
479 style.WindowMinSize.x = minWinSize;
480
481 if (ImGui::BeginMenuBar())
482 {
483 if (ImGui::BeginMenu("File"))
484 {
485 // Disabling fullscreen would allow the window to be moved to the front of other windows,
486 // which we can't undo at the moment without finer window depth/z control.
487
488 if (ImGui::MenuItem("New", "Ctrl+N"))
489 NewScene();
490
491
492 if (ImGui::MenuItem("Open..", "Ctrl+O"))
493 OpenScene();
494
495
496 if (ImGui::MenuItem("Save As..", "Ctrl+Shift+S"))
497 SaveSceneAs();
498
499
500 if (ImGui::MenuItem("Reset Scene"))
501 ResetScene();
502
503
504 if (ImGui::MenuItem("Exit"))
506
507 ImGui::EndMenu();
508 }
509
510 ImGui::EndMenuBar();
511 }
512
513 {
514 if (ImGui::Begin("Scenes"))
515 {
516 if (ImGui::Checkbox("Entity Scene", &useEntityScene)) {
517 if (useEntityScene) {
518 scene1 = false;
519 scene2 = false;
520 scene3 = false;
521 scene4 = false;
522 }
523 }
524 if (ImGui::Checkbox("Scene 1 - Basic Shapes", &scene1)) {
525 if (scene1) {
526 scene2 = false;
527 scene3 = false;
528 scene4 = false;
529 }
530 }
531 if (ImGui::Checkbox("Scene 2 - Sprite Sheets", &scene2)) {
532 if (scene2) {
533 scene1 = false;
534 scene3 = false;
535 scene4 = false;
536 }
537 }
538 if (ImGui::Checkbox("Scene 3 - Tile Map", &scene3)) {
539 if (scene3) {
540 scene1 = false;
541 scene2 = false;
542 scene4 = false;
543 }
544 }
545 if (ImGui::Checkbox("Scene 4 - Particle System", &scene4)) {
546 if (scene4) {
547 scene1 = false;
548 scene2 = false;
549 scene3 = false;
550 }
551 }
552 }
553 ImGui::End();
554 }
555
556 m_SceneHierarchyPanel.OnImGuiRender();
557
558 {
559 ImGui::Begin("Settings");
560 ImGui::Text("Renderer2D Stats:");
561 auto stats = Renderer2D::GetStats();
562 ImGui::Text("\tDraw Calls: %d", stats.DrawCalls);
563 ImGui::Text("\tQuad Count: %d", stats.QuadCount);
564 ImGui::Text("\tVertex Count: %d", stats.GetTotalVertexCount());
565 ImGui::Text("\tIndex Count: %d", stats.GetTotalIndexCount());
566 ImGui::Text("Application Settings:");
567 ImGui::Text("\tFPS: %.1f", ImGui::GetIO().Framerate);
568 if (ImGui::ColorEdit4("Background Color", glm::value_ptr(m_ClearColor)))
569 {
571 }
572 ImGui::End();
573 }
574
576
577 {
578 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2{ 0,0 });
579 ImGui::Begin("Viewport");
580 m_ViewportFocused = ImGui::IsWindowFocused();
581 m_ViewportHovered = ImGui::IsWindowHovered();
583
584 ImVec2 viewportPanelSize = ImGui::GetContentRegionAvail();
585 if (m_ViewportSize != *((glm::vec2*)&viewportPanelSize) && viewportPanelSize.x > 0.0f && viewportPanelSize.y > 0)
586 {
587 m_Framebuffer->Resize((uint32_t)viewportPanelSize.x, (uint32_t)viewportPanelSize.y);
588 m_ViewportSize = { viewportPanelSize.x, viewportPanelSize.y };
589
590 m_CameraController.OnResize(viewportPanelSize.x, viewportPanelSize.y);
591 }
592
593 ImVec2 viewportBoundsMin = ImGui::GetCursorScreenPos();
594 ImVec2 viewportBoundsMax = { viewportBoundsMin.x + m_ViewportSize.x, viewportBoundsMin.y + m_ViewportSize.y };
595 m_ViewportBounds[0] = { viewportBoundsMin.x, viewportBoundsMin.y };
596 m_ViewportBounds[1] = { viewportBoundsMax.x, viewportBoundsMax.y };
597
598 uint32_t textureID = m_Framebuffer->GetColorAttachmentRendererID();
599 ImGui::Image(textureID, ImVec2(m_ViewportSize.x, m_ViewportSize.y), ImVec2(0, 1), ImVec2(1, 0));
600
601 // Gizmos
602 Entity selectedEntity = m_SceneHierarchyPanel.GetSelectedEntity();
603 if (selectedEntity && m_GizmoType != -1)
604 {
605 ImGuizmo::SetOrthographic(false);
606 ImGuizmo::SetDrawlist();
607 float windowWidth = (float)ImGui::GetWindowWidth();
608 float windowHeight = (float)ImGui::GetWindowHeight();
609 ImGuizmo::SetRect(ImGui::GetWindowPos().x, ImGui::GetWindowPos().y, windowWidth, windowHeight);
610
611 // Camera
612 // Runtime camera from entity
613 //auto cameraEntity = m_ActiveScene->GetPrimaryCameraEntity();
614 //const auto& camera = cameraEntity.GetComponent<CameraComponent>().Camera;
615 //const glm::mat4& cameraProjection = camera.GetProjection();
616 //glm::mat4 cameraView = glm::inverse(cameraEntity.GetComponent<TransformComponent>().GetTransform());
617
618 // Editor camera
619 const glm::mat4& cameraProjection = m_EditorCamera.GetProjection();
620 glm::mat4 cameraView = m_EditorCamera.GetViewMatrix();
621
622 // Entity Transform
623 auto& tc = selectedEntity.GetComponent<TransformComponent>();
624 glm::mat4 transform = tc.GetTransform();
625
626 // Snapping
628 // use the editor layer snap values
629 float snapValue = m_TranslationSnap;
630 if (m_GizmoType == ImGuizmo::OPERATION::ROTATE)
631 snapValue = m_RotationSnap;
632 else if (m_GizmoType == ImGuizmo::OPERATION::SCALE)
633 snapValue = m_ScaleSnap;
634
635 float snapValues[3] = { snapValue, snapValue, snapValue };
636
637 ImGuizmo::Manipulate(glm::value_ptr(cameraView), glm::value_ptr(cameraProjection),
638 (ImGuizmo::OPERATION)m_GizmoType, ImGuizmo::LOCAL, glm::value_ptr(transform),
639 nullptr, snap ? snapValues : nullptr);
640
641 if (ImGuizmo::IsUsing())
642 {
643 glm::vec3 translation, rotation, scale;
644 Vesper::Math::DecomposeTransform(transform, translation, rotation, scale);
645 tc.Translation = translation;
646 tc.Rotation = rotation;
647 tc.Scale = scale;
648 }
649 }
650
651 ImGui::End();
652 ImGui::PopStyleVar();
653 }
654 ImGui::End();
655 }
static Application & Get()
Retrieves the singleton instance of the Application.
Definition Application.h:67
ImGuiLayer * GetImGuiLayer()
Retrieves the ImGui layer.
Definition Application.h:64
void Close()
Closes the application.
Definition Application.cpp:55
bool m_ViewportFocused
Definition EditorLayer.h:44
float m_RotationSnap
Definition EditorLayer.h:51
void OpenScene()
Definition EditorLayer.cpp:728
glm::vec4 m_ClearColor
Definition EditorLayer.h:97
bool scene3
Definition EditorLayer.h:90
int m_GizmoType
Definition EditorLayer.h:50
bool scene4
Definition EditorLayer.h:90
float m_ScaleSnap
Definition EditorLayer.h:51
void NewScene()
Definition EditorLayer.cpp:721
float m_TranslationSnap
Definition EditorLayer.h:51
bool scene1
Definition EditorLayer.h:90
void SaveSceneAs()
Definition EditorLayer.cpp:744
bool useEntityScene
Definition EditorLayer.h:91
glm::vec2 m_ViewportBounds[2]
Definition EditorLayer.h:46
bool scene2
Definition EditorLayer.h:90
bool m_ViewportHovered
Definition EditorLayer.h:44
void ResetScene()
Definition EditorLayer.cpp:755
virtual void SetBlockEvents(bool block)
Definition ImGuiLayer.h:26
static bool IsKeyPressed(int keycode)
Checks if the specified key is currently pressed.
Definition WindowsInput.cpp:9
static void SetClearColor(const glm::vec4 &color)
Sets the clear color for the renderer.
Definition RenderCommand.h:26
static Statistics GetStats()
Retrieves the current rendering statistics.
Definition Renderer2D.cpp:502
@ LeftControl
Definition KeyCodes.h:140
bool DecomposeTransform(const glm::mat4 &transform, glm::vec3 &translation, glm::vec3 &rotation, glm::vec3 &scale)
Decomposes a transformation matrix into its translation, rotation, and scale components.
Definition Math.cpp:10
static void DisplayVesperInfo_ImGui()
Definition VesperImGui.h:7

References Vesper::Application::Close(), Vesper::DisplayVesperInfo_ImGui(), Vesper::Application::Get(), Vesper::Application::GetImGuiLayer(), Vesper::Renderer2D::GetStats(), Vesper::Input::IsKeyPressed(), Vesper::Key::LeftControl, m_GizmoType, m_RotationSnap, m_ScaleSnap, m_TranslationSnap, m_ViewportFocused, m_ViewportHovered, NewScene(), OpenScene(), ResetScene(), SaveSceneAs(), scene1, scene2, scene3, scene4, Vesper::ImGuiLayer::SetBlockEvents(), and useEntityScene.

◆ OnKeyPressed()

bool Vesper::EditorLayer::OnKeyPressed ( KeyPressedEvent & e)
private
670 {
671 // Shortcuts
672 if (e.GetRepeatCount() > 0)
673 return false;
674
677 switch (e.GetKeyCode())
678 {
679 // Scene Shortcuts
680 case Key::N:
681
682 if (control)
683 {
684 NewScene();
685 }
686 break;
687
688 case Key::O:
689 if (control)
690 {
691 OpenScene();
692 }
693 break;
694
695 case Key::S:
696 if (control && shift)
697 {
698 SaveSceneAs();
699 }
700 break;
701
702
703 // Gizmo Shortcuts
704 case Key::Q:
705 m_GizmoType = -1;
706 break;
707 case Key::W:
708 m_GizmoType = ImGuizmo::OPERATION::TRANSLATE;
709 break;
710 case Key::E:
711 m_GizmoType = ImGuizmo::OPERATION::ROTATE;
712 break;
713 case Key::R:
714 m_GizmoType = ImGuizmo::OPERATION::SCALE;
715 break;
716 }
717 return false;
718
719 }
@ RightShift
Definition KeyCodes.h:143
@ RightControl
Definition KeyCodes.h:144
@ Q
Definition KeyCodes.h:54
@ O
Definition KeyCodes.h:52
@ LeftShift
Definition KeyCodes.h:139
@ W
Definition KeyCodes.h:60
@ E
Definition KeyCodes.h:42
@ R
Definition KeyCodes.h:55
@ N
Definition KeyCodes.h:51
@ S
Definition KeyCodes.h:56

References Vesper::KeyEvent::GetKeyCode(), Vesper::KeyPressedEvent::GetRepeatCount(), Vesper::Input::IsKeyPressed(), Vesper::Key::LeftControl, Vesper::Key::LeftShift, m_GizmoType, Vesper::Key::N, NewScene(), Vesper::Key::O, OpenScene(), Vesper::Key::Q, Vesper::Key::RightControl, Vesper::Key::RightShift, Vesper::Key::S, and SaveSceneAs().

Referenced by OnEvent().

◆ OnUpdate()

void Vesper::EditorLayer::OnUpdate ( Timestep ts)
overridevirtual

Called every frame to update the layer with the given timestep.

Parameters
tsThe timestep representing the time elapsed since the last update.

C++ test code scenes

TODO: get it to animate through texture sheet sub texture indices

Reimplemented from Vesper::Layer.

235 {
237
238 // Resize
239 if (Vesper::FramebufferSpecification spec = m_Framebuffer->GetSpecification();
240 m_ViewportSize.x > 0.0f && m_ViewportSize.y > 0.0f &&
241 (spec.Width != (uint32_t)m_ViewportSize.x || spec.Height != (uint32_t)m_ViewportSize.y))
242 {
243 m_Framebuffer->Resize((uint32_t)m_ViewportSize.x, (uint32_t)m_ViewportSize.y);
245 m_EditorCamera.SetViewportSize(m_ViewportSize.x, m_ViewportSize.y);
246 m_ActiveScene->OnViewportResize((uint32_t)m_ViewportSize.x, (uint32_t)m_ViewportSize.y);
247 }
248
249 // Update
251 {
252 m_CameraController.OnUpdate(ts);
253 }
254 m_EditorCamera.OnUpdate(ts);
255
256
257 // Render
259 {
260 VZ_PROFILE_SCOPE("Renderer Prep");
261 m_Framebuffer->Bind();
264 }
265
266
267 // Draw
268 {
269 static float rotation = 0.0f;
270 rotation += ts * 50.0f;
271 VZ_PROFILE_SCOPE("Renderer2D Draw");
272
274 {
275 // Basic scene
276 if (scene1)
277 {
278 VZ_PROFILE_SCOPE("Scene 1");
280
281 // Checkerboard background
282 Renderer2D::DrawQuadWithTexture({ 0.0f, 0.0f, -0.25f }, { 25.0f, 25.0f }, m_CheckerboardTexture, 10.0f, m_BackgroundColor);
283
284 // Squares
285 Renderer2D::DrawQuadRotated({ 0.0f, 1.25f, -0.165f }, { 1.0f, 1.0f }, glm::radians(45.0f + m_squareRotation + rotation), m_SquareColor);
286
287 // Rotated Squares
289
290 Renderer2D::DrawQuadRotatedWithTexture({ 2.0f, -0.25f, -0.15f }, { 1.0f, 1.0f }, m_CheckerboardTexture, glm::radians(m_squareRotation + rotation), m_textureScale, m_TextureTintColor1);
291 Renderer2D::DrawQuadRotatedWithTexture({ -2.0f, -0.25f, -0.15f }, { 1.0f, 1.0f }, m_CheckerboardTexture, glm::radians(m_squareRotation + rotation), m_textureScale, m_TextureTintColor2);
292
293 glm::vec3 startPos = { 0.0f, 0.0f, -0.175f };
294 //Renderer2D::DrawQuad(pos, { 0.8f, 0.8f }, { 0.8f, 0.2f, 0.3f, 1.0f });
295 glm::vec3 finalPos = startPos;
296 float offset = 0.9f;
297 for (int y = -10; y <= 10; y++)
298 {
299 for (int x = -10; x <= 10; x++)
300 {
301 glm::vec3 newPos = { startPos.x - x * offset, startPos.y - y * offset, startPos.z };
302 Renderer2D::DrawQuad(newPos, { 0.8f, 0.8f }, { (x + 5) / 10.0f, 0.4f, (y + 5) / 10.0f, 1.0f });
303 finalPos = newPos;
304 }
305 }
306 Renderer2D::DrawQuad(finalPos, { 0.8f, 0.8f }, { 0.8f, 0.2f, 0.3f, 1.0f });
307
309
310 }
311
312 // Sprite sheet scene
313 if (scene2)
314 {
315 VZ_PROFILE_SCOPE("Scene 2");
316
318
319 // Sprite sheet drawn as full texture
320 Renderer2D::DrawQuadWithTexture({ -1.0f, 1.5f, 0.5f }, { 1, 1 }, m_SpriteSheetFire, 1.0f, { 1.0f, 1.0f, 1.0f, 1.0f });
321 Renderer2D::DrawQuadRotatedWithTexture({ 1.5f, 0.0f, 0.0f }, { 1.78f, 1.0f }, m_SpriteSheetTown, 0, 1.0f, { 1.0f, 1.0f, 1.0f, 1.0f });
322
323
324 // Sprite sheet drawn as full texture rotated
325 Renderer2D::DrawQuadRotatedWithTexture({ -1.5f, 0.0f, 0.0f }, { 1.78f, 1.0f }, m_SpriteSheetTown, glm::radians(-rotation), 1.0f, { 1.0f, 1.0f, 1.0f, 1.0f });
326
327 // Sub texture from tilesheet
328 Renderer2D::DrawQuadWithTexture({ 2.0f, -1.5f, 0.0f }, { 1.0f, 1.0f }, m_SubTextureTown, 1.0f, { 1.0f, 1.0f, 1.0f, 1.0f });
329
330 // Grid of sub textures from tilesheet
331 for (int y = -5; y < 5; y++)
332 {
333 for (int x = -5; x < 5; x++)
334 {
335 glm::vec3 pos = glm::vec3(x * 0.09f, y * 0.09f, -0.09f);
336 Renderer2D::DrawQuadWithTexture(pos, { 0.1f, 0.1f }, m_SubTextureTown, 1.0f, glm::vec4(1.0f));
337 }
338 }
339
341 Renderer2D::DrawQuadRotatedWithTexture({ 0.0f, -1.5f, 0.0f }, { 1.0f, 1.0f }, m_SubTextureFire, 0, 1.0f, { 1.0f, 1.0f, 1.0f, 1.0f });
342
344 }
345
346 // Tile map scene
347 if (scene3)
348 {
349 VZ_PROFILE_SCOPE("Scene 3");
351 for (uint32_t y = 0; y < s_MapHeight; y++)
352 {
353 for (uint32_t x = 0; x < s_MapWidth; x++)
354 {
355 char tileChar = s_MapTiles[x + y * s_MapWidth];
356 Ref<SubTexture2D> texture;
357 if (s_TextureMap.find(tileChar) != s_TextureMap.end())
358 texture = s_TextureMap[tileChar];
359 else
360 texture = s_TextureMap['G']; // Default to grass
361
362 Renderer2D::DrawQuadWithTexture({ x - s_MapWidth / 2.0f, s_MapHeight - y - s_MapHeight / 2.0f, 0.1f }, { 1.0f, 1.0f }, texture, 1.0f, glm::vec4(1.0f));
363
364 }
365 }
367 }
368
369 // Particle scene
370 if (scene4)
371 {
372 VZ_PROFILE_SCOPE("Scene 4");
374 for (float y = -5.0f; y < 5.0f; y += 0.5f)
375 {
376 for (float x = -5.0f; x < 5.0f; x += 0.5f)
377 {
378 glm::vec4 color = { (x + 5.0f) / 10.0f, 0.4f,(y + 5.0f) / 10.0f, 0.35f };
379 Renderer2D::DrawQuad({ x, y }, { 0.45f, 0.45f }, color);
380 }
381 }
382
384 {
385 ImVec2 mousePos = ImGui::GetMousePos();
386
387 mousePos.x -= m_ViewportBounds[0].x;
388 mousePos.y -= m_ViewportBounds[0].y;
389
390 if (mousePos.x < 0 || mousePos.y < 0 || mousePos.x > m_ViewportSize.x || mousePos.y > m_ViewportSize.y)
391 return;
392
393 auto bounds = m_CameraController.GetBounds();
394 auto camPos = m_CameraController.GetPosition();
395
396 float width = m_ViewportSize.x;
397 float height = m_ViewportSize.y;
398
399 m_ParticleProps.Position.x = (mousePos.x / width) * bounds.GetWidth() - bounds.GetWidth() * 0.5f + camPos.x;
400 m_ParticleProps.Position.y = bounds.GetHeight() * 0.5f - (mousePos.y / height) * bounds.GetHeight() + camPos.y;
401
402 for (int i = 0; i < ParticleEmitCount; i++) {
404 }
405 }
406 m_ParticleSystem.OnUpdate(ts);
407 m_ParticleSystem.OnRender(m_CameraController.GetCamera());
409
410 }
411 }
412
413 if (useEntityScene)
414 {
415 VZ_PROFILE_SCOPE("Entity Scene Update");
416 // Update scene
417 m_ActiveScene->OnUpdateRuntime(ts);
418 m_ActiveScene->OnUpdateEditor(ts, m_EditorCamera);
419 }
420 }
421
422 m_Framebuffer->Unbind();
423 }
static const uint32_t s_MapHeight
Definition EditorLayer.cpp:13
static const char * s_MapTiles
Definition EditorLayer.cpp:14
static const uint32_t s_MapWidth
Definition EditorLayer.cpp:12
#define VZ_PROFILE_SCOPE(name)
Definition Instrumentor.h:239
glm::vec4 m_SpecialQuadColor
Definition EditorLayer.h:98
glm::vec4 m_TextureTintColor1
Definition EditorLayer.h:94
glm::vec4 m_SquareColor
Definition EditorLayer.h:93
float m_squareRotation
Definition EditorLayer.h:82
glm::vec4 m_TextureTintColor2
Definition EditorLayer.h:95
glm::vec4 m_BackgroundColor
Definition EditorLayer.h:96
int ParticleEmitCount
Definition EditorLayer.h:84
float m_textureScale
Definition EditorLayer.h:81
float m_specialQuadRotation
Definition EditorLayer.h:83
static bool IsMouseButtonPressed(int button)
Checks if the specified mouse button is currently pressed.
Definition WindowsInput.cpp:16
static void Clear()
Clears the rendering buffers.
Definition RenderCommand.h:32
static void ResetStats()
Resets the rendering statistics.
Definition Renderer2D.cpp:497
static void DrawQuadRotatedWithTexture(const glm::mat4 &transform, const Ref< Texture2D > &texture, float tilingFactor, const glm::vec4 tintColor)
Draws a rotated textured quad with the given transform, texture, tiling factor, and tint color.
Definition Renderer2D.cpp:368
static void EndScene()
Ends the current scene.
Definition Renderer2D.cpp:160
static void BeginScene(const Camera &camera, const glm::mat4 &transform)
Begins a new scene with the given camera and transform.
Definition Renderer2D.cpp:123
static void DrawQuad(const glm::mat4 &transform, const glm::vec4 &color)
Draws a colored quad with the given transform and color.
Definition Renderer2D.cpp:180
static void DrawQuadRotated(const glm::mat4 &transform, const glm::vec4 &color)
Draws a rotated colored quad with the given transform and color.
Definition Renderer2D.cpp:330
static void DrawQuadWithTexture(const glm::mat4 &transform, const Ref< Texture2D > &texture, float tilingFactor, const glm::vec4 tintColor)
Draws a textured quad with the given transform, texture, tiling factor, and tint color.
Definition Renderer2D.cpp:218
@ ButtonLeft
Definition MouseButtonCodes.h:26
std::shared_ptr< T > Ref
A smart pointer type representing shared ownership of an object.
Definition Defines_Macros.h:63

References Vesper::Mouse::ButtonLeft, Vesper::RenderCommand::Clear(), Vesper::Renderer2D::EndScene(), Vesper::Input::IsMouseButtonPressed(), m_ViewportFocused, m_ViewportHovered, ParticleEmitCount, Vesper::Renderer2D::ResetStats(), s_MapHeight, s_MapTiles, s_MapWidth, scene1, scene2, scene3, scene4, and useEntityScene.

◆ OpenScene()

void Vesper::EditorLayer::OpenScene ( )
private
729 {
730 std::string filePath = FileDialogs::OpenFile("Vesper Scene (*.vesper)\0*.vesper\0");
731
732 if (!filePath.empty())
733 {
735 m_ActiveScene->OnViewportResize((uint32_t)m_ViewportSize.x, (uint32_t)m_ViewportSize.y);
737
738 SceneSerializer serializer(m_ActiveScene);
739 serializer.Deserialize(filePath);
740 VZ_CORE_INFO("Scene deserialized from: " + filePath);
741 }
742 }
static std::string OpenFile(const char *filter)
Opens a file dialog to select a file to open.
Definition WindowsPlatformUtils.cpp:12

References Vesper::SceneSerializer::Deserialize().

Referenced by OnImGuiRender(), and OnKeyPressed().

◆ ResetScene()

void Vesper::EditorLayer::ResetScene ( )
private
756 {
757 VZ_CORE_ASSERT(false, "Not implemented yet!");
758 }
#define VZ_CORE_ASSERT(x,...)
Definition Asserts.h:20

Referenced by OnImGuiRender().

◆ SaveSceneAs()

void Vesper::EditorLayer::SaveSceneAs ( )
private
745 {
746 std::string filePath = FileDialogs::SaveFile("Vesper Scene (*.vesper)\0*.vesper\0");
747 if (!filePath.empty())
748 {
749 SceneSerializer serializer(m_ActiveScene);
750 serializer.Serialize(filePath);
751 VZ_CORE_INFO("Scene serialized to: " + filePath);
752 }
753 }
static std::string SaveFile(const char *filter)
Opens a file dialog to select a location to save a file.
Definition WindowsPlatformUtils.cpp:29

References Vesper::SceneSerializer::Serialize().

Referenced by OnImGuiRender(), and OnKeyPressed().

Member Data Documentation

◆ lastFrameTime

float Vesper::EditorLayer::lastFrameTime = 0.0f
private

◆ m_ActiveScene

Ref<Scene> Vesper::EditorLayer::m_ActiveScene
private

◆ m_BackgroundColor

glm::vec4 Vesper::EditorLayer::m_BackgroundColor = { 0.1f, 0.1f, 0.1f, 1.0f }
private
96{ 0.1f, 0.1f, 0.1f, 1.0f };

◆ m_CameraController

OrthographicCameraController Vesper::EditorLayer::m_CameraController
private

◆ m_CameraEntity

Entity Vesper::EditorLayer::m_CameraEntity
private

◆ m_CheckerboardTexture

Ref<Texture2D> Vesper::EditorLayer::m_CheckerboardTexture
private

◆ m_ClearColor

glm::vec4 Vesper::EditorLayer::m_ClearColor = { 0.1f, 0.3f, 0.3f, 1.0f }
private
97{ 0.1f, 0.3f, 0.3f, 1.0f };

◆ m_EditorCamera

EditorCamera Vesper::EditorLayer::m_EditorCamera
private

◆ m_EditorScene

Ref<Scene> Vesper::EditorLayer::m_EditorScene
private

◆ m_FireEntity

Entity Vesper::EditorLayer::m_FireEntity
private

◆ m_FlatColorShader

Ref<Shader> Vesper::EditorLayer::m_FlatColorShader
private

◆ m_Framebuffer

Ref<Framebuffer> Vesper::EditorLayer::m_Framebuffer
private

◆ m_GizmoType

int Vesper::EditorLayer::m_GizmoType = -1
private

Referenced by OnImGuiRender(), and OnKeyPressed().

◆ m_ParticleProps

ParticleProps Vesper::EditorLayer::m_ParticleProps
private

◆ m_ParticleSystem

ParticleSystem Vesper::EditorLayer::m_ParticleSystem
private

◆ m_PrimaryCamera

bool Vesper::EditorLayer::m_PrimaryCamera = true
private

◆ m_RotationSnap

float Vesper::EditorLayer::m_RotationSnap = 45.0f
private

Referenced by OnImGuiRender().

◆ m_ScaleSnap

float Vesper::EditorLayer::m_ScaleSnap = 0.5f
private

Referenced by OnImGuiRender().

◆ m_SceneHierarchyPanel

SceneHierarchyPanel Vesper::EditorLayer::m_SceneHierarchyPanel
private

◆ m_SceneState

SceneState Vesper::EditorLayer::m_SceneState = SceneState::Edit
private

Referenced by OnEvent().

◆ m_SmokeEntity

Entity Vesper::EditorLayer::m_SmokeEntity
private

◆ m_SpecialQuadColor

glm::vec4 Vesper::EditorLayer::m_SpecialQuadColor = { 0.9f, 0.2f, 0.8f, 1.0f }
private
98{ 0.9f, 0.2f, 0.8f, 1.0f };

◆ m_specialQuadRotation

float Vesper::EditorLayer::m_specialQuadRotation = 0.5f
private

◆ m_SpriteSheetCrystals

Ref<Texture2D> Vesper::EditorLayer::m_SpriteSheetCrystals
private

◆ m_SpriteSheetCursedLands

Ref<Texture2D> Vesper::EditorLayer::m_SpriteSheetCursedLands
private

◆ m_SpriteSheetFire

Ref<Texture2D> Vesper::EditorLayer::m_SpriteSheetFire
private

◆ m_SpriteSheetRocks

Ref<Texture2D> Vesper::EditorLayer::m_SpriteSheetRocks
private

◆ m_SpriteSheetSmoke

Ref<Texture2D> Vesper::EditorLayer::m_SpriteSheetSmoke
private

◆ m_SpriteSheetTown

Ref<Texture2D> Vesper::EditorLayer::m_SpriteSheetTown
private

◆ m_SquareColor

glm::vec4 Vesper::EditorLayer::m_SquareColor = { 0.2f, 0.3f, 0.8f, 1.0f }
private
93{ 0.2f, 0.3f, 0.8f, 1.0f };

◆ m_squareRotation

float Vesper::EditorLayer::m_squareRotation = 25.0f
private

◆ m_SquareVA

Ref<VertexArray> Vesper::EditorLayer::m_SquareVA
private

◆ m_SubTextureFire

Ref<SubTexture2D> Vesper::EditorLayer::m_SubTextureFire
private

◆ m_SubTextureSmoke

Ref<SubTexture2D> Vesper::EditorLayer::m_SubTextureSmoke
private

◆ m_SubTextureTown

Ref<SubTexture2D> Vesper::EditorLayer::m_SubTextureTown
private

◆ m_textureScale

float Vesper::EditorLayer::m_textureScale = 1.0f
private

◆ m_TextureTintColor1

glm::vec4 Vesper::EditorLayer::m_TextureTintColor1 = { 1.0f, 1.0f, 1.0f, 1.0f }
private
94{ 1.0f, 1.0f, 1.0f, 1.0f };

◆ m_TextureTintColor2

glm::vec4 Vesper::EditorLayer::m_TextureTintColor2 = { 1.0f, 1.0f, 1.0f, 1.0f }
private
95{ 1.0f, 1.0f, 1.0f, 1.0f };

◆ m_TranslationSnap

float Vesper::EditorLayer::m_TranslationSnap = 0.5f
private

Referenced by OnImGuiRender().

◆ m_UseSpecialQuadColor

bool Vesper::EditorLayer::m_UseSpecialQuadColor = false
private

◆ m_ViewportBounds

glm::vec2 Vesper::EditorLayer::m_ViewportBounds[2] = { {0,0}, {0,0} }
private
46{ {0,0}, {0,0} };

◆ m_ViewportFocused

bool Vesper::EditorLayer::m_ViewportFocused = false
private

Referenced by OnImGuiRender(), and OnUpdate().

◆ m_ViewportHovered

bool Vesper::EditorLayer::m_ViewportHovered = false
private

Referenced by OnImGuiRender(), and OnUpdate().

◆ m_ViewportSize

glm::vec2 Vesper::EditorLayer::m_ViewportSize = {0,0}
private
45{0,0};

◆ ParticleEmitCount

int Vesper::EditorLayer::ParticleEmitCount = 100
private

Referenced by OnUpdate().

◆ s_TextureMap

std::unordered_map<char, Ref<SubTexture2D> > Vesper::EditorLayer::s_TextureMap
private

◆ scene1

bool Vesper::EditorLayer::scene1 = false
private

Referenced by OnImGuiRender(), and OnUpdate().

◆ scene2

bool Vesper::EditorLayer::scene2 = false
private

Referenced by OnImGuiRender(), and OnUpdate().

◆ scene3

bool Vesper::EditorLayer::scene3 = false
private

Referenced by OnImGuiRender(), and OnUpdate().

◆ scene4

bool Vesper::EditorLayer::scene4 = false
private

Referenced by OnImGuiRender(), and OnUpdate().

◆ useEntityScene

bool Vesper::EditorLayer::useEntityScene = true
private

Referenced by OnImGuiRender(), and OnUpdate().


The documentation for this class was generated from the following files: