Przeglądaj źródła

Start working on Triggered Events

AlexVinS 10 lat temu
rodzic
commit
11af00bcdf
3 zmienionych plików z 54 dodań i 10 usunięć
  1. 37 2
      lib/mapping/MapFormatJson.cpp
  2. 12 2
      lib/mapping/MapFormatJson.h
  3. 5 6
      test/MapComparer.cpp

+ 37 - 2
lib/mapping/MapFormatJson.cpp

@@ -17,13 +17,13 @@
 #include "../CModHandler.h"
 #include "../VCMI_Lib.h"
 
-static const std::string conditionNames[] = {
+static const std::array<std::string, 12> conditionNames = {
 "haveArtifact", "haveCreatures",   "haveResources",   "haveBuilding",
 "control",      "destroy",         "transport",       "daysPassed",
 "isHuman",      "daysWithoutTown", "standardWin",     "constValue"
 };
 
-static const std::string typeNames[] = { "victory", "defeat" };
+static const std::array<std::string, 2> typeNames = { "victory", "defeat" };
 
 static EventCondition JsonToCondition(const JsonNode & node)
 {
@@ -50,6 +50,11 @@ static EventCondition JsonToCondition(const JsonNode & node)
 	return event;
 }
 
+static void ConditionToJson(const EventCondition& event, JsonNode& dest)
+{
+	
+}
+
 ///CMapFormatJson
 const int CMapFormatJson::VERSION_MAJOR = 1;
 const int CMapFormatJson::VERSION_MINOR = 0;
@@ -85,6 +90,32 @@ void CMapFormatJson::readTriggeredEvent(TriggeredEvent & event, const JsonNode &
 	event.trigger = EventExpression(source["condition"], JsonToCondition); // logical expression
 }
 
+void CMapFormatJson::writeTriggeredEvents(JsonNode& output)
+{
+	output["victoryString"].String() = map->victoryMessage;
+	output["victoryIconIndex"].Float() = map->victoryIconIndex;
+
+	output["defeatString"].String() = map->defeatMessage;
+	output["defeatIconIndex"].Float() = map->defeatIconIndex;
+	
+//	JsonMap & triggeredEvents = output["triggeredEvents"].Struct();
+//	
+//	for(auto event : map->triggeredEvents)
+//		writeTriggeredEvent(event, triggeredEvents[event.identifier]);
+}
+
+void CMapFormatJson::writeTriggeredEvent(const TriggeredEvent& event, JsonNode& dest)
+{
+	dest["message"].String() = event.onFulfill;
+	dest["description"].String() = event.description;
+	
+	dest["effect"]["type"].String() = typeNames.at(event.effect.type);
+	dest["effect"]["messageToSend"].String() = event.effect.toOtherMessage;
+	
+
+}
+
+
 ///CMapPatcher
 CMapPatcher::CMapPatcher(JsonNode stream):
 	input(stream)
@@ -296,6 +327,10 @@ void CMapSaverJson::saveHeader()
 	header["difficulty"].String() = difficultyMap.at(map->difficulty);	
 	header["levelLimit"].Float() = map->levelLimit;
 	
+	writeTriggeredEvents(header);
+	
+	//todo: player info
+	
 	//todo:	allowedHeroes;
 	//todo: placeholdedHeroes;	
 	

+ 12 - 2
lib/mapping/MapFormatJson.h

@@ -33,7 +33,7 @@ protected:
 	CMap * map;
 
 	/**
-	 * ptr to the map header object which gets filled by data from the buffer or written to buffer.
+	 * ptr to the map header object which gets filled by data from the buffer.
 	 * (when loading map and mapHeader point to the same object)
 	 */
 	std::unique_ptr<CMapHeader> mapHeader;	
@@ -43,10 +43,20 @@ protected:
 	 */
 	void readTriggeredEvents(const JsonNode & input);
 
+	/**
+	 * Writes triggered events, including victory/loss conditions
+	 */
+	void writeTriggeredEvents(JsonNode & output);
+
 	/**
 	 * Reads one of triggered events
 	 */
-	void readTriggeredEvent(TriggeredEvent & event, const JsonNode & source);		
+	void readTriggeredEvent(TriggeredEvent & event, const JsonNode & source);
+	
+	/**
+	 * Writes one of triggered events
+	 */
+	void writeTriggeredEvent(const TriggeredEvent & event, JsonNode & dest);			
 };
 
 class DLL_LINKAGE CMapPatcher : public CMapFormatJson, public IMapPatcher

+ 5 - 6
test/MapComparer.cpp

@@ -42,6 +42,11 @@ bool operator!=(const PlayerInfo & actual, const PlayerInfo & expected)
 
 void MapComparer::compareHeader()
 {
+	//map size parameters are vital for further checks 
+	VCMI_REQUIRE_FIELD_EQUAL(height);
+	VCMI_REQUIRE_FIELD_EQUAL(width);
+	VCMI_REQUIRE_FIELD_EQUAL(twoLevel);
+
 	VCMI_CHECK_FIELD_EQUAL_P(name);
 	VCMI_CHECK_FIELD_EQUAL_P(description);
 	VCMI_CHECK_FIELD_EQUAL_P(difficulty);
@@ -54,12 +59,6 @@ void MapComparer::compareHeader()
 	
 	BOOST_CHECK_EQUAL_COLLECTIONS(actual->players.begin(), actual->players.end(), expected->players.begin(), expected->players.end());
 
-
-	//map size parameters are vital for further checks 
-	VCMI_REQUIRE_FIELD_EQUAL(height);
-	VCMI_REQUIRE_FIELD_EQUAL(width);
-	VCMI_REQUIRE_FIELD_EQUAL(twoLevel);
-
 	BOOST_ERROR("Not implemented");
 }