Пример #1
0
void MFInput_Update()
{
	int a, b;

	// platform specific update
	MFInput_UpdatePlatformSpecific();

	// update state for each device
	for(a=0; a<IDD_Max; a++)
	{
		for(b=0; b<MFInput_MaxInputID; b++)
		{
			gDeviceStatus[a][b] = MFInput_GetDeviceStatusInternal(a, b);
		}
	}

	// count number of gamepads
	int maxGamepad = -1;
	for(a=0; a<MFInput_MaxInputID; a++)
	{
		if(MFInput_IsAvailable(IDD_Gamepad, a))
			maxGamepad = a;
	}
	gNumGamepads = maxGamepad+1;

	// update number of keyboards
	int maxKB = -1;
	for(a=0; a<MFInput_MaxInputID; a++)
	{
		if(MFInput_IsAvailable(IDD_Keyboard, a))
			maxKB = a;
	}
	gNumKeyboards = maxKB+1;

	// update number of pointers
	int maxMouse = -1;
	for(a=0; a<MFInput_MaxInputID; a++)
	{
		if(MFInput_IsAvailable(IDD_Mouse, a))
			maxMouse = a;
	}
	gNumPointers = maxMouse+1;

	// update number of accelerometers
	int maxAccelerometer = -1;
	for(a=0; a<MFInput_MaxInputID; a++)
	{
		if(MFInput_IsAvailable(IDD_Accelerometer, a))
			maxAccelerometer = a;
	}
	gNumAccelerometers = maxAccelerometer+1;

	// update number of touch panels
	int maxTouchPanel = -1;
	for(a=0; a<MFInput_MaxInputID; a++)
	{
		if(MFInput_IsAvailable(IDD_TouchPanel, a))
			maxTouchPanel = a;
	}
	gNumTouchPanels = maxTouchPanel+1;
	
	// copy current states into last states
	MFCopyMemory(gPrevGamepadStates, gGamepadStates, sizeof(gPrevGamepadStates));
	MFCopyMemory(gPrevKeyStates, gKeyStates, sizeof(gPrevKeyStates));
	MFCopyMemory(gPrevMouseStates, gMouseStates, sizeof(gPrevMouseStates));
	MFCopyMemory(gPrevAccelerometerStates, gAccelerometerStates, sizeof(gPrevAccelerometerStates));
	MFCopyMemory(gPrevTouchPanelStates, gTouchPanelStates, sizeof(gPrevTouchPanelStates));

	// update keyboard state
	for(a=0; a<gNumKeyboards; a++)
	{
		if(MFInput_IsAvailable(IDD_Keyboard, a))
			MFInput_GetKeyStateInternal(a, &gKeyStates[a]);
	}

	// update gamepad state
	for(a=0; a<gNumGamepads; a++)
	{
		if(MFInput_IsAvailable(IDD_Gamepad, a))
		{
			// update gamepad state
#if !defined(_RETAIL)
			if(gDeviceStatus[IDD_Gamepad][0] == IDS_Unavailable)
				MFInputInternal_GetGamepadStateFromKeyMap(&gGamepadStates[a], &gKeyStates[0]);
			else
#endif
			MFInput_GetGamepadStateInternal(a, &gGamepadStates[a]);

			// apply analog deadzone to axiis
			uint32 deviceFlags = MFInput_GetDeviceFlags(IDD_Gamepad, a);
			if(!(deviceFlags & MFGF_DontUseSphericalDeadzone))
			{
				MFInputInternal_ApplySphericalDeadZone(&gGamepadStates[a].values[Axis_LX], &gGamepadStates[a].values[Axis_LY]);
				MFInputInternal_ApplySphericalDeadZone(&gGamepadStates[a].values[Axis_RX], &gGamepadStates[a].values[Axis_RY]);
			}
		}
	}

	// update mouse state
	for(a=0; a<gNumPointers; a++)
	{
		if(MFInput_IsAvailable(IDD_Mouse, a))
			MFInput_GetMouseStateInternal(a, &gMouseStates[a]);
	}

	// update accelerometer state
	for(a=0; a<gNumAccelerometers; a++)
	{
		if(MFInput_IsAvailable(IDD_Accelerometer, a))
			MFInput_GetAccelerometerStateInternal(a, &gAccelerometerStates[a]);
	}

	// update touch panel state
	for(a=0; a<gNumTouchPanels; a++)
	{
		if(MFInput_IsAvailable(IDD_TouchPanel, a))
			MFInput_GetTouchPanelStateInternal(a, &gTouchPanelStates[a]);
	}
	
	// add network devices
	if(MFNetwork_IsRemoteInputServerRunning())
	{
		gNetGamepadStart = gNumGamepads;
		gNetKeyboardStart = gNumKeyboards;
		gNetPointerStart = gNumPointers;

		MFNetwork_LockInputMutex();

		// add additional gamepads
		for(a=0; a<MFNetwork_MaxRemoteDevices(); a++)
		{
			MFInputDeviceStatus status = (MFInputDeviceStatus)MFNetwork_GetRemoteDeviceStatus(a);

			if(status > IDS_Unavailable)
			{
				gDeviceStatus[IDD_Gamepad][gNetGamepadStart + a] = status;

				MFNetwork_GetRemoteGamepadState(a, &gGamepadStates[gNetGamepadStart + a]);

				gNumGamepads = gNetGamepadStart + a + 1;
			}
		}

		MFNetwork_ReleaseInputMutex();
	}
}
Пример #2
0
void Game_Draw()
{
	MFView_SetOrtho();

	const char *pText;
	float x, y;
	int a, b;

	x = 30.0f;
	for(a=0; a<MFInput_GetNumGamepads(); a++)
	{
		if(MFInput_IsAvailable(IDD_Gamepad, a))
		{
			MFFont_DrawText2(MFFont_GetDebugFont(), x-10.0f, 15.0f, 15.0f, MFVector::one, MFStr("%s (%d):", MFInput_GetDeviceName(IDD_Gamepad,a), a));

			if(MFInput_IsReady(IDD_Gamepad, a))
			{
				y = 30.0f;
				for(b=0; b<GamepadType_Max; b++)
				{
					float value = MFInput_Read(b, IDD_Gamepad, a);
//					int ival = (int)(value * 255.f);
//					MFFont_DrawText2(MFFont_GetDebugFont(), x, y, 15.0f, MFVector::one, MFStr("%s: %.3g - %d (0x%02X)", MFInput_EnumerateString(b, IDD_Gamepad, a), value, ival, ival));
					MFFont_DrawText2(MFFont_GetDebugFont(), x, y, 15.0f, MFVector::one, MFStr("%s: %.3g", MFInput_EnumerateString(b, IDD_Gamepad, a), value));
					y += 15.0f;
				}
			}
			else
			{
				MFFont_DrawText2(MFFont_GetDebugFont(), x, 30.0f, 15.0f, MakeVector(1.0f, 0.0f, 0.0f, 1.0f), "Disconnected...");
			}

			x += 170.0f;
		}
	}

	int numMouses = MFInput_GetNumPointers();

	x = 80.0f;
	for(a=0; a<numMouses; a++)
	{
		MFFont_DrawText2(MFFont_GetDebugFont(), x, 355.0f, 15.0f, MFVector::one, MFStr("Mouse Pos: %g, %g", MFInput_Read(Mouse_XPos, IDD_Mouse, a), MFInput_Read(Mouse_YPos, IDD_Mouse, a)));
		MFFont_DrawText2(MFFont_GetDebugFont(), x, 370.0f, 15.0f, MFVector::one, MFStr("Mouse Delta: %g, %g", MFInput_Read(Mouse_XDelta, IDD_Mouse, a), MFInput_Read(Mouse_YDelta, IDD_Mouse, a)));
		MFFont_DrawText2(MFFont_GetDebugFont(), x, 385.0f, 15.0f, MFVector::one, MFStr("Mouse Wheel: %g, %g", MFInput_Read(Mouse_Wheel, IDD_Mouse, a), MFInput_Read(Mouse_Wheel2, IDD_Mouse, a)));
		pText = "Mouse Buttons:";
		for(b=Mouse_MaxAxis; b<Mouse_Max; b++)
		{
			if(MFInput_Read(b, IDD_Mouse, a))
			{
				pText = MFStr("%s %s", pText, MFInput_EnumerateString(b, IDD_Mouse, a));
			}
		}
		MFFont_DrawText2(MFFont_GetDebugFont(), x, 400.0f, 15.0f, MFVector::one, pText);

		x += 170.0f;
	}

	pText = "Keys:";
	for(a=0; a<Key_Max; a++)
	{
		if(MFInput_Read(a, IDD_Keyboard, 0))
		{
			pText = MFStr("%s %s", pText, MFInput_EnumerateString(a, IDD_Keyboard, 0));
		}
	}
	MFFont_DrawText2(MFFont_GetDebugFont(), 80.0f, 430.0f, 15.0f, MFVector::one, pText);
}