Procházet zdrojové kódy

增加逻辑树,用来处理游戏中的各种事件的条件判定

tanghai před 14 roky
rodič
revize
e453b6f418

+ 20 - 0
Src/Game/LogicTree/AndNode.cc

@@ -0,0 +1,20 @@
+#include <boost/foreach.hpp>
+#include "Base/Marcos.h"
+#include "LogicTree/AndNode.h"
+
+namespace Egametang {
+
+bool AndNode::Run()
+{
+	foreach(LogicNodeIf* node, nodes)
+	{
+		if (!node->Run())
+		{
+			return false;
+		}
+	}
+	return true;
+}
+
+} // namespace Egametang
+

+ 20 - 0
Src/Game/LogicTree/AndNode.h

@@ -0,0 +1,20 @@
+#ifndef LOGICTREE_ANDNODE_H
+#define LOGICTREE_ANDNODE_H
+
+#include "LogicTree/LogicNodeIf.h"
+
+namespace Egametang {
+
+class AndNode: public LogicNodeIf
+{
+private:
+	std::list<LogicNodeIf*> nodes;
+
+public:
+	virtual bool Run();
+};
+
+} // namespace Egametang
+
+
+#endif // LOGICTREE_ANDNODE_H

+ 13 - 0
Src/Game/LogicTree/ConditionNode.cc

@@ -0,0 +1,13 @@
+#include <boost/foreach.hpp>
+#include "Base/Marcos.h"
+#include "LogicTree/ConditionNode.h"
+
+namespace Egametang {
+
+bool ConditionNode::Run()
+{
+	return condition();
+}
+
+} // namespace Egametang
+

+ 22 - 0
Src/Game/LogicTree/ConditionNode.h

@@ -0,0 +1,22 @@
+#ifndef LOGICTREE_CONDITIONNODE_H
+#define LOGICTREE_CONDITIONNODE_H
+
+#include "LogicTree/ConditionNode.h"
+
+namespace Egametang {
+
+class ConditionNode: public LogicNodeIf
+{
+private:
+	int world;
+	int caster;
+	int target;
+
+public:
+	virtual bool Run();
+};
+
+} // namespace Egametang
+
+
+#endif // LOGICTREE_CONDITIONNODE_H

+ 14 - 0
Src/Game/LogicTree/LogicNodeIf.h

@@ -0,0 +1,14 @@
+#ifndef LOGICTREE_LOGICNODEIF_H
+#define LOGICTREE_LOGICNODEIF_H
+
+namespace Egametang {
+
+class LogicNodeIf
+{
+public:
+	virtual bool Run() = 0;
+};
+
+} // namespace Egametang
+
+#endif // LOGICTREE_LOGICNODEIF_H

+ 13 - 0
Src/Game/LogicTree/NotNode.cc

@@ -0,0 +1,13 @@
+#include <boost/foreach.hpp>
+#include "Base/Marcos.h"
+#include "LogicTree/NotNode.h"
+
+namespace Egametang {
+
+bool NotNode::Run()
+{
+	return !node->Run();
+}
+
+} // namespace Egametang
+

+ 20 - 0
Src/Game/LogicTree/NotNode.h

@@ -0,0 +1,20 @@
+#ifndef LOGICTREE_NOTNODE_H
+#define LOGICTREE_NOTNODE_H
+
+#include "LogicTree/LogicNodeIf.h"
+
+namespace Egametang {
+
+class NotNode: public LogicNodeIf
+{
+private:
+	LogicNodeIf* node;
+
+public:
+	virtual bool Run();
+};
+
+} // namespace Egametang
+
+
+#endif // LOGICTREE_NOTNODE_H

+ 20 - 0
Src/Game/LogicTree/OrNode.cc

@@ -0,0 +1,20 @@
+#include <boost/foreach.hpp>
+#include "Base/Marcos.h"
+#include "LogicTree/OrNode.h"
+
+namespace Egametang {
+
+bool OrNode::Run()
+{
+	foreach(LogicNodeIf* node, nodes)
+	{
+		if (node->Run())
+		{
+			return true;
+		}
+	}
+	return false;
+}
+
+} // namespace Egametang
+

+ 20 - 0
Src/Game/LogicTree/OrNode.h

@@ -0,0 +1,20 @@
+#ifndef LOGICTREE_ORNODE_H
+#define LOGICTREE_ORNODE_H
+
+#include "LogicTree/LogicNodeIf.h"
+
+namespace Egametang {
+
+class OrNode: public LogicNodeIf
+{
+private:
+	std::list<LogicNodeIf*> nodes;
+
+public:
+	virtual bool Run();
+};
+
+} // namespace Egametang
+
+
+#endif // LOGICTREE_ORNODE_H