HeavenStudioPlus/Assets/Plugins/JSL/JoyShockLibrary.cs
minenice55 8df667bfec basic controller input from JSL
may need compiles for linux and mac
2022-07-19 18:50:35 -04:00

172 lines
No EOL
6.5 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEditor;
using UnityEngine;
public static class JSL
{
public const int ButtonMaskUp = 0;
public const int ButtonMaskDown = 1;
public const int ButtonMaskLeft = 2;
public const int ButtonMaskRight = 3;
public const int ButtonMaskPlus = 4;
public const int ButtonMaskOptions = 4;
public const int ButtonMaskMinus = 5;
public const int ButtonMaskShare = 5;
public const int ButtonMaskLClick = 6;
public const int ButtonMaskRClick = 7;
public const int ButtonMaskL = 8;
public const int ButtonMaskR = 9;
public const int ButtonMaskZL = 10;
public const int ButtonMaskZR = 11;
public const int ButtonMaskS = 12;
public const int ButtonMaskE = 13;
public const int ButtonMaskW = 14;
public const int ButtonMaskN = 15;
public const int ButtonMaskHome = 16;
public const int ButtonMaskPS = 16;
public const int ButtonMaskCapture = 17;
public const int ButtonMaskTouchpadClick = 17;
public const int ButtonMaskSL = 18;
public const int ButtonMaskSR = 19;
public const int TypeJoyConLeft = 1;
public const int TypeJoyConRight = 2;
public const int TypeProController = 3;
public const int TypeDualShock4 = 4;
public const int TypeDualSense = 5;
public const int SplitLeft = 1;
public const int SplitRight = 2;
public const int SplitFull = 3;
// PS5 Player maps for the DS Player Lightbar
public const int DS5P1 = 4;
public const int DS5P2 = 10;
public const int DS5P3 = 21;
public const int DS5P4 = 27;
public const int DS5P5 = 31;
[StructLayout(LayoutKind.Sequential)]
public struct JOY_SHOCK_STATE
{
public int buttons;
public float lTrigger;
public float rTrigger;
public float stickLX;
public float stickLY;
public float stickRX;
public float stickRY;
}
[StructLayout(LayoutKind.Sequential)]
public struct IMU_STATE
{
public float accelX;
public float accelY;
public float accelZ;
public float gyroX;
public float gyroY;
public float gyroZ;
}
[StructLayout(LayoutKind.Sequential)]
public struct MOTION_STATE {
float quatW;
float quatX;
float quatY;
float quatZ;
float accelX;
float accelY;
float accelZ;
float gravX;
float gravY;
float gravZ;
}
[StructLayout(LayoutKind.Sequential)]
public struct TOUCH_STATE {
int t0Id;
int t1Id;
bool t0Down;
bool t1Down;
float t0X;
float t0Y;
float t1X;
float t1Y;
}
public delegate void EventCallback(int handle, JOY_SHOCK_STATE state, JOY_SHOCK_STATE lastState,
IMU_STATE imuState, IMU_STATE lastImuState, float deltaTime);
[DllImport("JoyShockLibrary")]
public static extern int JslConnectDevices();
[DllImport("JoyShockLibrary")]
public static extern int JslGetConnectedDeviceHandles(int[] deviceHandleArray, int size);
[DllImport("JoyShockLibrary")]
public static extern void JslDisconnectAndDisposeAll();
[DllImport("JoyShockLibrary", CallingConvention = CallingConvention.Cdecl)]
public static extern JOY_SHOCK_STATE JslGetSimpleState(int deviceId);
[DllImport("JoyShockLibrary", CallingConvention = CallingConvention.Cdecl)]
public static extern IMU_STATE JslGetIMUState(int deviceId);
[DllImport("JoyShockLibrary", CallingConvention = CallingConvention.Cdecl)]
public static extern MOTION_STATE JslGetMotionState(int deviceId);
[DllImport("JoyShockLibrary", CallingConvention = CallingConvention.Cdecl)]
public static extern TOUCH_STATE JslGetTouchState(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern float JslGetStickStep(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern float JslGetTriggerStep(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern float JslGetPollRate(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern float JslGetTouchId(int deviceId, bool secondTouch = false);
[DllImport("JoyShockLibrary")]
public static extern float JslGetTouchDown(int deviceId, bool secondTouch = false);
[DllImport("JoyShockLibrary")]
public static extern float JslGetTouchX(int deviceId, bool secondTouch = false);
[DllImport("JoyShockLibrary")]
public static extern float JslGetTouchY(int deviceId, bool secondTouch = false);
[DllImport("JoyShockLibrary")]
public static extern void JslResetContinuousCalibration(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern void JslStartContinuousCalibration(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern void JslPauseContinuousCalibration(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern void JslGetCalibrationOffset(int deviceId, ref float xOffset, ref float yOffset, ref float zOffset);
[DllImport("JoyShockLibrary")]
public static extern void JslGetCalibrationOffset(int deviceId, float xOffset, float yOffset, float zOffset);
[DllImport("JoyShockLibrary")]
public static extern void JslSetCallback(EventCallback callback);
[DllImport("JoyShockLibrary")]
public static extern void JslSetTouchCallback(EventCallback callback);
[DllImport("JoyShockLibrary")]
public static extern int JslGetControllerType(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern int JslGetControllerSplitType(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern int JslGetControllerColour(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern int JslGetControllerButtonColour(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern int JslGetControllerLeftGripColour(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern int JslGetControllerRightGripColour(int deviceId);
[DllImport("JoyShockLibrary")]
public static extern void JslSetLightColour(int deviceId, int colour);
[DllImport("JoyShockLibrary")]
public static extern void JslSetRumble(int deviceId, int smallRumble, int bigRumble);
[DllImport("JoyShockLibrary")]
public static extern void JslSetRumbleFrequency(int deviceId, float smallRumble, float bigRumble, float smallFrequency, float bigFrequency);
[DllImport("JoyShockLibrary")]
public static extern void JslSetPlayerNumber(int deviceId, int number);
}