Ticket #2913: use_cached_visibility.patch
File use_cached_visibility.patch, 2.6 KB (added by , 9 years ago) |
---|
-
source/simulation2/components/CCmpRangeManager.cpp
1376 1376 return CLosQuerier(GetSharedLosMask(player), m_LosState, m_TerrainVerticesPerSide); 1377 1377 } 1378 1378 1379 virtual ELosVisibility GetLosVisibility(CEntityHandle ent, player_id_t player, bool forceRetainInFog)1379 ELosVisibility ComputeLosVisibility(CEntityHandle ent, player_id_t player, bool forceRetainInFog) 1380 1380 { 1381 1381 // Entities not with positions in the world are never visible 1382 1382 if (ent.GetId() == INVALID_ENTITY) … … 1424 1424 return VIS_HIDDEN; 1425 1425 } 1426 1426 1427 ELosVisibility ComputeLosVisibility(entity_id_t ent, player_id_t player, bool forceRetainInFog) 1428 { 1429 CEntityHandle handle = GetSimContext().GetComponentManager().LookupEntityHandle(ent); 1430 return ComputeLosVisibility(handle, player, forceRetainInFog); 1431 } 1432 1433 virtual ELosVisibility GetLosVisibility(CEntityHandle ent, player_id_t player, bool forceRetainInFog) 1434 { 1435 entity_id_t entId = ent.GetId(); 1436 1437 // Entities not with positions in the world are never visible 1438 if (entId == INVALID_ENTITY) 1439 return VIS_HIDDEN; 1440 CmpPtr<ICmpPosition> cmpPosition(ent); 1441 if (!cmpPosition || !cmpPosition->IsInWorld()) 1442 return VIS_HIDDEN; 1443 1444 CFixedVector2D pos = cmpPosition->GetPosition2D(); 1445 i32 n = PosToLosTilesHelper(pos.X, pos.Y); 1446 1447 if (m_DirtyVisibility[n]) 1448 return ComputeLosVisibility(ent, player, forceRetainInFog); 1449 1450 if (std::find(m_ModifiedEntities.begin(), m_ModifiedEntities.end(), entId) != m_ModifiedEntities.end()) 1451 return ComputeLosVisibility(ent, player, forceRetainInFog); 1452 1453 EntityMap<EntityData>::iterator it = m_EntityData.find(entId); 1454 if (it == m_EntityData.end()) 1455 return ComputeLosVisibility(ent, player, forceRetainInFog); 1456 1457 return static_cast<ELosVisibility>((it->second.visibilities >> (2*(player-1))) & 0x3); 1458 } 1459 1427 1460 virtual ELosVisibility GetLosVisibility(entity_id_t ent, player_id_t player, bool forceRetainInFog) 1428 1461 { 1429 1462 CEntityHandle handle = GetSimContext().GetComponentManager().LookupEntityHandle(ent); … … 1506 1539 for (player_id_t player = 1; player < MAX_LOS_PLAYER_ID+1; ++player) 1507 1540 { 1508 1541 u8 oldVis = (itEnts->second.visibilities >> (2*(player-1))) & 0x3; 1509 u8 newVis = GetLosVisibility(itEnts->first, player, false);1542 u8 newVis = ComputeLosVisibility(itEnts->first, player, false); 1510 1543 1511 1544 oldVisibilities.push_back(oldVis); 1512 1545 newVisibilities.push_back(newVis);