//------------------------------------------------------------------------ IMPLEMENT_RMI(CGameRules, ClTaggedEntity) { if (!params.entityId) return true; //SAFE_HUD_FUNC(GetRadar()->AddTaggedEntity(params.entityId)); //we have no tagging anymore, just temp and non-temp adding SAFE_HUD_FUNC(GetRadar()->AddEntityToRadar(params.entityId)); SEntityEvent scriptEvent( ENTITY_EVENT_SCRIPT_EVENT ); scriptEvent.nParam[0] = (INT_PTR)"OnGPSTagged"; scriptEvent.nParam[1] = IEntityClass::EVT_BOOL; bool bValue = true; scriptEvent.nParam[2] = (INT_PTR)&bValue; IEntity *pEntity = gEnv->pEntitySystem->GetEntity(params.entityId); if (pEntity) pEntity->SendEvent( scriptEvent ); return true; }
//------------------------------------------------------------------------ IMPLEMENT_RMI(CGameRules, ClTempRadarEntity) { SAFE_HUD_FUNC(GetRadar()->AddEntityTemporarily(params.entityId, 15.0f)); return true; }
//------------------------------------------------------------------------ void CWeapon::OnShoot(EntityId shooterId, EntityId ammoId, IEntityClass* pAmmoType, const Vec3 &pos, const Vec3 &dir, const Vec3&vel) { BROADCAST_WEAPON_EVENT(OnShoot, (this, shooterId, ammoId, pAmmoType, pos, dir, vel)); //FIXME:quick temporary solution CActor *pActor = static_cast<CActor*> (g_pGame->GetIGameFramework()->GetIActorSystem()->GetActor(shooterId)); if (pActor) pActor->HandleEvent(SGameObjectEvent(eCGE_OnShoot,eGOEF_ToExtensions)); IActor *pClientActor=m_pGameFramework->GetClientActor(); if (pActor && pActor->GetActorClass() == CPlayer::GetActorClassType() && IsServer()) { if (pActor == pClientActor) { if (IAIObject *pAIObject=pActor->GetEntity()->GetAI()) gEnv->pAISystem->SendSignal(SIGNALFILTER_LEADER, 1, "OnEnableFire", pAIObject, 0); } CPlayer *pPlayer=static_cast<CPlayer *>(pActor); CNanoSuit *pSuit=pPlayer->GetNanoSuit(); if(m_fm && strcmp(m_fm->GetType(), "Repair")) { if(pSuit) { if (pSuit->GetMode() == NANOMODE_STRENGTH && !IsMounted()) pSuit->SetSuitEnergy(pSuit->GetSuitEnergy()-g_pGameCVars->g_suitRecoilEnergyCost); else if(pSuit->GetMode() == NANOMODE_CLOAK) pSuit->SetSuitEnergy(0.0f); } } if (gEnv->bServer && pSuit && pSuit->IsInvulnerable()) pSuit->SetInvulnerability(false); } if (pClientActor && m_fm && strcmp(m_fm->GetType(), "Thrown")) { // inform the HUDRadar about the sound event Vec3 vPlayerPos=pClientActor->GetEntity()->GetWorldPos(); float fDist2=(vPlayerPos-pos).len2(); if (fDist2<250.0f*250.0f) { //if (pClientActor->GetEntityId() != shooterId) // pHUD->ShowSoundOnRadar(pos); if(gEnv->bMultiplayer) { CGameRules *pGameRules = g_pGame->GetGameRules(); if(pGameRules->GetTeamCount() < 2 || (pGameRules->GetTeam(shooterId) != pGameRules->GetTeam(pClientActor->GetEntityId()))) { //Small workaround for patch2... IFireMode* pFM = GetFireMode(GetCurrentFireMode()); bool grenade = pFM?(pFM->GetAmmoType()==CItem::sScarGrenadeClass):false; //~... if (!IsSilencerAttached() || grenade) { SAFE_HUD_FUNC(GetRadar()->AddEntityTemporarily(shooterId, 5.0f)); } else if(fDist2<5.0f*5.0f) { //Silencer attached SAFE_HUD_FUNC(GetRadar()->AddEntityTemporarily(shooterId, 5.0f)); } } } if ((!IsSilencerAttached()) && fDist2<sqr(SAFE_HUD_FUNC_RET(GetBattleRange()))) SAFE_HUD_FUNC(TickBattleStatus(1.0f)); } } }
void CHUDTagNames::DrawTagName(IActor *pActor,bool bLocalVehicle) { CRY_ASSERT(pActor); if(!pActor) return; IActor *pClientActor = g_pGame->GetIGameFramework()->GetClientActor(); CGameRules *pGameRules = g_pGame->GetGameRules(); int iClientTeam = pGameRules->GetTeam(pClientActor->GetEntityId()); if(!bLocalVehicle && pActor->GetLinkedVehicle()) return; const char *szRank = GetPlayerRank(pActor->GetEntityId()); IEntity *pEntity = pActor->GetEntity(); if(!pEntity) return; char szText[HUD_MAX_STRING_SIZE]; if(szRank) { sprintf(szText,"%s %s",szRank,pEntity->GetName()); } else { sprintf(szText,"%s",pEntity->GetName()); } ICharacterInstance *pCharacterInstance = pEntity->GetCharacter(0); if(!pCharacterInstance) return; ISkeletonPose *pSkeletonPose = pCharacterInstance->GetISkeletonPose(); if(!pSkeletonPose) return; int16 sHeadID = pSkeletonPose->GetJointIDByName("Bip01 Head"); if(-1 == sHeadID) return; Matrix34 matWorld = pEntity->GetWorldTM() * Matrix34(pSkeletonPose->GetAbsJointByID(sHeadID)); Vec3 vWorldPos = matWorld.GetTranslation(); // Who has a bigger head? :) vWorldPos.z += 0.4f; AABB box; pEntity->GetWorldBounds(box); bool bDrawOnTop = bLocalVehicle; if(ProjectOnSphere(vWorldPos,box)) { bDrawOnTop = true; } ColorF rgbTagName = COLOR_ENEMY; if(0 == iClientTeam) { if(IsFriendlyToClient(pActor->GetEntityId())) { rgbTagName = COLOR_FRIEND; } } else if(pGameRules->GetTeam(pActor->GetEntityId()) == iClientTeam) { rgbTagName = COLOR_FRIEND; } if(pActor->GetHealth() <= 0) { rgbTagName = COLOR_DEAD; } m_tagNamesVector.resize(1); for(std::vector<EntityId>::iterator iter=SAFE_HUD_FUNC_RET(GetRadar()->GetSelectedTeamMates())->begin(); iter!=SAFE_HUD_FUNC_RET(GetRadar()->GetSelectedTeamMates())->end(); ++iter) { if(pActor->GetEntityId() == *iter) { // Teammate is selected in radar, force the visibility of that name bDrawOnTop = true; break; } } STagName *pTagName = &m_tagNamesVector[0]; pTagName->strName = szText; pTagName->vWorld = vWorldPos; pTagName->bDrawOnTop = bDrawOnTop; pTagName->rgb = rgbTagName; DrawTagNames(); }