Plasma Engine  2.0
Loading...
Searching...
No Matches
Controller.h
1#pragma once
2
3#include <Core/Input/InputDevice.h>
4
11class PL_CORE_DLL plInputDeviceController : public plInputDevice
12{
13 PL_ADD_DYNAMIC_REFLECTION(plInputDeviceController, plInputDevice);
14
15public:
16 enum
17 {
18 MaxControllers = 4,
19 VibrationSamplesPerSecond = 16,
20 VibrationTrackSeconds = 2,
21 MaxVibrationSamples = VibrationSamplesPerSecond * VibrationTrackSeconds, // With constant power-of-two samples some code should get more efficient
22 };
23
25 struct Motor
26 {
27 enum Enum
28 {
29 LeftMotor,
30 RightMotor,
31 ENUM_COUNT
32 };
33 };
34
36
39 void EnableVibration(plUInt8 uiVirtual, bool bEnable);
40
42 bool IsVibrationEnabled(plUInt8 uiVirtual) const;
43
50 void SetVibrationStrength(plUInt8 uiVirtual, Motor::Enum motor, float fValue);
51
53 float GetVibrationStrength(plUInt8 uiVirtual, Motor::Enum motor);
54
67 void SetControllerMapping(plUInt8 uiVirtualController, plInt8 iTakeInputFromPhysical);
68
71 plInt8 GetControllerMapping(plUInt8 uiVirtual) const;
72
75 virtual bool IsControllerConnected(plUInt8 uiPhysical) const = 0;
76
91 void AddVibrationTrack(plUInt8 uiVirtual, Motor::Enum motor, float* pVibrationTrackValue, plUInt32 uiSamples, float fScalingFactor = 1.0f);
92
93protected:
99 void UpdateVibration(plTime tTimeDifference);
100
101private:
106 virtual void ApplyVibration(plUInt8 uiPhysicalController, Motor::Enum eMotor, float fStrength) = 0;
107
108 plUInt32 m_uiVibrationTrackPos;
109 float m_fVibrationTracks[MaxControllers][Motor::ENUM_COUNT][MaxVibrationSamples];
110 bool m_bVibrationEnabled[MaxControllers];
111 plInt8 m_iControllerMapping[MaxControllers];
112 float m_fVibrationStrength[MaxControllers][Motor::ENUM_COUNT];
113};
This class is the base class for all controller type input devices.
Definition Controller.h:12
virtual bool IsControllerConnected(plUInt8 uiPhysical) const =0
Queries whether the controller with the given physical index is connected to the computer....
virtual void ApplyVibration(plUInt8 uiPhysicalController, Motor::Enum eMotor, float fStrength)=0
Must be implemented by a derived controller implementation. Should set apply the vibration for the gi...
The base class for all input device types.
Definition InputDevice.h:41
Describes which vibration motor to configure.
Definition Controller.h:26
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12