mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@652 385bec56-5757-e545-9c3a-d8741f4650f1
217 lines
5.0 KiB
C++
217 lines
5.0 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()
|
|
{
|
|
#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 )
|
|
{
|
|
#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 smpPadReaderWithSvr2->GetSvr2Volume();
|
|
}
|
|
|
|
/*
|
|
アナログスティックの値
|
|
*/
|
|
f32 Input::getNormalizeX()
|
|
{
|
|
return mspPadReader->NormalizeStick( mspPadStatus->stick.x );
|
|
}
|
|
|
|
f32 Input::getNormalizeY()
|
|
{
|
|
return mspPadReader->NormalizeStick( mspPadStatus->stick.y );
|
|
}
|
|
|
|
}
|