/// <summary>立体視のオン/オフを設定する</summary> private POWERS SetStereoPower(POWERS power) { // パワー ON/OFF m_CameraL.gameObject.SetActive(POWERS.OFF != power); m_CameraR.gameObject.SetActive(POWERS.OFF != power); // POWERS に応じて画面分割などを変化する switch (power) { case POWERS.NAKED_EYES: // 裸眼による交差法/平衡法 m_CameraL.rect = new Rect(0.0f, 0.0f, 0.5f, 1.0f); m_CameraR.rect = new Rect(0.5f, 0.0f, 0.5f, 1.0f); m_CameraL.aspect = m_CameraR.aspect = 1.0f; break; case POWERS.SIDEBYSIDE: // HMD などの左右分割方式 m_CameraL.rect = new Rect(0.0f, 0.0f, 0.5f, 1.0f); m_CameraR.rect = new Rect(0.5f, 0.0f, 0.5f, 1.0f); m_CameraL.aspect = m_CameraR.aspect = 2.0f; break; case POWERS.TOPANDBOTTOM: // HMD などの上下分割方式 m_CameraL.rect = new Rect(0.0f, 0.0f, 1.0f, 0.5f); m_CameraR.rect = new Rect(0.0f, 0.5f, 1.0f, 0.5f); m_CameraL.aspect = m_CameraR.aspect = 2.0f; break; case POWERS.OFF: default: m_CameraL.gameObject.SetActive(false); m_CameraR.gameObject.SetActive(false); break; } return(m_Power = power); }
/// <summary>画面を更新する</summary> public void LateUpdate() { if (!m_AllowUpdate) { return; } if (POWERS.OFF != m_Power) { Transform mainCameraT = Camera.main.transform; //メインカメラが向いている方向を保存 Vector3 v = mainCameraT.transform.localEulerAngles; //メインカメラの向きに応じて視差を生成 Vector3 parallax = (new Vector3(Mathf.Cos(v.y * Mathf.Deg2Rad) * Mathf.Cos(v.z * Mathf.Deg2Rad), Mathf.Cos(v.x * Mathf.Deg2Rad) * Mathf.Sin(v.z * Mathf.Deg2Rad), -Mathf.Sin(v.y * Mathf.Deg2Rad) * Mathf.Cos(v.z * Mathf.Deg2Rad))) * m_cfg.ParallaxScale * (m_Mode == "RL" ? -1 : 1); //Console.WriteLine( "AroundAngle x={0} y={1},z={2}", v.x, v.y, v.z); // カメラの場所を視差分だけずらして m_CameraL.transform.position = mainCameraT.position - parallax; m_CameraR.transform.position = mainCameraT.position + parallax; // メインカメラの向き(保存済み)に合わせて両目カメラを向ける m_CameraL.transform.localEulerAngles = v; m_CameraR.transform.localEulerAngles = v; } // キー入力で切替える:オン/オフ if (Input.GetKeyDown(m_cfg.KeyTogglePower.ToLower())) { m_Power = m_Power + 1; if (POWERS.NAKED_EYES == m_Power && !m_cfg.PowersEnable.ToUpper().Contains("NAKED_EYES")) { m_Power = m_Power + 1; } if (POWERS.SIDEBYSIDE == m_Power && !m_cfg.PowersEnable.ToUpper().Contains("SIDEBYSIDE")) { m_Power = m_Power + 1; } if (POWERS.TOPANDBOTTOM == m_Power && !m_cfg.PowersEnable.ToUpper().Contains("TOPANDBOTTOM")) { m_Power = m_Power + 1; } if (POWERS._ENUM_MAX_VALUE == m_Power) { m_Power = POWERS._ENUM_FIRST_VALUE; } SetStereoPower(m_Power); } // キー入力で切替える:平行法/交差法 if (Input.GetKeyDown(m_cfg.KeyToggleMode.ToLower())) { m_Mode = (m_Mode == "RL" ? "LR" : "RL"); SetStereoMode(m_Mode); // 不要 } // ParallaxScale の調整モード if ((int)DEBUG_LEVELS.PARALLAX_SCALE_ADJ == m_cfg.DebugLevel) { if (Input.GetKey(m_cfg.ParaSclAdjKeyInc.ToLower()) && m_cfg.ParallaxScale < _CONFIG.ParaSclAdjMax) { m_cfg.ParallaxScale += _CONFIG.ParaSclAdjStep * (Input.GetKey(KeyCode.RightShift) ? 10 : 1); if (_CONFIG.ParaSclAdjMax < m_cfg.ParallaxScale) { m_cfg.ParallaxScale = _CONFIG.ParaSclAdjMax; } } if (Input.GetKey(m_cfg.ParaSclAdjKeyDec.ToLower()) && 0.0f < m_cfg.ParallaxScale) { m_cfg.ParallaxScale -= _CONFIG.ParaSclAdjStep * (Input.GetKey(KeyCode.RightShift) ? 10 : 1); if (m_cfg.ParallaxScale < 0.0f) { m_cfg.ParallaxScale = 0.0f; } } } }
private static void ResolvePowers (POWERS p) { switch (p) { case POWERS.LoyaltyCheck: gameState = GAMESTATES.LOYALTY_CHECK; break; case POWERS.SpecialElection: gameState = GAMESTATES.SPECIAL_ELECTION; break; case POWERS.PolicyCheck: gameState = GAMESTATES.POLICY_PEEK; players[CurrentPrez].Hand = policies.showTopThree(); break; case POWERS.Assassination: gameState = GAMESTATES.ASSASSINATE; break; default: SetPres(); break; } }
/// <summary>立体視のオン/オフを設定する</summary> private POWERS SetStereoPower( POWERS power ) { // パワー ON/OFF m_CameraL.gameObject.SetActive( POWERS.OFF != power ); m_CameraR.gameObject.SetActive( POWERS.OFF != power ); // POWERS に応じて画面分割などを変化する switch( power ) { case POWERS.NAKED_EYES: // 裸眼による交差法/平衡法 m_CameraL.rect = new Rect( 0.0f, 0.0f, 0.5f, 1.0f ); m_CameraR.rect = new Rect( 0.5f, 0.0f, 0.5f, 1.0f ); m_CameraL.aspect = m_CameraR.aspect = 1.0f; break; case POWERS.SIDEBYSIDE: // HMD などの左右分割方式 m_CameraL.rect = new Rect( 0.0f, 0.0f, 0.5f, 1.0f ); m_CameraR.rect = new Rect( 0.5f, 0.0f, 0.5f, 1.0f ); m_CameraL.aspect = m_CameraR.aspect = 2.0f; break; case POWERS.TOPANDBOTTOM: // HMD などの上下分割方式 m_CameraL.rect = new Rect( 0.0f, 0.0f, 1.0f, 0.5f ); m_CameraR.rect = new Rect( 0.0f, 0.5f, 1.0f, 0.5f ); m_CameraL.aspect = m_CameraR.aspect = 2.0f; break; case POWERS.OFF: default: m_CameraL.gameObject.SetActive( false ); m_CameraR.gameObject.SetActive( false ); break; } return( m_Power = power ); }
/// <summary>画面を更新する</summary> public void LateUpdate() { if( !m_AllowUpdate ) return; // 視差ベクトル Vector2 v = GameMain.Instance.MainCamera.GetAroundAngle(); //Console.WriteLine( "AroundAngle x={0} Y={1}", v.x, v.y ); Vector3 parallax = (new Vector3( Mathf.Cos( v.x * Mathf.Deg2Rad ), 0.0f, -Mathf.Sin( v.x * Mathf.Deg2Rad ))) * m_cfg.ParallaxScale * GameMain.Instance.MainCamera.GetDistance() * ( m_Mode == "RL" ? -1 : 1 ); if( POWERS.OFF != m_Power ) { // MainCamera が狙っている target:Vector3 Vector3 target = GameMain.Instance.MainCamera.GetTargetPos(); // カメラの場所を視差分だけずらして Transform mainCameraT = Camera.main.transform; m_CameraL.transform.position = mainCameraT.position - parallax; m_CameraR.transform.position = mainCameraT.position + parallax; // target を狙いなおす m_CameraL.transform.LookAt( target, mainCameraT.up ); m_CameraR.transform.LookAt( target, mainCameraT.up ); } // キー入力で切替える:オン/オフ if( Input.GetKeyDown( m_cfg.KeyTogglePower.ToLower())) { m_Power = m_Power + 1; if( POWERS.NAKED_EYES == m_Power && !m_cfg.PowersEnable.ToUpper().Contains( "NAKED_EYES" )) m_Power = m_Power + 1; if( POWERS.SIDEBYSIDE == m_Power && !m_cfg.PowersEnable.ToUpper().Contains( "SIDEBYSIDE" )) m_Power = m_Power + 1; if( POWERS.TOPANDBOTTOM == m_Power && !m_cfg.PowersEnable.ToUpper().Contains( "TOPANDBOTTOM" )) m_Power = m_Power + 1; if( POWERS._ENUM_MAX_VALUE == m_Power ) m_Power = POWERS._ENUM_FIRST_VALUE; SetStereoPower( m_Power ); } // キー入力で切替える:平行法/交差法 if( Input.GetKeyDown( m_cfg.KeyToggleMode.ToLower())) { m_Mode = ( m_Mode == "RL" ? "LR" : "RL" ); SetStereoMode( m_Mode ); // 不要 } // ParallaxScale の調整モード if( (int)DEBUG_LEVELS.PARALLAX_SCALE_ADJ == m_cfg.DebugLevel ) { if( Input.GetKey( m_cfg.ParaSclAdjKeyInc.ToLower()) && m_cfg.ParallaxScale < _CONFIG.ParaSclAdjMax ) { m_cfg.ParallaxScale += _CONFIG.ParaSclAdjStep * ( Input.GetKey( KeyCode.RightShift ) ? 10 : 1 ); if( _CONFIG.ParaSclAdjMax < m_cfg.ParallaxScale ) m_cfg.ParallaxScale = _CONFIG.ParaSclAdjMax; } if( Input.GetKey( m_cfg.ParaSclAdjKeyDec.ToLower()) && 0.0f < m_cfg.ParallaxScale ) { m_cfg.ParallaxScale -= _CONFIG.ParaSclAdjStep * ( Input.GetKey( KeyCode.RightShift ) ? 10 : 1 ); if( m_cfg.ParallaxScale < 0.0f ) m_cfg.ParallaxScale = 0.0f; } } }
public void SetPower (int position, POWERS power) { spaces[position-1] = power; }