| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /*
- * ViewWorldEffect.cpp, part of VCMI engine
- *
- * Authors: listed in file AUTHORS in main folder
- *
- * License: GNU General Public License v2.0 or later
- * Full text of license available in license.txt file, in main folder
- *
- */
- #include "StdInc.h"
- #include "ViewWorldEffect.h"
- #include "../CSpellHandler.h"
- #include "../../CPlayerState.h"
- #include "../../callback/IGameInfoCallback.h"
- #include "../../mapObjects/CGHeroInstance.h"
- #include "../../mapping/CMap.h"
- #include "../../modding/IdentifierStorage.h"
- #include "../../networkPacks/PacksForClient.h"
- VCMI_LIB_NAMESPACE_BEGIN
- ViewWorldEffect::ViewWorldEffect(const CSpell * s, const JsonNode & config)
- {
- showTerrain = config["showTerrain"].Bool();
- for(const auto & objectNode : config["objects"].Struct())
- {
- if(objectNode.second.Bool())
- {
- LIBRARY->identifiers()->requestIdentifier(objectNode.second.getModScope(), "object", objectNode.first, [this](si32 index)
- {
- filteredObjects.push_back(MapObjectID(index));
- });
- }
- }
- }
- ESpellCastResult ViewWorldEffect::applyAdventureEffects(SpellCastEnvironment * env, const AdventureSpellCastParameters & parameters) const
- {
- ShowWorldViewEx pack;
- pack.player = parameters.caster->getCasterOwner();
- pack.showTerrain = showTerrain;
- const auto & fowMap = env->getCb()->getPlayerTeam(parameters.caster->getCasterOwner())->fogOfWarMap;
- for(const auto & obj : env->getMap()->getObjects())
- {
- //deleted object remain as empty pointer
- if(obj && vstd::contains(filteredObjects, obj->ID))
- {
- ObjectPosInfo posInfo(obj);
- if(fowMap[posInfo.pos.z][posInfo.pos.x][posInfo.pos.y] == 0)
- pack.objectPositions.push_back(posInfo);
- }
- }
- env->apply(pack);
- return ESpellCastResult::OK;
- }
- VCMI_LIB_NAMESPACE_END
|