Files
Nuake-custom/Nuake/src/Resource/FGD/FGDFile.cpp
2023-10-02 01:34:34 -04:00

121 lines
2.6 KiB
C++

#include "FGDFile.h"
#include <src/Resource/FGD/FDGSerializer.h>
#include <src/Core/FileSystem.h>
#include "Engine.h"
namespace Nuake {
FGDFile::FGDFile(const std::string path)
{
this->Path = path;
this->BaseEntities = std::vector<FGDBaseEntity>();
this->BrushEntities = std::vector<FGDBrushEntity>();
this->PointEntities = std::vector<FGDPointEntity>();
}
FGDFile::FGDFile()
{
this->Path = "";
this->BaseEntities = std::vector<FGDBaseEntity>();
this->BrushEntities = std::vector<FGDBrushEntity>();
this->PointEntities = std::vector<FGDPointEntity>();
// TODO: Remove this, debugging stuff.
FGDPointEntity newEnt;
newEnt.Name = "Light";
newEnt.Description = "A Nuake PBR light";
this->PointEntities.push_back(newEnt);
}
bool FGDFile::Save()
{
// Write to file.
FileSystem::BeginWriteFile(Path);
FileSystem::WriteLine(Serialize().dump(4));
FileSystem::EndWriteFile();
return true;
}
bool FGDFile::SaveAs()
{
return false;
}
void FGDFile::AddClass(FGDClass fgdClass)
{
//this->Classes.push_back(fgdClass);
}
void FGDFile::RemoveClass(const std::string& name)
{
//int idx = 0;
//for (auto& c : Classes)
//{
//if (c.Name == name)
//Classes.erase(Classes.begin() + idx);
//idx++;
//}
}
// Exports the FGD data into an fgd file that Trenchbroom can read.
// Should be exported in the Trenchbroom directory directly. /Games/project_name
bool FGDFile::Export()
{
Ref<Project> project = Engine::GetProject();
if (project->Name.empty())
{
Logger::Log("Failed to create game configuration file: project name cannot be empty", "trenchbroom", CRITICAL);
return false;
}
// Create the games/PROJECT_NAME/ directories if they don't exist.
const std::string gamesDirectoryPath = project->TrenchbroomPath + "/../games/";
if (!FileSystem::DirectoryExists(gamesDirectoryPath, true))
{
FileSystem::MakeDirectory(gamesDirectoryPath, true);
}
const std::string configDirectoryPath = gamesDirectoryPath + project->Name;
if (!FileSystem::DirectoryExists(configDirectoryPath, true))
{
FileSystem::MakeDirectory(configDirectoryPath, true);
Logger::Log("Created game config directory: " + configDirectoryPath, "trenchbrrom");
}
// Write the file
const std::string filePath = configDirectoryPath + "/" + project->Name + ".fgd";
FGDSerializer::BeginFGDFile(filePath);
for (auto& b : BaseEntities)
{
}
for (auto& p : PointEntities)
{
FGDSerializer::SerializePoint(p);
}
for (auto& b : BrushEntities)
{
FGDSerializer::SerializeBrush(b);
}
//for(auto& c : Classes)
// FGDSerializer::SerializeClass(c);
FGDSerializer::EndFGDFile();
return true;
}
}