void CVisibleObjectsHelper::CheckVisibilityToAI(const TActiveVisibleObjects &activeVisibleObjects, const Agent& agent) const { assert(agent.IsValid()); IScriptSystem *pSS = gEnv->pScriptSystem; assert(pSS); IEntity *pAIEntity = gEnv->pEntitySystem->GetEntity(agent.GetEntityID()); TActiveVisibleObjects::const_iterator itObject = activeVisibleObjects.begin(); TActiveVisibleObjects::const_iterator itObjectEnd = activeVisibleObjects.end(); for (; itObject != itObjectEnd; ++itObject) { const SVisibleObject *visibleObject = (*itObject); assert(visibleObject); const bool bVisible = IsObjectVisible(agent, *visibleObject); if (bVisible) { // Callback function if (visibleObject->pFunc) { visibleObject->pFunc(agent, visibleObject->entityId, visibleObject->pFuncArg); } // Notify on seen if (pAIEntity != NULL && eVOR_FlagNotifyOnSeen == (visibleObject->rule & eVOR_FlagNotifyOnSeen)) { IVisionMap& visionMap = *gEnv->pAISystem->GetVisionMap(); const ObservableParams* pObservableParams = visionMap.GetObservableParams(visibleObject->visionId); if (pObservableParams != NULL) { IEntity* pTargetEntity = gEnv->pEntitySystem->GetEntity(pObservableParams->entityId); ITargetTrackManager *pTargetTrackManager = gEnv->pAISystem->GetTargetTrackManager(); if (pTargetEntity != NULL && pTargetTrackManager != NULL) { const tAIObjectID aiOwnerId = pAIEntity->GetAIObjectID(); const tAIObjectID aiTargetId = pTargetEntity->GetAIObjectID(); TargetTrackHelpers::SStimulusEvent eventInfo; eventInfo.vPos = pTargetEntity->GetWorldPos(); eventInfo.eStimulusType = TargetTrackHelpers::eEST_Visual; eventInfo.eTargetThreat = AITHREAT_INTERESTING; pTargetTrackManager->HandleStimulusEventForAgent(aiOwnerId, aiTargetId, "SeeThrownObject", eventInfo); IAIObject* pAIObjectSender = pAIEntity->GetAI(); if (pAIObjectSender) { IAISignalExtraData *pSignalData = gEnv->pAISystem->CreateSignalExtraData(); if (pSignalData) { pSignalData->nID = visibleObject->entityId; } gEnv->pAISystem->SendSignal(SIGNALFILTER_SENDER, 1, "OnSawObjectMove", pAIObjectSender, pSignalData); } } } } } } }