Переглянути джерело

LogicTree需要增加一个Contex参数

tanghai 14 роки тому
батько
коміт
1eb386ac44

+ 2 - 2
Src/Game/LogicTree/AndNode.cc

@@ -4,11 +4,11 @@
 
 namespace Egametang {
 
-bool AndNode::Run()
+bool AndNode::Run(LogicContex* contex)
 {
 	foreach(LogicNodeIf* node, nodes)
 	{
-		if (!node->Run())
+		if (!node->Run(contex))
 		{
 			return false;
 		}

+ 1 - 1
Src/Game/LogicTree/AndNode.h

@@ -11,7 +11,7 @@ private:
 	std::list<LogicNodeIf*> nodes;
 
 public:
-	virtual bool Run();
+	virtual bool Run(LogicContex* contex);
 };
 
 } // namespace Egametang

+ 7 - 2
Src/Game/LogicTree/ConditionNode.cc

@@ -4,9 +4,14 @@
 
 namespace Egametang {
 
-bool ConditionNode::Run()
+bool BuffType::Run(LogicContex* contex)
 {
-	return condition();
+	Buff* buff = contex->buff;
+	if (buff->type == type)
+	{
+		return true;
+	}
+	return false;
 }
 
 } // namespace Egametang

+ 6 - 6
Src/Game/LogicTree/ConditionNode.h

@@ -5,15 +5,15 @@
 
 namespace Egametang {
 
-class ConditionNode: public LogicNodeIf
+// 条件节点还可以预绑定一些配置参数,例如下面的type字段由策划配置
+// 可配置成dot hot之类的
+class BuffType: public LogicNodeIf
 {
-private:
-	int world;
-	int caster;
-	int target;
+public:
+	int type;
 
 public:
-	virtual bool Run();
+	virtual bool Run(LogicContex* contex);
 };
 
 } // namespace Egametang

+ 22 - 1
Src/Game/LogicTree/LogicNodeIf.h

@@ -3,10 +3,31 @@
 
 namespace Egametang {
 
+class Spell;
+class Buff;
+
+class Spell
+{
+
+};
+
+class Buff
+{
+public:
+	int type;
+};
+
+class LogicContex
+{
+public:
+	Spell* spell;
+	Buff* buff;
+};
+
 class LogicNodeIf
 {
 public:
-	virtual bool Run() = 0;
+	virtual bool Run(LogicContex* contex) = 0;
 };
 
 } // namespace Egametang

+ 2 - 2
Src/Game/LogicTree/NotNode.cc

@@ -4,9 +4,9 @@
 
 namespace Egametang {
 
-bool NotNode::Run()
+bool NotNode::Run(LogicContex* contex)
 {
-	return !node->Run();
+	return !node->Run(contex);
 }
 
 } // namespace Egametang

+ 1 - 1
Src/Game/LogicTree/NotNode.h

@@ -11,7 +11,7 @@ private:
 	LogicNodeIf* node;
 
 public:
-	virtual bool Run();
+	virtual bool Run(LogicContex* contex);
 };
 
 } // namespace Egametang

+ 2 - 2
Src/Game/LogicTree/OrNode.cc

@@ -4,11 +4,11 @@
 
 namespace Egametang {
 
-bool OrNode::Run()
+bool OrNode::Run(LogicContex* contex)
 {
 	foreach(LogicNodeIf* node, nodes)
 	{
-		if (node->Run())
+		if (node->Run(contex))
 		{
 			return true;
 		}

+ 1 - 1
Src/Game/LogicTree/OrNode.h

@@ -11,7 +11,7 @@ private:
 	std::list<LogicNodeIf*> nodes;
 
 public:
-	virtual bool Run();
+	virtual bool Run(LogicContex* contex);
 };
 
 } // namespace Egametang