Ticket #958: territory_fow_building-11222011.patch

File territory_fow_building-11222011.patch, 6.3 KB (added by historic_bruno, 12 years ago)
  • binaries/data/mods/public/simulation/components/GuiInterface.js

     
    255255    }
    256256
    257257    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
    258     ret.visibility = cmpRangeManager.GetLosVisibility(ent, player);
     258    ret.visibility = cmpRangeManager.GetLosVisibility(ent, player, false);
    259259
    260260    return ret;
    261261};
     
    508508            pos.SetYRotation(cmd.angle);
    509509        }
    510510
    511         // Check whether it's in a visible region
     511        // Check whether it's in a visible or fogged region
     512        //  tell GetLosVisibility to force RetainInFog because preview entities set this to false,
     513        //  which would show them as hidden instead of fogged
    512514        var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
    513         var visible = (cmpRangeManager && cmpRangeManager.GetLosVisibility(ent, player) == "visible");
     515        var visible = (cmpRangeManager && cmpRangeManager.GetLosVisibility(ent, player, true) != "hidden");
    514516        var validPlacement = false;
    515517       
    516518        if (visible)
  • binaries/data/mods/public/simulation/components/UnitAI.js

     
    19451945    if (!cmpRangeManager)
    19461946        return false;
    19471947
    1948     if (cmpRangeManager.GetLosVisibility(target, cmpOwnership.GetOwner()) == "hidden")
     1948    if (cmpRangeManager.GetLosVisibility(target, cmpOwnership.GetOwner(), false) == "hidden")
    19491949        return false;
    19501950
    19511951    // Either visible directly, or visible in fog
  • binaries/data/mods/public/simulation/helpers/Commands.js

     
    216216        // TODO: AI has no visibility info
    217217        if (!cmpPlayer.IsAI())
    218218        {
    219             // Check whether it's in a visible region
     219            // Check whether it's in a visible or fogged region
    220220            var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
    221             var visible = (cmpRangeManager.GetLosVisibility(ent, player) == "visible");
     221            var visible = (cmpRangeManager.GetLosVisibility(ent, player, true) != "hidden");
    222222            if (!visible)
    223223            {
    224224                if (g_DebugCommands)
  • source/simulation2/components/CCmpRangeManager.cpp

     
    872872            return CLosQuerier(player, m_LosState, m_TerrainVerticesPerSide);
    873873    }
    874874
    875     virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player)
     875    virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player, bool forceRetainInFog)
    876876    {
    877877        // (We can't use m_EntityData since this needs to handle LOCAL entities too)
    878878
     
    906906        if (los.IsExplored(i, j))
    907907        {
    908908            CmpPtr<ICmpVision> cmpVision(GetSimContext(), ent);
    909             if (!cmpVision.null() && cmpVision->GetRetainInFog())
     909            if (forceRetainInFog || (!cmpVision.null() && cmpVision->GetRetainInFog()))
    910910                return VIS_FOGGED;
    911911        }
    912912
  • source/simulation2/components/ICmpRangeManager.cpp

     
    2121
    2222#include "simulation2/system/InterfaceScripted.h"
    2323
    24 std::string ICmpRangeManager::GetLosVisibility_wrapper(entity_id_t ent, int player)
     24std::string ICmpRangeManager::GetLosVisibility_wrapper(entity_id_t ent, int player, bool forceRetainInFog)
    2525{
    26     ELosVisibility visibility = GetLosVisibility(ent, player);
     26    ELosVisibility visibility = GetLosVisibility(ent, player, forceRetainInFog);
    2727    switch (visibility)
    2828    {
    2929    case VIS_HIDDEN: return "hidden";
     
    4343DEFINE_INTERFACE_METHOD_1("GetEntitiesByPlayer", std::vector<entity_id_t>, ICmpRangeManager, GetEntitiesByPlayer, player_id_t)
    4444DEFINE_INTERFACE_METHOD_1("SetDebugOverlay", void, ICmpRangeManager, SetDebugOverlay, bool)
    4545DEFINE_INTERFACE_METHOD_2("SetLosRevealAll", void, ICmpRangeManager, SetLosRevealAll, player_id_t, bool)
    46 DEFINE_INTERFACE_METHOD_2("GetLosVisibility", std::string, ICmpRangeManager, GetLosVisibility_wrapper, entity_id_t, player_id_t)
     46DEFINE_INTERFACE_METHOD_3("GetLosVisibility", std::string, ICmpRangeManager, GetLosVisibility_wrapper, entity_id_t, player_id_t, bool)
    4747DEFINE_INTERFACE_METHOD_1("SetLosCircular", void, ICmpRangeManager, SetLosCircular, bool)
    4848DEFINE_INTERFACE_METHOD_0("GetLosCircular", bool, ICmpRangeManager, GetLosCircular)
    4949DEFINE_INTERFACE_METHOD_1("GetPercentMapExplored", i32, ICmpRangeManager, GetPercentMapExplored, player_id_t)
  • source/simulation2/components/ICmpRangeManager.h

     
    260260     * Returns the visibility status of the given entity, with respect to the given player.
    261261     * Returns VIS_HIDDEN if the entity doesn't exist or is not in the world.
    262262     * This respects the GetLosRevealAll flag.
     263     * If forceRetainInFog is true, the visibility acts as if CCmpVision's RetainInFog flag were set.
     264     * TODO: This is a hack to allow preview entities in FoW to return fogged instead of hidden,
     265     *  see http://trac.wildfiregames.com/ticket/958
    263266     */
    264     virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player) = 0;
     267    virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player, bool forceRetainInFog = false) = 0;
    265268
    266269    /**
    267270     * GetLosVisibility wrapped for script calls.
    268271     * Returns "hidden", "fogged" or "visible".
    269272     */
    270     std::string GetLosVisibility_wrapper(entity_id_t ent, player_id_t player);
     273    std::string GetLosVisibility_wrapper(entity_id_t ent, player_id_t player, bool forceRetainInFog);
    271274
    272275    /**
    273276     * Set whether the whole map should be made visible to the given player.