mirror of
				https://github.com/RetroDECK/ES-DE.git
				synced 2025-04-10 19:15:13 +00:00 
			
		
		
		
	Functionality seems to have been restored at last.
This commit is contained in:
		
							parent
							
								
									4747d70e1f
								
							
						
					
					
						commit
						05c258f515
					
				|  | @ -2,7 +2,7 @@ CXX=g++ | |||
| CXXFLAGS=-Wall -g -O2 | ||||
| LDFLAGS= | ||||
| 
 | ||||
| SRC_SOURCES=AudioManager.cpp Window.cpp InputConfig.cpp Log.cpp FolderData.cpp Font.cpp GameData.cpp Gui.cpp InputManager.cpp main.cpp MathExp.cpp Renderer_draw_gl.cpp Renderer_init.cpp Sound.cpp SystemData.cpp XMLReader.cpp components/GuiAnimation.cpp components/GuiBox.cpp components/GuiFastSelect.cpp components/GuiGameList.cpp components/GuiImage.cpp components/GuiInputConfig.cpp components/GuiMenu.cpp components/GuiTheme.cpp pugiXML/pugixml.cpp | ||||
| SRC_SOURCES=AudioManager.cpp Window.cpp InputConfig.cpp Log.cpp FolderData.cpp Font.cpp GameData.cpp Gui.cpp InputManager.cpp main.cpp MathExp.cpp Renderer_draw_gl.cpp Renderer_init.cpp Sound.cpp SystemData.cpp XMLReader.cpp components/GuiAnimation.cpp components/GuiBox.cpp components/GuiFastSelect.cpp components/GuiGameList.cpp components/GuiImage.cpp components/GuiMenu.cpp components/GuiTheme.cpp components/GuiInputConfig.cpp components/GuiDetectDevice.cpp pugiXML/pugixml.cpp | ||||
| SOURCES=$(addprefix src/,$(SRC_SOURCES)) | ||||
| OBJECTS=$(SOURCES:.cpp=.o) | ||||
| DEPS=$(SOURCES:.cpp=.d) | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ | |||
| Window::Window() | ||||
| { | ||||
| 	mInputManager = new InputManager(this); | ||||
| 	mInputManager->init(); | ||||
| } | ||||
| 
 | ||||
| Window::~Window() | ||||
|  |  | |||
							
								
								
									
										99
									
								
								src/components/GuiDetectDevice.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								src/components/GuiDetectDevice.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,99 @@ | |||
| #include "GuiDetectDevice.h" | ||||
| #include "../Window.h" | ||||
| #include "../Renderer.h" | ||||
| #include "../Font.h" | ||||
| #include "GuiInputConfig.h" | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| #include <sstream> | ||||
| 
 | ||||
| GuiDetectDevice::GuiDetectDevice(Window* window) : Gui(window) | ||||
| { | ||||
| 	//clear any player information from the InputManager
 | ||||
| 	for(int i = 0; i < mWindow->getInputManager()->getNumPlayers(); i++) | ||||
| 	{ | ||||
| 		InputConfig* cfg = mWindow->getInputManager()->getInputConfigByPlayer(i); | ||||
| 		cfg->setPlayerNum(-1); | ||||
| 		cfg->clear(); | ||||
| 	} | ||||
| 	mWindow->getInputManager()->setNumPlayers(0); | ||||
| 
 | ||||
| 	mCurrentPlayer = 0; | ||||
| 	mHoldingFinish = false; | ||||
| } | ||||
| 
 | ||||
| void GuiDetectDevice::input(InputConfig* config, Input input) | ||||
| { | ||||
| 	if((input.type == TYPE_BUTTON || input.type == TYPE_KEY)) | ||||
| 	{ | ||||
| 		if(config->getPlayerNum() != -1) | ||||
| 		{ | ||||
| 			if(config->getPlayerNum() == 0) | ||||
| 			{ | ||||
| 				if(input.value) | ||||
| 				{ | ||||
| 					mFinishTimer = 0; | ||||
| 					mHoldingFinish = true; | ||||
| 				}else{ | ||||
| 					mHoldingFinish = false; | ||||
| 				} | ||||
| 			} | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		if(!input.value) | ||||
| 			return; | ||||
| 
 | ||||
| 		config->setPlayerNum(mCurrentPlayer); | ||||
| 		mWindow->getInputManager()->setNumPlayers(mWindow->getInputManager()->getNumPlayers() + 1); //inc total number of players
 | ||||
| 		mCurrentPlayer++; | ||||
| 
 | ||||
| 		//mapped everything we possibly can?
 | ||||
| 		if(mCurrentPlayer >= mWindow->getInputManager()->getNumJoysticks() + 1) //+1 for keyboard
 | ||||
| 		{ | ||||
| 			done(); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void GuiDetectDevice::done() | ||||
| { | ||||
| 	mWindow->pushGui(new GuiInputConfig(mWindow, mWindow->getInputManager()->getInputConfigByPlayer(0))); | ||||
| 	delete this; | ||||
| } | ||||
| 
 | ||||
| void GuiDetectDevice::update(int deltaTime) | ||||
| { | ||||
| 	if(mHoldingFinish) | ||||
| 	{ | ||||
| 		mFinishTimer += deltaTime; | ||||
| 
 | ||||
| 		if(mFinishTimer > 1000) | ||||
| 			done(); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void GuiDetectDevice::render() | ||||
| { | ||||
| 	Font* font = Renderer::getDefaultFont(Renderer::MEDIUM); | ||||
| 
 | ||||
| 	std::string playerString; | ||||
| 	std::stringstream stream; | ||||
| 	stream << (mCurrentPlayer + 1); | ||||
| 	stream >> playerString; | ||||
| 
 | ||||
| 	Renderer::drawCenteredText("Press a button on the device for", 0, Renderer::getScreenHeight() / 3, 0x000000FF, font); | ||||
| 	Renderer::drawCenteredText("PLAYER " + playerString, 0, (int)(Renderer::getScreenHeight()*1.5) / 3, 0x333333FF, font); | ||||
| 
 | ||||
| 	if(mWindow->getInputManager()->getNumPlayers() > 0) | ||||
| 	{ | ||||
| 		Renderer::drawCenteredText("(P1 - hold a button to finish)", 0, (int)(Renderer::getScreenHeight()*2) / 3, (mHoldingFinish ? 0x0000FFFF : 0x000066FF), font); | ||||
| 	} | ||||
| 
 | ||||
| 	if(mWindow->getInputManager()->getNumJoysticks() == 0) | ||||
| 	{ | ||||
| 		Renderer::drawCenteredText("No joysticks detected!", 0, Renderer::getScreenHeight()-(font->getHeight()*2)-10, 0xFF0000FF, font); | ||||
| 	} | ||||
| 
 | ||||
| 	Renderer::drawCenteredText("Press F4 to quit.", 0, Renderer::getScreenHeight()-font->getHeight() - 2 , 0x000000FF, font); | ||||
| } | ||||
							
								
								
									
										23
									
								
								src/components/GuiDetectDevice.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/components/GuiDetectDevice.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| #ifndef _GUIDETECTDEVICE_H_ | ||||
| #define _GUIDETECTDEVICE_H_ | ||||
| 
 | ||||
| #include "../Gui.h" | ||||
| 
 | ||||
| class GuiDetectDevice : public Gui | ||||
| { | ||||
| public: | ||||
| 	GuiDetectDevice(Window* window); | ||||
| 
 | ||||
| 	void input(InputConfig* config, Input input); | ||||
| 	void update(int deltaTime); | ||||
| 	void render(); | ||||
| 
 | ||||
| private: | ||||
| 	void done(); | ||||
| 
 | ||||
| 	bool mHoldingFinish; | ||||
| 	int mFinishTimer; | ||||
| 	int mCurrentPlayer; | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
|  | @ -10,7 +10,7 @@ | |||
| 
 | ||||
| class GuiGameList; | ||||
| 
 | ||||
| class GuiFastSelect : Gui | ||||
| class GuiFastSelect : public Gui | ||||
| { | ||||
| public: | ||||
| 	GuiFastSelect(Window* window, GuiGameList* parent, GuiList<FileData*>* list, char startLetter, GuiBoxData data, int textcolor, Sound* scrollsound, Font* font); | ||||
|  |  | |||
|  | @ -105,6 +105,8 @@ void GuiGameList::render() | |||
| 
 | ||||
| void GuiGameList::input(InputConfig* config, Input input) | ||||
| { | ||||
| 	mList->input(config, input); | ||||
| 
 | ||||
| 	if(config->isMappedTo("a", input) && mFolder->getFileCount() > 0 && input.value != 0) | ||||
| 	{ | ||||
| 		//play select sound
 | ||||
|  | @ -154,13 +156,13 @@ void GuiGameList::input(InputConfig* config, Input input) | |||
| 	//open the "start menu"
 | ||||
| 	if(config->isMappedTo("menu", input) && input.value != 0) | ||||
| 	{ | ||||
| 		new GuiMenu(mWindow, this); | ||||
| 		mWindow->pushGui(new GuiMenu(mWindow, this)); | ||||
| 	} | ||||
| 
 | ||||
| 	//open the fast select menu
 | ||||
| 	if(config->isMappedTo("select", input) && input.value != 0) | ||||
| 	{ | ||||
| 		new GuiFastSelect(mWindow, this, mList, mList->getSelectedObject()->getName()[0], mTheme->getBoxData(), mTheme->getColor("fastSelect"), mTheme->getSound("menuScroll"), mTheme->getFastSelectFont()); | ||||
| 		mWindow->pushGui(new GuiFastSelect(mWindow, this, mList, mList->getSelectedObject()->getName()[0], mTheme->getBoxData(), mTheme->getColor("fastSelect"), mTheme->getSound("menuScroll"), mTheme->getFastSelectFont())); | ||||
| 	} | ||||
| 
 | ||||
| 	if(mDetailed) | ||||
|  | @ -304,3 +306,9 @@ GuiGameList* GuiGameList::create(Window* window) | |||
| 	window->pushGui(list); | ||||
| 	return list; | ||||
| } | ||||
| 
 | ||||
| void GuiGameList::update(int deltaTime) | ||||
| { | ||||
| 	mImageAnimation->update(deltaTime); | ||||
| 	mList->update(deltaTime); | ||||
| } | ||||
|  |  | |||
|  | @ -22,8 +22,9 @@ public: | |||
| 
 | ||||
| 	void setSystemId(int id); | ||||
| 
 | ||||
| 	void render(); | ||||
| 	void input(InputConfig* config, Input input); | ||||
| 	void update(int deltaTime); | ||||
| 	void render(); | ||||
| 
 | ||||
| 	void onInit(); | ||||
| 	void onDeinit(); | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ GuiImage::GuiImage(Window* window, int offsetX, int offsetY, std::string path, u | |||
| 	//default origin is the center of image
 | ||||
| 	mOriginX = 0.5; | ||||
| 	mOriginY = 0.5; | ||||
| 	mOpacity = 255; | ||||
| 
 | ||||
| 	mWidth = mDrawWidth = 0; | ||||
| 	mHeight = mDrawHeight = 0; | ||||
|  |  | |||
|  | @ -1,27 +1,80 @@ | |||
| #include "GuiInputConfig.h" | ||||
| #include "GuiGameList.h" | ||||
| #include "../Window.h" | ||||
| #include "../Renderer.h" | ||||
| #include <iostream> | ||||
| #include <fstream> | ||||
| #include "../Log.h" | ||||
| #include "../Font.h" | ||||
| #include "GuiGameList.h" | ||||
| 
 | ||||
| extern bool DEBUG; //defined in main.cpp
 | ||||
| static int inputCount = 8; | ||||
| static std::string inputName[8] = { "Up", "Down", "Left", "Right", "A", "B", "Menu", "Select"}; | ||||
| 
 | ||||
| std::string GuiInputConfig::sInputs[] = { "UP", "DOWN", "LEFT", "RIGHT", "A", "B", "START", "SELECT", "PAGEUP", "PAGEDOWN" }; //must be same order as InputManager::InputButton enum; only add to the end to preserve backwards compatibility
 | ||||
| int GuiInputConfig::sInputCount = 10; | ||||
| 
 | ||||
| GuiInputConfig::GuiInputConfig(Window* window) : Gui(window) | ||||
| GuiInputConfig::GuiInputConfig(Window* window, InputConfig* target) : Gui(window), mTargetConfig(target) | ||||
| { | ||||
| 	mCurInputId = 0; | ||||
| } | ||||
| 
 | ||||
| GuiInputConfig::~GuiInputConfig() | ||||
| void GuiInputConfig::update(int deltaTime) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| void GuiInputConfig::render() | ||||
| { | ||||
| 	Renderer::drawCenteredText("IN DEVELOPMENT", 0, 2, 0x000000FF, Renderer::getDefaultFont(Renderer::MEDIUM)); | ||||
| } | ||||
| 
 | ||||
| void GuiInputConfig::input(InputConfig* config, Input input) | ||||
| { | ||||
| 	if(config != mTargetConfig || input.value == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	if(mCurInputId >= inputCount) | ||||
| 	{ | ||||
| 		//done
 | ||||
| 		if(input.type == TYPE_BUTTON || input.type == TYPE_KEY) | ||||
| 		{ | ||||
| 			if(mTargetConfig->getPlayerNum() < mWindow->getInputManager()->getNumPlayers() - 1) | ||||
| 			{ | ||||
| 				mWindow->pushGui(new GuiInputConfig(mWindow, mWindow->getInputManager()->getInputConfigByPlayer(mTargetConfig->getPlayerNum() + 1))); | ||||
| 			}else{ | ||||
| 				GuiGameList::create(mWindow); | ||||
| 			} | ||||
| 			delete this; | ||||
| 		} | ||||
| 	}else{ | ||||
| 		if(config->getMappedTo(input).size() > 0) | ||||
| 		{ | ||||
| 			mErrorMsg = "Already mapped!"; | ||||
| 			return; | ||||
| 		} | ||||
| 
 | ||||
| 		input.configured = true; | ||||
| 		std::cout << "[" << input.string() << "] -> " << inputName[mCurInputId] << "\n"; | ||||
| 
 | ||||
| 		config->mapInput(inputName[mCurInputId], input); | ||||
| 		mCurInputId++; | ||||
| 		mErrorMsg = ""; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void GuiInputConfig::render() | ||||
| { | ||||
| 	Font* font = Renderer::getDefaultFont(Renderer::MEDIUM); | ||||
| 
 | ||||
| 	std::stringstream stream; | ||||
| 	stream << "PLAYER " << mTargetConfig->getPlayerNum() + 1 << ", press..."; | ||||
| 	Renderer::drawText(stream.str(), 10, 10, 0x000000FF, font); | ||||
| 
 | ||||
| 	int y = 14 + font->getHeight(); | ||||
| 	for(int i = 0; i < mCurInputId; i++) | ||||
| 	{ | ||||
| 		Renderer::drawText(inputName[i], 10, y, 0x00CC00FF, font); | ||||
| 		y += font->getHeight() + 5; | ||||
| 	} | ||||
| 
 | ||||
| 	if(mCurInputId >= inputCount) | ||||
| 	{ | ||||
| 		Renderer::drawCenteredText("Basic config done!", 0, (int)(Renderer::getScreenHeight() * 0.6), 0x00CC00FF, font); | ||||
| 		Renderer::drawCenteredText("Press any button to continue.", 0, (int)(Renderer::getScreenHeight() * 0.6) + font->getHeight() + 4, 0x000000FF, font); | ||||
| 	}else{ | ||||
| 		Renderer::drawText(inputName[mCurInputId], 10, y, 0x000000FF, font); | ||||
| 	} | ||||
| 
 | ||||
| 	if(!mErrorMsg.empty()) | ||||
| 		Renderer::drawCenteredText(mErrorMsg, 0, Renderer::getScreenHeight() - font->getHeight() - 10, 0xFF0000FF, font); | ||||
| } | ||||
|  |  | |||
|  | @ -2,22 +2,21 @@ | |||
| #define _GUIINPUTCONFIG_H_ | ||||
| 
 | ||||
| #include "../Gui.h" | ||||
| #include <map> | ||||
| #include <SDL/SDL.h> | ||||
| #include <string> | ||||
| 
 | ||||
| class GuiInputConfig : public Gui | ||||
| { | ||||
| public: | ||||
| 	GuiInputConfig(Window* window); | ||||
| 	~GuiInputConfig(); | ||||
| 	GuiInputConfig(Window* window, InputConfig* target); | ||||
| 
 | ||||
| 	void render(); | ||||
| 	void input(InputConfig* config, Input input); | ||||
| 	void update(int deltaTime); | ||||
| 	void render(); | ||||
| 
 | ||||
| private: | ||||
| 	bool mDone; | ||||
| 	int mInputNum; | ||||
| 	static std::string sInputs[]; | ||||
| 	static int sInputCount; | ||||
| 	std::string mErrorMsg; | ||||
| 	InputConfig* mTargetConfig; | ||||
| 	int mCurInputId; | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -24,6 +24,8 @@ GuiMenu::~GuiMenu() | |||
| 
 | ||||
| void GuiMenu::input(InputConfig* config, Input input) | ||||
| { | ||||
| 	mList->input(config, input); | ||||
| 
 | ||||
| 	if(config->isMappedTo("menu", input) && input.value != 0) | ||||
| 	{ | ||||
| 		delete this; | ||||
|  |  | |||
|  | @ -257,7 +257,7 @@ void GuiTheme::readXML(std::string path) | |||
| 	LOG(LogInfo) << "Theme loading complete."; | ||||
| } | ||||
| 
 | ||||
| //recursively creates components (with proper parenting)
 | ||||
| //recursively creates components
 | ||||
| void GuiTheme::createComponentChildren(pugi::xml_node node, Gui* parent) | ||||
| { | ||||
| 	for(pugi::xml_node data = node.child("component"); data; data = data.next_sibling("component")) | ||||
|  |  | |||
							
								
								
									
										19
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/main.cpp
									
									
									
									
									
								
							|  | @ -5,7 +5,7 @@ | |||
| #include "components/GuiGameList.h" | ||||
| #include "SystemData.h" | ||||
| #include <boost/filesystem.hpp> | ||||
| #include "components/GuiInputConfig.h" | ||||
| #include "components/GuiDetectDevice.h" | ||||
| #include <SDL.h> | ||||
| #include "AudioManager.h" | ||||
| #include "platform.h" | ||||
|  | @ -135,26 +135,11 @@ int main(int argc, char* argv[]) | |||
| 			//choose which GUI to open depending on Input configuration
 | ||||
| 			if(fs::exists(InputManager::getConfigPath())) | ||||
| 			{ | ||||
| 				LOG(LogDebug) << "Found input config in " << InputManager::getConfigPath() << "\n"; | ||||
| 
 | ||||
| 				//an input config already exists - load it and proceed to the gamelist as usual.
 | ||||
| 				window.getInputManager()->loadConfig(); | ||||
| 				GuiGameList::create(&window); | ||||
| 			}else{ | ||||
| 
 | ||||
| 				if(DEBUG) | ||||
| 					std::cout << "SDL_NumJoysticks() reports " << SDL_NumJoysticks() << " present.\n"; | ||||
| 
 | ||||
| 				//if no input.cfg is present, but a joystick is connected, launch the input config GUI
 | ||||
| 				if(SDL_NumJoysticks() > 0) | ||||
| 				{ | ||||
| 					LOG(LogDebug) << "	at least one joystick detected, launching config GUI...\n"; | ||||
| 					window.pushGui(new GuiInputConfig(&window)); | ||||
| 				}else{ | ||||
| 					LOG(LogDebug) << "	no joystick detected, ignoring...\n"; | ||||
| 					GuiGameList::create(&window); | ||||
| 				} | ||||
| 
 | ||||
| 				window.pushGui(new GuiDetectDevice(&window)); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Aloshi
						Aloshi