level selection dev
This commit is contained in:
		
							parent
							
								
									457541edf5
								
							
						
					
					
						commit
						82812eecb0
					
				
							
								
								
									
										
											BIN
										
									
								
								assets/black_square.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/black_square.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 923 B | 
| @ -18,6 +18,15 @@ | |||||||
| 					"texture": "star_0_0.png", | 					"texture": "star_0_0.png", | ||||||
| 					"scale": 0.1, | 					"scale": 0.1, | ||||||
| 					"levels": [ | 					"levels": [ | ||||||
|  | 						{ | ||||||
|  | 							"name": "level_0" | ||||||
|  | 						}, | ||||||
|  | 						{ | ||||||
|  | 							"name": "level_1" | ||||||
|  | 						}, | ||||||
|  | 						{ | ||||||
|  | 							"name": "level_1" | ||||||
|  | 						}, | ||||||
| 						{ | 						{ | ||||||
| 							"name": "level_1" | 							"name": "level_1" | ||||||
| 						} | 						} | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								assets/red_square.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/red_square.png
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1.5 KiB | 
| @ -1,6 +1,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "galaxy_menu.h" | #include "galaxy_menu.h" | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
|  | #include <math.h> | ||||||
| 
 | 
 | ||||||
| GalaxyMenu::GalaxyMenu() | GalaxyMenu::GalaxyMenu() | ||||||
| { | { | ||||||
| @ -128,14 +129,18 @@ void GalaxyMenu::UpdateGalaxyMenu(float s_width, float s_height, size_t dt) { | |||||||
| 	/*..Level list geometry..*/ | 	/*..Level list geometry..*/ | ||||||
| 	for (int i = 0; i < galaxies.size(); i++) { | 	for (int i = 0; i < galaxies.size(); i++) { | ||||||
| 		for (int j = 0; j < galaxies[i].Stars.size(); j++) { | 		for (int j = 0; j < galaxies[i].Stars.size(); j++) { | ||||||
|  | 			float button_x_dim = ((1.f - (galaxies[i].Stars[j].selectionMenu.border_x_offset * 2 + (galaxies[i].Stars[j].selectionMenu.columns - 1)*galaxies[i].Stars[j].selectionMenu.buttons_offset)) / galaxies[i].Stars[j].selectionMenu.columns); // relative size
 | ||||||
|  | 			int rows_count = (int)ceil((float)galaxies[i].Stars[j].selectionMenu.levels.size() / (float)galaxies[i].Stars[j].selectionMenu.columns); | ||||||
| 			galaxies[i].Stars[j].selectionMenu.params = std::make_pair( | 			galaxies[i].Stars[j].selectionMenu.params = std::make_pair( | ||||||
| 				Eigen::Vector2f( | 				Eigen::Vector2f( | ||||||
| 					currentMenuPos(0) + (galaxies[i].Stars[j].selectionMenu.offset(0) * gameScreenWidth / 2), | 					gameScreenCenter(0) + (galaxies[i].Stars[j].selectionMenu.offset(0) * gameScreenWidth / 2), | ||||||
| 					currentMenuPos(1) + (galaxies[i].Stars[j].selectionMenu.offset(1) * gameScreenHeight / 2) | 					gameScreenCenter(1) + (galaxies[i].Stars[j].selectionMenu.offset(1) * gameScreenHeight / 2) | ||||||
| 				), | 				), | ||||||
| 				Eigen::Vector2f( | 				Eigen::Vector2f( | ||||||
| 					gameScreenWidth * galaxies[i].Stars[j].selectionMenu.dim(0), | 					gameScreenWidth * galaxies[i].Stars[j].selectionMenu.dim(0), | ||||||
| 					gameScreenHeight * galaxies[i].Stars[j].selectionMenu.dim(1) | 					//gameScreenHeight * galaxies[i].Stars[j].selectionMenu.dim(1)
 | ||||||
|  | 					//gameScreenHeight * galaxies[i].Stars[j].selectionMenu.dim(1) * (galaxies[i].Stars[j].selectionMenu.border_y_offset * 2 + (ceil(galaxies[i].Stars[j].selectionMenu.levels.size() / galaxies[i].Stars[j].selectionMenu.columns) - 1)*galaxies[i].Stars[j].selectionMenu.buttons_offset) + galaxies[i].Stars[j].selectionMenu.dim(0)*(ceil(galaxies[i].Stars[j].selectionMenu.levels.size() / galaxies[i].Stars[j].selectionMenu.columns)*(button_x_dim / galaxies[i].Stars[j].selectionMenu.buttons_ratio))
 | ||||||
|  | 					gameScreenWidth * galaxies[i].Stars[j].selectionMenu.dim(0) * (galaxies[i].Stars[j].selectionMenu.border_y_offset * 2 + rows_count*(button_x_dim/galaxies[i].Stars[j].selectionMenu.buttons_ratio) + (rows_count-1)*galaxies[i].Stars[j].selectionMenu.border_y_offset) | ||||||
| 				) | 				) | ||||||
| 			); | 			); | ||||||
| 			/*..buttons plane..*/ | 			/*..buttons plane..*/ | ||||||
| @ -149,18 +154,29 @@ void GalaxyMenu::UpdateGalaxyMenu(float s_width, float s_height, size_t dt) { | |||||||
| 					galaxies[i].Stars[j].selectionMenu.params.second(1) * galaxies[i].Stars[j].selectionMenu.plane_size(1) | 					galaxies[i].Stars[j].selectionMenu.params.second(1) * galaxies[i].Stars[j].selectionMenu.plane_size(1) | ||||||
| 				) | 				) | ||||||
| 			); | 			); | ||||||
| 			// buttons plane dimensions build, relative to buttons #from here
 |  | ||||||
| 			// buttons
 |  | ||||||
| 			for (int y = 0; y < galaxies[i].Stars[j].selectionMenu.levels.size(); y++) { |  | ||||||
| 				galaxies[i].Stars[j].selectionMenu.buttons.push_back(std::make_pair( |  | ||||||
| 					Eigen::Vector2f( |  | ||||||
| 
 | 
 | ||||||
|  | 			// buttons
 | ||||||
|  | 			std::vector<std::pair<Eigen::Vector2f, Eigen::Vector2f>> buttons_params; | ||||||
|  | 			buttons_params.resize(galaxies[i].Stars[j].selectionMenu.levels.size()); | ||||||
|  | 			for (int y = 0; y < buttons_params.size(); y++) { | ||||||
|  | 				 | ||||||
|  | 				float x_rpos = (galaxies[i].Stars[j].selectionMenu.border_x_offset + (y - floor((float)y / (float)galaxies[i].Stars[j].selectionMenu.columns)*(float)galaxies[i].Stars[j].selectionMenu.columns)*(button_x_dim + galaxies[i].Stars[j].selectionMenu.buttons_offset) + button_x_dim/2); | ||||||
|  | 				//float y_rpos = (/**/ galaxies[i].Stars[j].selectionMenu.border_y_offset + (floor((float)y / (float)galaxies[i].Stars[j].selectionMenu.columns))*(/*..*/ galaxies[i].Stars[j].selectionMenu.buttons_offset + button_x_dim / galaxies[i].Stars[j].selectionMenu.buttons_ratio /*..*/) + button_x_dim/galaxies[i].Stars[j].selectionMenu.buttons_ratio/2 /**/);
 | ||||||
|  | 				float y_rpos = (galaxies[i].Stars[j].selectionMenu.border_y_offset + ((int)floor(((float)y)/((float)galaxies[i].Stars[j].selectionMenu.columns)))*(button_x_dim/galaxies[i].Stars[j].selectionMenu.buttons_ratio) + (((int)floor(((float)y) / ((float)galaxies[i].Stars[j].selectionMenu.columns)))-1) * galaxies[i].Stars[j].selectionMenu.border_y_offset + ((button_x_dim/galaxies[i].Stars[j].selectionMenu.buttons_ratio)/2.f)); | ||||||
|  | 
 | ||||||
|  | 				buttons_params[y] = std::make_pair( | ||||||
|  | 					Eigen::Vector2f( | ||||||
|  | 						(galaxies[i].Stars[j].selectionMenu.buttons_plane.first(0) - galaxies[i].Stars[j].selectionMenu.buttons_plane.second(0)/2) + galaxies[i].Stars[j].selectionMenu.buttons_plane.second(0)*x_rpos, | ||||||
|  | 						(galaxies[i].Stars[j].selectionMenu.buttons_plane.first(1) + galaxies[i].Stars[j].selectionMenu.buttons_plane.second(1)/2) - galaxies[i].Stars[j].selectionMenu.buttons_plane.second(1)*y_rpos | ||||||
| 					), | 					), | ||||||
| 					Eigen::Vector2f( | 					Eigen::Vector2f( | ||||||
|  | 						button_x_dim*galaxies[i].Stars[j].selectionMenu.buttons_plane.second(0), | ||||||
|  | 						(button_x_dim / galaxies[i].Stars[j].selectionMenu.buttons_ratio)*galaxies[i].Stars[j].selectionMenu.buttons_plane.second(1) | ||||||
| 
 | 
 | ||||||
| 					) | 					) | ||||||
| 				)); | 				); | ||||||
| 			} | 			} | ||||||
|  | 			galaxies[i].Stars[j].selectionMenu.buttons = buttons_params; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -243,6 +259,9 @@ void GalaxyMenu::DrawGalaxyMenu() { | |||||||
| 				); // DrawRect
 | 				); // DrawRect
 | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		/*..Draw level selection menu..*/ | ||||||
|  | 		drawSelectionMenu(0); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| @ -478,3 +497,49 @@ void GalaxyMenu::showLevelSelectMenu(int index) { | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void GalaxyMenu::drawSelectionMenu(int index) { | ||||||
|  | 	int i = index; | ||||||
|  | 	if (i != -1) { | ||||||
|  | 		glBindTexture(GL_TEXTURE_2D, SE::ResourceManager->TexList["red_square"]); | ||||||
|  | 		SE::Renderer->DrawRect( | ||||||
|  | 			Eigen::Vector2f( | ||||||
|  | 				galaxies[0].Stars[i].selectionMenu.buttons_plane.first(0) - galaxies[0].Stars[i].selectionMenu.buttons_plane.second(0) / 2, | ||||||
|  | 				galaxies[0].Stars[i].selectionMenu.buttons_plane.first(1) - galaxies[0].Stars[i].selectionMenu.buttons_plane.second(1) / 2 | ||||||
|  | 			), | ||||||
|  | 			Eigen::Vector2f( | ||||||
|  | 				galaxies[0].Stars[i].selectionMenu.buttons_plane.first(0) + galaxies[0].Stars[i].selectionMenu.buttons_plane.second(0) / 2, | ||||||
|  | 				galaxies[0].Stars[i].selectionMenu.buttons_plane.first(1) + galaxies[0].Stars[i].selectionMenu.buttons_plane.second(1) / 2 | ||||||
|  | 			) | ||||||
|  | 		); // DrawRect
 | ||||||
|  | 
 | ||||||
|  | 		// buttons
 | ||||||
|  | 		for (int j = 0; j < galaxies[0].Stars[i].selectionMenu.buttons.size(); j++) { | ||||||
|  | 			glBindTexture(GL_TEXTURE_2D, SE::ResourceManager->TexList["black_square"]); | ||||||
|  | 			SE::Renderer->DrawRect( | ||||||
|  | 				Eigen::Vector2f( | ||||||
|  | 					galaxies[0].Stars[i].selectionMenu.buttons[j].first(0) - galaxies[0].Stars[i].selectionMenu.buttons[j].second(0) / 2, | ||||||
|  | 					galaxies[0].Stars[i].selectionMenu.buttons[j].first(1) - galaxies[0].Stars[i].selectionMenu.buttons[j].second(1) / 2 | ||||||
|  | 				), | ||||||
|  | 				Eigen::Vector2f( | ||||||
|  | 					galaxies[0].Stars[i].selectionMenu.buttons[j].first(0) + galaxies[0].Stars[i].selectionMenu.buttons[j].second(0) / 2, | ||||||
|  | 					galaxies[0].Stars[i].selectionMenu.buttons[j].first(1) + galaxies[0].Stars[i].selectionMenu.buttons[j].second(1) / 2 | ||||||
|  | 				) | ||||||
|  | 			); // DrawRect
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 	/*
 | ||||||
|  | 	// debug
 | ||||||
|  | 	glBindTexture(GL_TEXTURE_2D, SE::ResourceManager->TexList["red_square"]); | ||||||
|  | 	SE::Renderer->DrawRect( | ||||||
|  | 		Eigen::Vector2f( | ||||||
|  | 			galaxies[0].Stars[0].selectionMenu.params.first(0) - galaxies[0].Stars[0].selectionMenu.params.second(0) / 2, | ||||||
|  | 			galaxies[0].Stars[0].selectionMenu.params.first(1) - galaxies[0].Stars[0].selectionMenu.params.second(1) / 2 | ||||||
|  | 		), | ||||||
|  | 		Eigen::Vector2f( | ||||||
|  | 			galaxies[0].Stars[0].selectionMenu.params.first(0) + galaxies[0].Stars[0].selectionMenu.params.second(0) / 2, | ||||||
|  | 			galaxies[0].Stars[0].selectionMenu.params.first(1) + galaxies[0].Stars[0].selectionMenu.params.second(1) / 2 | ||||||
|  | 		)); | ||||||
|  | 		*/ | ||||||
|  | } | ||||||
| @ -49,6 +49,8 @@ private: | |||||||
| 
 | 
 | ||||||
| 	void readSaveData(); // inner init method
 | 	void readSaveData(); // inner init method
 | ||||||
| 
 | 
 | ||||||
|  | 	void drawSelectionMenu(int index); | ||||||
|  | 
 | ||||||
| 	Eigen::Vector2f textureSizeNormalize(Eigen::Vector2f texVec, int t_type = 0/*0-galaxy, 1-stars*/); | 	Eigen::Vector2f textureSizeNormalize(Eigen::Vector2f texVec, int t_type = 0/*0-galaxy, 1-stars*/); | ||||||
| 	float val_clamp(float v, float min, float max); | 	float val_clamp(float v, float min, float max); | ||||||
| 	Eigen::Vector2f findCorner(int x_c, int y_c); | 	Eigen::Vector2f findCorner(int x_c, int y_c); | ||||||
|  | |||||||
| @ -4,6 +4,36 @@ | |||||||
| #include "include/Engine.h" | #include "include/Engine.h" | ||||||
| #include <string> | #include <string> | ||||||
| 
 | 
 | ||||||
|  | class LevelSelection { | ||||||
|  | public: | ||||||
|  | 
 | ||||||
|  | 	std::vector<std::string> levels; | ||||||
|  | 
 | ||||||
|  | 	// #params
 | ||||||
|  | 	//float buttons_plane_Yoffset = 0.2f; // relative to the screen
 | ||||||
|  | 	std::pair<Eigen::Vector2f, Eigen::Vector2f> params; | ||||||
|  | 	std::pair<Eigen::Vector2f, Eigen::Vector2f> buttons_plane; | ||||||
|  | 	std::vector<std::pair<Eigen::Vector2f, Eigen::Vector2f>> buttons; | ||||||
|  | 
 | ||||||
|  | 	Eigen::Vector2f offset = Eigen::Vector2f(0.f, 0.f); // offset
 | ||||||
|  | 	Eigen::Vector2f dim = Eigen::Vector2f(0.7f, 0.9f); // dimensions, y - is not const, relative to the levels count
 | ||||||
|  | 
 | ||||||
|  | 													   /*..buttons plane params..*/ | ||||||
|  | 	Eigen::Vector2f plane_size = Eigen::Vector2f(1.f, 1.f); // y- is not const, relative to the levels count
 | ||||||
|  | 	Eigen::Vector2f plane_pos = Eigen::Vector2f(0.f, 0.f); // relative to center
 | ||||||
|  | 
 | ||||||
|  | 														   /*..buttons params..*/ | ||||||
|  | 	int columns = 3; | ||||||
|  | 	float border_y_offset = 0.03f; | ||||||
|  | 	float border_x_offset = 0.03f; | ||||||
|  | 	float buttons_offset = 0.03f; | ||||||
|  | 	float buttons_ratio = 1.6f; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| class StarObject { | class StarObject { | ||||||
| public: | public: | ||||||
| 
 | 
 | ||||||
| @ -28,33 +58,5 @@ private: | |||||||
| 
 | 
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class LevelSelection { |  | ||||||
| public: |  | ||||||
| 
 |  | ||||||
| 	std::vector<std::string> levels; |  | ||||||
| 
 |  | ||||||
| 	// #params
 |  | ||||||
| 	std::pair<Eigen::Vector2f, Eigen::Vector2f> params; |  | ||||||
| 	std::pair<Eigen::Vector2f, Eigen::Vector2f> buttons_plane; |  | ||||||
| 	std::vector<std::pair<Eigen::Vector2f, Eigen::Vector2f>> buttons; |  | ||||||
| 
 |  | ||||||
| 	Eigen::Vector2f offset = Eigen::Vector2f(0.f,0.f); // offset
 |  | ||||||
| 	Eigen::Vector2f dim = Eigen::Vector2f(0.7f, 0.7f); // dimensions
 |  | ||||||
| 
 |  | ||||||
| 	/*..buttons plane params..*/ |  | ||||||
| 	Eigen::Vector2f plane_size = Eigen::Vector2f(1.f, 1.f); |  | ||||||
| 	Eigen::Vector2f plane_pos = Eigen::Vector2f(0.f, 0.f); // relative to center
 |  | ||||||
| 
 |  | ||||||
| 	/*..buttons params..*/ |  | ||||||
| 	int columns = 3; |  | ||||||
| 	//float col_size = 1.f;
 |  | ||||||
| 	float border_y_offset = 0.f; |  | ||||||
| 	float border_x_offset = 0.1f; |  | ||||||
| 	float buttons_offset = 0.1f; |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| @ -303,6 +303,11 @@ void TMyApplication::LoadResources() | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	/*..buttons and level list plane textures..*/ | ||||||
|  | 	TextureNamesToLoad.push_back(std::pair<std::string, std::string>("red_square.png", "red_square")); | ||||||
|  | 	TextureNamesToLoad.push_back(std::pair<std::string, std::string>("black_square.png", "black_square")); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot1.png", "levelshot1")); |     TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot1.png", "levelshot1")); | ||||||
|     TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot2.png", "levelshot2")); |     TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot2.png", "levelshot2")); | ||||||
|     TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot3.png", "levelshot3")); |     TextureNamesToLoad.push_back(std::pair<std::string, std::string>("levelshot3.png", "levelshot3")); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user