Landing
This commit is contained in:
		
							
								
								
									
										14
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "files.associations": {
 | 
				
			||||||
 | 
					        "ios": "cpp",
 | 
				
			||||||
 | 
					        "system_error": "cpp",
 | 
				
			||||||
 | 
					        "vector": "cpp",
 | 
				
			||||||
 | 
					        "xiosbase": "cpp",
 | 
				
			||||||
 | 
					        "xstring": "cpp",
 | 
				
			||||||
 | 
					        "xtree": "cpp",
 | 
				
			||||||
 | 
					        "sstream": "cpp",
 | 
				
			||||||
 | 
					        "*.m": "cpp",
 | 
				
			||||||
 | 
					        "cmath": "cpp",
 | 
				
			||||||
 | 
					        "type_traits": "cpp"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										142
									
								
								Landing/Rocket.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								Landing/Rocket.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
				
			|||||||
 | 
					#include <SFML/Graphics.hpp>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					#include <cmath>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DegToRad 0.0174533 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Rocket
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        float thrustForce;
 | 
				
			||||||
 | 
					        float rotationForce;
 | 
				
			||||||
 | 
					        float rotation;
 | 
				
			||||||
 | 
					        float gravity;
 | 
				
			||||||
 | 
					        sf::Texture texture;
 | 
				
			||||||
 | 
					        sf::Sprite sprite;
 | 
				
			||||||
 | 
					        sf::Vector2f position;
 | 
				
			||||||
 | 
					        sf::Vector2f velocity;
 | 
				
			||||||
 | 
					        bool isActive;
 | 
				
			||||||
 | 
					        void ApplyGravity(float);
 | 
				
			||||||
 | 
					        void ApplyVelocity(float);
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        Rocket();
 | 
				
			||||||
 | 
					        void Update(float);
 | 
				
			||||||
 | 
					        void Rotate(float, bool = true);
 | 
				
			||||||
 | 
					        void Thrust(float);
 | 
				
			||||||
 | 
					        void SetThrustForce(float);
 | 
				
			||||||
 | 
					        void SetRotationForce(float);
 | 
				
			||||||
 | 
					        void SetGravity(float);
 | 
				
			||||||
 | 
					        void SetPosition(float, float, bool = true);
 | 
				
			||||||
 | 
					        void SetTexture(sf::Texture, float = 1.0);
 | 
				
			||||||
 | 
					        void SetActive(bool = true);
 | 
				
			||||||
 | 
					        float GetSpeed();
 | 
				
			||||||
 | 
					        sf::Sprite GetSprite();
 | 
				
			||||||
 | 
					        sf::Vector2f GetPosition(bool = true);
 | 
				
			||||||
 | 
					        sf::Vector2f GetLandingPoint(bool = true);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Rocket::Rocket()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    velocity.x  = velocity.y    = 0.0f;
 | 
				
			||||||
 | 
					    position.x  = position.y    = 0.0f;
 | 
				
			||||||
 | 
					    thrustForce = rotationForce = rotation = 0.0f;
 | 
				
			||||||
 | 
					    gravity = 10;
 | 
				
			||||||
 | 
					    isActive = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::Update(float deltaTime)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if(!isActive) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ApplyGravity(deltaTime);
 | 
				
			||||||
 | 
					    ApplyVelocity(deltaTime);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::Rotate(float deltaTime, bool isRight)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if(!isActive) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rotation += (isRight ? rotationForce : -rotationForce) * deltaTime;
 | 
				
			||||||
 | 
					    sprite.setRotation(rotation);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::Thrust(float deltaTime)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if(!isActive) return;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    float force = thrustForce * deltaTime;
 | 
				
			||||||
 | 
					    velocity.x += sin(rotation * DegToRad) * force;
 | 
				
			||||||
 | 
					    velocity.y += cos(rotation * DegToRad) * force;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::ApplyGravity(float deltaTime)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    velocity.y -= gravity * deltaTime;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::ApplyVelocity(float deltaTime)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    position += velocity * deltaTime;
 | 
				
			||||||
 | 
					    sprite.setPosition(GetPosition());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::SetPosition(float x, float y, bool inverse)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    position.x = x;
 | 
				
			||||||
 | 
					    position.y = !inverse ? -y : y;
 | 
				
			||||||
 | 
					    sprite.setPosition(position);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::SetGravity(float gravity)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    this -> gravity = gravity;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::SetThrustForce(float thrustForce)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    this -> thrustForce = thrustForce;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::SetRotationForce(float rotationForce)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    this -> rotationForce = rotationForce;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::SetTexture(sf::Texture texture, float size)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    this -> texture = texture;
 | 
				
			||||||
 | 
					    sprite = sf::Sprite(this -> texture);
 | 
				
			||||||
 | 
					    sprite.setScale(size, size);
 | 
				
			||||||
 | 
					    sprite.setOrigin(texture.getSize().x / 2, texture.getSize().y / 2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Rocket::SetActive(bool active)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    isActive = active;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float Rocket::GetSpeed()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return sqrt(velocity.x * velocity.x + velocity.y * velocity.y);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sf::Sprite Rocket::GetSprite()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return sprite;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sf::Vector2f Rocket::GetPosition(bool inverse)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    sf::Vector2f result = position;
 | 
				
			||||||
 | 
					    if(inverse) result.y *= -1;
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sf::Vector2f Rocket::GetLandingPoint(bool inverse)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    sf::Vector2f result = position;
 | 
				
			||||||
 | 
					    result.x -= sin(rotation * DegToRad) * texture.getSize().y * sprite.getScale().y / 2;
 | 
				
			||||||
 | 
					    result.y -= cos(rotation * DegToRad) * texture.getSize().y * sprite.getScale().y / 2;
 | 
				
			||||||
 | 
					    if(inverse) result.y *= -1;
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								Landing/Rocket.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Landing/Rocket.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 429 B  | 
							
								
								
									
										114
									
								
								Landing/main.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								Landing/main.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					#include <SFML/Graphics.hpp>
 | 
				
			||||||
 | 
					#include <sstream>
 | 
				
			||||||
 | 
					#include <cmath>
 | 
				
			||||||
 | 
					#include "Rocket.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define WindowSize  sf::VideoMode(960, 540)
 | 
				
			||||||
 | 
					#define WindowStyle sf::Style::Titlebar | sf::Style::Close
 | 
				
			||||||
 | 
					#define WindowTitle "Test Window Syntriax"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SizeMultiplier 5
 | 
				
			||||||
 | 
					#define WinThreshold 1.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sf::Vertex CreateVertex(double, double);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float Terrain(float x, float divider)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return sin(x / divider);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::ostringstream textToDisplay;
 | 
				
			||||||
 | 
					    sf::RenderWindow window(WindowSize, WindowTitle, WindowStyle);
 | 
				
			||||||
 | 
					    sf::Event event;
 | 
				
			||||||
 | 
					    sf::Clock clock;
 | 
				
			||||||
 | 
					    sf::Text text;
 | 
				
			||||||
 | 
					    sf::Font font;
 | 
				
			||||||
 | 
					    sf::Texture playerTexture;
 | 
				
			||||||
 | 
					    Rocket player;
 | 
				
			||||||
 | 
					    sf::Vertex terrain[320];
 | 
				
			||||||
 | 
					    float timePassed;
 | 
				
			||||||
 | 
					    float deltaTime;
 | 
				
			||||||
 | 
					    bool isFocused = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (int i = 0; i < 320; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        terrain[i].position.x = i * 3;
 | 
				
			||||||
 | 
					        terrain[i].position.y = Terrain(i * 3, SizeMultiplier * 25) * SizeMultiplier * 25 + 400;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!playerTexture.loadFromFile("Rocket.png"))
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    if (!font.loadFromFile("../OpenSans-Bold.ttf"))
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    player.SetTexture(playerTexture, SizeMultiplier);
 | 
				
			||||||
 | 
					    player.SetRotationForce(45);
 | 
				
			||||||
 | 
					    player.SetThrustForce(25 * SizeMultiplier);
 | 
				
			||||||
 | 
					    player.SetGravity(10 * SizeMultiplier);
 | 
				
			||||||
 | 
					    player.SetPosition(480, -50);
 | 
				
			||||||
 | 
					    player.SetActive(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    text.setFont(font);
 | 
				
			||||||
 | 
					    window.setVerticalSyncEnabled(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (window.isOpen())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        while (window.pollEvent(event))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (event.type == sf::Event::Closed)
 | 
				
			||||||
 | 
					                window.close();
 | 
				
			||||||
 | 
					            else if (event.type == sf::Event::LostFocus)
 | 
				
			||||||
 | 
					                isFocused = false;
 | 
				
			||||||
 | 
					            else if (event.type == sf::Event::GainedFocus)
 | 
				
			||||||
 | 
					                isFocused = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(!isFocused)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            timePassed = clock.getElapsedTime().asSeconds();
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        deltaTime = clock.getElapsedTime().asSeconds() - timePassed;
 | 
				
			||||||
 | 
					        timePassed = clock.getElapsedTime().asSeconds();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        textToDisplay.str("");
 | 
				
			||||||
 | 
					        textToDisplay.clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Collision
 | 
				
			||||||
 | 
					        if(terrain[(int)player.GetLandingPoint().x / 3].position.y - player.GetLandingPoint().y < 0.0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            player.SetActive(false);
 | 
				
			||||||
 | 
					            textToDisplay << (player.GetSpeed() / SizeMultiplier < WinThreshold ? "Win" : "Loose");
 | 
				
			||||||
 | 
					            textToDisplay << "\nCollided";
 | 
				
			||||||
 | 
					            textToDisplay << "\nSpeed: " << player.GetSpeed() / SizeMultiplier;
 | 
				
			||||||
 | 
					            textToDisplay << "\nWin Speed: " << WinThreshold;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        text.setString(textToDisplay.str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
 | 
				
			||||||
 | 
					            player.Thrust(deltaTime);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
 | 
				
			||||||
 | 
					            player.Rotate(deltaTime, true);
 | 
				
			||||||
 | 
					        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
 | 
				
			||||||
 | 
					            player.Rotate(deltaTime, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        player.Update(deltaTime);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        window.clear();
 | 
				
			||||||
 | 
					        window.draw(text);
 | 
				
			||||||
 | 
					        window.draw(&terrain[0], 320, sf::PrimitiveType::LinesStrip);
 | 
				
			||||||
 | 
					        window.draw(player.GetSprite());
 | 
				
			||||||
 | 
					        window.display();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sf::Vertex CreateVertex(double x, double y)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return sf::Vertex(sf::Vector2f(x, y));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								Landing/makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Landing/makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					main.exe : *.cpp
 | 
				
			||||||
 | 
						g++ -o main.exe *.cpp ../SFML/*.a
 | 
				
			||||||
		Reference in New Issue
	
	Block a user