void CBinocular::ResetState() { SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle_relaxed); SetWeaponRaised(false); if(m_pNightVisionCVar) m_pNightVisionCVar->ForceSet("0"); m_bNightVisionEnabled = false; m_bZoomed = false; gEnv->p3DEngine->SetPostEffectParam("Dof_Active", 0); }
void CBinocular::Zoom() { if (m_zm && !m_bZoomed) { gEnv->p3DEngine->SetPostEffectParam("Dof_UseMask", 0); gEnv->p3DEngine->SetPostEffectParam("Dof_Active", 1); gEnv->p3DEngine->SetPostEffectParam("Dof_BlurAmount", 1.0f); gEnv->p3DEngine->SetPostEffectParamString("Dof_MaskTexName", ""); PlayAction(g_pItemStrings->zoom_in); m_zm->StartZoom(); m_bZoomed = true; SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle_raised); } }
void CFists::RaiseWeapon(bool raise, bool faster /*= false*/) { //Only when colliding something while running if(raise && (GetCurrentAnimState()==eFAS_RUNNING || GetCurrentAnimState()==eFAS_JUMPING) && !IsWeaponRaised()) { if((m_fm && m_fm->IsFiring())||(m_melee && m_melee->IsFiring())) return; PlayAction(g_pItemStrings->raise); SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle_relaxed); SetWeaponRaised(true); //Also give the player some impulse into the opposite direction CActor *pPlayer = GetOwnerActor(); Vec3 pos; if(pPlayer) { IPhysicalEntity* playerPhysics = pPlayer->GetEntity()->GetPhysics(); if(playerPhysics) { IMovementController *pMC = pPlayer->GetMovementController(); if(pMC) { SMovementState state; pMC->GetMovementState(state); pe_action_impulse impulse; impulse.iApplyTime = 1; impulse.impulse = -state.eyeDirection*600.0f; playerPhysics->Action(&impulse); pos = state.eyePosition + state.eyeDirection*0.5f; } } } GetScheduler()->TimerAction(GetCurrentAnimationTime(eIGS_FirstPerson), CSchedulerAction<EndRaiseWeaponAction>::Create(EndRaiseWeaponAction(this)), true); //Sound and FX feedback CollisionFeeback(pos,m_currentAnimState); } else if(!raise) SetWeaponRaised(false); }
//------------------------------------------------------------------------ bool CItem::SetGeometry(int slot, const ItemString &name, const Vec3 &poffset, const Ang3 &aoffset, float scale, bool forceReload) { bool changedfp=false; switch(slot) { case eIGS_Arms: { if(!name || forceReload) { GetEntity()->FreeSlot(slot); #ifndef ITEM_USE_SHAREDSTRING m_geometry[slot].resize(0); #else m_geometry[slot].reset(); #endif } ResetCharacterAttachment(eIGS_FirstPerson, ITEM_ARMS_ATTACHMENT_NAME); ICharacterInstance *pCharacter=0; if(name && name[0]) { if(name != m_geometry[slot]) GetEntity()->LoadCharacter(slot, name); DrawSlot(eIGS_Arms, false); pCharacter = GetEntity()->GetCharacter(eIGS_Arms); } else if(m_pForcedArms) { pCharacter = m_pForcedArms; } else { int armsId=m_stats.hand==eIH_Right?0:1; pCharacter = GetOwnerActor()?GetOwnerActor()->GetFPArms(armsId):0; } if(pCharacter) { pCharacter->SetFlags(pCharacter->GetFlags()&(~CS_FLAG_UPDATE)); SetCharacterAttachment(eIGS_FirstPerson, ITEM_ARMS_ATTACHMENT_NAME, pCharacter, 0); } } break; case eIGS_FirstPerson: case eIGS_ThirdPerson: default: { if(!name || forceReload) { GetEntity()->FreeSlot(slot); #ifndef ITEM_USE_SHAREDSTRING m_geometry[slot].resize(0); #else m_geometry[slot].reset(); #endif } DestroyAttachmentHelpers(slot); if(name && name[0]) { if(m_geometry[slot] != name) { const char *ext = PathUtil::GetExt(name.c_str()); if((stricmp(ext, "chr") == 0) || (stricmp(ext, "cdf") == 0) || (stricmp(ext, "cga") == 0)) GetEntity()->LoadCharacter(slot, name, 0); else GetEntity()->LoadGeometry(slot, name, 0, 0); changedfp=slot==eIGS_FirstPerson; } CreateAttachmentHelpers(slot); SetDefaultIdleAnimation(slot, g_pItemStrings->idle); } if(slot == eIGS_FirstPerson) { ICharacterInstance *pCharacter = GetEntity()->GetCharacter(eIGS_FirstPerson); if(pCharacter) { pCharacter->SetFlags(pCharacter->GetFlags()&(~CS_FLAG_UPDATE)); } } else if(slot == eIGS_Destroyed) DrawSlot(eIGS_Destroyed, false); } break; } Matrix34 slotTM; slotTM = Matrix34::CreateRotationXYZ(aoffset); slotTM.Scale(Vec3(scale, scale, scale)); slotTM.SetTranslation(poffset); GetEntity()->SetSlotLocalTM(slot, slotTM); if(changedfp && m_stats.mounted) { PlayAction(m_idleAnimation[eIGS_FirstPerson], 0, true); ForceSkinning(true); if(!m_mountparams.pivot.empty()) { Matrix34 tm=GetEntity()->GetSlotLocalTM(eIGS_FirstPerson, false); Vec3 pivot = GetSlotHelperPos(eIGS_FirstPerson, m_mountparams.pivot.c_str(), false); tm.AddTranslation(pivot); GetEntity()->SetSlotLocalTM(eIGS_FirstPerson, tm); } GetEntity()->InvalidateTM(); } m_geometry[slot] = name ? name : ""; ReAttachAccessories(); return true; }
//------------------------------------------ //CFists::RequestAnimState(EFistAnimState eFAS) // //This method changes (if possible) the current animation for the fists // eFAS - Requested anim state void CFists::RequestAnimState(EFistAnimState eFAS, bool force /*=false*/) { //Only if selected if(!IsSelected() || m_frozen || IsWeaponRaised()) return; if(!m_underWater) { switch(eFAS) { case eFAS_NOSTATE: m_currentAnimState = eFAS_NOSTATE; m_timeOut = TIMEOUT; break; case eFAS_RELAXED: if(m_currentAnimState!=eFAS_NOSTATE && m_currentAnimState!=eFAS_RELAXED) { m_currentAnimState = eFAS_RELAXED; m_timeOut = TIMEOUT; PlayAction(g_pItemStrings->deselect); SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle_relaxed); } break; case eFAS_FIGHT: //if(m_currentAnimState!=eFAS_RUNNING) { SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle); m_currentAnimState = eFAS_FIGHT; m_timeOut = TIMEOUT; } break; case eFAS_RUNNING: if(m_currentAnimState==eFAS_RELAXED || CanMeleeAttack()) { PlayAction(g_pItemStrings->run_forward,0,true); m_currentAnimState = eFAS_RUNNING; } break; case eFAS_JUMPING: if(m_currentAnimState==eFAS_RUNNING) { PlayAction(g_pItemStrings->jump_start); SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->jump_idle); m_currentAnimState = eFAS_JUMPING; } break; case eFAS_LANDING: if(m_currentAnimState==eFAS_JUMPING) { PlayAction(g_pItemStrings->jump_end); SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->idle_relaxed); m_currentAnimState = eFAS_RELAXED; } break; case eFAS_CRAWL: if(m_currentAnimState!=eFAS_CRAWL) { PlayAction(g_pItemStrings->crawl,0,true); //SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->crawl); m_currentAnimState = eFAS_CRAWL; } break; } } else { switch(eFAS) { case eFAS_SWIM_IDLE: if(m_currentAnimState!=eFAS_SWIM_IDLE) { m_currentAnimState = eFAS_SWIM_IDLE; PlayAction(g_pItemStrings->swim_idle,0,true,eIPAF_Default|eIPAF_CleanBlending); //SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->swim_idle); } break; case eFAS_SWIM_FORWARD: if(m_currentAnimState!=eFAS_SWIM_FORWARD) { m_currentAnimState = eFAS_SWIM_FORWARD; PlayAction(g_pItemStrings->swim_forward,0,true,eIPAF_Default|eIPAF_CleanBlending); //SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->swim_forward); } break; case eFAS_SWIM_BACKWARD: if(m_currentAnimState!=eFAS_SWIM_BACKWARD) { m_currentAnimState = eFAS_SWIM_BACKWARD; PlayAction(g_pItemStrings->swim_backward,0,true,eIPAF_Default|eIPAF_CleanBlending); //SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->swim_backward); } break; case eFAS_SWIM_SPEED: if(m_currentAnimState!=eFAS_SWIM_SPEED) { m_currentAnimState = eFAS_SWIM_SPEED; PlayAction(g_pItemStrings->speed_swim,0,true,eIPAF_Default|eIPAF_CleanBlending); //SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->speed_swim); } break; case eFAS_SWIM_FORWARD_S: if(m_currentAnimState!=eFAS_SWIM_FORWARD_S) { m_currentAnimState = eFAS_SWIM_FORWARD_S; PlayAction(g_pItemStrings->swim_forward_2,0,true,eIPAF_Default|eIPAF_CleanBlending); //SetDefaultIdleAnimation( eIGS_FirstPerson,g_pItemStrings->swim_forward_2); } break; } } }