ctr_Repair/trunk/SkipFirstLaunch/sysInput.cpp
N2614 b78bfdb624 警告対応
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@682 385bec56-5757-e545-9c3a-d8741f4650f1
2012-03-26 07:58:54 +00:00

221 lines
5.2 KiB
C++

/*!
@file sysInput.cpp
@brief 入力
*/
//#include "sys.h"
#include "sysInput.h"
#ifndef NW_RELEASE
//#include "utScreenCapture.h"
#endif
#ifdef DEBUG_TEXT
#include "lytManager.h"
#endif
namespace sys
{
u16 Input::msPad; // 現在の入力
u16 Input::msPadPrev; // 1フレーム前の入力
u16 Input::msPadTrig; // 現在のトリガ
bool Input::msTP;
bool Input::msTPTouch;
nw::math::VEC2 Input::msTPPos;
nw::math::VEC2 Input::msTPFloatPos;
nn::hid::CTR::PadReader* Input::mspPadReader;
nn::hid::CTR::PadStatus* Input::mspPadStatus;
nn::hid::CTR::TouchPanelReader* Input::mspTpReader;
nn::hid::CTR::TouchPanelStatus* Input::mspTpStatus;
nn::hid::CTR::PadReaderWithSvr2* Input::smpPadReaderWithSvr2;
/*!
初期化
*/
void Input::init()
{
NN_PANIC("comment out function, %s:%d", __func__, __LINE__);
#if 0
msPad = 0;
msPadPrev = 0;
msPadTrig = 0;
//nn::Result result;
// nn::hid::Initialize();
//NN_UTIL_PANIC_IF_FAILED(result);
mspPadReader = new( sys::Mem::getMainHeap() ) nn::hid::CTR::PadReader();
mspPadStatus = new( sys::Mem::getMainHeap() ) nn::hid::CTR::PadStatus();
mspPadReader->SetStickClampMode( nn::hid::CTR::PadReader::STICK_CLAMP_MODE_CROSS );
mspTpReader = new( sys::Mem::getMainHeap() ) nn::hid::CTR::TouchPanelReader();
mspTpStatus = new( sys::Mem::getMainHeap() ) nn::hid::CTR::TouchPanelStatus();
smpPadReaderWithSvr2 = new( sys::Mem::getMainHeap() ) nn::hid::CTR::PadReaderWithSvr2();
#endif
}
/*!
更新
*/
void Input::update( int system_stt )
{
NN_PANIC("comment out function, %s:%d", __func__, __LINE__);
NN_UNUSED_VAR(system_stt);
#if 0
// ステートが通常以外になったときは更新を止めつつ、処理をリセットさせる
if( system_stt != sys::eSystemStt_Normal )
{
return;
}
msTPTouch = msTP;
// 入力取得
bool pad_ret = mspPadReader->ReadLatest( mspPadStatus );
bool tp_ret = mspTpReader->ReadLatest( mspTpStatus );
if( tp_ret && mspTpStatus->touch == 1 )
{
// タッチパネル座標系をレイアウト座標系に変換します.
nw::math::VEC2 tpStatus;
tpStatus.x = (f32)( mspTpStatus->x - cDown_Width / 2 );
tpStatus.y = -(f32)( mspTpStatus->y - cDown_Height / 2 );
// 遊び範囲内での動作は,
// チャタリング対策のため非常に遅い追従率で追従させます.
// 遊び範囲を超えたときは完全に一致させます.
static const f32 cPlayRadius = 1.5f; // 遊び半径.
static const f32 cSensitivity = 0.1f; // 遊び半径内での追従係数.
if( msTP && nn::math::VEC2DistSq( msTPFloatPos, tpStatus ) < cPlayRadius * cPlayRadius )
{
msTPFloatPos += ( tpStatus - msTPFloatPos ) * cSensitivity;
}
else
{
msTPFloatPos = tpStatus;
}
// 小数のまま使用すると,スライダーバーやタッチスライダーで,
// 終端判定以降にじりじり動いてしまう問題が発生したため,
// 整数に丸めて使用します.
msTPPos.x = (int)msTPFloatPos.x;
msTPPos.y = (int)msTPFloatPos.y;
msTP = true;
}
else msTP = false;
if( pad_ret )
{
msPadTrig = (u16)( msPad & ~msPadPrev );
msPadPrev = msPad;
}
#ifndef NW_RELEASE
// キャプチャー用テストコード
if( isButtonHold( BUTTON_R | BUTTON_L ) )
{
if( isButtonHold( KEY_UP ) ) ut::SaveDisplayBufferSD( eDisp_Up );
else if( isButtonHold( KEY_DOWN ) ) ut::SaveDisplayBufferSD( eDisp_Down );
}
#endif
#ifdef DEBUG_TEXT
if( isButtonHold( BUTTON_R | BUTTON_L ) &&
isTouched() )
{
static bool visible = false;
visible = !visible;
lyt::Manager::setDebugVisible( visible );
}
#endif
#endif
}
/*!
終了処理
*/
void Input::finish()
{
// nn::hid::Finalize();
}
/*!
押した
*/
u16 Input::isTouched()
{
return msTP && !msTPTouch;
}
/*!
離した
*/
u16 Input::isReleased()
{
return !msTP && msTPTouch;
}
/*!
押してる
*/
u16 Input::isTouching()
{
return msTP;
}
/*!
現在のPADのトリガ入力を取得
*/
u16 Input::getPadTrig()
{
return mspPadStatus->trigger;
}
/*!
押された瞬間かどうか(トリガ)
*/
bool Input::isButtonTrig( u16 button )
{
return ( mspPadStatus->trigger & button ) ? true: false;
}
/*!
押されている状態かどうか(コント)
*/
bool Input::isButtonHold( u16 button )
{
return ( mspPadStatus->hold & button )? true: false;
}
/*!
3D視差ボリューム取得
0.0f〜1.0fの値が返ります
*/
f32 Input::getSvr2Volume()
{
return 0;
//return smpPadReaderWithSvr2->GetSvr2Volume();
}
/*
アナログスティックの値
*/
f32 Input::getNormalizeX()
{
return mspPadReader->NormalizeStick( mspPadStatus->stick.x );
}
f32 Input::getNormalizeY()
{
return mspPadReader->NormalizeStick( mspPadStatus->stick.y );
}
}