void VCameraHandling::OnHandleCallback(IVisCallbackDataObject_cl* pData) { if (pData->m_pSender == &Vision::Callbacks.OnAfterSceneLoaded) { BuildCameraList(); InitFreeCamera(); } else if (pData->m_pSender == &Vision::Callbacks.OnBeforeSceneUnloaded) { DeInitFreeCamera(); ReleaseCameraList(); } else { const int iActionIndex = GetCallbackIndex(pData); if (iActionIndex < 0) return; if (iActionIndex == m_iWASDActionIndex) { SetWASDControlsEnabled(!m_bWASDEnabled); } else { ActivateCameraByActionIndex(iActionIndex); } } }
void VCameraHandling::InitFreeCamera() { // Store free camera that was found in the scene. VFreeCamera* pFreeCameraInScene = m_spFreeCamera; // Create own free camera. // Do not call InitFunction yet. We want to disable the ThinkFunctionStatus first. VisEntityTemplate_cl initTemplate; initTemplate.m_pszClassName = "VFreeCamera"; initTemplate.m_bCallInitFunction = false; m_spFreeCamera = vstatic_cast<VFreeCamera*>(Vision::Game.CreateEntity(initTemplate)); m_spFreeCamera->SetThinkFunctionStatus(FALSE); m_spFreeCamera->SetObjectFlag(VObjectFlag_AutoDispose); m_spFreeCamera->InitFunction(); // Call InitFunction only now. // Apply WASD setting to all free cameras. SetWASDControlsEnabled(m_bWASDEnabled); // Check if there are orbit or path cameras. bool bHasOrbitOrPathCamera = false; for (VPOSITION it = m_actionMap.GetStartPosition(); it != NULL;) { int iActionIndex; EntityAccessor entity; m_actionMap.GetNextPair(it, iActionIndex, entity); VASSERT(entity.IsValid()); if (entity.GetComponentOfBaseType<VOrbitCamera>() != NULL || entity.GetAs<PathCameraEntity>() != NULL) { bHasOrbitOrPathCamera = true; break; } } // Fall back to default camera transformation if there are no active cameras. if (!bHasOrbitOrPathCamera && pFreeCameraInScene == NULL) { DeactivateAllCameras(); m_spFreeCamera->SetPosition(GetParent()->GetSceneLoader().m_vDefaultCamPos); m_spFreeCamera->SetRotationMatrix(GetParent()->GetSceneLoader().m_DefaultCamRot); m_spFreeCamera->SetThinkFunctionStatus(TRUE); } }
void VFreeCamera::BaseInit() { m_pInputMap = new VInputMap(CONTROL_LAST_ELEMENT + 1 + CAMERA_CONTROL_USER_SPACE, CAMERA_CONTROL_ALTERNATIVES); #if defined(_VISION_XENON) m_pInputMap->MapTrigger(CONTROL_MOVE_FORWARD, VInputManagerXenon::GetPad(0), CT_PAD_LEFT_THUMB_STICK_UP, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_BACKWARD, VInputManagerXenon::GetPad(0), CT_PAD_LEFT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_LEFT, VInputManagerXenon::GetPad(0), CT_PAD_LEFT_THUMB_STICK_LEFT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_RIGHT, VInputManagerXenon::GetPad(0), CT_PAD_LEFT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerXenon::GetPad(0), CT_PAD_ANY_KEY); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerXenon::GetPad(0), CT_PAD_LEFT_THUMB_STICK_CHANGED); m_pInputMap->MapTriggerAxis(CONTROL_HORIZONTAL_LOOK, VInputManagerXenon::GetPad(0), CT_PAD_RIGHT_THUMB_STICK_LEFT, CT_PAD_RIGHT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.15f, true)); m_pInputMap->MapTriggerAxis(CONTROL_VERTICAL_LOOK, VInputManagerXenon::GetPad(0), CT_PAD_RIGHT_THUMB_STICK_UP, CT_PAD_RIGHT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.15f, true)); m_pInputMap->MapTrigger(CONTROL_SPEED_FAST, VInputManagerXenon::GetPad(0), CT_PAD_RIGHT_SHOULDER, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_SPEED_FASTER, VInputManagerXenon::GetPad(0), CT_PAD_RIGHT_THUMB); #endif #if defined(_VISION_PS3) m_pInputMap->MapTrigger(CONTROL_MOVE_FORWARD, VInputManagerPS3::GetPad(0), CT_PAD_LEFT_THUMB_STICK_UP, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_BACKWARD, VInputManagerPS3::GetPad(0), CT_PAD_LEFT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_LEFT, VInputManagerPS3::GetPad(0), CT_PAD_LEFT_THUMB_STICK_LEFT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_RIGHT, VInputManagerPS3::GetPad(0), CT_PAD_LEFT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerPS3::GetPad(0), CT_PAD_ANY_KEY); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerPS3::GetPad(0), CT_PAD_LEFT_THUMB_STICK_CHANGED); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerPS3::GetPad(0), CT_PAD_RIGHT_THUMB_STICK_CHANGED); m_pInputMap->MapTriggerAxis(CONTROL_HORIZONTAL_LOOK, VInputManagerPS3::GetPad(0), CT_PAD_RIGHT_THUMB_STICK_LEFT, CT_PAD_RIGHT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.15f, true)); m_pInputMap->MapTriggerAxis(CONTROL_VERTICAL_LOOK, VInputManagerPS3::GetPad(0), CT_PAD_RIGHT_THUMB_STICK_UP, CT_PAD_RIGHT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.15f, true)); m_pInputMap->MapTrigger(CONTROL_SPEED_FAST, VInputManagerPS3::GetPad(0), CT_PAD_RIGHT_SHOULDER, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_SPEED_FASTER, VInputManagerPS3::GetPad(0), CT_PAD_RIGHT_THUMB); #endif #if defined(_VISION_PSP2) m_pInputMap->MapTrigger(CONTROL_MOVE_FORWARD, VInputManagerPSP2::GetPad(0), CT_PAD_LEFT_THUMB_STICK_UP, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_BACKWARD, VInputManagerPSP2::GetPad(0), CT_PAD_LEFT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_LEFT, VInputManagerPSP2::GetPad(0), CT_PAD_LEFT_THUMB_STICK_LEFT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_RIGHT, VInputManagerPSP2::GetPad(0), CT_PAD_LEFT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerPSP2::GetPad(0), CT_PAD_ANY_KEY); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerPSP2::GetPad(0), CT_PAD_LEFT_THUMB_STICK_CHANGED); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerPSP2::GetPad(0), CT_PAD_RIGHT_THUMB_STICK_CHANGED); m_pInputMap->MapTriggerAxis(CONTROL_HORIZONTAL_LOOK, VInputManagerPSP2::GetPad(0), CT_PAD_RIGHT_THUMB_STICK_LEFT, CT_PAD_RIGHT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.15f, true)); m_pInputMap->MapTriggerAxis(CONTROL_VERTICAL_LOOK, VInputManagerPSP2::GetPad(0), CT_PAD_RIGHT_THUMB_STICK_UP, CT_PAD_RIGHT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.15f, true)); m_pInputMap->MapTrigger(CONTROL_SPEED_FASTER, VInputManagerPSP2::GetPad(0), CT_PAD_RIGHT_SHOULDER, VInputOptions::DeadZone(0.25f)); #endif #if defined(SUPPORTS_KEYBOARD) m_pInputMap->MapTrigger(CONTROL_MOVE_FORWARD, V_KEYBOARD, CT_KB_UP); m_pInputMap->MapTrigger(CONTROL_MOVE_BACKWARD, V_KEYBOARD, CT_KB_DOWN); m_pInputMap->MapTrigger(CONTROL_MOVE_LEFT, V_KEYBOARD, CT_KB_LEFT); m_pInputMap->MapTrigger(CONTROL_MOVE_RIGHT, V_KEYBOARD, CT_KB_RIGHT); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, V_KEYBOARD, CT_KB_UNKNOWN); #endif #if defined(SUPPORTS_MOUSE) m_pInputMap->MapTrigger(CONTROL_HORIZONTAL_LOOK, V_MOUSE, CT_MOUSE_ABS_DELTA_X, VInputOptions::Sensitivity(0.15f / Vision::Video.GetDeviceDpi())); m_pInputMap->MapTrigger(CONTROL_VERTICAL_LOOK, V_MOUSE, CT_MOUSE_ABS_DELTA_Y, VInputOptions::Sensitivity(0.15f / Vision::Video.GetDeviceDpi())); m_pInputMap->MapTrigger(CONTROL_SPEED_FAST, V_MOUSE, CT_MOUSE_RIGHT_BUTTON); m_pInputMap->MapTrigger(CONTROL_SPEED_FASTER, V_MOUSE, CT_MOUSE_MIDDLE_BUTTON); #endif #if defined(_VISION_WIIU) // DRC mapping m_pInputMap->MapTrigger(CONTROL_MOVE_FORWARD, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_LEFT_THUMB_STICK_UP, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_BACKWARD, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_LEFT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_LEFT, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_LEFT_THUMB_STICK_LEFT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_RIGHT, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_LEFT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_ANY_KEY); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_LEFT_THUMB_STICK_CHANGED); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_RIGHT_THUMB_STICK_CHANGED); m_pInputMap->MapTriggerAxis(CONTROL_HORIZONTAL_LOOK, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_RIGHT_THUMB_STICK_LEFT, CT_PAD_RIGHT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.15f, true)); m_pInputMap->MapTriggerAxis(CONTROL_VERTICAL_LOOK, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_RIGHT_THUMB_STICK_UP, CT_PAD_RIGHT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.15f, true)); m_pInputMap->MapTrigger(CONTROL_SPEED_FAST, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_RIGHT_SHOULDER, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_SPEED_FASTER, VInputManagerWiiU::GetDRC(V_DRC_FIRST), CT_PAD_LEFT_SHOULDER, VInputOptions::DeadZone(0.4f)); // Pro controller mapping m_pInputMap->MapTrigger(CONTROL_MOVE_FORWARD, VInputManagerWiiU::GetRemote(0), CT_PAD_LEFT_THUMB_STICK_UP, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_BACKWARD, VInputManagerWiiU::GetRemote(0), CT_PAD_LEFT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_LEFT, VInputManagerWiiU::GetRemote(0), CT_PAD_LEFT_THUMB_STICK_LEFT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_MOVE_RIGHT, VInputManagerWiiU::GetRemote(0), CT_PAD_LEFT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.25f)); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerWiiU::GetRemote(0), CT_PAD_ANY_KEY); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerWiiU::GetRemote(0), CT_PAD_LEFT_THUMB_STICK_CHANGED); m_pInputMap->MapTrigger(CONTROL_ANY_ACTION, VInputManagerWiiU::GetRemote(0), CT_PAD_RIGHT_THUMB_STICK_CHANGED); m_pInputMap->MapTriggerAxis(CONTROL_HORIZONTAL_LOOK, VInputManagerWiiU::GetRemote(0), CT_PAD_RIGHT_THUMB_STICK_LEFT, CT_PAD_RIGHT_THUMB_STICK_RIGHT, VInputOptions::DeadZone(0.05f, true)); m_pInputMap->MapTriggerAxis(CONTROL_VERTICAL_LOOK, VInputManagerWiiU::GetRemote(0), CT_PAD_RIGHT_THUMB_STICK_UP, CT_PAD_RIGHT_THUMB_STICK_DOWN, VInputOptions::DeadZone(0.05f, true)); m_pInputMap->MapTrigger(CONTROL_SPEED_FAST, VInputManagerWiiU::GetRemote(0), CT_PAD_RIGHT_SHOULDER, VInputOptions::DeadZone(0.1f)); m_pInputMap->MapTrigger(CONTROL_SPEED_FASTER, VInputManagerWiiU::GetRemote(0), CT_PAD_LEFT_SHOULDER, VInputOptions::DeadZone(0.2f)); #endif #if defined(_VISION_ANDROID) // Additional input possibilities for devices with play station buttons m_pInputMap->MapTrigger(CONTROL_MOVE_FORWARD, VInputManagerAndroid::GetKeyInput(), CT_PAD_UP, VInputOptions::Alternative(1)); m_pInputMap->MapTrigger(CONTROL_MOVE_BACKWARD, VInputManagerAndroid::GetKeyInput(), CT_PAD_DOWN, VInputOptions::Alternative(1)); m_pInputMap->MapTrigger(CONTROL_MOVE_LEFT, VInputManagerAndroid::GetKeyInput(), CT_PAD_LEFT, VInputOptions::Alternative(1)); m_pInputMap->MapTrigger(CONTROL_MOVE_RIGHT, VInputManagerAndroid::GetKeyInput(), CT_PAD_RIGHT, VInputOptions::Alternative(1)); #endif #if defined(SUPPORTS_MULTITOUCH) && (defined(_VISION_MOBILE) || defined(_VISION_WINRT)) VASSERT(m_pVirtualThumbStick == NULL); CreateVirtualThumbStick(); #endif // WASD is enabled by default. SetWASDControlsEnabled(true); // Initialize think function status. OnThinkFunctionStatusChanged(); }