132 lines
5.2 KiB
C++
132 lines
5.2 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//===========================================================================//
|
|
|
|
#ifndef IINPUTSYSTEM_H
|
|
#define IINPUTSYSTEM_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "../appframework/IAppSystem.h"
|
|
#include "../tier0/platform.h"
|
|
|
|
#include "AnalogCode.h"
|
|
#include "ButtonCode.h"
|
|
#include "InputEnums.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Main interface for input. This is a low-level interface
|
|
//-----------------------------------------------------------------------------
|
|
#define INPUTSYSTEM_INTERFACE_VERSION "InputSystemVersion001"
|
|
abstract_class IInputSystem : public IAppSystem {
|
|
public:
|
|
// Attach, detach input system from a particular window
|
|
// This window should be the root window for the application
|
|
// Only 1 window should be attached at any given time.
|
|
virtual void AttachToWindow(void *hWnd) = 0;
|
|
virtual void DetachFromWindow() = 0;
|
|
|
|
// Enables/disables input. PollInputState will not update current
|
|
// button/analog states when it is called if the system is disabled.
|
|
virtual void EnableInput(bool bEnable) = 0;
|
|
|
|
// Enables/disables the windows message pump. PollInputState will not
|
|
// Peek/Dispatch messages if this is disabled
|
|
virtual void EnableMessagePump(bool bEnable) = 0;
|
|
|
|
// Polls the current input state
|
|
virtual void PollInputState() = 0;
|
|
|
|
// Gets the time of the last polling in ms
|
|
virtual int GetPollTick() const = 0;
|
|
|
|
// Is a button down? "Buttons" are binary-state input devices (mouse
|
|
// buttons, keyboard keys)
|
|
virtual bool IsButtonDown(ButtonCode_t code) const = 0;
|
|
|
|
// Returns the tick at which the button was pressed and released
|
|
virtual int GetButtonPressedTick(ButtonCode_t code) const = 0;
|
|
virtual int GetButtonReleasedTick(ButtonCode_t code) const = 0;
|
|
|
|
// Gets the value of an analog input device this frame
|
|
// Includes joysticks, mousewheel, mouse
|
|
virtual int GetAnalogValue(AnalogCode_t code) const = 0;
|
|
|
|
// Gets the change in a particular analog input device this frame
|
|
// Includes joysticks, mousewheel, mouse
|
|
virtual int GetAnalogDelta(AnalogCode_t code) const = 0;
|
|
|
|
// Returns the input events since the last poll
|
|
virtual int GetEventCount() const = 0;
|
|
virtual const InputEvent_t *GetEventData() const = 0;
|
|
|
|
// Posts a user-defined event into the event queue; this is expected
|
|
// to be called in overridden wndprocs connected to the root panel.
|
|
virtual void PostUserEvent(const InputEvent_t &event) = 0;
|
|
|
|
// Returns the number of joysticks
|
|
virtual int GetJoystickCount() const = 0;
|
|
|
|
// Enable/disable joystick, it has perf costs
|
|
virtual void EnableJoystickInput(int nJoystick, bool bEnable) = 0;
|
|
|
|
// Enable/disable diagonal joystick POV (simultaneous POV buttons down)
|
|
virtual void EnableJoystickDiagonalPOV(int nJoystick, bool bEnable) = 0;
|
|
|
|
// Sample the joystick and append events to the input queue
|
|
virtual void SampleDevices(void) = 0;
|
|
|
|
// FIXME: Currently force-feedback is only supported on the Xbox 360
|
|
virtual void SetRumble(float fLeftMotor, float fRightMotor,
|
|
int userId = INVALID_USER_ID) = 0;
|
|
virtual void StopRumble(void) = 0;
|
|
|
|
// Resets the input state
|
|
virtual void ResetInputState() = 0;
|
|
|
|
// Sets a player as the primary user - all other controllers will be
|
|
// ignored.
|
|
virtual void SetPrimaryUserId(int userId) = 0;
|
|
|
|
// Convert back + forth between ButtonCode/AnalogCode + strings
|
|
virtual const char *ButtonCodeToString(ButtonCode_t code) const = 0;
|
|
virtual const char *AnalogCodeToString(AnalogCode_t code) const = 0;
|
|
virtual ButtonCode_t StringToButtonCode(const char *pString) const = 0;
|
|
virtual AnalogCode_t StringToAnalogCode(const char *pString) const = 0;
|
|
|
|
// Sleeps until input happens. Pass a negative number to sleep infinitely
|
|
virtual void SleepUntilInput(int nMaxSleepTimeMS = -1) = 0;
|
|
|
|
// Convert back + forth between virtual codes + button codes
|
|
// FIXME: This is a temporary piece of code
|
|
virtual ButtonCode_t VirtualKeyToButtonCode(int nVirtualKey) const = 0;
|
|
virtual int ButtonCodeToVirtualKey(ButtonCode_t code) const = 0;
|
|
virtual ButtonCode_t ScanCodeToButtonCode(int lParam) const = 0;
|
|
|
|
// How many times have we called PollInputState?
|
|
virtual int GetPollCount() const = 0;
|
|
|
|
// Sets the cursor position
|
|
virtual void SetCursorPosition(int x, int y) = 0;
|
|
|
|
// NVNT get address to haptics interface
|
|
virtual void *GetHapticsInterfaceAddress() const = 0;
|
|
|
|
virtual void SetNovintPure(bool bPure) = 0;
|
|
|
|
// read and clear accumulated raw input values
|
|
virtual bool GetRawMouseAccumulators(int &accumX, int &accumY) = 0;
|
|
|
|
// tell the input system that we're not a game, we're console text mode.
|
|
// this is used for dedicated servers to not initialize joystick system.
|
|
// this needs to be called before CInputSystem::Init (e.g. in PreInit of
|
|
// some system) if you want ot prevent the joystick system from ever
|
|
// being initialized.
|
|
virtual void SetConsoleTextMode(bool bConsoleTextMode) = 0;
|
|
};
|
|
|
|
#endif // IINPUTSYSTEM_H
|