コード例 #1
0
void FGamePadState::InitAxes(FEventHandler& EventHandler)
{
	F_Assert(IsValid(), "This class must be valid.");

	Int32 AxisCount = 0;
	TRawPtr<const Float32> AxesArray = glfwGetJoystickAxes(GamePadID, &AxisCount);
	F_Assert(AxesArray.IsValid(), "Failed to retrieve JoystickAxes for GamePadID: " << GamePadID);

	Axes.resize(AxisCount);
	std::copy(AxesArray.Get(), AxesArray.Get() + AxisCount, Axes.begin());

	for (SizeT I = 0; I < Axes.size(); ++I)
	{
		const auto& Axis = Axes[I];
		if (!FMathf::IsCloseTo(Axis, 0.f, AxisPickUpRange))
		{
			const EGamePadAxis::Value Axis = static_cast<EGamePadAxis::Value>(I);
			const Float32 TimeStamp = FHighResolutionTimer::GetTimeInSeconds<Float32>();

			EventHandler.GamePadEventCallback(GamePadID, Axis, 0.f, Axis, TimeStamp);
		}
	}
}
コード例 #2
0
void FGamePadState::InitButtons(FEventHandler& EventHandler)
{
	F_Assert(IsValid(), "This class must be valid.");

	Int32 ButtonCount = 0;
	TRawPtr<const UInt8> ButtonsArray = glfwGetJoystickButtons(GamePadID, &ButtonCount);
	F_Assert(ButtonsArray.IsValid(), "Failed to retrieve JoystickButtons for GamePadID: " << GamePadID);

	Buttons.resize(ButtonCount);
	std::copy(ButtonsArray.Get(), ButtonsArray.Get() + ButtonCount, Buttons.begin());

	for (SizeT I = 0; I < Buttons.size(); ++I)
	{
		const auto& Button = Buttons[I];
		if (Button == EInputAction::Press)
		{
			const EGamePadButton::Value GPButton = static_cast<EGamePadButton::Value>(I);
			const Float32 TimeStamp = FHighResolutionTimer::GetTimeInSeconds();

			EventHandler.GamePadEventCallback(GamePadID, GPButton, EInputAction::Press, TimeStamp);
		}
	}
}
コード例 #3
0
void FGamePadState::ProcessButtonEvents(FEventHandler& EventHandler)
{
	Int32 ButtonCount = 0;
	TRawPtr<const UInt8> ButtonsArray = glfwGetJoystickButtons(GamePadID, &ButtonCount);

	if (!ButtonsArray.IsValid())
	{
		F_Assert(false, "Failed to retrieve ButtonsArray for GamePadID: " << GamePadID);
		ResetButtons(EventHandler);
		return;
	}

	const SizeT ButtonsArraySize = Buttons.size();
	const bool ArraySizesMatch = ButtonsArraySize == static_cast<SizeT>(ButtonCount);
	if (!ArraySizesMatch)
	{
		F_Assert(false, "Array size mismatch.  Size: " << ButtonsArraySize << ", Expected: " << ButtonCount);
		ResetButtons(EventHandler);
		InitButtons(EventHandler);
		return;
	}

	for (SizeT I = 0; I < ButtonsArraySize; ++I)
	{
		if (ButtonsArray[I] != Buttons[I])
		{
			const EGamePadButton::Value GPButton = static_cast<EGamePadButton::Value>(I);
			const EInputAction::Value InputAction = ButtonsArray[I] == GLFW_PRESS ?
				EInputAction::Press : EInputAction::Release;

			const Float32 TimeStamp = FHighResolutionTimer::GetTimeInSeconds<Float32>();

			EventHandler.GamePadEventCallback(GamePadID, GPButton, InputAction, TimeStamp);
			Buttons[I] = ButtonsArray[I];
		}
	}
}
コード例 #4
0
void FGamePadState::ProcessAxisEvents(FEventHandler& EventHandler)
{
	Int32 AxisCount = 0;
	TRawPtr<const Float32> AxesArray = glfwGetJoystickAxes(GamePadID, &AxisCount);

	if (!AxesArray.IsValid())
	{
		F_Assert(false, "Failed to retrieve JoystickAxes for GamePadID: " << GamePadID);
		ResetAxes(EventHandler);
		return;
	}

	const SizeT AxesArraySize = Axes.size();

	const bool ArraySizesMatch = AxesArraySize == static_cast<SizeT>(AxisCount);
	if (!ArraySizesMatch)
	{
		F_Assert(false, "Array size mismatch.  Size: " << AxesArraySize << ", Expected: " << AxisCount);
		ResetAxes(EventHandler);
		InitAxes(EventHandler);
		return;
	}

	for (SizeT I = 0; I < AxesArraySize; ++I)
	{
		if (!FMathf::IsCloseTo(Axes[I], AxesArray[I], AxisPickUpRange))
		{
			const EGamePadAxis::Value GPAxis = static_cast<EGamePadAxis::Value>(I);
			const Float32 PrevAxis = Axes[I];
			const Float32 CurrAxis = AxesArray[I];
			const Float32 TimeStamp = FHighResolutionTimer::GetTimeInSeconds<Float32>();

			EventHandler.GamePadEventCallback(GamePadID, GPAxis, PrevAxis, CurrAxis, TimeStamp);
			Axes[I] = AxesArray[I];
		}
	}
}