-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProject.cpp
More file actions
107 lines (89 loc) · 3.23 KB
/
Project.cpp
File metadata and controls
107 lines (89 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "Project.h"
#include <fstream>
#include <string>
#include "GameNode/GameNode3D.h"
#include "Graphics/Camera.h"
#include "Editor/Components/EditorCameraController.h"
namespace TealEngine
{
Project Project::open(const std::string& directory)
{
Project project;
std::ifstream propsFile(directory + "/props.json");
project.projectProperties = Json::parse(propsFile);
return project;
}
Project Project::create(const std::string& directory, const std::string& title)
{
Project project;
std::filesystem::path path(directory);
path = path/title;
if(std::filesystem::is_directory(path))
{
}
else if(!std::filesystem::is_regular_file(path))
{
std::error_code ec;
if(!std::filesystem::create_directories(path, ec))
{
project.error = ec.message();
}
}
else
{
project.error = "Path is a regular file";
return project;
}
std::filesystem::copy(std::filesystem::current_path()/"Assets", path/"Assets", std::filesystem::copy_options::overwrite_existing | std::filesystem::copy_options::recursive);
std::filesystem::create_directory(path/"GameAssets");
std::filesystem::create_directory(path/"build");
project.projectProperties["title"] = title;
project.projectProperties["path"] = path.string();
GameNode3D* defaultScene = new GameNode3D();
GameNode3D* editorNodes = new GameNode3D();
GameNode3D* editorCameraNode = new GameNode3D();
defaultScene->rename("Root");
editorCameraNode->rename("Editor Nodes");
editorCameraNode->rename("Free Camera");
defaultScene->addChild(editorNodes);
editorNodes->addChild(editorCameraNode);
Camera* editorCamera = new Camera();
editorCamera->setAsEditorPrimary();
EditorCameraController* editorCameraController = new EditorCameraController();
editorCameraNode->attachComponent(editorCamera);
editorCameraNode->attachComponent(editorCameraController);
std::ofstream defaultSceneFile(path/"GameAssets"/"Root.node");
defaultSceneFile << defaultScene->toJson();
defaultSceneFile.close();
delete defaultScene;
project.projectProperties["defaultScene"] = (path/"GameAssets/Root.node").string();
std::filesystem::create_directory_symlink(std::filesystem::current_path(), path/"EngineLink");
std::string CMakeListsTxt =
"cmake_minimum_required(VERSION 3.22.1)\n\n"
"project(" + title + ")\n\n"
"set(CMAKE_CXX_STANDARD 20)\n"
"set(CMAKE_CXX_STANDARD_REQUIRED True)\n\n"
"file(GLOB_RECURSE SOURCES GameAssets/*.cpp)\n\n"
"add_library(${PROJECT_NAME} SHARED ${SOURCES})\n"
"target_include_directories(${PROJECT_NAME} PUBLIC ./EngineLink)\n";
std::ofstream projectPropsFile(path/"props.json");
std::ofstream projectCMakeFile(path/"CMakeLists.txt");
projectPropsFile << project.projectProperties;
projectCMakeFile << CMakeListsTxt;
return project;
}
void Project::buildLibs()
{
system((std::string("cd ") + this->projectProperties["path"].get<std::string>() + std::string("/build && cmake .. && make")).c_str());
}
void Project::loadLibs()
{
this->dlLoader.unloadAll();
this->dlLoader.loadDir(this->projectProperties["path"].get<std::string>() + "/build");
}
void Project::save()
{
std::ofstream projectPropsFile(this->getPath()+"/props.json");
projectPropsFile << projectProperties;
}
} // namespace TealEngine