Skip to content

Commit 4330d7f

Browse files
committed
Everything is much better now
1 parent 002747a commit 4330d7f

File tree

9 files changed

+123
-40
lines changed

9 files changed

+123
-40
lines changed

3Dev-Editor/main.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ int main()
587587
cam.SetViewportSize({ (uint32_t)viewport->getSize().x, (uint32_t)viewport->getSize().y });
588588
cam.SetGuiSize({ (uint32_t)viewport->getSize().x, (uint32_t)viewport->getSize().y });
589589

590-
Light* shadowSource = new Light({ 0, 0, 0 }, { 30.1, 50.0, -30.1 }, true);
590+
auto shadowSource = std::make_shared<Light>(rp3d::Vector3(0, 0, 0), rp3d::Vector3(30.1, 50.0, -30.1), true);
591591

592592
Material skyboxMaterial(
593593
{
@@ -920,7 +920,7 @@ int main()
920920

921921
lightButton->onPress([&]()
922922
{
923-
auto light = new Light(rp3d::Vector3(0, 0, 0), rp3d::Vector3::zero());
923+
auto light = std::make_shared<Light>(rp3d::Vector3::zero(), rp3d::Vector3::zero());
924924
scene.AddLight(light);
925925
readSceneTree();
926926
sceneTree->selectItem({ "Scene", "Objects", scene.GetLastAdded() });
@@ -1025,7 +1025,6 @@ int main()
10251025
{
10261026
auto light = scene.GetLight(sceneTree->getSelectedItem().back().toStdString());
10271027
scene.RemoveLight(light);
1028-
delete light;
10291028
readSceneTree();
10301029
});
10311030

@@ -2110,7 +2109,7 @@ int main()
21102109

21112110
rp3d::Vector3 delta;
21122111

2113-
rp3d::Ray ray(cam.GetPosition(true), cam.GetPosition(true) + mouse * 200);
2112+
rp3d::Ray ray(cam.GetPosition(true), cam.GetPosition(true) + mouse * 10000);
21142113
rp3d::RaycastInfo info;
21152114

21162115
if((gizmoX->GetRigidBody()->raycast(ray, info) && axis == -1) || axis == 0)

3Dev-Render/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ int main(int argc, char* argv[])
155155
rp3d::PhysicsWorld::WorldSettings st;
156156
auto man = std::make_shared<PhysicsManager>(st);
157157

158-
Light shadowSource({ 0, 0, 0 }, { 30.1, 50.0, -30.1 }, true);
158+
auto shadowSource = std::make_shared<Light>(rp3d::Vector3(0, 0, 0), rp3d::Vector3(50.1, 100.0, 50.1), true);
159159

160160
Material skyboxMaterial(
161161
{
@@ -180,7 +180,7 @@ int main(int argc, char* argv[])
180180
scene.Load(scenePath, true);
181181

182182
if(scene.GetNames()[2].empty())
183-
scene.AddLight(&shadowSource);
183+
scene.AddLight(shadowSource);
184184

185185
std::filesystem::current_path(path);
186186

3Dev/include/Model.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Model : public Node
1717
Model(Model* model);
1818
Model(Shader* shader);
1919
Model(std::vector<std::shared_ptr<Mesh>> meshes, Shader* shader = nullptr);
20-
Model(std::string filename, std::vector<Material*> mat, unsigned int flags = aiProcess_Triangulate | aiProcess_FlipUVs,
20+
Model(std::string filename, std::vector<Material*> mat, unsigned int flags = aiProcess_Triangulate | aiProcess_FlipUVs | aiProcess_GenBoundingBoxes,
2121
PhysicsManager* man = nullptr, Shader* shader = nullptr, Matrices* m = nullptr);
2222
~Model();
2323

3Dev/include/SceneManager.hpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,23 @@ class SceneManager
1515
void AddModel(std::shared_ptr<Model> model, const std::string& name = "model", bool checkUniqueness = true);
1616
void AddMaterial(std::shared_ptr<Material> material, const std::string& name = "material");
1717
void AddAnimation(std::shared_ptr<Animation> animation, const std::string& name = "animation");
18-
void AddLight(Light* light, const std::string& name = "light");
18+
void AddLight(std::shared_ptr<Light> light, const std::string& name = "light");
1919

2020
void StoreBones(std::shared_ptr<Model> model, Bone* bone = nullptr);
2121
void RemoveBones(std::shared_ptr<Model> model, Bone* bone = nullptr);
2222

2323
template<class... Args>
2424
std::shared_ptr<Model> CreateModel(const std::string& name, Args&&... args);
2525

26+
template<class... Args>
27+
std::shared_ptr<Light> CreateLight(const std::string& name, Args&&... args);
28+
29+
std::shared_ptr<Material> CreateMaterial(const std::string& name);
30+
2631
void RemoveModel(std::shared_ptr<Model> model);
2732
void RemoveMaterial(std::shared_ptr<Material> material);
2833
void RemoveAnimation(std::shared_ptr<Animation> animation);
29-
void RemoveLight(Light* light);
34+
void RemoveLight(std::shared_ptr<Light> light);
3035

3136
void RemoveAllObjects();
3237

@@ -54,6 +59,7 @@ class SceneManager
5459
std::string GetLastAdded();
5560

5661
std::shared_ptr<Model> GetModel(const std::string& name);
62+
std::shared_ptr<Light> GetLight(const std::string& name);
5763
std::shared_ptr<Material> GetMaterial(const std::string& name);
5864
std::shared_ptr<Animation> GetAnimation(const std::string& name);
5965
std::shared_ptr<PhysicsManager> GetPhysicsManager();
@@ -71,12 +77,18 @@ class SceneManager
7177

7278
// For angelscript
7379
Model* GetModelPtr(const std::string& name);
80+
Light* GetLightPtr(const std::string& name);
7481
Material* GetMaterialPtr(const std::string& name);
7582
Animation* GetAnimationPtr(const std::string& name);
7683
PhysicsManager* GetPhysicsManagerPtr();
7784
SoundManager* GetSoundManagerPtr();
7885

86+
Model* CreateModelPtr(const std::string& filename = "", bool isTemporary = true, const std::string& name = "model");
87+
Light* CreateLightPtr(bool isTemporary = true, const std::string& name = "light");
88+
Material* CreateMaterialPtr(const std::string& name = "material");
89+
7990
void RemoveModelPtr(Model* model);
91+
void RemoveLightPtr(Light* light);
8092
void RemoveMaterialPtr(Material* material);
8193
void RemoveAnimationPtr(Animation* animation);
8294

@@ -86,7 +98,6 @@ class SceneManager
8698
std::vector<Model*> GetModelPtrGroup(const std::string& name);
8799

88100
Camera* GetCamera();
89-
Light* GetLight(const std::string& name);
90101
Bone* GetBone(const std::string& name);
91102

92103
std::vector<Light*> GetShadowCastingLights();
@@ -128,7 +139,7 @@ class SceneManager
128139
std::map<std::string, Bone*> bones;
129140
std::map<std::string, std::shared_ptr<Model>> models;
130141
std::map<std::string, std::shared_ptr<Material>> materials; // for editor and scene saving
131-
std::map<std::string, Light*> lights;
142+
std::map<std::string, std::shared_ptr<Light>> lights;
132143

133144
std::map<std::string, std::shared_ptr<Animation>> animations;
134145

3Dev/launcher.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ int main()
5555
rp3d::PhysicsWorld::WorldSettings st;
5656
auto man = std::make_shared<PhysicsManager>(st);
5757

58-
Light l({ 0, 0, 0 }, { 50.1, 100.0, 50.1 }, true);
58+
auto l = std::make_shared<Light>(rp3d::Vector3(0, 0, 0), rp3d::Vector3(50.1, 100.0, 50.1), true);
5959

6060
Material skyboxMaterial(
6161
{
@@ -74,7 +74,7 @@ int main()
7474
scene.SetSoundManager(sman);
7575
scene.Load(cfg["scenePath"].asString());
7676
if(scene.GetNames()[2].empty())
77-
scene.AddLight(&l);
77+
scene.AddLight(l);
7878

7979
std::vector<bool> varState;
8080

3Dev/src/Renderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ void Renderer::DrawFramebuffers()
290290
glViewport(0, 0, size.x, size.y);
291291
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
292292
glActiveTexture(GL_TEXTURE15);
293-
glBindTexture(GL_TEXTURE_2D, pingPongBuffers[buffer]->GetTexture());
293+
glBindTexture(GL_TEXTURE_2D, pingPongBuffers[!buffer]->GetTexture());
294294
glActiveTexture(GL_TEXTURE16);
295295
glBindTexture(GL_TEXTURE_2D, framebuffers[FramebufferType::SSR]->GetTexture());
296296
shaders[ShaderType::Post]->Bind();

3Dev/src/SceneManager.cpp

Lines changed: 91 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -259,15 +259,15 @@ void SceneManager::AddAnimation(std::shared_ptr<Animation> animation, const std:
259259
animations[lastAdded] = animation;
260260
}
261261

262-
void SceneManager::AddLight(Light* light, const std::string& name)
262+
void SceneManager::AddLight(std::shared_ptr<Light> light, const std::string& name)
263263
{
264264
int nameCount = std::count_if(lights.begin(), lights.end(), [&](auto& p)
265265
{ return p.first.find(name) != std::string::npos; });
266266

267267
lastAdded = name + (nameCount ? std::to_string(nameCount) : "");
268-
nodes[lastAdded] = (Node*)(light);
268+
nodes[lastAdded] = (Node*)(light.get());
269269
lights[lastAdded] = light;
270-
lightsVector.push_back(light);
270+
lightsVector.push_back(light.get());
271271
}
272272

273273
void SceneManager::StoreBones(std::shared_ptr<Model> model, Bone* bone)
@@ -325,6 +325,21 @@ std::shared_ptr<Model> SceneManager::CreateModel(const std::string& name, Args&&
325325
return ret;
326326
}
327327

328+
template<class... Args>
329+
std::shared_ptr<Light> SceneManager::CreateLight(const std::string& name, Args&&... args)
330+
{
331+
auto ret = std::make_shared<Light>(args...);
332+
AddLight(ret, name);
333+
return ret;
334+
}
335+
336+
std::shared_ptr<Material> SceneManager::CreateMaterial(const std::string& name)
337+
{
338+
auto ret = std::make_shared<Material>();
339+
AddMaterial(ret, name);
340+
return ret;
341+
}
342+
328343
void SceneManager::RemoveModel(std::shared_ptr<Model> model)
329344
{
330345
auto it = std::find_if(models.begin(), models.end(), [&](auto& p) { return p.second == model; });
@@ -354,15 +369,15 @@ void SceneManager::RemoveAnimation(std::shared_ptr<Animation> animation)
354369
animations.erase(it);
355370
}
356371

357-
void SceneManager::RemoveLight(Light* light)
372+
void SceneManager::RemoveLight(std::shared_ptr<Light> light)
358373
{
359374
auto it = std::find_if(lights.begin(), lights.end(), [&](auto& p) { return p.second == light; });
360-
auto itn = std::find_if(nodes.begin(), nodes.end(), [&](auto& p) { return p.second == light; });
375+
auto itn = std::find_if(nodes.begin(), nodes.end(), [&](auto& p) { return p.second == light.get(); });
361376
if(it != lights.end())
362377
{
363378
lights.erase(it);
364379
nodes.erase(itn);
365-
lightsVector.erase(std::find(lightsVector.begin(), lightsVector.end(), it->second));
380+
lightsVector.erase(std::find(lightsVector.begin(), lightsVector.end(), it->second.get()));
366381
}
367382
}
368383

@@ -544,10 +559,10 @@ void SceneManager::Load(const std::string& filename, bool loadEverything)
544559
while(!data["lights"][counter].empty())
545560
{
546561
auto name = data["lights"][counter]["name"].asString();
547-
lights[name] = new Light(rp3d::Vector3::zero(), rp3d::Vector3::zero());
562+
lights[name] = std::make_shared<Light>(rp3d::Vector3::zero(), rp3d::Vector3::zero());
548563
lights[name]->Deserialize(data["lights"][counter]);
549-
nodes[name] = lights[name];
550-
lightsVector.push_back(lights[name]);
564+
nodes[name] = lights[name].get();
565+
lightsVector.push_back(lights[name].get());
551566

552567
counter++;
553568
}
@@ -592,7 +607,7 @@ void SceneManager::Load(const std::string& filename, bool loadEverything)
592607
{
593608
light->SetParent(GetNode(parent));
594609
if(bones.find(parent) != bones.end())
595-
GetNode(parent)->AddChild(light);
610+
GetNode(parent)->AddChild(light.get());
596611
}
597612

598613
counter++;
@@ -700,6 +715,15 @@ std::shared_ptr<Model> SceneManager::GetModel(const std::string& name)
700715
return nullptr;
701716
}
702717

718+
std::shared_ptr<Light> SceneManager::GetLight(const std::string& name)
719+
{
720+
if(lights.find(name) != lights.end())
721+
return lights[name];
722+
Log::Write("Could not find a light with name \""
723+
+ name + "\", function will return nullptr", Log::Type::Warning);
724+
return nullptr;
725+
}
726+
703727
std::shared_ptr<Material> SceneManager::GetMaterial(const std::string& name)
704728
{
705729
if(materials.find(name) != materials.end())
@@ -792,6 +816,15 @@ Model* SceneManager::GetModelPtr(const std::string& name)
792816
return nullptr;
793817
}
794818

819+
Light* SceneManager::GetLightPtr(const std::string& name)
820+
{
821+
if(lights.find(name) != lights.end())
822+
return lights[name].get();
823+
Log::Write("Could not find a light with name \""
824+
+ name + "\", function will return nullptr", Log::Type::Warning);
825+
return nullptr;
826+
}
827+
795828
Material* SceneManager::GetMaterialPtr(const std::string& name)
796829
{
797830
if(materials.find(name) != materials.end())
@@ -820,6 +853,39 @@ SoundManager* SceneManager::GetSoundManagerPtr()
820853
return sManager.get();
821854
}
822855

856+
Model* SceneManager::CreateModelPtr(const std::string& filename, bool isTemporary, const std::string& name)
857+
{
858+
std::shared_ptr<Model> ret;
859+
if(filename.empty())
860+
{
861+
ret = CreateModel(name, true);
862+
ret->SetMaterial({ materials.begin()->second.get() });
863+
}
864+
else ret = CreateModel(name, filename, std::vector<Material*>{ materials.begin()->second.get() });
865+
866+
ret->SetPhysicsManager(pManager.get());
867+
ret->CreateRigidBody();
868+
if(filename.empty())
869+
ret->CreateBoxShape();
870+
if(isTemporary)
871+
temporaryModelCopies.push_back(GetLastAdded());
872+
873+
return ret.get();
874+
}
875+
876+
Light* SceneManager::CreateLightPtr(bool isTemporary, const std::string& name)
877+
{
878+
auto ret = CreateLight(name, rp3d::Vector3::zero(), rp3d::Vector3::zero());
879+
if(isTemporary)
880+
temporaryLightCopies.push_back(GetLastAdded());
881+
return ret.get();
882+
}
883+
884+
Material* SceneManager::CreateMaterialPtr(const std::string& name)
885+
{
886+
return CreateMaterial(name).get();
887+
}
888+
823889
void SceneManager::RemoveModelPtr(Model* model)
824890
{
825891
auto it = std::find_if(models.begin(), models.end(), [&](auto& p) { return p.second.get() == model; });
@@ -835,6 +901,18 @@ void SceneManager::RemoveModelPtr(Model* model)
835901
}
836902
}
837903

904+
void SceneManager::RemoveLightPtr(Light* light)
905+
{
906+
auto it = std::find_if(lights.begin(), lights.end(), [&](auto& p) { return p.second.get() == light; });
907+
auto itn = std::find_if(nodes.begin(), nodes.end(), [&](auto& p) { return p.second == light; });
908+
if(it != lights.end())
909+
{
910+
lights.erase(it);
911+
nodes.erase(itn);
912+
lightsVector.erase(std::find(lightsVector.begin(), lightsVector.end(), it->second.get()));
913+
}
914+
}
915+
838916
void SceneManager::RemoveMaterialPtr(Material* material)
839917
{
840918
auto it = std::find_if(materials.begin(), materials.end(), [&](auto& p) { return p.second.get() == material; });
@@ -882,11 +960,11 @@ Model* SceneManager::CloneModel(Model* model, bool isTemporary, const std::strin
882960

883961
Light* SceneManager::CloneLight(Light* light, bool isTemporary, const std::string& name)
884962
{
885-
auto ret = new Light(light);
963+
auto ret = std::make_shared<Light>(light);
886964
AddLight(ret, name);
887965
if(isTemporary)
888966
temporaryLightCopies.push_back(GetLastAdded());
889-
return ret;
967+
return ret.get();
890968
}
891969

892970
std::vector<Model*> SceneManager::GetModelPtrGroup(const std::string& name)
@@ -902,15 +980,6 @@ Camera* SceneManager::GetCamera()
902980
return camera;
903981
}
904982

905-
Light* SceneManager::GetLight(const std::string& name)
906-
{
907-
if(lights.find(name) != lights.end())
908-
return lights[name];
909-
Log::Write("Could not find a light with name \""
910-
+ name + "\", function will return nullptr", Log::Type::Warning);
911-
return nullptr;
912-
}
913-
914983
Bone* SceneManager::GetBone(const std::string& name)
915984
{
916985
if(bones.find(name) != bones.end())
@@ -925,7 +994,7 @@ std::vector<Light*> SceneManager::GetShadowCastingLights()
925994
std::vector<Light*> ret;
926995
for(auto& i : lights)
927996
if(i.second->IsCastingShadows())
928-
ret.push_back(i.second);
997+
ret.push_back(i.second.get());
929998
return ret;
930999
}
9311000

3Dev/src/ScriptManager.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,11 @@ void ScriptManager::RegisterSceneManager()
467467
AddType("SceneManager", sizeof(SceneManager),
468468
{
469469
{ "void Draw()", WRAP_MFN(SceneManager, Draw) },
470+
{ "Model@ CreateModel(const string& in = \"\", bool = true, const string& in = \"model\")", WRAP_MFN(SceneManager, CreateModelPtr) },
471+
{ "Light@ CreateLight(bool = true, const string& in = \"light\")", WRAP_MFN(SceneManager, CreateLightPtr) },
472+
{ "Material@ CreateMaterial(const string& in = \"material\")", WRAP_MFN(SceneManager, CreateMaterialPtr) },
470473
{ "Model@ GetModel(const string& in)", WRAP_MFN(SceneManager, GetModelPtr) },
471-
{ "Light@ GetLight(const string& in)", WRAP_MFN(SceneManager, GetLight) },
474+
{ "Light@ GetLight(const string& in)", WRAP_MFN(SceneManager, GetLightPtr) },
472475
{ "Material@ GetMaterial(const string& in)", WRAP_MFN(SceneManager, GetMaterialPtr) },
473476
{ "Bone@ GetBone(const string& in)", WRAP_MFN(SceneManager, GetBone) },
474477
{ "Node@ GetNode(const string& in)", WRAP_MFN(SceneManager, GetNode) },
@@ -480,7 +483,8 @@ void ScriptManager::RegisterSceneManager()
480483
{ "SoundManager@ GetSoundManager()", WRAP_MFN(SceneManager, GetSoundManagerPtr) },
481484
{ "void SetMainShader(Shader@, bool = false)", WRAP_MFN(SceneManager, SetMainShader) },
482485
{ "void RemoveModel(Model@)", WRAP_MFN(SceneManager, RemoveModelPtr) },
483-
{ "void RemoveLight(Light@)", WRAP_MFN(SceneManager, RemoveLight) },
486+
{ "void RemoveLight(Light@)", WRAP_MFN(SceneManager, RemoveLightPtr) },
487+
{ "void RemoveMaterial(Material@)", WRAP_MFN(SceneManager, RemoveMaterialPtr) },
484488
{ "void RemoveAnimation(Animation@)", WRAP_MFN(SceneManager, RemoveAnimationPtr) },
485489
{ "void Save(const string& in, bool = false)", WRAP_MFN(SceneManager, Save) },
486490
{ "void Load(const string& in, bool = false)", WRAP_MFN(SceneManager, Load) },

0 commit comments

Comments
 (0)