示例#1
0
ScriptNode *SceneGraph::findScriptNode(char *name) {
	if (!name || strlen(name) <= 0)
		return NULL;
	for (ScriptNode *node = findScriptNode(); node; node = node->nextTraversal()) {
		const char *nodeName = node->getName();
		if (nodeName && strlen(nodeName)) {
			if (!strcmp(name, nodeName))
				return node;
		}
	}
	return NULL;
}
void UndoDiagramModuleCutActionFn(void *info)
{
	TransformNode		*dgmNode = ((UndoDiagramModuleCut *)info)->mpDiagramNode;
	CDiagramClipboard	*clipboard = ((UndoDiagramModuleCut *)info)->mpClipboard;

	CDiagram dgm(dgmNode);

	int nModule = clipboard->getNModuleNodes();
	ScriptNode*	(*moduleNode)[2] = new (ScriptNode *[nModule][2]);
	for (int n=0; n<nModule; n++) {
		CModule		orgModule(clipboard->getModuleNode(n));
		CModule		copyModule(orgModule.getModuleType());
		copyModule.setPositionX(orgModule.getPositionX());
		copyModule.setPositionY(orgModule.getPositionY());
		dgm.addModule(&copyModule);
		moduleNode[n][0] = orgModule.getScriptNode();
		moduleNode[n][1] = copyModule.getScriptNode();
	}

	int nRoute = clipboard->getNRoutes();
	for (n=0; n<nRoute; n++) {
		Route	*route = clipboard->getRoute(n);
		ScriptNode	*outModule = (ScriptNode *)route->getEventOutNode();
		for (int i=0; i<nModule; i++) {
			if (moduleNode[i][0] == outModule) {
				outModule = moduleNode[i][1];
				break;
			}
		}
		ScriptNode	*inModule = (ScriptNode *)route->getEventInNode();
		for (i=0; i<nModule; i++) {
			if (moduleNode[i][0] == inModule) {
				inModule = moduleNode[i][1];
				break;
			}
		}
		GetWorld()->getSceneGraph()->addRoute(outModule->getName(), route->getEventOutField()->getName(), inModule->getName(), route->getEventInField()->getName());
	}
	
	delete []moduleNode;

	delete clipboard;
}
示例#3
0
	void ScriptLoader::_parseNodes(std::ifstream &stream, ScriptNode *parent)
	{
		typedef std::pair<std::string, ScriptNode*> ScriptItem;

		while (true)
		{
			switch (mToken)
			{
				//Node
				case TOKEN_Text:
				{
					//Add the new node
					ScriptNode *newNode;
					if (parent)
					{
						newNode = parent->addChild(mTokenValue);
					}
					else
					{
						newNode = new ScriptNode(0, mTokenValue);
					}

					//Get values
					_nextToken(stream);
					std::string valueStr;
					int i=0;
					while (mToken == TOKEN_Text)
					{
						if (i == 0)
							valueStr += mTokenValue;
						else
							valueStr += " " + mTokenValue;
						_nextToken(stream);
						++i;
					}
					newNode->setValue(valueStr);

					//Add root nodes to scriptList
					if (!parent)
					{
						std::string key;

						if (newNode->getValue() == "")
								throw std::runtime_error("Root node must have a name (\"" + newNode->getName() + "\")");
						key = newNode->getValue();

						m_scriptList.insert(ScriptItem(key, newNode));
					}

					_skipNewLines(stream);

					//Add any sub-nodes
					if (mToken == TOKEN_OpenBrace)
					{
						//Parse nodes
						_nextToken(stream);
						_parseNodes(stream, newNode);
						//Check for matching closing brace
						if (mToken != TOKEN_CloseBrace)
						{
							throw std::runtime_error("Parse Error: Expecting closing brace");
						}
						_nextToken(stream);
						_skipNewLines(stream);
					}

					newNode->mFileName = mCurrentFileName;

					break;
				}

				//Out of place brace
				case TOKEN_OpenBrace:
					throw std::runtime_error("Parse Error: Opening brace out of plane");
					break;

				//Return if end of nodes have been reached
				case TOKEN_CloseBrace:
					return;

				//Return if reached end of file
				case TOKEN_EOF:
					return;

				case TOKEN_NewLine:
					_nextToken(stream);
					break;
			}
		};
	}