|
|
|
|
/******************************************************************************
|
|
|
|
|
* File - editor.cpp
|
|
|
|
|
* Author - Joey Pollack
|
|
|
|
|
* Date - 2021/11/01 (y/m/d)
|
|
|
|
|
* Mod Date - 2021/11/01 (y/m/d)
|
|
|
|
|
* Description - Entry point for the editor run mode.
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
|
|
#include "editor.h"
|
|
|
|
|
|
|
|
|
|
#include "panel_manager.h"
|
|
|
|
|
#include <core/core.h>
|
|
|
|
|
#include <utils/logger.h>
|
|
|
|
|
#include <gui/fileBrowser.h>
|
|
|
|
|
#include <internal_data/dataManager.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "panels/assetBrowser.h"
|
|
|
|
|
|
|
|
|
|
// Tools
|
|
|
|
|
#include "tools/map_editor/map_editor.h"
|
|
|
|
|
|
|
|
|
|
namespace lunarium
|
|
|
|
|
{
|
|
|
|
|
namespace editor
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
Editor::Editor()
|
|
|
|
|
: mLogCat(-1), mpFileBrowser(nullptr), mpPath(nullptr), mDoNewProject(false), mDoOpenProject(false),
|
|
|
|
|
mDoSaveProject(false), mDoSaveAs(false), mpMapEditor(nullptr)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
OpRes Editor::Initialize()
|
|
|
|
|
{
|
|
|
|
|
mLogCat = Logger::RegisterCategory("EDITOR");
|
|
|
|
|
|
|
|
|
|
// Initialize internal data
|
|
|
|
|
DataManager::Initialize();
|
|
|
|
|
|
|
|
|
|
PanelManager::GetInstance().Initialize(this);
|
|
|
|
|
|
|
|
|
|
return OpRes::OK();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::Shutdown()
|
|
|
|
|
{
|
|
|
|
|
DataManager::Shutdown();
|
|
|
|
|
PanelManager::GetInstance().Shutdown();
|
|
|
|
|
PanelManager::FreeInstance();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::OnTick(double delta)
|
|
|
|
|
{
|
|
|
|
|
// Panels
|
|
|
|
|
PanelManager::GetInstance().OnTick(delta);
|
|
|
|
|
|
|
|
|
|
// Tools
|
|
|
|
|
if (mpMapEditor)
|
|
|
|
|
{
|
|
|
|
|
mpMapEditor->OnTick(delta);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HandleMenuEvents();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::OnRender(lunarium::IGraphics* g)
|
|
|
|
|
{
|
|
|
|
|
PanelManager::GetInstance().OnRender(g);
|
|
|
|
|
|
|
|
|
|
if (mpMapEditor)
|
|
|
|
|
{
|
|
|
|
|
mpMapEditor->OnRender(g);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mpFileBrowser)
|
|
|
|
|
{
|
|
|
|
|
if (!mpFileBrowser->DoFrame())
|
|
|
|
|
{
|
|
|
|
|
mpPath = mpFileBrowser->GetSelectedItem();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t Editor::GetLogCat() const
|
|
|
|
|
{
|
|
|
|
|
return mLogCat;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool Editor::IsToolOpen(ToolType type) const
|
|
|
|
|
{
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
|
|
|
|
case ToolType::TT_MAP_EDITOR:
|
|
|
|
|
{
|
|
|
|
|
if (!mpMapEditor)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
return mpMapEditor->IsOpen();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::WARNING, "And unknown ToolType was passed into Editor::IsToolOpen: %n", type);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////
|
|
|
|
|
// HELPER METHODS
|
|
|
|
|
////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Editor::DestroyTools()
|
|
|
|
|
{
|
|
|
|
|
mpMapEditor->Shutdown();
|
|
|
|
|
delete mpMapEditor;
|
|
|
|
|
mpMapEditor = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::HandleMenuEvents()
|
|
|
|
|
{
|
|
|
|
|
///////////////////////////
|
|
|
|
|
// FILE
|
|
|
|
|
if (mDoNewProject)
|
|
|
|
|
{
|
|
|
|
|
if (!mpFileBrowser)
|
|
|
|
|
{
|
|
|
|
|
mpFileBrowser = new FileBrowser;
|
|
|
|
|
// mpFileBrowser->WarnOnExistingFileSelection(true);
|
|
|
|
|
mpFileBrowser->SetSelectionMode(FileBrowser::SelectionMode::FILES_ONLY);
|
|
|
|
|
mpFileBrowser->SetPrompt("Pick a location and name for the project");
|
|
|
|
|
if (!mpFileBrowser->OpenInDirectory(""))
|
|
|
|
|
{
|
|
|
|
|
delete mpFileBrowser;
|
|
|
|
|
mpFileBrowser = nullptr;
|
|
|
|
|
mDoNewProject = false;
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::ERROR, "Could not open the File Browser");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!mpFileBrowser->IsOpen())
|
|
|
|
|
{
|
|
|
|
|
if (mpFileBrowser->GetResult() == FileBrowser::Result::OK)
|
|
|
|
|
{
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::INFO, "Generating new project at %s", mpPath->string().c_str());
|
|
|
|
|
|
|
|
|
|
// Generate new project at mpPath
|
|
|
|
|
OpRes result = mProject.GenerateProject(mpPath->filename().string(), mpPath->parent_path());
|
|
|
|
|
if (Failed(result))
|
|
|
|
|
{
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::ERROR, "Could not create a new project: %s", result.Description);
|
|
|
|
|
}
|
|
|
|
|
((AssetBrowser*)PanelManager::GetInstance().GetPanel(PanelType::PT_ASSET_BROWSER))->SetAssetDirectory(*mpPath / std::filesystem::path("contents/assets"));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::INFO, "New Project operation cancelled");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mpPath = nullptr;
|
|
|
|
|
delete mpFileBrowser;
|
|
|
|
|
mpFileBrowser = nullptr;
|
|
|
|
|
mDoNewProject = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mDoOpenProject)
|
|
|
|
|
{
|
|
|
|
|
if (!mpFileBrowser)
|
|
|
|
|
{
|
|
|
|
|
mpFileBrowser = new FileBrowser;
|
|
|
|
|
// mpFileBrowser->WarnOnExistingFileSelection(true);
|
|
|
|
|
mpFileBrowser->SetSelectionMode(FileBrowser::SelectionMode::FILES_ONLY);
|
|
|
|
|
mpFileBrowser->SetPrompt("Locate the project to open");
|
|
|
|
|
if (!mpFileBrowser->OpenInDirectory(""))
|
|
|
|
|
{
|
|
|
|
|
delete mpFileBrowser;
|
|
|
|
|
mpFileBrowser = nullptr;
|
|
|
|
|
mDoOpenProject = false;
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::ERROR, "Could not open the File Browser");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!mpFileBrowser->IsOpen())
|
|
|
|
|
{
|
|
|
|
|
if (mpFileBrowser->GetResult() == FileBrowser::Result::OK)
|
|
|
|
|
{
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::INFO, "Generating new project at %s", mpPath->string().c_str());
|
|
|
|
|
|
|
|
|
|
// Generate new project at mpPath
|
|
|
|
|
OpRes result = mProject.LoadProject(*mpPath);
|
|
|
|
|
if (Failed(result))
|
|
|
|
|
{
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::ERROR, "Could not open project: %s -- reason: %s", mpPath->string().c_str(), result.Description);
|
|
|
|
|
}
|
|
|
|
|
((AssetBrowser*)PanelManager::GetInstance().GetPanel(PanelType::PT_ASSET_BROWSER))->SetAssetDirectory(mpPath->parent_path() / std::filesystem::path("contents/assets"));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Logger::Log(mLogCat, LogLevel::INFO, "New Project operation cancelled");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mpPath = nullptr;
|
|
|
|
|
delete mpFileBrowser;
|
|
|
|
|
mpFileBrowser = nullptr;
|
|
|
|
|
mDoOpenProject = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mDoSaveProject)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
mDoSaveProject = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (mDoSaveAs)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
mDoSaveAs = false;
|
|
|
|
|
}
|
|
|
|
|
///////////////////////////
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////
|
|
|
|
|
// MENU BAR EVENTS
|
|
|
|
|
////////////////////////////////////////////////////////////
|
|
|
|
|
void Editor::NewProject()
|
|
|
|
|
{
|
|
|
|
|
mDoNewProject = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::OpenProject()
|
|
|
|
|
{
|
|
|
|
|
mDoOpenProject = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::SaveProject()
|
|
|
|
|
{
|
|
|
|
|
mDoSaveProject = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::SaveAs()
|
|
|
|
|
{
|
|
|
|
|
mDoSaveAs = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::Exit()
|
|
|
|
|
{
|
|
|
|
|
Core::GetInstance().SignalShutdown();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Editor::ShowAboutPanel()
|
|
|
|
|
{
|
|
|
|
|
PanelManager::GetInstance().OpenPanel(PanelType::PT_ABOUT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Editor::OpenMapEditor()
|
|
|
|
|
{
|
|
|
|
|
if (!mpMapEditor)
|
|
|
|
|
{
|
|
|
|
|
mpMapEditor = new MapEditor;
|
|
|
|
|
mpMapEditor->Initialize(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mpMapEditor->Open();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|