mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Refactor the_game() to make it more understandable and maintainable.
The following is a record of 31 commits before squashing: Revert "Remove m_ext_ptr in GUIFormSpecMenu, replaced by refcount mechanism" This reverts commitb49e5cfc70. Basic reformatting with astyle -- additional formatting will be modified, manually, as the need for it is encountered Start "outlining" what a MinetestApp class might look like Add MinetestApp::shutdown() Converted class member functions to camelCase and created protos for new functions First stage of connect to server done Add get itemdefs/nodedefs/media code Init clouds, camera, sky, init GUI, HUD Input handling Client events, camera, sound, draw Fix wield hand getting stuck digging and add debug text back Fix FPS Added profiler graph back Fix FPS issue Need to work out what went wrong and clean up the copy/paste stuff Annotate Various: Rewrote limitFps() Limited scope of some variables Jitter calcs Reduce scope of objects Move some stuff out of ::run and minor formatting cleanup Scope reduction Function splits Removed old (broken) limitFps() Added exception handling back Fixed some formatting Reverted commented out unit tests (uncommented them) Slow clouds down on loading and media screens so the behaviour is like the original the_game() Formatting/style (no functional changes) Manually reapply upstreamb49e5cf: Remove m_ext_ptr in GUIFormSpecMenu, replaced by refcount mechanism Fixed silly errors on my part Minor formatting cleanups Removed strange differentiation in FPS limiting when loading FPS limiting was done differently if cloud_menu_background was true, which does not make sense Cleaning up Add some comments
This commit is contained in:
		
				
					committed by
					
						
						RealBadAngel
					
				
			
			
				
	
			
			
			
						parent
						
							9e811a92e7
						
					
				
				
					commit
					429ecb2b94
				
			
							
								
								
									
										5597
									
								
								src/game.cpp
									
									
									
									
									
								
							
							
						
						
									
										5597
									
								
								src/game.cpp
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										55
									
								
								src/game.h
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								src/game.h
									
									
									
									
									
								
							@@ -35,11 +35,14 @@ class KeyList : protected std::list<KeyPress>
 | 
			
		||||
	{
 | 
			
		||||
		const_iterator f(begin());
 | 
			
		||||
		const_iterator e(end());
 | 
			
		||||
		while (f!=e) {
 | 
			
		||||
 | 
			
		||||
		while (f != e) {
 | 
			
		||||
			if (*f == key)
 | 
			
		||||
				return f;
 | 
			
		||||
 | 
			
		||||
			++f;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return e;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -47,16 +50,22 @@ class KeyList : protected std::list<KeyPress>
 | 
			
		||||
	{
 | 
			
		||||
		iterator f(begin());
 | 
			
		||||
		iterator e(end());
 | 
			
		||||
		while (f!=e) {
 | 
			
		||||
 | 
			
		||||
		while (f != e) {
 | 
			
		||||
			if (*f == key)
 | 
			
		||||
				return f;
 | 
			
		||||
 | 
			
		||||
			++f;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return e;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	void clear() { super::clear(); }
 | 
			
		||||
	void clear()
 | 
			
		||||
	{
 | 
			
		||||
		super::clear();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void set(const KeyPress &key)
 | 
			
		||||
	{
 | 
			
		||||
@@ -67,6 +76,7 @@ public:
 | 
			
		||||
	void unset(const KeyPress &key)
 | 
			
		||||
	{
 | 
			
		||||
		iterator p(find(key));
 | 
			
		||||
 | 
			
		||||
		if (p != end())
 | 
			
		||||
			erase(p);
 | 
			
		||||
	}
 | 
			
		||||
@@ -74,6 +84,7 @@ public:
 | 
			
		||||
	void toggle(const KeyPress &key)
 | 
			
		||||
	{
 | 
			
		||||
		iterator p(this->find(key));
 | 
			
		||||
 | 
			
		||||
		if (p != end())
 | 
			
		||||
			erase(p);
 | 
			
		||||
		else
 | 
			
		||||
@@ -98,7 +109,7 @@ public:
 | 
			
		||||
 | 
			
		||||
	virtual bool isKeyDown(const KeyPress &keyCode) = 0;
 | 
			
		||||
	virtual bool wasKeyDown(const KeyPress &keyCode) = 0;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	virtual v2s32 getMousePos() = 0;
 | 
			
		||||
	virtual void setMousePos(s32 x, s32 y) = 0;
 | 
			
		||||
 | 
			
		||||
@@ -114,33 +125,31 @@ public:
 | 
			
		||||
	virtual bool getRightReleased() = 0;
 | 
			
		||||
	virtual void resetLeftReleased() = 0;
 | 
			
		||||
	virtual void resetRightReleased() = 0;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	virtual s32 getMouseWheel() = 0;
 | 
			
		||||
 | 
			
		||||
	virtual void step(float dtime) {};
 | 
			
		||||
	virtual void step(float dtime) {}
 | 
			
		||||
 | 
			
		||||
	virtual void clear() {};
 | 
			
		||||
	virtual void clear() {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class ChatBackend;  /* to avoid having to include chat.h */
 | 
			
		||||
struct SubgameSpec;
 | 
			
		||||
 | 
			
		||||
void the_game(
 | 
			
		||||
	bool &kill,
 | 
			
		||||
	bool random_input,
 | 
			
		||||
	InputHandler *input,
 | 
			
		||||
	IrrlichtDevice *device,
 | 
			
		||||
	gui::IGUIFont* font,
 | 
			
		||||
	std::string map_dir,
 | 
			
		||||
	std::string playername,
 | 
			
		||||
	std::string password,
 | 
			
		||||
	std::string address, // If "", local server is used
 | 
			
		||||
	u16 port,
 | 
			
		||||
	std::wstring &error_message,
 | 
			
		||||
	ChatBackend &chat_backend,
 | 
			
		||||
	const SubgameSpec &gamespec, // Used for local game
 | 
			
		||||
	bool simple_singleplayer_mode
 | 
			
		||||
);
 | 
			
		||||
void the_game(bool *kill,
 | 
			
		||||
		bool random_input,
 | 
			
		||||
		InputHandler *input,
 | 
			
		||||
		IrrlichtDevice *device,
 | 
			
		||||
		gui::IGUIFont *font,
 | 
			
		||||
		const std::string &map_dir,
 | 
			
		||||
		const std::string &playername,
 | 
			
		||||
		const std::string &password,
 | 
			
		||||
		const std::string &address, // If "", local server is used
 | 
			
		||||
		u16 port,
 | 
			
		||||
		std::wstring &error_message,
 | 
			
		||||
		ChatBackend &chat_backend,
 | 
			
		||||
		const SubgameSpec &gamespec, // Used for local game
 | 
			
		||||
		bool simple_singleplayer_mode);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1861,7 +1861,7 @@ int main(int argc, char *argv[])
 | 
			
		||||
	g_touchscreengui = receiver->m_touchscreengui;
 | 
			
		||||
#endif
 | 
			
		||||
			the_game(
 | 
			
		||||
				kill,
 | 
			
		||||
				&kill,
 | 
			
		||||
				random_input,
 | 
			
		||||
				input,
 | 
			
		||||
				device,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user