mirror of
				https://github.com/isledecomp/isle.git
				synced 2025-10-26 01:44:19 +00:00 
			
		
		
		
	Reorganize sources and files (#414)
* Reorganize sources * Refactor * Remove relative paths * Renames * Fix gitignore * Remove stuff * Try fixing format script * Fix format * Fix format * Fix naming script * Test format * Fix format
This commit is contained in:
		 Christian Semmler
					Christian Semmler
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							6a85e62406
						
					
				
				
					commit
					c47206617d
				
			
							
								
								
									
										273
									
								
								LEGO1/lego/legoomni/src/input/legoinputmanager.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										273
									
								
								LEGO1/lego/legoomni/src/input/legoinputmanager.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,273 @@ | ||||
| #include "legoinputmanager.h" | ||||
| 
 | ||||
| #include "legocontrolmanager.h" | ||||
| #include "legoomni.h" | ||||
| #include "mxautolocker.h" | ||||
| 
 | ||||
| DECOMP_SIZE_ASSERT(LegoInputManager, 0x338); | ||||
| DECOMP_SIZE_ASSERT(LegoEventQueue, 0x18); | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005b790
 | ||||
| LegoInputManager::LegoInputManager() | ||||
| { | ||||
| 	m_unk0x5c = NULL; | ||||
| 	m_world = NULL; | ||||
| 	m_camera = NULL; | ||||
| 	m_eventQueue = NULL; | ||||
| 	m_unk0x80 = 0; | ||||
| 	m_timer = 0; | ||||
| 	m_unk0x6c = 0; | ||||
| 	m_unk0x70 = 0; | ||||
| 	m_controlManager = NULL; | ||||
| 	m_unk0x81 = 0; | ||||
| 	m_unk0x88 = FALSE; | ||||
| 	m_directInput = NULL; | ||||
| 	m_directInputDevice = NULL; | ||||
| 	m_unk0x94 = 0; | ||||
| 	m_unk0x195 = 0; | ||||
| 	m_joyid = -1; | ||||
| 	m_joystickIndex = -1; | ||||
| 	m_useJoystick = FALSE; | ||||
| 	m_unk0x335 = FALSE; | ||||
| 	m_unk0x336 = FALSE; | ||||
| 	m_unk0x74 = 0x19; | ||||
| 	m_timeout = 1000; | ||||
| } | ||||
| 
 | ||||
| // STUB: LEGO1 0x1005b8b0
 | ||||
| MxResult LegoInputManager::Tickle() | ||||
| { | ||||
| 	ProcessEvents(); | ||||
| 	return SUCCESS; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005b8f0
 | ||||
| LegoInputManager::~LegoInputManager() | ||||
| { | ||||
| 	Destroy(); | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005b960
 | ||||
| MxResult LegoInputManager::Create(HWND p_hwnd) | ||||
| { | ||||
| 	// TODO
 | ||||
| 	if (m_eventQueue == NULL) | ||||
| 		m_eventQueue = new LegoEventQueue(); | ||||
| 	return SUCCESS; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005bfe0
 | ||||
| void LegoInputManager::Destroy() | ||||
| { | ||||
| 	ReleaseDX(); | ||||
| 
 | ||||
| 	if (m_unk0x5c) | ||||
| 		delete m_unk0x5c; | ||||
| 	m_unk0x5c = NULL; | ||||
| 
 | ||||
| 	if (m_eventQueue) | ||||
| 		delete m_eventQueue; | ||||
| 	m_eventQueue = NULL; | ||||
| 
 | ||||
| 	if (m_controlManager) | ||||
| 		delete m_controlManager; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c030
 | ||||
| void LegoInputManager::CreateAndAcquireKeyboard(HWND p_hwnd) | ||||
| { | ||||
| 	HINSTANCE hinstance = (HINSTANCE) GetWindowLong(p_hwnd, GWL_HINSTANCE); | ||||
| 	HRESULT hresult = DirectInputCreate(hinstance, 0x500, &m_directInput, NULL); // 0x500 for DX5
 | ||||
| 
 | ||||
| 	if (hresult == DI_OK) { | ||||
| 		HRESULT createdeviceresult = m_directInput->CreateDevice(GUID_SysKeyboard, &m_directInputDevice, NULL); | ||||
| 		if (createdeviceresult == DI_OK) { | ||||
| 			m_directInputDevice->SetCooperativeLevel(p_hwnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); | ||||
| 			m_directInputDevice->SetDataFormat(&c_dfDIKeyboard); | ||||
| 			m_directInputDevice->Acquire(); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c0a0
 | ||||
| void LegoInputManager::ReleaseDX() | ||||
| { | ||||
| 	if (m_directInputDevice != NULL) { | ||||
| 		m_directInputDevice->Unacquire(); | ||||
| 		m_directInputDevice->Release(); | ||||
| 		m_directInputDevice = NULL; | ||||
| 	} | ||||
| 
 | ||||
| 	if (m_directInput != NULL) { | ||||
| 		m_directInput->Release(); | ||||
| 		m_directInput = NULL; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c240
 | ||||
| MxResult LegoInputManager::GetJoystickId() | ||||
| { | ||||
| 	JOYINFOEX joyinfoex; | ||||
| 
 | ||||
| 	if (m_useJoystick != FALSE) { | ||||
| 		MxS32 joyid = m_joystickIndex; | ||||
| 		if (joyid >= 0) { | ||||
| 			joyinfoex.dwSize = 0x34; | ||||
| 			joyinfoex.dwFlags = 0xFF; | ||||
| 
 | ||||
| 			if (joyGetPosEx(joyid, &joyinfoex) == JOYERR_NOERROR && | ||||
| 				joyGetDevCaps(joyid, &m_joyCaps, 0x194) == JOYERR_NOERROR) { | ||||
| 				m_joyid = joyid; | ||||
| 				return SUCCESS; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		for (joyid = JOYSTICKID1; joyid < 16; joyid++) { | ||||
| 			joyinfoex.dwSize = 0x34; | ||||
| 			joyinfoex.dwFlags = 0xFF; | ||||
| 			if (joyGetPosEx(joyid, &joyinfoex) == JOYERR_NOERROR && | ||||
| 				joyGetDevCaps(joyid, &m_joyCaps, 0x194) == JOYERR_NOERROR) { | ||||
| 				m_joyid = joyid; | ||||
| 				return SUCCESS; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return FAILURE; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c320
 | ||||
| MxResult LegoInputManager::GetJoystickState( | ||||
| 	MxU32* p_joystickX, | ||||
| 	MxU32* p_joystickY, | ||||
| 	DWORD* p_buttonsState, | ||||
| 	MxU32* p_povPosition | ||||
| ) | ||||
| { | ||||
| 	if (m_useJoystick != FALSE) { | ||||
| 		if (m_joyid < 0 && GetJoystickId() == -1) { | ||||
| 			m_useJoystick = FALSE; | ||||
| 			return FAILURE; | ||||
| 		} | ||||
| 
 | ||||
| 		JOYINFOEX joyinfoex; | ||||
| 		joyinfoex.dwSize = 0x34; | ||||
| 		joyinfoex.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNBUTTONS; | ||||
| 		MxU32 capabilities = m_joyCaps.wCaps; | ||||
| 
 | ||||
| 		if ((capabilities & JOYCAPS_HASPOV) != 0) { | ||||
| 			joyinfoex.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNPOV | JOY_RETURNBUTTONS; | ||||
| 
 | ||||
| 			if ((capabilities & JOYCAPS_POVCTS) != 0) | ||||
| 				joyinfoex.dwFlags = JOY_RETURNX | JOY_RETURNY | JOY_RETURNPOV | JOY_RETURNBUTTONS | JOY_RETURNPOVCTS; | ||||
| 		} | ||||
| 
 | ||||
| 		MMRESULT mmresult = joyGetPosEx(m_joyid, &joyinfoex); | ||||
| 
 | ||||
| 		if (mmresult == MMSYSERR_NOERROR) { | ||||
| 			*p_buttonsState = joyinfoex.dwButtons; | ||||
| 			MxU32 xmin = m_joyCaps.wXmin; | ||||
| 			MxU32 ymax = m_joyCaps.wYmax; | ||||
| 			MxU32 ymin = m_joyCaps.wYmin; | ||||
| 			MxS32 ydiff = ymax - ymin; | ||||
| 			*p_joystickX = ((joyinfoex.dwXpos - xmin) * 100) / (m_joyCaps.wXmax - xmin); | ||||
| 			*p_joystickY = ((joyinfoex.dwYpos - m_joyCaps.wYmin) * 100) / ydiff; | ||||
| 			if ((m_joyCaps.wCaps & (JOYCAPS_POV4DIR | JOYCAPS_POVCTS)) != 0) { | ||||
| 				if (joyinfoex.dwPOV == JOY_POVCENTERED) { | ||||
| 					*p_povPosition = (MxU32) -1; | ||||
| 					return SUCCESS; | ||||
| 				} | ||||
| 				*p_povPosition = joyinfoex.dwPOV / 100; | ||||
| 				return SUCCESS; | ||||
| 			} | ||||
| 			else { | ||||
| 				*p_povPosition = (MxU32) -1; | ||||
| 				return SUCCESS; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return FAILURE; | ||||
| } | ||||
| 
 | ||||
| // STUB: LEGO1 0x1005c470
 | ||||
| void LegoInputManager::Register(MxCore*) | ||||
| { | ||||
| 	// TODO
 | ||||
| } | ||||
| 
 | ||||
| // STUB: LEGO1 0x1005c5c0
 | ||||
| void LegoInputManager::UnRegister(MxCore*) | ||||
| { | ||||
| 	// TODO
 | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c700
 | ||||
| void LegoInputManager::SetCamera(LegoCameraController* p_camera) | ||||
| { | ||||
| 	m_camera = p_camera; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c710
 | ||||
| void LegoInputManager::ClearCamera() | ||||
| { | ||||
| 	m_camera = NULL; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c720
 | ||||
| void LegoInputManager::SetWorld(LegoWorld* p_world) | ||||
| { | ||||
| 	m_world = p_world; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c730
 | ||||
| void LegoInputManager::ClearWorld() | ||||
| { | ||||
| 	m_world = NULL; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c740
 | ||||
| void LegoInputManager::QueueEvent(NotificationId p_id, MxU8 p_modifier, MxLong p_x, MxLong p_y, MxU8 p_key) | ||||
| { | ||||
| 	LegoEventNotificationParam param = LegoEventNotificationParam(p_id, NULL, p_modifier, p_x, p_y, p_key); | ||||
| 
 | ||||
| 	if (((!m_unk0x88) || ((m_unk0x335 && (param.GetType() == c_notificationButtonDown)))) || | ||||
| 		((m_unk0x336 && (p_key == ' ')))) { | ||||
| 		ProcessOneEvent(param); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005c820
 | ||||
| void LegoInputManager::ProcessEvents() | ||||
| { | ||||
| 	MxAutoLocker lock(&m_criticalSection); | ||||
| 
 | ||||
| 	LegoEventNotificationParam event; | ||||
| 	while (m_eventQueue->Dequeue(event)) { | ||||
| 		if (ProcessOneEvent(event)) | ||||
| 			break; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // STUB: LEGO1 0x1005c9c0
 | ||||
| MxBool LegoInputManager::ProcessOneEvent(LegoEventNotificationParam& p_param) | ||||
| { | ||||
| 	// TODO
 | ||||
| 	return FALSE; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005cfb0
 | ||||
| void LegoInputManager::SetTimer() | ||||
| { | ||||
| 	LegoOmni* omni = LegoOmni::GetInstance(); | ||||
| 	UINT timer = ::SetTimer(omni->GetWindowHandle(), 1, m_timeout, NULL); | ||||
| 	m_timer = timer; | ||||
| } | ||||
| 
 | ||||
| // FUNCTION: LEGO1 0x1005cfd0
 | ||||
| void LegoInputManager::KillTimer() | ||||
| { | ||||
| 	if (m_timer != 0) { | ||||
| 		LegoOmni* omni = LegoOmni::GetInstance(); | ||||
| 		::KillTimer(omni->GetWindowHandle(), m_timer); | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user