00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <iostream>
00012
00013 #include "scriptscenemanager.h"
00014 #include "scriptscene.h"
00015 #include "scriptnode.h"
00016
00017 using namespace VRUT;
00018 using namespace std;
00019
00020 ScriptScene::~ScriptScene()
00021 {
00022 for (map<NodeIdent, ScriptNode *>::iterator it = nodes.begin(); it != nodes.end(); it++)
00023 delete it->second;
00024 }
00025
00026 void ScriptScene::deleteScriptNode(NODE_ID nodeID)
00027 {
00028 map<NodeIdent, ScriptNode *>::iterator it = nodes.find(NodeIdent(sceneID, nodeID));
00029 if (it != nodes.end())
00030 {
00031 delete it->second;
00032 nodes.erase(it);
00033 }
00034 }
00035
00036 Scene *ScriptScene::getScene() throw(SceneScriptException)
00037 {
00038 Scene *scene = kernel->sceneManager->GetScene(sceneID);
00039 if (!scene)
00040 {
00041 map<SCENE_ID, ScriptScene *>::iterator sit = ssm->scenes.find(sceneID);
00042 if (sit != ssm->scenes.end())
00043 {
00044 ssm->deleteScriptScene(sceneID);
00045
00046 map<NodeIdent, ScriptNode *>::iterator nit = nodes.begin(), nitTemp;
00047 while (nit != nodes.end())
00048 {
00049 if (nit->first.sceneID == sceneID)
00050 {
00051 delete nit->second;
00052 nitTemp = nit++;
00053 nodes.erase(nitTemp);
00054 }
00055 else
00056 nit++;
00057 }
00058 }
00059 throw SceneScriptException();
00060 }
00061 return scene;
00062 }
00063
00064 ScriptNode *ScriptScene::getScriptNode(NODE_ID nodeID) throw(SceneScriptException)
00065 {
00066 Scene *scene = getScene();
00067
00068 const SceneNode *node = scene->GetNode(nodeID);
00069 if (!node)
00070 return (ScriptNode *) NULL;
00071
00072 NodeIdent ident(sceneID, nodeID);
00073 map<NodeIdent, ScriptNode *>::iterator it = nodes.find(ident);
00074 if (it == nodes.end())
00075 {
00076 ScriptNode *scriptNode = new ScriptNode(this, sceneID, nodeID);
00077 nodes.insert(pair<NodeIdent, ScriptNode *>(ident, scriptNode));
00078 return scriptNode;
00079 }
00080 else
00081 return it->second;
00082 }
00083
00084