|
@@ -142,6 +142,16 @@ const Framework::Text& QuestStorage::getQuestId() const
|
|
|
return questId;
|
|
|
}
|
|
|
|
|
|
+bool QuestStorage::isVisible() const
|
|
|
+{
|
|
|
+ return visible;
|
|
|
+}
|
|
|
+
|
|
|
+void QuestStorage::setVisible(bool visible)
|
|
|
+{
|
|
|
+ this->visible = visible;
|
|
|
+}
|
|
|
+
|
|
|
QuestStorageType::QuestStorageType()
|
|
|
: TypeFactory<QuestStorage>()
|
|
|
{}
|
|
@@ -320,7 +330,8 @@ Framework::JSON::Validator::JSONValidator* QuestPartyType::getValidator() const
|
|
|
|
|
|
Quest::Quest(Framework::Text questId)
|
|
|
: ReferenceCounter(),
|
|
|
- questId(questId)
|
|
|
+ questId(questId),
|
|
|
+ mainQuest(0)
|
|
|
{}
|
|
|
|
|
|
void Quest::processEvent(QuestEvent* zEvent, QuestStorage* zStorage)
|
|
@@ -342,16 +353,38 @@ void Quest::processEvent(QuestEvent* zEvent, QuestStorage* zStorage)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-bool Quest::isVisible(QuestParty* zParty)
|
|
|
+bool Quest::isVisible(QuestParty* zParty, QuestManager* zManager)
|
|
|
{
|
|
|
- bool visible = 1;
|
|
|
+ if (zParty->zQuestStorage(questId)->isVisible())
|
|
|
+ {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ bool visible = 0;
|
|
|
+ for (Framework::Text* requiredQuestId : requiredQuestsIds)
|
|
|
+ {
|
|
|
+ visible |= zParty->zQuestStorage(*requiredQuestId)->isQuestFinished();
|
|
|
+ }
|
|
|
+ if (visible)
|
|
|
+ {
|
|
|
+ zParty->zQuestStorage(questId)->setVisible(visible);
|
|
|
+ }
|
|
|
for (Framework::Text* requiredQuestId : requiredQuestsIds)
|
|
|
{
|
|
|
- visible &= zParty->zQuestStorage(*requiredQuestId)->isQuestFinished();
|
|
|
+ zManager->setQuestVisible(true, *requiredQuestId, zParty);
|
|
|
}
|
|
|
return visible;
|
|
|
}
|
|
|
|
|
|
+bool Quest::isActive(QuestParty* zParty)
|
|
|
+{
|
|
|
+ bool active = 1;
|
|
|
+ for (Framework::Text* requiredQuestId : requiredQuestsIds)
|
|
|
+ {
|
|
|
+ active &= zParty->zQuestStorage(*requiredQuestId)->isQuestFinished();
|
|
|
+ }
|
|
|
+ return active;
|
|
|
+}
|
|
|
+
|
|
|
void Quest::giveReward(
|
|
|
int choice, Entity* zTargetEntity, QuestStorage* zStorage)
|
|
|
{
|
|
@@ -368,45 +401,41 @@ const Framework::Text& Quest::getQuestId() const
|
|
|
return questId;
|
|
|
}
|
|
|
|
|
|
-Framework::Text Quest::getQuestGraphItemUIML(QuestStorage* zStorage)
|
|
|
-{
|
|
|
- Framework::Text requirements = "";
|
|
|
- for (Framework::Text* requiredQuest : requiredQuestsIds)
|
|
|
- {
|
|
|
- if (requirements.getLength() > 0)
|
|
|
- {
|
|
|
- requirements += ",";
|
|
|
- }
|
|
|
- requirements += *requiredQuest;
|
|
|
- }
|
|
|
-
|
|
|
- Framework::Text result = "<questGraphItem id=\"";
|
|
|
- result.append() << questId << "\" name=\"" << questName + "\" image=\""
|
|
|
- << imagePath << "\" description=\"" << description
|
|
|
- << "\" finished=\"" << zStorage->isQuestFinished()
|
|
|
- << "\" mainQuest=\"" << mainQuest << "\" requirements=\""
|
|
|
- << requirements << "\"/>";
|
|
|
- return result;
|
|
|
-}
|
|
|
-
|
|
|
Framework::Text Quest::getQuestViewUIML(QuestStorage* zStorage)
|
|
|
{
|
|
|
Framework::Text result = "<questView id=\"";
|
|
|
- result.append() << questId << "\" name=\"" << questName + "\" description=\"" << description
|
|
|
- << "\" finished=\"" << zStorage->isQuestFinished()
|
|
|
- << "\" rewarded=\"" << zStorage ->isQuestRewarded() << "\">";
|
|
|
+ result.append() << questId << "\" name=\""
|
|
|
+ << questName + "\" description=\"" << description
|
|
|
+ << "\" finished=\"" << zStorage->isQuestFinished()
|
|
|
+ << "\" rewarded=\"" << zStorage->isQuestRewarded() << "\">";
|
|
|
for (QuestRequirement* requirement : requirements)
|
|
|
{
|
|
|
result += requirement->getRequirementUIML(
|
|
|
- zStorage->zStorage(requirement->getRequirementId()));
|
|
|
+ zStorage->zStorage(requirement->getRequirementId()));
|
|
|
}
|
|
|
for (QuestReward* reward : rewards)
|
|
|
{
|
|
|
result += reward->getRewardUIML();
|
|
|
}
|
|
|
|
|
|
- result += "</questView>";
|
|
|
- return result;
|
|
|
+ result += "</questView>";
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+void Quest::setVisible(bool visible, QuestParty* zParty, QuestManager* zManager)
|
|
|
+{
|
|
|
+ if (zParty->zQuestStorage(questId)->isVisible() == visible)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ zParty->zQuestStorage(questId)->setVisible(visible);
|
|
|
+ if (visible)
|
|
|
+ {
|
|
|
+ for (Framework::Text* requiredQuestId : requiredQuestsIds)
|
|
|
+ {
|
|
|
+ zManager->setQuestVisible(visible, *requiredQuestId, zParty);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
QuestType::QuestType()
|
|
@@ -421,12 +450,18 @@ Quest* QuestType::fromJson(Framework::JSON::JSONValue* zJson) const
|
|
|
= zJson->asObject()->zValue("questName")->asString()->getString();
|
|
|
result->description
|
|
|
= zJson->asObject()->zValue("description")->asString()->getString();
|
|
|
- Framework::JSON::JSONArray* requiredQuestIdsArray
|
|
|
+ Framework::JSON::JSONArray* requiredQuestGroups
|
|
|
= zJson->asObject()->zValue("requiredQuestIds")->asArray();
|
|
|
- for (int i = 0; i < requiredQuestIdsArray->getLength(); i++)
|
|
|
+ for (int i = 0; i < requiredQuestGroups->getLength(); i++)
|
|
|
{
|
|
|
- result->requiredQuestsIds.add(new Framework::Text(
|
|
|
- requiredQuestIdsArray->zValue(i)->asString()->getString()));
|
|
|
+ Framework::JSON::JSONArray* requiredQuestIdsArray
|
|
|
+ = requiredQuestGroups->zValue(i)->asArray();
|
|
|
+ for (int j = 0; j < requiredQuestIdsArray->getLength(); j++)
|
|
|
+ {
|
|
|
+ result->requiredQuestsIds.add(new Framework::Text(
|
|
|
+ requiredQuestIdsArray->zValue(i)->asString()->getString()));
|
|
|
+ result->requiredQuestsGroups.add(i);
|
|
|
+ }
|
|
|
}
|
|
|
Framework::JSON::JSONArray* requirementsArray
|
|
|
= zJson->asObject()->zValue("requirements")->asArray();
|
|
@@ -444,6 +479,8 @@ Quest* QuestType::fromJson(Framework::JSON::JSONValue* zJson) const
|
|
|
Game::INSTANCE->zTypeRegistry()->fromJson<QuestReward>(
|
|
|
rewardsArray->zValue(i)));
|
|
|
}
|
|
|
+ result->imagePath
|
|
|
+ = zJson->asObject()->zValue("imagePath")->asString()->getString();
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -456,14 +493,34 @@ Framework::JSON::JSONValue* QuestType::toJson(Quest* zObject) const
|
|
|
"questName", new Framework::JSON::JSONString(zObject->questName));
|
|
|
result->addValue(
|
|
|
"description", new Framework::JSON::JSONString(zObject->description));
|
|
|
+ Framework::JSON::JSONArray* requiredQuestGroupArray
|
|
|
+ = new Framework::JSON::JSONArray();
|
|
|
Framework::JSON::JSONArray* requiredQuestIdsArray
|
|
|
= new Framework::JSON::JSONArray();
|
|
|
+ int index = 0;
|
|
|
+ int lastGroup = 0;
|
|
|
for (Framework::Text* requiredQuestId : zObject->requiredQuestsIds)
|
|
|
{
|
|
|
+ int group = zObject->requiredQuestsGroups.get(index);
|
|
|
+ if (lastGroup != group)
|
|
|
+ {
|
|
|
+ if (requiredQuestIdsArray->getLength())
|
|
|
+ {
|
|
|
+ requiredQuestGroupArray->addValue(requiredQuestIdsArray);
|
|
|
+ requiredQuestIdsArray = new Framework::JSON::JSONArray();
|
|
|
+ }
|
|
|
+ lastGroup = group;
|
|
|
+ }
|
|
|
requiredQuestIdsArray->addValue(
|
|
|
new Framework::JSON::JSONString(*requiredQuestId));
|
|
|
+ index++;
|
|
|
+ }
|
|
|
+ if (requiredQuestIdsArray->getLength())
|
|
|
+ {
|
|
|
+ requiredQuestGroupArray->addValue(requiredQuestIdsArray);
|
|
|
+ requiredQuestIdsArray = new Framework::JSON::JSONArray();
|
|
|
}
|
|
|
- result->addValue("requiredQuestIds", requiredQuestIdsArray);
|
|
|
+ result->addValue("requiredQuestIds", requiredQuestGroupArray);
|
|
|
Framework::JSON::JSONArray* requirementsArray
|
|
|
= new Framework::JSON::JSONArray();
|
|
|
for (QuestRequirement* requirement : zObject->requirements)
|
|
@@ -478,6 +535,8 @@ Framework::JSON::JSONValue* QuestType::toJson(Quest* zObject) const
|
|
|
rewardsArray->addValue(Game::INSTANCE->zTypeRegistry()->toJson(reward));
|
|
|
}
|
|
|
result->addValue("rewards", rewardsArray);
|
|
|
+ result->addValue(
|
|
|
+ "imagePath", new Framework::JSON::JSONString(zObject->imagePath));
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -491,10 +550,12 @@ Framework::JSON::Validator::JSONValidator* QuestType::getValidator() const
|
|
|
->withRequiredString("description")
|
|
|
->finishString()
|
|
|
->withRequiredArray("requiredQuestIds")
|
|
|
- ->withDefault(new Framework::JSON::JSONArray())
|
|
|
+ ->addAcceptedArrayInArray()
|
|
|
->addAcceptedStringInArray()
|
|
|
->finishString()
|
|
|
->finishArray()
|
|
|
+ ->withDefault(new Framework::JSON::JSONArray())
|
|
|
+ ->finishArray()
|
|
|
->withRequiredArray("requirements")
|
|
|
->addAcceptedTypeInArray(
|
|
|
Game::INSTANCE->zTypeRegistry()->getValidator<QuestRequirement>())
|
|
@@ -503,6 +564,8 @@ Framework::JSON::Validator::JSONValidator* QuestType::getValidator() const
|
|
|
->addAcceptedTypeInArray(
|
|
|
Game::INSTANCE->zTypeRegistry()->getValidator<QuestReward>())
|
|
|
->finishArray()
|
|
|
+ ->withRequiredString("imagePath")
|
|
|
+ ->finishString()
|
|
|
->finishObject();
|
|
|
}
|
|
|
|
|
@@ -511,24 +574,25 @@ QuestCollection::QuestCollection(Framework::Text name)
|
|
|
name(name)
|
|
|
{}
|
|
|
|
|
|
-void QuestCollection::processEvent(QuestEvent* zEvent, QuestParty* zParty)
|
|
|
+void QuestCollection::processEvent(
|
|
|
+ QuestEvent* zEvent, QuestParty* zParty)
|
|
|
{
|
|
|
for (Quest* quest : quests)
|
|
|
{
|
|
|
QuestStorage* zStorage = zParty->zQuestStorage(quest->getQuestId());
|
|
|
- if (quest->isVisible(zParty) && !zStorage->isQuestFinished())
|
|
|
+ if (quest->isActive(zParty) && !zStorage->isQuestFinished())
|
|
|
{
|
|
|
quest->processEvent(zEvent, zStorage);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-bool QuestCollection::isVisible(QuestParty* zParty)
|
|
|
+bool QuestCollection::isVisible(QuestParty* zParty, QuestManager* zManager)
|
|
|
{
|
|
|
bool visible = 1;
|
|
|
for (Quest* quest : quests)
|
|
|
{
|
|
|
- visible &= quest->isVisible(zParty);
|
|
|
+ visible &= quest->isVisible(zParty, zManager);
|
|
|
}
|
|
|
return visible;
|
|
|
}
|
|
@@ -563,32 +627,32 @@ const Framework::Text& QuestCollection::getName() const
|
|
|
return name;
|
|
|
}
|
|
|
|
|
|
-Framework::Text QuestCollection::getQuestGraphUIML(QuestParty* zParty)
|
|
|
+Framework::Text QuestCollection::getQuestViewUIML(
|
|
|
+ QuestParty* zParty, Framework::Text questId)
|
|
|
{
|
|
|
- Framework::Text result = "";
|
|
|
for (Quest* quest : quests)
|
|
|
{
|
|
|
- if (quest->isVisible(zParty))
|
|
|
+ if (quest->getQuestId().istGleich(questId))
|
|
|
{
|
|
|
QuestStorage* zStorage = zParty->zQuestStorage(quest->getQuestId());
|
|
|
- result += quest->getQuestGraphItemUIML(zStorage);
|
|
|
+ return quest->getQuestViewUIML(zStorage);
|
|
|
}
|
|
|
}
|
|
|
- return result;
|
|
|
+ return "";
|
|
|
}
|
|
|
|
|
|
-Framework::Text QuestCollection::getQuestViewUIML(
|
|
|
- QuestParty* zParty, Framework::Text questId)
|
|
|
+void QuestCollection::setQuestVisible(bool visible,
|
|
|
+ Framework::Text questId,
|
|
|
+ QuestParty* zParty,
|
|
|
+ QuestManager* zManager)
|
|
|
{
|
|
|
for (Quest* quest : quests)
|
|
|
{
|
|
|
if (quest->getQuestId().istGleich(questId))
|
|
|
{
|
|
|
- QuestStorage* zStorage = zParty->zQuestStorage(quest->getQuestId());
|
|
|
- return quest->getQuestViewUIML(zStorage);
|
|
|
+ return quest->setVisible(visible, zParty, zManager);
|
|
|
}
|
|
|
}
|
|
|
- return "";
|
|
|
}
|
|
|
|
|
|
QuestCollectionType::QuestCollectionType()
|
|
@@ -651,7 +715,22 @@ QuestParty* QuestManager::zParty(int entityId)
|
|
|
return party;
|
|
|
}
|
|
|
}
|
|
|
- return 0;
|
|
|
+ QuestParty* result = new QuestParty();
|
|
|
+ result->addMember(entityId);
|
|
|
+ parties.add(result);
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+QuestCollection* QuestManager::zCollection(Framework::Text collectionName)
|
|
|
+{
|
|
|
+ for (QuestCollection* collection : questCollections)
|
|
|
+ {
|
|
|
+ if (collection->getName().istGleich(collectionName))
|
|
|
+ {
|
|
|
+ return collection;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
void QuestManager::loadQuests()
|
|
@@ -804,58 +883,23 @@ void QuestManager::giveReward(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-Framework::Text QuestManager::getDialogUIML(Entity* zTargetEntity)
|
|
|
+Framework::Text QuestManager::getQuestViewUIML(
|
|
|
+ Entity* zTargetEntity, Framework::Text questId)
|
|
|
{
|
|
|
- Framework::Text result = "<dialog id=\"quests\" title=\"Quests\" "
|
|
|
- "width=\"1200\" height=\"800\">";
|
|
|
- result.append()
|
|
|
- << "<listView id=\"collectionList\" width=\"100%\" height=\"100%\" "
|
|
|
- "member-width=\"200\" member-height=\"40\" align-top=\"start\" "
|
|
|
- "align-left=\"start\">";
|
|
|
+ Framework::Text result = "";
|
|
|
QuestParty* party = zParty(zTargetEntity->getId());
|
|
|
for (QuestCollection* questCollection : questCollections)
|
|
|
{
|
|
|
- if (questCollection->isVisible(party))
|
|
|
- {
|
|
|
- result.append()
|
|
|
- << "<listItem id=\"" << questCollection->getName() << "\">"
|
|
|
- << "<itemTitle>"
|
|
|
- << "<text>" << questCollection->getName() << "</text>"
|
|
|
- << "</itemTitle>"
|
|
|
- << "<itemContent>"
|
|
|
- << "<questGraph collectionName=\"" << questCollection->getName()
|
|
|
- << "\"/>"
|
|
|
- << "</itemContent>"
|
|
|
- << "</listItem>";
|
|
|
- }
|
|
|
+ result += questCollection->getQuestViewUIML(party, questId);
|
|
|
}
|
|
|
- result.append() << "</listView>"
|
|
|
- << "</dialog>";
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
-Framework::Text QuestManager::getQuestGraphUIML(
|
|
|
- Entity* zTargetEntity, Framework::Text collectionName)
|
|
|
+void QuestManager::setQuestVisible(
|
|
|
+ bool visible, Framework::Text questId, QuestParty* zParty)
|
|
|
{
|
|
|
- QuestParty* party = zParty(zTargetEntity->getId());
|
|
|
for (QuestCollection* questCollection : questCollections)
|
|
|
{
|
|
|
- if (questCollection->getName().istGleich(collectionName))
|
|
|
- {
|
|
|
- return questCollection->getQuestGraphUIML(party);
|
|
|
- }
|
|
|
+ questCollection->setQuestVisible(visible, questId, zParty, this);
|
|
|
}
|
|
|
- return "";
|
|
|
-}
|
|
|
-
|
|
|
-Framework::Text QuestManager::getQuestViewUIML(
|
|
|
- Entity* zTargetEntity, Framework::Text questId)
|
|
|
-{
|
|
|
- Framework::Text result = "";
|
|
|
- QuestParty* party = zParty(zTargetEntity->getId());
|
|
|
- for (QuestCollection* questCollection : questCollections)
|
|
|
- {
|
|
|
- result += questCollection->getQuestViewUIML(party, questId);
|
|
|
- }
|
|
|
- return result;
|
|
|
}
|