浏览代码

Some improvements for AI logging.

DjWarmonger 13 年之前
父节点
当前提交
c54b983663
共有 4 个文件被更改,包括 33 次插入23 次删除
  1. 3 3
      AI/BattleAI/BattleAI.vcxproj
  2. 22 17
      AI/VCAI/VCAI.cpp
  3. 2 3
      AI/VCAI/VCAI.h
  4. 6 0
      lib/int3.h

+ 3 - 3
AI/BattleAI/BattleAI.vcxproj

@@ -76,7 +76,7 @@
     <LibraryPath>$(LibraryPath)</LibraryPath>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RD|Win32'">
-    <OutDir>$(SolutionDir)$(Configuration)\bin\AI\</OutDir>
+    <OutDir>G:\Programowanie\VCMI\RD\AI\</OutDir>
     <IncludePath>$(IncludePath)</IncludePath>
     <LibraryPath>$(LibraryPath)</LibraryPath>
   </PropertyGroup>
@@ -122,7 +122,7 @@
       <Optimization>MaxSpeed</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>..\..\..\include\fuzzyLite;..\..\..\include\fuzzyLite\fuzzylite</AdditionalIncludeDirectories>
       <PrecompiledHeader>Use</PrecompiledHeader>
       <PrecompiledHeaderFile>StdInc.h</PrecompiledHeaderFile>
     </ClCompile>
@@ -131,7 +131,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalDependencies>VCMI_lib.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>$(OutDir)..;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>G:\Programowanie\VCMI\libs;G:\Programowanie\VCMI\RD;../;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <OutputFile>$(OutDir)BattleAI.dll</OutputFile>
     </Link>
   </ItemDefinitionGroup>

+ 22 - 17
AI/VCAI/VCAI.cpp

@@ -3,6 +3,7 @@
 #include "../../lib/UnlockGuard.h"
 #include "../../lib/CObjectHandler.h"
 #include "../../lib/CConfigHandler.h"
+#include "../../lib/CHerohandler.h"
 
 #define I_AM_ELEMENTAR return CGoal(*this).setisElementar(true)
 CLogger &aiLogger = tlog6;
@@ -73,7 +74,7 @@ const int ALLOWED_ROAMING_HEROES = 8;
 
 const int GOLD_MINE_PRODUCTION = 1000, WOOD_ORE_MINE_PRODUCTION = 2, RESOURCE_MINE_PRODUCTION = 1;
 
-std::string goalName(EGoals goalType)
+std::string CGoal::name() const
 {
 	switch (goalType)
 	{
@@ -93,26 +94,30 @@ std::string goalName(EGoals goalType)
 			return "GATHER ARMY";
 		case BOOST_HERO:
 			return "BOOST_HERO (unsupported)";
+		case RECRUIT_HERO:
+			return "RECRUIT HERO";
 		case BUILD_STRUCTURE:
 			return "BUILD STRUCTURE";
 		case COLLECT_RES:
 			return "COLLECT RESOURCE";
+		case GATHER_TROOPS:
+			return "GATHER TROOPS";
 		case GET_OBJ:
-			return "GET OBJECT";
+			return "GET OBJECT " + objid;
 		case FIND_OBJ:
-			return "FIND OBJECT";
+			return "FIND OBJECT " + objid;
 		case VISIT_HERO:
-			return "VISIT HERO";
+			return "VISIT HERO " + VLC->heroh->heroes[objid]->name;
 		case GET_ART_TYPE:
-			return "GET ARTIFACT OF TYPE";
+			return "GET ARTIFACT OF TYPE " + VLC->arth->artifacts[aid]->Name();
 		case ISSUE_COMMAND:
 			return "ISSUE COMMAND (unsupported)";
 		case VISIT_TILE:
-			return "VISIT TILE";
+			return "VISIT TILE " + tile();
 		case CLEAR_WAY_TO:
-			return "CLEAR WAY TO";
+			return "CLEAR WAY TO " + tile();
 		case DIG_AT_TILE:
-			return "DIG AT TILE";
+			return "DIG AT TILE " + tile();
 		default:
 			return boost::lexical_cast<std::string>(goalType);
 	}
@@ -1858,7 +1863,7 @@ void getVisibleNeighbours(const std::vector<int3> &tiles, std::vector<int3> &out
 
 void VCAI::tryRealize(CGoal g)
 {
-	BNLOG("Attempting realizing goal with code %s", goalName(g.goalType));
+	BNLOG("Attempting realizing goal with code %s", g.name());
 	switch(g.goalType)
 	{
 	case EXPLORE:
@@ -2079,12 +2084,12 @@ void VCAI::striveToGoal(const CGoal &ultimateGoal)
 	while(1)
 	{
 		CGoal goal = ultimateGoal;
-		BNLOG("Striving to goal of type %s", goalName(ultimateGoal.goalType));
+		BNLOG("Striving to goal of type %s", ultimateGoal.name());
 		int maxGoals = 100; //preventing deadlock for mutually dependent goals
 		while(!goal.isElementar && !goal.isAbstract && maxGoals)
 		{
 			INDENT;
-			BNLOG("Considering goal %s", goalName(goal.goalType));
+			BNLOG("Considering goal %s", goal.name());
 			try
 			{
 				boost::this_thread::interruption_point();
@@ -2093,7 +2098,7 @@ void VCAI::striveToGoal(const CGoal &ultimateGoal)
 			}
 			catch(std::exception &e)
 			{
-				BNLOG("Goal %s decomposition failed: %s", goalName(goal.goalType) % e.what());
+				BNLOG("Goal %s decomposition failed: %s", goal.name() % e.what());
 				//setGoal (goal.hero, INVALID); //test: if we don't know how to realize goal, we should abandon it for now
 				return;
 			}
@@ -2118,7 +2123,7 @@ void VCAI::striveToGoal(const CGoal &ultimateGoal)
 			if (goal.isAbstract)
 			{
 				abstractGoal = goal; //allow only one abstract goal per call
-				BNLOG("Choosing abstract goal %s", goalName(goal.goalType));
+				BNLOG("Choosing abstract goal %s", goal.name());
 				break;
 			}
 			else
@@ -2139,7 +2144,7 @@ void VCAI::striveToGoal(const CGoal &ultimateGoal)
 		}
 		catch(std::exception &e)
 		{
-			BNLOG("Failed to realize subgoal of type %s (greater goal type was %s), I will stop.", goalName(goal.goalType) % goalName(ultimateGoal.goalType));
+			BNLOG("Failed to realize subgoal of type %s (greater goal type was %s), I will stop.", goal.name() % ultimateGoal.name());
 			BNLOG("The error message was: %s", e.what());
 			break;
 		}
@@ -2162,7 +2167,7 @@ void VCAI::striveToGoal(const CGoal &ultimateGoal)
 				}
 				catch(std::exception &e)
 				{
-					BNLOG("Goal %s decomposition failed: %s", goalName(goal.goalType) % e.what());
+					BNLOG("Goal %s decomposition failed: %s", goal.name() % e.what());
 					//setGoal (goal.hero, INVALID);
 					return;
 				}
@@ -2186,7 +2191,7 @@ void VCAI::striveToGoal(const CGoal &ultimateGoal)
 			}
 			catch(std::exception &e)
 			{
-				BNLOG("Failed to realize subgoal of type %s (greater goal type was %s), I will stop.", goalName(goal.goalType) % goalName(ultimateGoal.goalType));
+				BNLOG("Failed to realize subgoal of type %s (greater goal type was %s), I will stop.", goal.name() % ultimateGoal.name());
 				BNLOG("The error message was: %s", e.what());
 				break;
 			}
@@ -2733,7 +2738,7 @@ int3 whereToExplore(HeroPtr h)
 
 TSubgoal CGoal::whatToDoToAchieve()
 {
-	BNLOG("Decomposing goal of type %s", goalName(goalType));
+	BNLOG("Decomposing goal of type %s", name());
 	INDENT;
 	switch(goalType)
 	{

+ 2 - 3
AI/VCAI/VCAI.h

@@ -128,6 +128,7 @@ struct CGoal
 	bool isElementar; SETTER(bool, isElementar)
 	bool isAbstract; SETTER(bool, isAbstract) //allows to remember abstract goals
 	int priority; SETTER(bool, priority)
+	std::string name() const;
 
 	virtual TSubgoal whatToDoToAchieve();
 
@@ -403,8 +404,6 @@ public:
 	void requestActionASAP(boost::function<void()> whatToDo); 
 };
 
-std::string goalName(EGoals goalType); //TODO: move to CGoal class?
-
 class cannotFulfillGoalException : public std::exception
 {
 	std::string msg;
@@ -437,7 +436,7 @@ public:
 
 	const char *what() const throw () OVERRIDE
 	{
-		return goalName(goal.goalType).c_str();
+		return goal.name().c_str();
 	}
 };
 

+ 6 - 0
lib/int3.h

@@ -78,6 +78,12 @@ public:
 			return false;
 		return false;
 	}
+	inline std::string operator ()() const
+	{
+		return	"(" + boost::lexical_cast<std::string>(x) +
+				" " + boost::lexical_cast<std::string>(y) +
+				" " + boost::lexical_cast<std::string>(z) + ")";
+	}
 	template <typename Handler> void serialize(Handler &h, const int version)
 	{
 		h & x & y & z;