58 lines
		
	
	
	
		
			684 B
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
	
		
			684 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <vector>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace lt::input {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct Trigger
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									uint32_t mapped_keycode;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct InputAction
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									using Key = size_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									enum class State : uint8_t
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										inactive,
							 | 
						||
| 
								 | 
							
										active,
							 | 
						||
| 
								 | 
							
										triggered,
							 | 
						||
| 
								 | 
							
										cancelled,
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									std::string name;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									State state;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									Trigger trigger;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class InputComponent
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
									InputComponent() = default;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									auto add_action(InputAction action) -> size_t
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										m_actions.emplace_back(std::move(action));
							 | 
						||
| 
								 | 
							
										return m_actions.size() - 1;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									auto get_action(auto idx) -> const InputAction &
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return m_actions[idx];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
									friend class System;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									void push_event()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									std::vector<InputAction> m_actions;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace lt::input
							 |