void CActionCoopAnimation::Install() { TPlayerAction::Install(); IActionController* pTargetActionController = m_target.GetAnimatedCharacter()->GetActionController(); if(pTargetActionController) { m_player.GetAnimatedCharacter()->GetActionController()->SetSlaveController(*pTargetActionController, PlayerMannequin.contextIDs.SlaveChar, true, m_piOptionalTargetDatabase); CRecordingSystem* pRecordingSystem = g_pGame->GetRecordingSystem(); if (pRecordingSystem) { pRecordingSystem->OnMannequinSetSlaveController(m_rootScope->GetEntityId(), m_target.GetEntityId(), PlayerMannequin.contextIDs.SlaveChar, true, m_piOptionalTargetDatabase); } } else { IEntity* pTargetEnt = m_target.GetEntity(); if (pTargetEnt) { IEntity& targetEnt = *pTargetEnt; m_player.GetAnimatedCharacter()->GetActionController()->SetScopeContext(PlayerMannequin.contextIDs.SlaveChar, targetEnt, targetEnt.GetCharacter(0), m_piOptionalTargetDatabase); } } m_player.GetAnimatedCharacter()->GetActionController()->GetContext().state.Set(m_targetTagID, true); }
void CActionCoopAnimation::RemoveTargetFromSlaveContext() { IAnimatedCharacter* pTargetAnimChar = m_targetEntityID ? m_target.GetAnimatedCharacter() : NULL; IActionController* pTargetActionController = pTargetAnimChar ? pTargetAnimChar->GetActionController() : NULL; if(pTargetActionController) { IAnimatedCharacter* pAnimChar = m_player.GetAnimatedCharacter(); IActionController* pActionController = pAnimChar->GetActionController(); pActionController->SetSlaveController(*pTargetActionController, PlayerMannequin.contextIDs.SlaveChar, false, m_piOptionalTargetDatabase); CRecordingSystem* pRecordingSystem = g_pGame->GetRecordingSystem(); if (pRecordingSystem) { pRecordingSystem->OnMannequinSetSlaveController(m_rootScope->GetEntityId(), pTargetActionController->GetEntityId(), PlayerMannequin.contextIDs.SlaveChar, false, m_piOptionalTargetDatabase); } } else { m_rootScope->GetActionController().ClearScopeContext(PlayerMannequin.contextIDs.SlaveChar); } }