123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- #include "FTTInput.h"
- #include "AndroidApp.h"
- #include "CFTTTime.h"
- bool FTTInput_bInitialised = false; //005CA22C
- uchar s_uKeyStates[343]; //005C9DD0
- uchar s_bKeyStatesPressed[343]; //005C9F27
- uchar s_bKeyStatesReleased[343]; //005CA07E
- uchar s_fRollerValues[20]; //005CA1D8
- float s_fAxisValues[16]; //005CA1EC
- MYSTATIC int64 int64_3499A0 = 1;
- MYSTATIC float gs_fdword_3499A8[3] = {1.0, 1.0, 1.0}; //003499A8
- MYSTATIC uchar byte_5CA230_mystatic[343];
- MYSTATIC UseBy_unk_5CA388 UseBy_unk_5CA388_5CA388_mystatic;
- MYSTATIC CTouchStateInternal CTouchStateInternal_5CA390_mystatic[16];
- MYSTATIC UseByAddTouchEvent_Internal UseByAddTouchEvent_Internal_5CA590_mystatic[128];
- MYSTATIC bool byte_5CB190_mystatic; // CTouchStateInternal_5CA390_mystatic被初始化元素的count
- MYSTATIC int dword_5CB194_mystatic;
- MYSTATIC int dword_5CB198_mystatic;
- MYSTATIC int dword_5CB19C_mystatic;
- MYSTATIC FTTMutex fttmutex_5CB1AC_mystatic;
- #pragma pack(4)
- struct FTTInput {
- bool b_0;
- int i_4;
- int i_8;
- int i_C;
- uint field_10;
- uint field_14;
- uint field_18;
- FTTMutex tMutex_1C;
- };
- #pragma pack()
- MYSTATIC FTTInput gs_input_005CB190;
- MYSTATIC float gs_fdword_5CB1D0[2];
- MYSTATIC float gs_fdword_5CB1D8[4];
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FF2C //^_^
- __attribute__((noinline)) MYSTATIC void sub_21FF2C_mystatic() {
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FCC0
- void AddTouchEvent_Internal(CTouchStateInternal *p_ctouchstateinternal_r0_arg,
- ETouchEvent etouchevent_r1_arg,
- float f_r2_arg,
- float f_r3_arg, uint ud_arg_0) {
- float f_s16 = f_r3_arg;
- float f_s18 = f_r2_arg;
- int64 ll_r8_r9;
- if (p_ctouchstateinternal_r0_arg != nullptr) { // 0021FCD4
- // 0021FCD6
- ll_r8_r9 = p_ctouchstateinternal_r0_arg->field_8;
- if ((f_s18 == -1.0) && (f_s16 == -1.0)) { // 0021FCDE 0021FCE8
- // 0021FCF0
- f_s18 = p_ctouchstateinternal_r0_arg->field_0;
- f_s16 = p_ctouchstateinternal_r0_arg->field_4;
- }
- bool b_r0;
- if ((etouchevent_r1_arg == 1) && ((b_r0 = p_ctouchstateinternal_r0_arg->NeedsDeferredRelease()) != false)) { // 0021FCF8 0021FD04
- // 0021FD06
- p_ctouchstateinternal_r0_arg->field_0 = f_s18;
- p_ctouchstateinternal_r0_arg->field_4 = f_s16;
- p_ctouchstateinternal_r0_arg->b_1c = true;
- // 0021FE22
- // LOGI("AddTouchEvent_Internal 1_21 return 1");
- return;
- } else if (((etouchevent_r1_arg == 1) && (b_r0 == false)) || ((etouchevent_r1_arg | 2) == 3)) { // 0021FD24
- // 0021FD28 dup
- int i_r0 = gs_input_005CB190.i_4 - (p_ctouchstateinternal_r0_arg - CTouchStateInternal_5CA390_mystatic);
- int i_r2 = i_r0 - 1;
- memmove(p_ctouchstateinternal_r0_arg, &p_ctouchstateinternal_r0_arg[1], sizeof(CTouchStateInternal) * i_r2);
- gs_input_005CB190.i_4--;
- memset(&CTouchStateInternal_5CA390_mystatic[gs_input_005CB190.i_4], 0, sizeof(CTouchStateInternal));
- } else {
- // 0021FDC4
- p_ctouchstateinternal_r0_arg->field_0 = f_s18;
- p_ctouchstateinternal_r0_arg->field_4 = f_s16;
- }
- } else {
- // 0021FD14
- if (etouchevent_r1_arg == 3) { // 0021FD14
- // 0021FD1A
- // 0021FDBE
- ll_r8_r9 = 0;
- } else {
- // 0021FD60
- if ((etouchevent_r1_arg == 0) || (etouchevent_r1_arg == 2)) { // 0021FD68
- // 0021FD6C
- int i_r0 = gs_input_005CB190.i_4;
- if (i_r0 <= 0xF) { // 0021FD72
- // 0021FD76
- gs_input_005CB190.i_4++;
- int64 ll_r0_r1 = int64_3499A0;
- CTouchStateInternal_5CA390_mystatic[i_r0].field_0 = f_s18;
- CTouchStateInternal_5CA390_mystatic[i_r0].field_4 = f_s16;
- int64_3499A0++;
- CTouchStateInternal_5CA390_mystatic[i_r0].field_8 = ll_r0_r1;
- CTouchStateInternal_5CA390_mystatic[i_r0].field_10 = ud_arg_0;
- CTouchStateInternal_5CA390_mystatic[i_r0].uFrameNumber_14 = CFTTTime::s_uFrameNumber;
- uint ui_r0 = CFTTTime::GetSystemTime();
- ll_r8_r9 = CTouchStateInternal_5CA390_mystatic[i_r0].field_8;
- CTouchStateInternal_5CA390_mystatic[i_r0].field_18 = ui_r0;
- CTouchStateInternal_5CA390_mystatic[i_r0].b_1c = false;
- } else {
- ll_r8_r9 = 0;
- }
- } else {
- // 0021FDBE
- ll_r8_r9 = 0;
- }
- }
- }
- // 0021FDCC 合
- int i_r1 = gs_input_005CB190.i_8;
- int i_r2 = gs_input_005CB190.i_C;
- int i_r7 = i_r2 + i_r1;
- i_r7 = i_r7 % 128;
- UseByAddTouchEvent_Internal_5CA590_mystatic[i_r7].field_0 = etouchevent_r1_arg;
- UseByAddTouchEvent_Internal_5CA590_mystatic[i_r7].field_10 = ll_r8_r9;
- UseByAddTouchEvent_Internal_5CA590_mystatic[i_r7].field_4 = f_s18;
- UseByAddTouchEvent_Internal_5CA590_mystatic[i_r7].field_8 = f_s16;
- if (i_r2 <= 0x7F) { // 0021FDD4
- // 0021FE08
- gs_input_005CB190.i_C = i_r2 + 1;
- } else {
- // 0021FE0E
- i_r1++;
- gs_input_005CB190.b_0 = true;
- gs_input_005CB190.i_8 = i_r1 % 128;
- }
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FAF0 //^_- 唯一区别:
- // 在0021FB3C、0021FB40、0021FB48、0021FB4E、0021FB52处,原始的是VST1.32,而我们的是VST1.8,但指令后面的操作数完全相同
- void FTTInput_Init() {
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FB8C //^_- 唯一区别:
- // 在0021FBB6、0021FBC0、0021FBC8、0021FBCE处,原始的是VST1.32,而我们的是VST1.8,但指令后面的操作数完全相同
- void FTTInput_Process() {
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021fc6c ^_^
- void FTTInput_ClearTriggers() {
- memset(&s_bKeyStatesPressed, 0, sizeof(s_bKeyStatesPressed));
- memset(&s_bKeyStatesReleased, 0, sizeof(s_bKeyStatesReleased));
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FC94
- int FTTInput_Shutdown() { return 1; }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FCB0 //^_^
- void FTTInput_SetButtonRemappings(TButtonRemapping *p_tbuttonremapping_r0,
- uint ud_r1) {
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021fe7c ^_^
- void FTTInputTouch_Init(void) {
- FTTInputTouch_Shutdown();
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FE80 //^_^
- void FTTInputTouch_Shutdown() {
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FECC //^_^
- void FTTInputTouch_AddTouchEvent(ETouchEvent eEvent1, float f2, float f3, unsigned int u4) {
- FTTMutex *pFFTutex = FTTInputTouch_GetMutex();
- pFFTutex->Lock();
- sub_21FF2C_mystatic();
- CTouchStateInternal *pTouchStateInternal_r6 = CTouchStateInternal_5CA390_mystatic;
- int count = gs_input_005CB190.i_4;
- int i = 0;
- while (1) {
- if (i < count) {
- if (pTouchStateInternal_r6->field_10 == u4) {
- if (pTouchStateInternal_r6->b_1c == 0)
- break;
- }
- i++;
- pTouchStateInternal_r6++;
- } else {
- pTouchStateInternal_r6 = NULL;
- break;
- }
- };
- AddTouchEvent_Internal(pTouchStateInternal_r6, eEvent1, f2, f3, u4);
- pFFTutex->Unlock();
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FF70 //^_^
- UseByAddTouchEvent_Internal FTTInput_GetTouchEvent() {
- UseByAddTouchEvent_Internal usebyaddtouchevent_internal_retval;
- gs_input_005CB190.tMutex_1C.Lock();
- sub_21FF2C_mystatic();
- if (gs_input_005CB190.b_0 == true) { // 0021FF88
- // 0021FF8C
- gs_input_005CB190.b_0 = false;
- }
- if (gs_input_005CB190.i_C != 0) { // 0021FF92
- // 0021FF94
- usebyaddtouchevent_internal_retval = UseByAddTouchEvent_Internal_5CA590_mystatic[gs_input_005CB190.i_8];
- gs_input_005CB190.i_8 = (gs_input_005CB190.i_8 + 1) % 128;
- gs_input_005CB190.i_C--;
- } else {
- // 0021FFC8
- usebyaddtouchevent_internal_retval.field_10 = 0;
- usebyaddtouchevent_internal_retval.field_0 = ETouchEvent_neg1;
- usebyaddtouchevent_internal_retval.field_4 = -1.0;
- usebyaddtouchevent_internal_retval.field_8 = -1.0;
- }
- gs_input_005CB190.tMutex_1C.Unlock();
- return usebyaddtouchevent_internal_retval;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0021FFF0 //xxx
- int FTTInputTouch_GetTouchState(CTouchState *, int) {
- return 1;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //00220040
- __attribute__((noinline)) FTTMutex *FTTInputTouch_GetMutex() {
- return &gs_input_005CB190.tMutex_1C;
- }
- int i=0;
- float g_r0[19]={566.000000 ,569.626648 ,573.039978 ,576.880005 ,580.506653 ,583.919983 ,587.546692 ,591.173340 ,594.799988 ,598.426636 ,602.053345 ,605.679993 ,609.306641 ,612.933350 ,616.559998 ,620.186646 ,623.813354 ,627.440002 ,630.000000 };
- float g_r1[19]={1214.000000,1180.170044,1148.329956,1112.510010,1078.679932,1046.839966,1013.010010,979.179993, 945.349976, 911.520020, 877.690002, 843.859985, 810.030029, 776.199951, 742.369995, 708.539978, 674.710022, 640.880005, 617.000000};
- bool flag=false;
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //0022004C ^_^
- void FTTInputTouch_AddAndroidTouchEvent(float f_r0, float f_r1, int d_r2,
- int d_r3) {
- switch (d_r2) {
- case 0:
- case 5: {
- FTTInputTouch_AddTouchEvent(ETouchEvent_0, f_r0, f_r1, d_r3);
- } break;
- case 1:
- case 6: {
- if(f_r0==630.0f&&f_r1==617.0f){
- LOGE("replace end");
- i=0;
- }
- FTTInputTouch_AddTouchEvent(ETouchEvent_1, f_r0, f_r1, d_r3);
- } break;
- case 2: {
- if(i){
- LOGE("replace");
- f_r0=g_r0[i];
- f_r1=g_r1[i];
- i++;
- }
- LOGE("r0=%f,r1=%f",f_r0,f_r1);
- if(f_r0==566.0f&&f_r1==1214.0f){
- i++;
- }
-
- FTTInputTouch_AddTouchEvent(ETouchEvent_Touch_2, f_r0, f_r1, d_r3);
- } break;
- case 3: {
- FTTInputTouch_AddTouchEvent(ETouchEvent_3, f_r0, f_r1, d_r3);
- } break;
- case 4: {
- } break;
- }
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //00220084 ^_^
- void FTTInput_ProcessJoystick() {
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //00220190 单元测试跑不到
- void FTTInput_worldOriUpdatedAndroid(float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9) {
- LOGE("FTTInput_worldOriUpdatedAndroid%f%f%f%f%f%f%f%f%f",f1,f2,f3,f4,f5,f6,f7,f8,f9);
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //002201F4
- void FTTInput_PlatformInit() {
- //empty
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //002201F6
- void FTTInput_PlatformShutdown() {
- //empty
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //002201f8 ^_^
- void FTTInput_PlatformProcess() {
- return FTTInput_ProcessJoystick();
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //002201FC ^_^
- int FTTInput_PlatformGetNumXInputDevices() {
- return 1;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //00220200 ^_^
- int FTTInput_PlatformGetXInputDevicesMask() {
- return 1;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //00220204 //xxx
- int FTTInput_PlatformWorldOriSupported() {
- return 1;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //00220258 //xxx
- int FTTInput_PlatformWorldOriEnabled() {
- return 1;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //002202AC //xxx
- int FTTInput_PlatformEnableWorldOri() {
- return 1;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //002202F8 //xxx
- int FTTInput_PlatformDisableWorldOri() {
- return 1;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //00220344 //xxx
- int FTTInput_PlatformGetWorldOri(CFTTMatrix32 &) {
- return 1;
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
- //00220448
- void FTTInput_PadSetRumble(int, float, float) {
- //empty
- }
- //---------------------------------------------------------------------------------------------------------------------------------------------
|