projects
/
laserbrain_demo
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of goat:git/laserbrain_demo
[laserbrain_demo]
/
src
/
scene.cc
diff --git
a/src/scene.cc
b/src/scene.cc
index
f116150
..
35b562d
100644
(file)
--- a/
src/scene.cc
+++ b/
src/scene.cc
@@
-1,22
+1,19
@@
#include <regex>
#include "scene.h"
#include "objmesh.h"
#include <regex>
#include "scene.h"
#include "objmesh.h"
+#include "app.h"
static void destroy_node_tree(SceneNode *n);
static void destroy_node_tree(SceneNode *n);
-Scene::Scene(TextureSet *tset)
+Scene::Scene()
{
{
+ metascn = 0;
nodes = 0;
walk_mesh = 0;
nodes = 0;
walk_mesh = 0;
- if(tset) {
- texset = tset;
- own_texset = false;
- } else {
- texset = new TextureSet;
- own_texset = true;
- }
+ texset = 0;
+ loader_data = 0;
}
Scene::~Scene()
}
Scene::~Scene()
@@
-26,6
+23,17
@@
Scene::~Scene()
void Scene::destroy()
{
void Scene::destroy()
{
+ clear();
+
+ metascn = 0;
+ texset = 0;
+ loader_data = 0;
+
+ datamap.clear();
+}
+
+void Scene::clear()
+{
destroy_node_tree(nodes);
nodes = 0;
destroy_node_tree(nodes);
nodes = 0;
@@
-41,11
+49,6
@@
void Scene::destroy()
delete objects[i];
}
objects.clear();
delete objects[i];
}
objects.clear();
-
- if(own_texset) {
- delete texset;
- }
- texset = 0;
}
static void destroy_node_tree(SceneNode *n)
}
static void destroy_node_tree(SceneNode *n)
@@
-63,12
+66,6
@@
static void destroy_node_tree(SceneNode *n)
bool Scene::merge(Scene *scn)
{
bool Scene::merge(Scene *scn)
{
- if(texset != scn->texset) {
- // TODO handle this properly
- error_log("for now only able to merge scenes using the same texture set\n");
- return false;
- }
-
if(walk_mesh) {
if(scn->walk_mesh) {
walk_mesh->append(*scn->walk_mesh);
if(walk_mesh) {
if(scn->walk_mesh) {
walk_mesh->append(*scn->walk_mesh);
@@
-199,6
+196,8
@@
static void find_nodes_rec(std::list<SceneNode*> *res, SceneNode *tree, const st
Scene *Scene::extract_nodes(const char *qstr)
{
Scene *Scene::extract_nodes(const char *qstr)
{
+ if(!nodes) return 0;
+
std::regex re{qstr};
std::list<SceneNode*> nodelist;
std::regex re{qstr};
std::list<SceneNode*> nodelist;
@@
-207,7
+206,7
@@
Scene *Scene::extract_nodes(const char *qstr)
return 0;
}
return 0;
}
- Scene *res = new Scene(texset);
+ Scene *res = new Scene;
for(SceneNode *n : nodelist) {
for(SceneNode *n : nodelist) {