seminar11 - final
This commit is contained in:
		
							parent
							
								
									8fc5c26a79
								
							
						
					
					
						commit
						95f02e3ce0
					
				
					 2 changed files with 12 additions and 74 deletions
				
			
		|  | @ -140,39 +140,4 @@ public: | |||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
| 	sf::RenderWindow window(sf::VideoMode(500, 500), "Slider!"); | ||||
| 	window.setFramerateLimit(60); | ||||
| 
 | ||||
| 	SliderSFML slider1(100, 100); | ||||
| 	SliderSFML slider2(100, 200); | ||||
| 	SliderSFML slider3(100, 300); | ||||
| 
 | ||||
| 	slider1.create(20, 450); | ||||
| 	slider2.create(0, 200); | ||||
| 	slider3.create(0, 100); | ||||
| 
 | ||||
| 	slider1.setSliderValue(235); | ||||
| 
 | ||||
| 	while (window.isOpen()) | ||||
| 	{ | ||||
| 		sf::Event event; | ||||
| 		while (window.pollEvent(event)) | ||||
| 		{ | ||||
| 			if (event.type == sf::Event::Closed) | ||||
| 				window.close(); | ||||
| 		} | ||||
| 
 | ||||
| 		window.clear(sf::Color(25,29,33)); | ||||
| 
 | ||||
| 		slider1.draw(window); | ||||
| 		slider2.draw(window); | ||||
| 		slider3.draw(window); | ||||
| 
 | ||||
| 		window.display(); | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| }}; | ||||
| }; | ||||
|  | @ -7,24 +7,17 @@ | |||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| void meow() {;} | ||||
| 
 | ||||
| // Вспомогательные функции, вычисляет расстояние между двумя точками
 | ||||
| float distance(sf::Vector2f start, sf::Vector2f finish) | ||||
| { | ||||
|     return sqrtf((start.x - finish.x)*(start.x - finish.x) + (start.y - finish.y)*(start.y - finish.y)); | ||||
| } | ||||
| 
 | ||||
| // Вспомогательные функции, рисует линию на холсте окна window
 | ||||
| void drawLine(sf::RenderWindow& window, sf::Vector2f start, sf::Vector2f finish, sf::Color color = sf::Color::White) | ||||
| { | ||||
|     sf::Vertex line_vertices[2] = {sf::Vertex(start, color), sf::Vertex(finish, color)}; | ||||
|     window.draw(line_vertices, 2, sf::Lines); | ||||
| } | ||||
| 
 | ||||
| // Вспомагательный класс, описывет шарик
 | ||||
| // position - положение шарика; radius - радиус
 | ||||
| // is_chosen - говорит о том, выбран ли шарик или нет
 | ||||
| struct Ball | ||||
| { | ||||
|     sf::Vector2f position; | ||||
|  | @ -37,19 +30,15 @@ struct Ball | |||
|         isChoosen = false; | ||||
|     } | ||||
| 
 | ||||
|     // Метод, который рисует шарик на холстек окна window
 | ||||
|     void draw(sf::RenderWindow& window) const | ||||
|     { | ||||
|         // Тут рисуем белый кружочек
 | ||||
|         sf::CircleShape circle(radius); | ||||
|         circle.setFillColor(color); | ||||
|         circle.setOrigin({radius, radius}); | ||||
|         circle.setPosition(position); | ||||
|         window.draw(circle); | ||||
| 
 | ||||
|         // Если шарик выбран
 | ||||
|         if (isChoosen) { | ||||
|             // То рисуем "уголки"
 | ||||
|             const float fraction = 0.7; | ||||
|             drawLine(window, {position.x - radius, position.y + radius}, {position.x - radius, position.y + radius*fraction}); | ||||
|             drawLine(window, {position.x - radius, position.y + radius}, {position.x - fraction * radius, position.y + radius}); | ||||
|  | @ -79,11 +68,6 @@ void deleteChoosen(list<Ball>& balls) { | |||
|         else | ||||
|                 ++it; | ||||
|     } | ||||
| #ifdef _DEBUG | ||||
|     for (list<Ball>::iterator it = balls.begin(); it != balls.end(); ++it) | ||||
|         cout << it->position.x <<" " << it->position.y<< endl; | ||||
|     cout << "###" << endl; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void copyBalls(list<Ball>& balls, list<Ball>& buffer) { | ||||
|  | @ -118,9 +102,6 @@ int main() | |||
|     sf::RenderWindow window(sf::VideoMode(800, 600), "Select, Move, Delete!", sf::Style::Default, settings); | ||||
|     window.setFramerateLimit(60); | ||||
| 
 | ||||
| 
 | ||||
|     // Создаём связный список из шариков
 | ||||
|     // Связный список -- потому что нам нужно будет постоянно удалять и добавлять в этот список
 | ||||
|     std::list<Ball> balls; | ||||
|     balls.push_back(Ball({200, 200}, 26)); | ||||
|     balls.push_back(Ball({400, 300}, 20)); | ||||
|  | @ -131,19 +112,15 @@ int main() | |||
| 
 | ||||
|     list<Ball> buffer{}; | ||||
| 
 | ||||
|     // Создаём прямоугольник выделения
 | ||||
|     // Обратите внимание на четвёртый параметр sf::Color(150, 150, 240, 50)
 | ||||
|     // Это alpha - прозрачность      0 = полностью прозрачный     255 = непрозрачный
 | ||||
|     sf::RectangleShape selectionRect; | ||||
|     selectionRect.setFillColor(sf::Color(150, 150, 240, 50)); | ||||
|     selectionRect.setOutlineColor(sf::Color(200, 200, 255)); | ||||
|     selectionRect.setOutlineThickness(1); | ||||
| 
 | ||||
|     // Специальная переменная, которая будет показывать, что мы находимся в режиме выделения
 | ||||
|     bool isSelecting = false; | ||||
|     // "Режим выделения"
 | ||||
|     /* "Режим выделения" */ | ||||
|     bool isMovingMode = false; | ||||
|     // Необходимо, чтоб в режиме выделения считать смещение
 | ||||
|     /* Необходимо, чтоб в режиме выделения считать смещение */ | ||||
|     Ball* selected_ball = nullptr;  | ||||
| 
 | ||||
|     bool isContextMenu = false; | ||||
|  | @ -272,29 +249,25 @@ int main() | |||
|                 isMovingMode = false; | ||||
|                 isContextMenu = false; | ||||
|             } | ||||
|             /*2check*/ | ||||
|             if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space)) | ||||
|                  recolorChoosen(balls); | ||||
|             if (sf::Keyboard::isKeyPressed(sf::Keyboard::Delete)) { | ||||
|                 deleteChoosen(balls); | ||||
|             } | ||||
| 
 | ||||
|             /**/ | ||||
|             if (event.type == sf::Event::KeyPressed) | ||||
|             if (event.type == sf::Event::KeyPressed) { | ||||
|                 if (event.key.code == sf::Keyboard::C) | ||||
|                         if (sf::Keyboard::isKeyPressed(sf::Keyboard::LControl)) { | ||||
|                         if (sf::Keyboard::isKeyPressed(sf::Keyboard::LControl)) | ||||
|                                         copyBalls(balls, buffer); | ||||
|                         } | ||||
|             if (event.type == sf::Event::KeyPressed) | ||||
|                 if (event.key.code == sf::Keyboard::V) | ||||
|                         if (sf::Keyboard::isKeyPressed(sf::Keyboard::LControl)) | ||||
|                                         pasteBalls(balls, buffer); | ||||
|             if (event.type == sf::Event::KeyPressed) | ||||
|                 if (event.key.code == sf::Keyboard::X) | ||||
|                         if (sf::Keyboard::isKeyPressed(sf::Keyboard::LControl)) { | ||||
|                                         copyBalls(balls, buffer); | ||||
|                                         deleteChoosen(balls); | ||||
|                         } | ||||
|                 } | ||||
|                 if (event.key.code == sf::Keyboard::Space) | ||||
|                     recolorChoosen(balls); | ||||
|                 if (event.key.code == sf::Keyboard::Delete) { | ||||
|                     deleteChoosen(balls); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         window.clear(sf::Color::Black); | ||||
|  |  | |||
		Reference in a new issue