void CFlowAddModelToPostRender::ProcessEvent( EFlowEvent event, SActivationInfo *pActInfo ) { switch (event) { case eFE_Initialize: break; case eFE_Activate: if (IsPortActive(pActInfo, IN_ADD)) { INDENT_LOG_DURING_SCOPE(); //Create scene CMenuRender3DModelMgr *renderModels = CMenuRender3DModelMgr::GetInstance(); if (renderModels) { //Add model with animation if needed const float playSpeed = GetPortFloat(pActInfo, IN_ANIM_SPEED); const char * usePlayerModelName = GetPortString(pActInfo, IN_MODEL); const char * useAnimation = GetPortString(pActInfo, IN_ANIM); CMenuRender3DModelMgr::SModelParams params; params.pFilename = usePlayerModelName; params.posOffset = GetPortVec3(pActInfo, IN_ENTITYPOS); params.rot = Ang3(GetPortVec3(pActInfo, IN_ENTITYROT)); params.continuousRot = Ang3(GetPortVec3(pActInfo, IN_ENTITYCONTROT)); params.scale = GetPortFloat(pActInfo, IN_SCALE); params.pName = "char"; params.screenRect[0] = GetPortVec3(pActInfo, IN_SCREENUV).x; params.screenRect[1] = GetPortVec3(pActInfo, IN_SCREENUV).y; params.screenRect[2] = GetPortVec3(pActInfo, IN_SCREENU2V2).x; params.screenRect[3] = GetPortVec3(pActInfo, IN_SCREENU2V2).y; if(strcmp(usePlayerModelName, "") != 0) characterModelIndex = renderModels->AddModel(params); if(strcmp(useAnimation, "") != 0) renderModels->UpdateAnim(characterModelIndex, useAnimation, playSpeed); } } break; } }
//------------------------------------------------------------------------- void CGameRulesStandardState::Add3DWinningTeamMember() { IActor * localActor = g_pGame->GetIGameFramework()->GetClientActor(); if (localActor != NULL && static_cast<CActor*>(localActor)->GetSpectatorState() != CActor::eASS_SpectatorMode && !g_pGame->GetUI()->IsInMenu()) { IEntity * renderModelFromEntity = NULL; if (m_pGameRules->GetTeamCount() > 1) { // Only way to get in here is for it to be a team game (as opposed to every-man-for-himself Instant Action) const int teamId = m_pGameRules->GetTeam(localActor->GetEntityId()); assert(teamId == 1 || teamId == 2); const int enemyTeamId = 3 - teamId; const int clientTeamScore = m_pGameRules->GetTeamsScore(teamId); const int nonClientTeamScore = m_pGameRules->GetTeamsScore(enemyTeamId); bool winning = (clientTeamScore >= nonClientTeamScore); CryLog ("Want to add 3D model of winning team member... local player '%s' is %s", localActor->GetEntity()->GetName(), winning ? " on the winning team" : "not on the winning team"); if (! winning) { if (m_pGameRules->GetTeamPlayerCount(enemyTeamId, false)) { renderModelFromEntity = gEnv->pEntitySystem->GetEntity(m_pGameRules->GetTeamPlayer(enemyTeamId, 0)); } } } if (renderModelFromEntity == NULL) { // Local entity must exist (checked at top of function) so we'll _definitely_ have a renderModelFromEntity after this renderModelFromEntity = localActor->GetEntity(); } // Additional paranoia :) if (renderModelFromEntity) { CryLog ("Adding 3D model of '%s' to accompany scoreboard", renderModelFromEntity->GetName()); INDENT_LOG_DURING_SCOPE(); ICharacterInstance * characterInst = renderModelFromEntity->GetCharacter(0); if (characterInst != NULL) { CMenuRender3DModelMgr *pModelManager = new CMenuRender3DModelMgr(); CMenuRender3DModelMgr::SSceneSettings sceneSettings; sceneSettings.fovScale = 0.5f; sceneSettings.fadeInSpeed = 0.01f; sceneSettings.flashEdgeFadeScale = 0.2f; sceneSettings.ambientLight = Vec4(0.f, 0.f, 0.f, 0.8f); sceneSettings.lights.resize(3); sceneSettings.lights[0].pos.Set(-25.f, -10.f, 30.f); sceneSettings.lights[0].color.Set(5.f, 6.f, 5.5f); sceneSettings.lights[0].specular = 4.f; sceneSettings.lights[0].radius = 400.f; sceneSettings.lights[1].pos.Set(25.f, -4.f, 30.f); sceneSettings.lights[1].color.Set(0.7f, 0.7f, 0.7f); sceneSettings.lights[1].specular = 10.f; sceneSettings.lights[1].radius = 400.f; sceneSettings.lights[2].pos.Set(60.f, 40.f, 10.f); sceneSettings.lights[2].color.Set(0.5f, 1.0f, 0.7f); sceneSettings.lights[2].specular = 10.f; sceneSettings.lights[2].radius = 400.f; pModelManager->SetSceneSettings(sceneSettings); const char * usePlayerModelName = characterInst->GetFilePath(); CMenuRender3DModelMgr::SModelParams params; params.pFilename = usePlayerModelName; params.posOffset.Set(0.1f, 0.f, -0.2f); params.rot.Set(0.f, 0.f, 3.5f); params.scale = 1.35f; params.pName = "char"; params.screenRect[0] = 0.f; params.screenRect[1] = 0.f; params.screenRect[2] = 0.3f; params.screenRect[3] = 0.8f; const float ANIM_SPEED_MULTIPLIER = 0.5f; if (m_pGameRules->GetGameMode() == eGM_Gladiator) { // In Hunter mode, force the model to be a hunter params.pFilename = "_ObjectsSDK/Characters/Human/sdk_player/sdk_player.cdf"; } const CMenuRender3DModelMgr::TAddedModelIndex characterModelIndex = pModelManager->AddModel(params); pModelManager->UpdateAnim(characterModelIndex, "stand_tac_idle_nw_3p_01", ANIM_SPEED_MULTIPLIER); } } } }