Upgrade to new VGCore version
This commit is contained in:
parent
a33d7f3c86
commit
9e98487557
14 changed files with 163 additions and 315 deletions
|
|
@ -9,12 +9,16 @@ add_subdirectory(deps/vgcore)
|
|||
|
||||
add_subdirectory(Tools/MapTools)
|
||||
|
||||
add_executable(SpoonEdit src/main.cpp src/MainWindow.cpp src/MainWindow.h src/PropertiesWidget.cpp src/PropertiesWidget.h src/ObjectSelectWidget.cpp src/ObjectSelectWidget.h src/MainViewport.cpp src/MainViewport.h src/Model.cpp src/Model.h src/RailSelectWidget.cpp src/RailSelectWidget.h src/Config/Configs.h src/Config/Configs.cpp)
|
||||
add_executable(SpoonEdit src/main.cpp src/PropertiesWidget.cpp src/PropertiesWidget.h src/ObjectSelectWidget.cpp src/ObjectSelectWidget.h src/MainViewport.cpp src/MainViewport.h src/Model.cpp src/Model.h src/RailSelectWidget.cpp src/RailSelectWidget.h src/Config/Configs.h src/Config/Configs.cpp
|
||||
src/InstanceVars.h
|
||||
src/Objects.cpp)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-g")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
|
||||
|
||||
target_link_libraries(SpoonEdit PUBLIC GCore SpoonMapTools Boost::thread Boost::chrono)
|
||||
|
||||
target_compile_definitions(SpoonEdit PRIVATE VMIRROR_ASSEMBLYNAME="SpoonEdit")
|
||||
|
||||
install(TARGETS SpoonEdit
|
||||
CONFIGURATIONS Debug
|
||||
RUNTIME DESTINATION Debug
|
||||
|
|
|
|||
13
src/InstanceVars.h
Normal file
13
src/InstanceVars.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
//
|
||||
// Created by tv on 28.08.23.
|
||||
//
|
||||
|
||||
#ifndef SPOONTOOL_INSTANCEVARS_H
|
||||
#define SPOONTOOL_INSTANCEVARS_H
|
||||
|
||||
#include<Map.h>
|
||||
|
||||
inline Map loadedMap;
|
||||
inline Element* selectedElem;
|
||||
|
||||
#endif //SPOONTOOL_INSTANCEVARS_H
|
||||
|
|
@ -3,7 +3,6 @@
|
|||
//
|
||||
|
||||
#include "MainViewport.h"
|
||||
#include "MainWindow.h"
|
||||
#include <glm/ext.hpp>
|
||||
#include<imgui.h>
|
||||
#include "IconsFontAwesome6.h"
|
||||
|
|
@ -11,6 +10,8 @@
|
|||
#include<algorithm>
|
||||
#include<cmath>
|
||||
#include"Config/Configs.h"
|
||||
#include "InstanceVars.h"
|
||||
#include<virintox/gcore/Graphics.h>
|
||||
|
||||
MainViewport *MainVP;
|
||||
|
||||
|
|
@ -38,6 +39,10 @@ bool IsArea(const std::string& Type) {
|
|||
});
|
||||
}
|
||||
|
||||
MENU_ITEM_DISPLAY(Widgets,Viewport,ICON_FA_VIDEO " Viewport"){
|
||||
Graphics::window->WidgetByName.find("Main Viewport")->second->Active ^= true;
|
||||
}
|
||||
|
||||
MainViewport::MainViewport() : Graphics::ViewportWidget("Main Viewport", true), VP(1.0f), defaultShader("ForwardPass"), flatShader("FlatForwardPass") {
|
||||
|
||||
MainVP = this;
|
||||
|
|
@ -213,9 +218,6 @@ void MainViewport::Draw() {
|
|||
|
||||
glUniform4f(ObjColPos, 1, 1, 1, 1);
|
||||
|
||||
|
||||
auto &map = GetMainWindow()->loadedMap;
|
||||
|
||||
glDrawBuffer(GL_COLOR_ATTACHMENT1);
|
||||
GLuint ClearID[] = {0};
|
||||
glClearBufferuiv(GL_COLOR, 0, ClearID);
|
||||
|
|
@ -251,7 +253,7 @@ void MainViewport::Draw() {
|
|||
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
for (auto &obj: map.Objects) {
|
||||
for (auto &obj: loadedMap.Objects) {
|
||||
if (IsArea(obj.Type)) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -298,7 +300,7 @@ void MainViewport::Draw() {
|
|||
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
|
||||
for (auto &obj: map.Objects) {
|
||||
for (auto &obj: loadedMap.Objects) {
|
||||
if(!flatShading)
|
||||
glUniform1i(TeamId,(GLint)obj.Team);
|
||||
|
||||
|
|
@ -327,19 +329,19 @@ void MainViewport::Draw() {
|
|||
auto &mdl = MdlFromObj.find(obj.Type)->second;
|
||||
glUniform1ui(ObjIdPos, ObjID);
|
||||
|
||||
if (&obj == GetMainWindow()->selectedElem)
|
||||
if (&obj == selectedElem)
|
||||
glUniform4f(ObjColPos, 1, .7, .7, 1);
|
||||
|
||||
mdl.Draw(obj.TF, m_internalFramebuf->m_shader, VP);
|
||||
if (&obj == GetMainWindow()->selectedElem)
|
||||
if (&obj == selectedElem)
|
||||
glUniform4f(ObjColPos, 1, 1, 1, 1);
|
||||
|
||||
ObjID++;
|
||||
}
|
||||
|
||||
|
||||
if (GetMainWindow()->selectedElem != nullptr) {
|
||||
auto selobj = GetMainWindow()->selectedElem;
|
||||
if (selectedElem != nullptr) {
|
||||
auto selobj = selectedElem;
|
||||
glUniform1ui(ObjIdPos, 0);
|
||||
|
||||
if (IsArea(selobj->Type)) {
|
||||
|
|
@ -350,8 +352,8 @@ void MainViewport::Draw() {
|
|||
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
for (Link &link: GetMainWindow()->selectedElem->Links) {
|
||||
Element *elem = GetMainWindow()->loadedMap.GetElementById(link.Destination);
|
||||
for (Link &link: selectedElem->Links) {
|
||||
Element *elem = loadedMap.GetElementById(link.Destination);
|
||||
if (elem == nullptr)
|
||||
continue;
|
||||
|
||||
|
|
@ -360,7 +362,7 @@ void MainViewport::Draw() {
|
|||
}
|
||||
}
|
||||
|
||||
if (Rail *rail = dynamic_cast<Rail *>(GetMainWindow()->selectedElem)) {
|
||||
if (Rail *rail = dynamic_cast<Rail *>(selectedElem)) {
|
||||
RenderRail(rail);
|
||||
}
|
||||
|
||||
|
|
@ -513,7 +515,7 @@ void MainViewport::HandleInput(InputEvent event) {
|
|||
static glm::vec3 GizmoDir = glm::vec3(1, 1, 1);
|
||||
static unsigned int SpecialObjCur = 0;
|
||||
|
||||
auto SelObj = GetMainWindow()->selectedElem;
|
||||
auto SelObj = selectedElem;
|
||||
|
||||
switch (event.EventType) {
|
||||
case (InputType::MouseHover): {
|
||||
|
|
@ -622,7 +624,7 @@ void MainViewport::HandleInput(InputEvent event) {
|
|||
|
||||
obj -= 16;
|
||||
|
||||
GetMainWindow()->selectedElem = &GetMainWindow()->loadedMap.Objects[obj];
|
||||
selectedElem = &loadedMap.Objects[obj];
|
||||
}
|
||||
break;
|
||||
case (InputType::MouseHoldL): {
|
||||
|
|
@ -837,14 +839,12 @@ void MainViewport::DrawOver() {
|
|||
|
||||
glm::vec2 MainViewport::CalcGizmoDir(glm::vec3 dir) {
|
||||
|
||||
auto SelObj = GetMainWindow()->selectedElem;
|
||||
|
||||
|
||||
auto DirPos = glm::vec4(dir, 1);
|
||||
auto ObjPos = glm::vec4(0, 0, 0, 1);
|
||||
|
||||
|
||||
auto tf = SelObj->TF;
|
||||
auto tf = selectedElem->TF;
|
||||
|
||||
tf.Rotation = {0, 0, 0};
|
||||
tf.Scale = {1, 1, 1};
|
||||
|
|
@ -868,8 +868,6 @@ void MainViewport::clearModels() {
|
|||
}
|
||||
|
||||
void MainViewport::cleanUnnescessary() {
|
||||
auto &map = GetMainWindow()->loadedMap;
|
||||
|
||||
for(auto mdlPairIter = MdlFromObj.begin(); mdlPairIter != MdlFromObj.end(); ){
|
||||
auto nextiter = mdlPairIter;
|
||||
nextiter++;
|
||||
|
|
@ -877,7 +875,7 @@ void MainViewport::cleanUnnescessary() {
|
|||
if(nextiter == MdlFromObj.end())
|
||||
break;
|
||||
|
||||
if(std::none_of(map.Objects.begin(), map.Objects.end(),[&](const LevelObject &obj){
|
||||
if(std::none_of(loadedMap.Objects.begin(), loadedMap.Objects.end(),[&](const LevelObject &obj){
|
||||
return obj.Type == nextiter->first;
|
||||
})){
|
||||
MdlFromObj.erase(nextiter);
|
||||
|
|
@ -889,4 +887,6 @@ void MainViewport::cleanUnnescessary() {
|
|||
|
||||
MainViewport *g_getMainViewport() {
|
||||
return MainVP;
|
||||
}
|
||||
}
|
||||
|
||||
REGISTERVCLASS(MainViewport)
|
||||
|
|
@ -22,6 +22,7 @@ enum GizmoType{
|
|||
|
||||
class MainViewport : public Graphics::ViewportWidget {
|
||||
public:
|
||||
VCLASS(MainViewport,ESC({&Graphics::ViewportWidget::classInfo,nullptr}))
|
||||
MainViewport();
|
||||
|
||||
glm::vec3 camPos = glm::vec3(0,0,0);
|
||||
|
|
|
|||
|
|
@ -1,199 +0,0 @@
|
|||
#include "MainWindow.h"
|
||||
#include "PropertiesWidget.h"
|
||||
#include "ObjectSelectWidget.h"
|
||||
#include "RailSelectWidget.h"
|
||||
#include "MainViewport.h"
|
||||
#include <virintox/gcore/gui/FileSelectDialog.h>
|
||||
#include <virintox/gcore/Graphics.h>
|
||||
#include<imgui.h>
|
||||
#include <IconsFontAwesome6.h>
|
||||
#include<fstream>
|
||||
#include"Config/Configs.h"
|
||||
|
||||
MainWindow* MainWindowInst = nullptr;
|
||||
|
||||
void ExportObj(LevelObject obj){
|
||||
YAML::Emitter emitter;
|
||||
|
||||
obj.YamlInsert(emitter);
|
||||
|
||||
auto fstr = std::ofstream((boost::filesystem::current_path() / "Presets" / (obj.Name + ".yaml")).string());
|
||||
|
||||
fstr << emitter.c_str();
|
||||
fstr.flush();
|
||||
fstr.close();
|
||||
}
|
||||
|
||||
MainWindow::MainWindow(): Graphics::Window("SpoonEdit") {
|
||||
|
||||
MainWindowInst = this;
|
||||
|
||||
auto mapSelectSaveExplorer = addWidget(new Graphics::FileSelectDialog("Select/Save Map", {".yaml"},[&](boost::filesystem::path path){
|
||||
selectedElem = nullptr;
|
||||
GetMainWindow()->loadedMap = ConvertFromYaml(path);
|
||||
|
||||
MainViewport* vp = g_getMainViewport();
|
||||
vp->cleanUnnescessary();
|
||||
},[&](boost::filesystem::path path){
|
||||
loadedMap.Export(path);
|
||||
}));
|
||||
|
||||
std::vector<std::string> strvec;
|
||||
boost::algorithm::split(strvec,(boost::filesystem::current_path() / "Maps").string(),boost::is_any_of("/"));
|
||||
|
||||
mapSelectSaveExplorer->Path = strvec;
|
||||
|
||||
addWidget(new Graphics::FileSelectDialog("Load Object from Preset", {".yaml"},[](boost::filesystem::path path){
|
||||
auto file = YAML::LoadFile(path.string());
|
||||
MainWindowInst->selectedElem = nullptr;
|
||||
MainWindowInst->loadedMap.Objects.emplace_back(LevelObject(file));
|
||||
}));
|
||||
|
||||
addWidget<PropertiesWidget>();
|
||||
|
||||
addWidget<ObjectSelectWidget>();
|
||||
|
||||
addWidget<MainViewport>();
|
||||
|
||||
addWidget<RailSelectWidget>();
|
||||
|
||||
AddMenu("File");
|
||||
|
||||
AddMenuItem("File",ICON_FA_FOLDER_OPEN " Open",[](){
|
||||
auto wid = dynamic_cast<Graphics::FileSelectDialog*>(MainWindowInst->WidgetByName.find("Select/Save Map")->second);
|
||||
wid->fileSelectMode = Graphics::Open;
|
||||
wid->Active = true;
|
||||
});
|
||||
|
||||
AddMenuItem("File",ICON_FA_FLOPPY_DISK " Save",[](){
|
||||
auto wid = dynamic_cast<Graphics::FileSelectDialog*>(MainWindowInst->WidgetByName.find("Select/Save Map")->second);
|
||||
wid->fileSelectMode = Graphics::Save;
|
||||
wid->Active = true;
|
||||
});
|
||||
|
||||
AddMenu("Widgets");
|
||||
|
||||
AddMenuItem("Widgets",ICON_FA_VIDEO " Viewport",[](){
|
||||
MainWindowInst->WidgetByName.find("Main Viewport")->second->Active ^= true;
|
||||
});
|
||||
|
||||
AddMenuItem("Widgets",ICON_FA_CUBES " Objects",[](){
|
||||
MainWindowInst->WidgetByName.find("Object Select")->second->Active ^= true;
|
||||
});
|
||||
|
||||
AddMenuItem("Widgets",ICON_FA_CIRCLE_NODES " Rails",[](){
|
||||
MainWindowInst->WidgetByName.find("Rails")->second->Active ^= true;
|
||||
});
|
||||
|
||||
AddMenuItem("Widgets",ICON_FA_CLIPBOARD_LIST " Properties",[](){
|
||||
MainWindowInst->WidgetByName.find("Properties")->second->Active ^= true;
|
||||
});
|
||||
|
||||
AddMenu("Game");
|
||||
AddMenuItem("Game", "Gambit(1)", [&](){
|
||||
gameSetting = GameMode::Gambit;
|
||||
Configs::g_loadConfigs(GameMode::ToString(gameSetting));
|
||||
g_getMainViewport()->clearModels();
|
||||
});
|
||||
AddMenuItem("Game", "Blitz(2)", [&](){
|
||||
gameSetting = GameMode::Blitz;
|
||||
Configs::g_loadConfigs(GameMode::ToString(gameSetting));
|
||||
});
|
||||
AddMenuItem("Game", "Thunder(3)", [&](){
|
||||
gameSetting = GameMode::Thunder;
|
||||
Configs::g_loadConfigs(GameMode::ToString(gameSetting));
|
||||
});
|
||||
|
||||
AddMenu("Object");
|
||||
|
||||
AddMenuItem("Object", ICON_FA_PLUS " Add",[](){
|
||||
auto wid = dynamic_cast<Graphics::FileSelectDialog*>(MainWindowInst->WidgetByName.find("Load Object from Preset")->second);
|
||||
std::vector<std::string> strvec;
|
||||
boost::algorithm::split(strvec,(boost::filesystem::current_path() / "Presets").string(),boost::algorithm::is_any_of("/\\"));
|
||||
|
||||
wid->Path = strvec;
|
||||
wid->fileSelectMode = Graphics::Open;
|
||||
wid->Active = true;
|
||||
});
|
||||
|
||||
AddMenuItem("Object", ICON_FA_ANCHOR " Kotzen[!]",[&](){
|
||||
for (LevelObject &obj: loadedMap.Objects) {
|
||||
if(!boost::filesystem::exists(boost::filesystem::current_path() / "Presets" / (obj.Type + ".yaml"))){
|
||||
LevelObject ObjCpy = LevelObject(obj);
|
||||
ObjCpy.Name = ObjCpy.Type;
|
||||
ObjCpy.Links = std::vector<Link>();
|
||||
ObjCpy.TF.Scale = {1, 1, 1};
|
||||
ObjCpy.TF.Rotation = {0, 0, 0};
|
||||
ObjCpy.TF.Position = {0, 0, 0};
|
||||
|
||||
for(int ¶m: ObjCpy.Parameters){
|
||||
param = -99;
|
||||
}
|
||||
|
||||
for(float ¶m: ObjCpy.FloatParameters){
|
||||
param = -99.0f;
|
||||
}
|
||||
|
||||
ObjCpy.Layer = "Cmn";
|
||||
|
||||
ExportObj(ObjCpy);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
AddMenuItem("Object", ICON_FA_ANCHOR " Durchfall[!]",[&](){
|
||||
|
||||
for(auto& entry : boost::make_iterator_range(boost::filesystem::directory_iterator(boost::filesystem::current_path() / "Maps"), {})) {
|
||||
|
||||
std::cout << "Exporting all from " << entry << std::endl;
|
||||
|
||||
MainWindowInst->selectedElem = nullptr;
|
||||
MainWindowInst->loadedMap = ConvertFromYaml(entry);
|
||||
|
||||
for (LevelObject &obj: loadedMap.Objects) {
|
||||
if (!boost::filesystem::exists(boost::filesystem::current_path() / "Presets" / (obj.Type + ".yaml"))) {
|
||||
LevelObject ObjCpy = LevelObject(obj);
|
||||
ObjCpy.Name = ObjCpy.Type;
|
||||
ObjCpy.Links = std::vector<Link>();
|
||||
|
||||
for(int ¶m: ObjCpy.Parameters){
|
||||
param = -99;
|
||||
}
|
||||
|
||||
for(float ¶m: ObjCpy.FloatParameters){
|
||||
param = -99.0f;
|
||||
}
|
||||
|
||||
ObjCpy.Layer = "Cmn";
|
||||
|
||||
ObjCpy.TF.Scale = {1, 1, 1};
|
||||
ObjCpy.TF.Rotation = {0, 0, 0};
|
||||
ObjCpy.TF.Position = {0, 0, 0};
|
||||
|
||||
ExportObj(ObjCpy);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
msgBoxes.push_back(new Graphics::MessageBox("Gizmos are currently broken beware of using them!"));
|
||||
//msgBoxes.
|
||||
//Graphics::EnableVsync();
|
||||
|
||||
Configs::g_loadConfigs("Gambit");
|
||||
|
||||
//Graphics::EnableVsync();
|
||||
}
|
||||
|
||||
void MainWindow::Update() {
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::MenuExtraRender() {
|
||||
ImGui::SetCursorPosX(ImGui::GetWindowWidth() - ImGui::CalcTextSize(("Game: " + GameMode::ToString(gameSetting) + " ").c_str()).x);
|
||||
ImGui::Text("%s", ("Game: " + GameMode::ToString(gameSetting)).c_str());
|
||||
}
|
||||
|
||||
MainWindow* GetMainWindow(){
|
||||
return MainWindowInst;
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
//
|
||||
// Created by tv on 20.05.23.
|
||||
//
|
||||
|
||||
#ifndef SPOONTOOL_MAINWINDOW_H
|
||||
#define SPOONTOOL_MAINWINDOW_H
|
||||
|
||||
#include<virintox/gcore/gui/Window.h>
|
||||
#include<Map.h>
|
||||
namespace GameMode {
|
||||
enum GameMode {
|
||||
Gambit,
|
||||
Blitz,
|
||||
Thunder
|
||||
};
|
||||
|
||||
inline std::string ToString(GameMode gameMode){
|
||||
switch(gameMode){
|
||||
case Gambit:
|
||||
return "Gambit";
|
||||
case Blitz:
|
||||
return "Blitz";
|
||||
case Thunder:
|
||||
return "Thunder";
|
||||
default:
|
||||
return "Invalid";
|
||||
}
|
||||
}
|
||||
|
||||
inline std::array<GameMode,3> gameModes = {Gambit, Blitz, Thunder};
|
||||
}
|
||||
|
||||
|
||||
class MainWindow : public Graphics::Window {
|
||||
public:
|
||||
MainWindow();
|
||||
|
||||
Map loadedMap;
|
||||
|
||||
void Update() override;
|
||||
|
||||
Element* selectedElem = nullptr;
|
||||
|
||||
GameMode::GameMode gameSetting = GameMode::Gambit;
|
||||
protected:
|
||||
void MenuExtraRender() override;
|
||||
};
|
||||
|
||||
MainWindow* GetMainWindow();
|
||||
|
||||
|
||||
#endif //SPOONTOOL_MAINWINDOW_H
|
||||
|
|
@ -3,31 +3,35 @@
|
|||
//
|
||||
|
||||
#include "ObjectSelectWidget.h"
|
||||
#include "MainWindow.h"
|
||||
#include "imgui.h"
|
||||
#include "misc/cpp/imgui_stdlib.h"
|
||||
#include "boost/filesystem.hpp"
|
||||
#include<iostream>
|
||||
#include<fstream>
|
||||
#include"InstanceVars.h"
|
||||
#include<virintox/gcore/Graphics.h>
|
||||
#include "IconsFontAwesome6.h"
|
||||
|
||||
ObjectSelectWidget* ObjectSelectWidgetInstance = nullptr;
|
||||
|
||||
MENU_ITEM_DISPLAY(Widgets,Objects,ICON_FA_CUBES " Objects"){
|
||||
Graphics::window->WidgetByName.find("Objects")->second->Active ^= true;
|
||||
}
|
||||
|
||||
|
||||
ObjectSelectWidget::ObjectSelectWidget(): Graphics::Widget("Object Select",true) {
|
||||
|
||||
}
|
||||
|
||||
void ObjectSelectWidget::Draw() {
|
||||
auto wind = GetMainWindow();
|
||||
|
||||
static unsigned int counter = 0;
|
||||
counter = 0;
|
||||
|
||||
for(auto &obj: wind->loadedMap.Objects){
|
||||
for(auto &obj: loadedMap.Objects){
|
||||
|
||||
|
||||
if(ImGui::Selectable((obj.Name + ": " + obj.Type + "##" + std::to_string(obj.runtimeID)).c_str(),wind->selectedElem == &obj)){
|
||||
wind->selectedElem = &obj;
|
||||
if(ImGui::Selectable((obj.Name + ": " + obj.Type + "##" + std::to_string(obj.runtimeID)).c_str(),selectedElem == &obj)){
|
||||
selectedElem = &obj;
|
||||
}
|
||||
|
||||
if(ImGui::IsMouseClicked(ImGuiMouseButton_Right) && ImGui::IsItemHovered()){
|
||||
|
|
@ -39,16 +43,16 @@ void ObjectSelectWidget::Draw() {
|
|||
|
||||
if(ImGui::MenuItem((std::string("Delete##: ObjSelect ") + std::to_string(obj.runtimeID)).c_str())){
|
||||
std::cout << "Deleting " + obj.Name << std::endl;
|
||||
wind->loadedMap.Objects.erase(wind->loadedMap.Objects.begin()+counter);
|
||||
wind->selectedElem = nullptr;
|
||||
loadedMap.Objects.erase(loadedMap.Objects.begin()+counter);
|
||||
selectedElem = nullptr;
|
||||
}
|
||||
|
||||
if(ImGui::MenuItem((std::string("Duplicate##: ObjSelect ") + std::to_string(obj.runtimeID)).c_str())){
|
||||
LevelObject dublObj = LevelObject(obj);
|
||||
dublObj.runtimeID = rand();
|
||||
|
||||
wind->loadedMap.Objects.emplace_back(dublObj);
|
||||
wind->selectedElem = nullptr;
|
||||
loadedMap.Objects.emplace_back(dublObj);
|
||||
selectedElem = nullptr;
|
||||
}
|
||||
|
||||
if(ImGui::MenuItem((std::string("Export##: ObjSelect ") + std::to_string(obj.runtimeID)).c_str())){
|
||||
|
|
@ -72,4 +76,6 @@ void ObjectSelectWidget::Draw() {
|
|||
|
||||
ObjectSelectWidget* GetObjectSelectWidget(){
|
||||
return ObjectSelectWidgetInstance;
|
||||
}
|
||||
}
|
||||
|
||||
REGISTERVCLASS(ObjectSelectWidget)
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
class ObjectSelectWidget: public Graphics::Widget {
|
||||
public:
|
||||
VCLASS(ObjectSelectWidget,ESC({&Graphics::Widget::classInfo,nullptr}))
|
||||
ObjectSelectWidget();
|
||||
|
||||
private:
|
||||
|
|
|
|||
15
src/Objects.cpp
Normal file
15
src/Objects.cpp
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#include<virintox/gcore/Graphics.h>
|
||||
#include <IconsFontAwesome6.h>
|
||||
#include <boost/algorithm/string/split.hpp>
|
||||
#include <boost/algorithm/string/classification.hpp>
|
||||
#include "virintox/gcore/gui/FileSelectDialog.h"
|
||||
|
||||
MENU_ITEM_DISPLAY(Object,Add,ICON_FA_PLUS " Add"){
|
||||
auto wid = dynamic_cast<Graphics::FileSelectDialog*>(Graphics::window->WidgetByName.find("Load Object from Preset")->second);
|
||||
std::vector<std::string> strvec;
|
||||
boost::algorithm::split(strvec,(boost::filesystem::current_path() / "Presets").string(),boost::algorithm::is_any_of("/\\"));
|
||||
|
||||
wid->Path = strvec;
|
||||
wid->fileSelectMode = Graphics::Open;
|
||||
wid->Active = true;
|
||||
}
|
||||
|
|
@ -3,12 +3,17 @@
|
|||
//
|
||||
|
||||
#include "PropertiesWidget.h"
|
||||
#include "MainWindow.h"
|
||||
#include<imgui.h>
|
||||
#include "misc/cpp/imgui_stdlib.h"
|
||||
#include "IconsFontAwesome6.h"
|
||||
#include<array>
|
||||
#include "Config/Configs.h"
|
||||
#include<Transform.h>
|
||||
#include<Element.h>
|
||||
#include<Rail.h>
|
||||
#include<LevelObject.h>
|
||||
#include"InstanceVars.h"
|
||||
#include<virintox/gcore/Graphics.h>
|
||||
#include "IconsFontAwesome6.h"
|
||||
|
||||
struct SimpleVec3 {
|
||||
float x, y, z;
|
||||
|
|
@ -30,6 +35,10 @@ struct SimpleVec3 {
|
|||
|
||||
PropertiesWidget *PropertiesWidgetInst = nullptr;
|
||||
|
||||
MENU_ITEM_DISPLAY(Widgets,Properties,ICON_FA_CLIPBOARD_LIST " Properties"){
|
||||
Graphics::window->WidgetByName.find("Properties")->second->Active ^= true;
|
||||
}
|
||||
|
||||
template<typename t, typename iter, typename stringConv>
|
||||
void ImGuiDrawSelection(std::string id, t &val, iter optsBegin, iter optsEnd, stringConv convert) {
|
||||
|
||||
|
|
@ -115,10 +124,10 @@ void ImGuiDrawElem(Element *elem, std::string Id = "") {
|
|||
Configs::g_imguiDrawOpts("Link Type##" + std::to_string(i) + Id, Configs::g_linkOpts, link.Name);
|
||||
ImGui::InputText(("Destination##PropWindLink" + std::to_string(i) + Id).c_str(), &link.Destination);
|
||||
|
||||
if (Element *gotoElem = GetMainWindow()->loadedMap.GetElementById(link.Destination)) {
|
||||
if (Element *gotoElem = loadedMap.GetElementById(link.Destination)) {
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button((ICON_FA_CHEVRON_RIGHT + std::string("##GotoDest") + std::to_string(i)).c_str())) {
|
||||
GetMainWindow()->selectedElem = gotoElem;
|
||||
selectedElem = gotoElem;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -174,13 +183,13 @@ void ImGuiDrawElem(Element *elem, std::string Id = "") {
|
|||
}
|
||||
|
||||
if (rail->Points.empty()) {
|
||||
auto &map = GetMainWindow()->loadedMap;
|
||||
auto &map = loadedMap;
|
||||
|
||||
std::erase_if(map.Rails, [&](const Rail &rail1) {
|
||||
return rail1.runtimeID == rail->runtimeID;
|
||||
});
|
||||
|
||||
GetMainWindow()->selectedElem = nullptr;
|
||||
selectedElem = nullptr;
|
||||
}
|
||||
ImGui::Unindent();
|
||||
}
|
||||
|
|
@ -267,17 +276,17 @@ void ImGuiDrawElem(Element *elem, std::string Id = "") {
|
|||
PropertiesWidget::PropertiesWidget() : Graphics::Widget("Properties", true) {
|
||||
PropertiesWidgetInst = this;
|
||||
|
||||
GetMainWindow()->selectedElem = nullptr;
|
||||
selectedElem = nullptr;
|
||||
}
|
||||
|
||||
void PropertiesWidget::Draw() {
|
||||
auto wind = GetMainWindow();
|
||||
|
||||
if (wind->selectedElem != nullptr) {
|
||||
ImGuiDrawElem(wind->selectedElem);
|
||||
if (selectedElem != nullptr) {
|
||||
ImGuiDrawElem(selectedElem);
|
||||
}
|
||||
}
|
||||
|
||||
PropertiesWidget *GetPropertiesWidget() {
|
||||
return PropertiesWidgetInst;
|
||||
}
|
||||
}
|
||||
|
||||
REGISTERVCLASS(PropertiesWidget)
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
class PropertiesWidget : public Graphics::Widget {
|
||||
public:
|
||||
VCLASS(PropertiesWidget,ESC({&Graphics::Widget::classInfo,nullptr}))
|
||||
PropertiesWidget();
|
||||
|
||||
void Draw() override;
|
||||
|
|
|
|||
|
|
@ -3,22 +3,26 @@
|
|||
//
|
||||
|
||||
#include "RailSelectWidget.h"
|
||||
#include "MainWindow.h"
|
||||
#include <imgui.h>
|
||||
#include "IconsFontAwesome6.h"
|
||||
#include "MainViewport.h"
|
||||
#include "InstanceVars.h"
|
||||
#include<virintox/gcore/Graphics.h>
|
||||
#include "IconsFontAwesome6.h"
|
||||
|
||||
MENU_ITEM_DISPLAY(Widgets,Rails,ICON_FA_CIRCLE_NODES " Rails"){
|
||||
Graphics::window->WidgetByName.find("Rails")->second->Active ^= true;
|
||||
}
|
||||
|
||||
RailSelectWidget::RailSelectWidget(): Graphics::Widget("Rails",false) {
|
||||
|
||||
}
|
||||
|
||||
void RailSelectWidget::Draw() {
|
||||
auto wind = GetMainWindow();
|
||||
|
||||
for(auto railIter = wind->loadedMap.Rails.begin();railIter != wind->loadedMap.Rails.end();railIter++){
|
||||
for(auto railIter = loadedMap.Rails.begin();railIter != loadedMap.Rails.end();railIter++){
|
||||
Rail &rail = *railIter;
|
||||
if(ImGui::Selectable((rail.Name + ": " + rail.Type + "##" + std::to_string(rail.runtimeID)).c_str(), wind->selectedElem == &rail)){
|
||||
wind->selectedElem = &rail;
|
||||
if(ImGui::Selectable((rail.Name + ": " + rail.Type + "##" + std::to_string(rail.runtimeID)).c_str(), selectedElem == &rail)){
|
||||
selectedElem = &rail;
|
||||
}
|
||||
|
||||
if(ImGui::IsMouseClicked(ImGuiMouseButton_Right) && ImGui::IsItemHovered()){
|
||||
|
|
@ -28,8 +32,8 @@ void RailSelectWidget::Draw() {
|
|||
if(ImGui::BeginPopup((std::string("Right Click Menu: RailSelect ") + std::to_string(rail.runtimeID)).c_str())){
|
||||
if(ImGui::MenuItem((std::string("Delete##: RailSelect ") + std::to_string(rail.runtimeID)).c_str())){
|
||||
std::cout << "Deleting " + rail.Name << std::endl;
|
||||
wind->loadedMap.Rails.erase(railIter);
|
||||
wind->selectedElem = nullptr;
|
||||
loadedMap.Rails.erase(railIter);
|
||||
selectedElem = nullptr;
|
||||
ImGui::EndPopup();
|
||||
break;
|
||||
}
|
||||
|
|
@ -39,10 +43,12 @@ void RailSelectWidget::Draw() {
|
|||
}
|
||||
|
||||
if(ImGui::Button(ICON_FA_PLUS)){
|
||||
wind->selectedElem = nullptr;
|
||||
selectedElem = nullptr;
|
||||
|
||||
auto vp = g_getMainViewport();
|
||||
Vector3 pos = {vp->camPos.x, -vp->camPos.y, vp->camPos.z};
|
||||
wind->loadedMap.Rails.emplace_back(pos);
|
||||
loadedMap.Rails.emplace_back(pos);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTERVCLASS(RailSelectWidget)
|
||||
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
class RailSelectWidget: public Graphics::Widget {
|
||||
public:
|
||||
VCLASS(RailSelectWidget,ESC({&Graphics::Widget::classInfo,nullptr}))
|
||||
RailSelectWidget();
|
||||
|
||||
void Draw() override;
|
||||
|
|
|
|||
60
src/main.cpp
60
src/main.cpp
|
|
@ -1,13 +1,55 @@
|
|||
#include<virintox/gcore/Graphics.h>
|
||||
#include"MainWindow.h"
|
||||
#include"imgui.h"
|
||||
#include "virintox/gcore/gui/FileSelectDialog.h"
|
||||
#include "InstanceVars.h"
|
||||
#include "Map.h"
|
||||
#include "MainViewport.h"
|
||||
#include "Config/Configs.h"
|
||||
#include <IconsFontAwesome6.h>
|
||||
#include<Assembly.h>
|
||||
|
||||
VMIRRORASSEMBLYSELFREGISTER(SpoonEdit, VMIRRORVERSION(0,1,0,0),VMirror::AssemblyType::Executable)
|
||||
|
||||
VGINIT_ACTION(LoadConfigs){
|
||||
Configs::g_loadConfigs("Gambit");
|
||||
}
|
||||
|
||||
VGINIT_ACTION(AddMapSelector){
|
||||
Graphics::window->addWidget(new Graphics::FileSelectDialog("Select/Save Map", {".yaml"},[&](boost::filesystem::path path){
|
||||
selectedElem = nullptr;
|
||||
loadedMap = ConvertFromYaml(path);
|
||||
|
||||
MainViewport* vp = g_getMainViewport();
|
||||
vp->cleanUnnescessary();
|
||||
},[&](boost::filesystem::path path){
|
||||
loadedMap.Export(path);
|
||||
}));
|
||||
}
|
||||
|
||||
VGINIT_ACTION(AddObjSelector){
|
||||
Graphics::window->addWidget(new Graphics::FileSelectDialog("Load Object from Preset", {".yaml"},[](boost::filesystem::path path){
|
||||
auto file = YAML::LoadFile(path.string());
|
||||
selectedElem = nullptr;
|
||||
loadedMap.Objects.emplace_back(LevelObject(file));
|
||||
}));
|
||||
}
|
||||
|
||||
MENU_ITEM_DISPLAY(File,Open,ICON_FA_FOLDER_OPEN " Open"){
|
||||
auto wid = dynamic_cast<Graphics::FileSelectDialog*>(Graphics::window->WidgetByName.find("Select/Save Map")->second);
|
||||
wid->fileSelectMode = Graphics::Open;
|
||||
wid->Active = true;
|
||||
}
|
||||
|
||||
MENU_ITEM_DISPLAY(File,Save,ICON_FA_FLOPPY_DISK " Save"){
|
||||
auto wid = dynamic_cast<Graphics::FileSelectDialog*>(Graphics::window->WidgetByName.find("Select/Save Map")->second);
|
||||
wid->fileSelectMode = Graphics::Save;
|
||||
wid->Active = true;
|
||||
}
|
||||
|
||||
SORT_MENU(File,0)
|
||||
SORT_MENU(Widgets,1)
|
||||
SORT_MENU(Object,2)
|
||||
|
||||
int main(){
|
||||
Graphics::Init();
|
||||
Graphics::setWindow<MainWindow>();
|
||||
|
||||
//auto &io = ImGui::GetIO();
|
||||
|
||||
//io.ConfigWindowsMoveFromTitleBarOnly = true;
|
||||
Graphics::BeginLoop();
|
||||
Graphics::Terminate();
|
||||
Graphics::AutoInit("SpoonEdit");
|
||||
}
|
||||
Loading…
Reference in a new issue