Beispiel #1
0
void Music::Initialize()
{
	menu_snd.openFromFile("./Resources/Sounds/menumusic.ogg");
	menu_snd.setVolume(60.0f);
	menu_snd.setLoop(true);
	battle_snd.openFromFile("./Resources/Sounds/battlemusic.ogg");
	battle_snd.setVolume(40.0f);
	battle_snd.setLoop(true);

	menu_snd.play();
}
void SoundEngine::playMusic(sf::Music & Music)
{
	if (activeMusic == true)
	{
		Music.setLoop(true);
		Music.setVolume(20);
		Music.play();
	}
}
Beispiel #3
0
	/*
		PRIVATE function are not supposed to be called from outside VisualNovel namespace
		even though it's accessible from global.
		it can lead to errors if called
	*/
	void Init(){
		//get the image for the text's background
		log_background = get_image( "resource/LogBackground.png" );

		//set the volume to the default global volume
		SoundFx.setVolume( MUSIC_VOLUME ); 
		
		static bool loaded = false;
		if( !loaded ) //to prevent double calling
		{
			font_display.loadFromFile( "resource/PTN57F.ttf" );

			log_text_display.setFont( font_display );
			log_text_display.setCharacterSize( 24 );
			log_text_display.setColor( sf::Color( 255, 255, 255 ) );
			log_text_display.setPosition( log_x + log_padding_x, log_y + log_padding_y );

			log_name_display.setFont( font_display );
			log_name_display.setCharacterSize( 40 );
			log_name_display.setColor( sf::Color( 255, 255, 255 ) );
			log_name_display.setPosition( log_x + log_padding_x, log_y - log_to_name_y - 40 );
		}
	}
		void setVolume(float _volume=1.0f) {
			volume = _volume;
			int intVol = _volume*100.0f;
			sound.setVolume(intVol);
		}
Beispiel #5
0
	void Music::SetVolume(float32 volume)
	{ music.setVolume(volume); }
Beispiel #6
0
int screen_1::Run(sf::RenderWindow &App)
{
    hop.setBuffer(hopFile);
    trucked.setBuffer(truckedFile);
    dunked.setBuffer(dunkedFile);
    
    // Clock
    sf:: Clock clock;
    sf::Time time;
    sf::Time delay;
    
    // Plays Intro
    intro.play();
    delay = intro.getDuration();
    
    time = clock.getElapsedTime();
    // Music
    while ( clock.getElapsedTime() <= delay )
    {
        //cout << "NO";
    }
    froggerTheme.setVolume(50);
    froggerTheme.play();
    clock.restart();
    
    sf::Event Event;
    
    bool Running = true;
    int sum = 0;// for log testing purposes
    int sum2 = 0;
    int sum3 = 0;
    int sum4 = 0;
    int sum5 = 0;
    int sum6 = 0;
    int sum7 = 0;
    int sum8 = 0;
    int sum9 = 0;
    int sum10 = 0;
    
    while (Running)
    {
        // Timer Rect and Clock
        double time = clock.getElapsedTime().asSeconds();
        
        if(time >= 1.5)
        {
            timeRect.width = timeRect.width - 2.383;
            timer.setTextureRect(timeRect);
            clock.restart();
        }
        
        if(timeRect.width <= 0)
        {
            frogOnLily1 = false;
            frogOnLily2 = false;
            frogOnLily3 = false;
            frogOnLily4 = false;
            frogOnLily5 = false;
            mainPlayer.setNumLives(3);
            rectSource.width = 115;
            life.setTextureRect(rectSource);
            occupied1.setPosition(-100, -100);
            occupied2.setPosition(-100, -100);
            occupied3.setPosition(-100, -100);
            occupied4.setPosition(-100, -100);
            occupied5.setPosition(-100, -100);
            froggerTheme.pause();
            clock.restart();
            timeRect.width = 143;
            timer.setTextureRect(timeRect);
            frogger.setPosition(320, 605);
            
            return 2;
        }
        // *********************************************************************
        // Creating the objects of Object class for continuous movement
        //
        // Object(double posX, double posY, double speed)
        // *********************************************************************
        // Trucks
        Object t1(130, 420,0.2 );
        Object t2(550, 290, 0.2);
        // Cars
        Object c1(-50, 420, 0.3);
        Object c2(280, 289, 0.2);
        Object c3(0, 289, 0.2);
        // Short Logs
        Object sl1(0, 125, 0.2);
        Object sl2(200, 61, 0.3);
        Object sl3(300, 8, 0.4);
        // Long Logs
        Object l1(799, 8.3, 0.4);
        Object l2(500, 125, 0.2);
        
        // Sets object's direction
        t1.moveRight(truck);
        t2.moveLeft(truck2);
        c1.moveRight(car);
        c2.moveLeft(car2);
        c3.moveLeft(car3);
        sl1.moveRight(shortLog);
        sl2.moveLeft(shortLog2);
        sl3.moveRight(shortLog3);
        l1.moveRight(longLog);
        l2.moveRight(longLog2);
        
        
        // *********************************************************************
        // The following rectangles are for collision detection
        // *********************************************************************
        // Frog
        sf::RectangleShape rect;
        
        // Trucks
        sf::RectangleShape rect2;
        sf::RectangleShape rect3;
        
        // Cars
        sf::RectangleShape rect4;
        sf::RectangleShape rect5;
        sf::RectangleShape rect6;
        
        // Short Logs
        sf::RectangleShape rect7;
        sf::RectangleShape rect8;
        sf::RectangleShape rect9;
        
        // Long Logs
        sf::RectangleShape rect10;
        sf::RectangleShape rect11;
        
        // River
        sf::RectangleShape rect12;
        
        // Lilypads
        sf::RectangleShape rect13;
        sf::RectangleShape rect14;
        sf::RectangleShape rect15;
        sf::RectangleShape rect16;
        sf::RectangleShape rect17;
        
        // *********************************************************************
        // Setting size of rectangles aka size(width, height)
        // *********************************************************************
        // Frog
        sf::Vector2f size(40, 40);
        
        // Truck
        sf::Vector2f size2(120, 70);
        sf::Vector2f size3(120, 70);
        sf::Vector2f size4(95, 70);
        
        // Cars
        sf::Vector2f size5(95, 70);
        sf::Vector2f size6(95, 70);
        
        // Short Logs
        sf::Vector2f size7(85, 35);
        sf::Vector2f size8(85, 35);
        sf::Vector2f size9(85, 35);
        
        // Long Log
        sf::Vector2f size10(135, 35);
        sf::Vector2f size11(135, 35);
        
        // River
        sf::Vector2f size12(800, 230);
        
        // Lilypads
        sf::Vector2f size13(60, 60);
        sf::Vector2f size14(60, 60);
        sf::Vector2f size15(60, 60);
        sf::Vector2f size16(60, 60);
        sf::Vector2f size17(60, 60);
        
        // *********************************************************************
        // Get pos of every object
        // *********************************************************************
        // Trucks
        sf::Vector2f objectPos = truck.getPosition();
        sf::Vector2f objectPos2 = truck2.getPosition();
        // Cars
        sf::Vector2f objectPos3 = car.getPosition();
        sf::Vector2f objectPos4 = car2.getPosition();
        sf::Vector2f objectPos5 = car3.getPosition();
        // Short Logs
        sf::Vector2f objectPos6 = shortLog.getPosition();
        sf::Vector2f objectPos7 = shortLog2.getPosition();
        sf::Vector2f objectPos8 = shortLog3.getPosition();
        // Long Logs
        sf::Vector2f objectPos9 = longLog.getPosition();
        sf::Vector2f objectPos10 = longLog2.getPosition();
        // Lilypad
        sf::Vector2f objectPos11 = lillypad.getPosition();
        sf::Vector2f objectPos12 = lillypad2.getPosition();
        sf::Vector2f objectPos13 = lillypad3.getPosition();
        sf::Vector2f objectPos14 = lillypad4.getPosition();
        sf::Vector2f objectPos15 = lillypad5.getPosition();
        
        // *********************************************************************
        // Sets boundary settings
        // *********************************************************************
        sf::Vector2f pos = frogger.getPosition();
        
        // Frog
        rect.setPosition(pos.x + 30 , pos.y +10);
        rect.setSize(size);
        rect.setFillColor(sf::Color::Transparent);
        rect.setOutlineColor(sf::Color::Red);
        rect.setOutlineThickness(5);
        
        // Trucks
        rect2.setPosition(objectPos.x + 40, objectPos.y + 20);
        rect2.setSize(size2);
        rect2.setFillColor(sf::Color::Transparent);
        rect2.setOutlineColor(sf::Color::Red);
        rect2.setOutlineThickness(5);
        
        rect3.setPosition(objectPos2.x + 40, objectPos2.y + 60);
        rect3.setSize(size3);
        rect3.setFillColor(sf::Color::Transparent);
        rect3.setOutlineColor(sf::Color::Red);
        rect3.setOutlineThickness(5);
        
        // Cars
        rect4.setPosition(objectPos3.x + 45, objectPos3.y + 70);
        rect4.setSize(size4);
        rect4.setFillColor(sf::Color::Transparent);
        rect4.setOutlineColor(sf::Color::Red);
        rect4.setOutlineThickness(5);
        
        rect5.setPosition(objectPos4.x + 50, objectPos4.y + 70);
        rect5.setSize(size5);
        rect5.setFillColor(sf::Color::Transparent);
        rect5.setOutlineColor(sf::Color::Red);
        rect5.setOutlineThickness(5);
        
        rect6.setPosition(objectPos5.x + 50, objectPos5.y + 70);
        rect6.setSize(size6);
        rect6.setFillColor(sf::Color::Transparent);
        rect6.setOutlineColor(sf::Color::Red);
        rect6.setOutlineThickness(5);
        
        // Short Logs
        rect7.setPosition(objectPos6.x + 30, objectPos6.y + 80);
        rect7.setSize(size7);
        rect7.setFillColor(sf::Color::Transparent);
        rect7.setOutlineColor(sf::Color::Red);
        rect7.setOutlineThickness(5);
        
        rect8.setPosition(objectPos7.x + 30, objectPos7.y + 80);
        rect8.setSize(size8);
        rect8.setFillColor(sf::Color::Transparent);
        rect8.setOutlineColor(sf::Color::Red);
        rect8.setOutlineThickness(5);
        
        rect9.setPosition(objectPos8.x + 30, objectPos8.y + 80);
        rect9.setSize(size9);
        rect9.setFillColor(sf::Color::Transparent);
        rect9.setOutlineColor(sf::Color::Red);
        rect9.setOutlineThickness(5);
        
        // Long Logs
        rect10.setPosition(objectPos9.x + 35, objectPos9.y + 70);
        rect10.setSize(size10);
        rect10.setFillColor(sf::Color::Transparent);
        rect10.setOutlineColor(sf::Color::Red);
        rect10.setOutlineThickness(5);
        
        rect11.setPosition(objectPos10.x + 35, objectPos10.y + 70);
        rect11.setSize(size11);
        rect11.setFillColor(sf::Color::Transparent);
        rect11.setOutlineColor(sf::Color::Red);
        rect11.setOutlineThickness(5);
        // River
        rect12.setPosition(0, 0);
        rect12.setSize(size12);
        rect12.setFillColor(sf::Color::Transparent);
        rect12.setOutlineColor(sf::Color::Red);
        rect12.setOutlineThickness(5);
        
        // Lilypads
        rect13.setPosition(objectPos11.x + 30, objectPos11.y+40);
        rect13.setSize(size13);
        rect13.setFillColor(sf::Color::Transparent);
        rect13.setOutlineColor(sf::Color::Red);
        rect13.setOutlineThickness(5);
        
        rect14.setPosition(objectPos12.x + 30 , objectPos12.y+40);
        rect14.setSize(size14);
        rect14.setFillColor(sf::Color::Transparent);
        rect14.setOutlineColor(sf::Color::Red);
        rect14.setOutlineThickness(5);
        
        rect15.setPosition(objectPos13.x + 30, objectPos13.y+40);
        rect15.setSize(size15);
        rect15.setFillColor(sf::Color::Transparent);
        rect15.setOutlineColor(sf::Color::Red);
        rect15.setOutlineThickness(5);
        
        rect16.setPosition(objectPos14.x + 30 , objectPos14.y+40);
        rect16.setSize(size16);
        rect16.setFillColor(sf::Color::Transparent);
        rect16.setOutlineColor(sf::Color::Red);
        rect16.setOutlineThickness(5);
        
        rect17.setPosition(objectPos15.x + 30 , objectPos15.y+40);
        rect17.setSize(size17);
        rect17.setFillColor(sf::Color::Transparent);
        rect17.setOutlineColor(sf::Color::Red);
        rect17.setOutlineThickness(5);
        
        // *********************************************************************
        // Frogger Hit Truck 1
        // *********************************************************************
        if (rect.getGlobalBounds().intersects(rect2.getGlobalBounds()))
            
        {
            
            froggerTheme.pause();
            trucked.play();
            
            lives = mainPlayer.getNumLives();
            mainPlayer.setNumLives(lives - 1);
            mainPlayer.setIsHit(true);
            rectSource.width -= 38.3;
            life.setTextureRect(rectSource);
         
            froggerTheme.play();
            //death.setPosition(-100,-100);
        }
        // *********************************************************************
        // Frogger Hit Truck 2
        // *********************************************************************
        if (rect.getGlobalBounds().intersects(rect3.getGlobalBounds()))
        {
            froggerTheme.pause();
            trucked.play();
            
            lives = mainPlayer.getNumLives();
            mainPlayer.setNumLives(lives - 1);
            mainPlayer.setIsHit(true);
            rectSource.width -= 38.3;
            life.setTextureRect(rectSource);
            
            sf::Vector2f pos = frogger.getPosition();
            death.setPosition(pos);
            
            froggerTheme.play();
            death.setPosition(-100,-100);
            
        }
        // *********************************************************************
        // Frogger Hit Car 1
        // *********************************************************************
        if (rect.getGlobalBounds().intersects(rect4.getGlobalBounds()))
        {
            froggerTheme.pause();
            trucked.play();
            
            lives = mainPlayer.getNumLives();
            mainPlayer.setNumLives(lives - 1);
            mainPlayer.setIsHit(true);
            rectSource.width -= 38.3;
            life.setTextureRect(rectSource);
            
            sf::Vector2f pos = frogger.getPosition();
            death.setPosition(pos);
            
            froggerTheme.play();
            death.setPosition(-100,-100);
            
        }
        // *********************************************************************
        // Frogger Hit Car 2
        // *********************************************************************
        if (rect.getGlobalBounds().intersects(rect5.getGlobalBounds()))
        {
            froggerTheme.pause();
            trucked.play();
            
            lives = mainPlayer.getNumLives();
            mainPlayer.setNumLives(lives - 1);
            mainPlayer.setIsHit(true);
            rectSource.width -= 38.3;
            life.setTextureRect(rectSource);
            
            sf::Vector2f pos = frogger.getPosition();
            death.setPosition(pos);
            
            froggerTheme.play();
            death.setPosition(-100,-100);
            
        }
        // *********************************************************************
        // Frogger Hit Car 3
        // *********************************************************************
        if (rect.getGlobalBounds().intersects(rect6.getGlobalBounds()))
        {
            froggerTheme.pause();
            trucked.play();
            
            lives = mainPlayer.getNumLives();
            mainPlayer.setNumLives(lives - 1);
            mainPlayer.setIsHit(true);
            rectSource.width -= 38.3;
            life.setTextureRect(rectSource);
            
            sf::Vector2f pos = frogger.getPosition();
            death.setPosition(pos);
            
            froggerTheme.play();
            death.setPosition(-100,-100);
            
        }
        
        // *********************************************************************
        // Below this line will be log collision checking
        // *********************************************************************
        if (rect.getGlobalBounds().intersects(rect7.getGlobalBounds()))
        {
            frogger.setPosition(objectPos6.x + 45 + sum2 , objectPos6.y + 80 + sum);
            isOnLog = true;
        }
        else
        {
            isOnLog = false;
            sum = 0;
            sum2 = 0;
        }
        
        if (rect.getGlobalBounds().intersects(rect8.getGlobalBounds()))
        {
            
            frogger.setPosition(objectPos7.x + 45 + sum4, objectPos7.y + 80 + sum3);
            isOnLog2 = true;
        }
        else
        {
            isOnLog2 = false;
            sum3 = 0;
            sum4 = 0;
        }
        if (rect.getGlobalBounds().intersects(rect9.getGlobalBounds()))
        {
            frogger.setPosition(objectPos8.x + 45+sum6, objectPos8.y + 80+sum5);
            isOnLog3 = true;
        }
        else
        {
            isOnLog3 = false;
            sum5 = 0;
            sum6 = 0;
            
        }
        if (rect.getGlobalBounds().intersects(rect10.getGlobalBounds()))
        {
            frogger.setPosition(objectPos9.x + 45 + sum8, objectPos9.y + 70+ sum7);
            isOnLog4 = true;
            
        }
        else
        {
            isOnLog4 = false;
            sum7 = 0;
            sum8 = 0;
        }
        if (rect.getGlobalBounds().intersects(rect11.getGlobalBounds()))
        {
            frogger.setPosition(objectPos10.x + 45+ sum10, objectPos10.y + 70+sum9);
            isOnLog5 = true;
        }
        else
        {
            isOnLog5 = false;
            sum9 = 0;
            sum10 = 0;
        }
        
        // *********************************************************************
        // Below this line will be lily collision checking
        // *********************************************************************
        if (rect.getGlobalBounds().intersects(rect13.getGlobalBounds()))
        {
            isOnLily = true;
            if (frogOnLily1 == false)
            {
                score += 50;
            }
            frogOnLily1 = true;
            sf::Vector2f lilyPos = rect13.getPosition();
            occupied1.setPosition(lilyPos);
            
        }
        if (rect.getGlobalBounds().intersects(rect14.getGlobalBounds()))
        {
            isOnLily = true;
            if (frogOnLily2 == false)
            {
                score += 50;
            }
            frogOnLily2 = true;
            sf::Vector2f lilyPos = rect14.getPosition();
            occupied2.setPosition(lilyPos);
        }
        if (rect.getGlobalBounds().intersects(rect15.getGlobalBounds()))
        {
            isOnLily = true;
            if (frogOnLily3 == false)
            {
                score += 50;
            }
            frogOnLily3 = true;
            sf::Vector2f lilyPos = rect15.getPosition();
            occupied3.setPosition(lilyPos);
            
        }
        if (rect.getGlobalBounds().intersects(rect16.getGlobalBounds()))
        {
            isOnLily = true;
            if (frogOnLily4 == false)
            {
                score += 50;
            }
            frogOnLily4 = true;
            sf::Vector2f lilyPos = rect16.getPosition();
            occupied4.setPosition(lilyPos);
        }
        if (rect.getGlobalBounds().intersects(rect17.getGlobalBounds()))
        {
            isOnLily = true;
            if (frogOnLily5 == false)
            {
                score += 50;
            }
            frogOnLily5 = true;
            sf::Vector2f lilyPos = rect17.getPosition();
            occupied5.setPosition(lilyPos);
        }
        
        // *********************************************************************
        // Checks if frogger is on log AND goes outside screen boundaries
        //  if so frogger dies
        // *********************************************************************
        sf::Vector2f location = frogger.getPosition();
        // Checks if frogger went out of bounds
        if (rect.getGlobalBounds().intersects(rect12.getGlobalBounds()))
        {
            if ((isOnLog || isOnLog2 || isOnLog3 || isOnLog4 || isOnLog5) && (location.x >= 740 || location.x < -40))
            {
                mainPlayer.setIsHit(true);
                lives = mainPlayer.getNumLives();
                mainPlayer.setNumLives(lives - 1);
                rectSource.width -= 38.3;
                life.setTextureRect(rectSource);
                
            }
        }
        // Checks if frogger is on the logs not the water
        if (rect.getGlobalBounds().intersects(rect12.getGlobalBounds()))
        {
            if (isOnLog || isOnLog2 || isOnLog3 || isOnLog4 || isOnLog5)
            {
                //this frogger is on the logs not the water
            }
            else
            {
                froggerTheme.pause();
                dunked.play();
                froggerTheme.play();
                mainPlayer.setIsHit(true);
                lives = mainPlayer.getNumLives();
                mainPlayer.setNumLives(lives - 1);
                rectSource.width -= 38.3;
                life.setTextureRect(rectSource);
            }
            
        }
        // Checks if the frog has landed on a lilypad
        if (isOnLily || isOnLily2 || isOnLily3 || isOnLily4 || isOnLily5)
        {
            // the frog has landed on the lily pad
            froggerLanded = true;
        }
        // *********************************************************************
        // Checks if the frog has landed on all 5 lilypads if so you win
        // *********************************************************************
        if (frogOnLily1 && frogOnLily2 && frogOnLily3 && frogOnLily4 && frogOnLily5)
        {
            score += 10000;
            
            frogOnLily1 = false;
            frogOnLily2 = false;
            frogOnLily3 = false;
            frogOnLily4 = false;
            frogOnLily5 = false;
            
            mainPlayer.setNumLives(3);
            rectSource.width = 115;
            life.setTextureRect(rectSource);
            occupied1.setPosition(-100, -100);
            occupied2.setPosition(-100, -100);
            occupied3.setPosition(-100, -100);
            occupied4.setPosition(-100, -100);
            occupied5.setPosition(-100, -100);
            froggerTheme.pause();
            clock.restart();
            timeRect.width = 143;
            timer.setTextureRect(timeRect);
            frogger.setPosition(320, 605);
            
            return 2;
        }
        while (App.pollEvent(Event))
        {
            // Window closed
            if (Event.type == sf::Event::Closed)
            {
                return (-1);
            }
            // *********************************************************************
            // LEFT
            // *********************************************************************
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            {
                
                if (isOnLog)
                {
                    sum2 = (sum2 + (20 * -1));
                }
                if (isOnLog2)
                {
                    sum4 = (sum4 + (20 * -1));
                }
                if (isOnLog3)
                {
                    sum6 = (sum6 + (20 * -1));
                }
                if (isOnLog4)
                {
                    sum8 = (sum8 + (20 * -1));
                }
                if (isOnLog5)
                {
                    sum10 = (sum10 + (20 * -1));
                }
                
                
                sf::Vector2f pos = frogger.getPosition();
                
                
                if (pos.x < 0)
                {
                    frogger.move(0, 0);
                }
                else
                {
                    if (rectSourceSprite.left != 216)
                    {
                        rectSourceSprite.left = 216;
                        rectSourceSprite.width = 55;
                        frogger.setTextureRect(rectSourceSprite);
                    }
                    score += 10;
                    froggerTheme.setVolume(0);
                    hop.play();
                    frogger.move(-40, 0);
                    froggerTheme.setVolume(50);
                    
                }
            }
            // *********************************************************************
            // RIGHT
            // *********************************************************************
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            {
                if (isOnLog)
                {
                    sum2 = (sum2 + (20));
                }
                if (isOnLog2)
                {
                    sum4 = (sum4 + (20));
                }
                if (isOnLog3)
                {
                    sum6 = (sum6 + (20));
                }
                if (isOnLog4)
                {
                    sum8 = (sum8 + (20));
                }
                if (isOnLog5)
                {
                    sum10 = (sum10 + (20));
                }
                
                sf::Vector2f pos = frogger.getPosition();
                
                if (pos.x >= 640)
                {
                    frogger.move(0, 0);
                }
                else
                {
                    if (rectSourceSprite.left != 89)
                    {
                        rectSourceSprite.left = 89;
                        rectSourceSprite.width = 60;
                        frogger.setTextureRect(rectSourceSprite);
                    }
                    score += 10;
                    froggerTheme.setVolume(0);
                    hop.play();
                    frogger.move(40, 0);
                    froggerTheme.setVolume(50);
                }
            }
            // *********************************************************************
            // UP
            // *********************************************************************
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            {
                
                
                if (isOnLog)
                {
                    sum = (sum + (20 * -1));
                }
                
                if (isOnLog2)
                {
                    sum3 = (sum3 + (20 * -1));
                }
                if (isOnLog3)
                {
                    sum5 = (sum5 + (20 * -1));
                }
                if (isOnLog4)
                {
                    sum7 = (sum7 + (20 * -1));
                }
                if (isOnLog5)
                {
                    sum9 = (sum9 + (20 * -1));
                }
                
                
                if (pos.y <= -35)
                {
                    frogger.move(0, 0);
                }
                else
                {
                    if (rectSourceSprite.left != 0)
                    {
                        rectSourceSprite.left = 0;
                        rectSourceSprite.width = 89;
                        frogger.setTextureRect(rectSourceSprite);
                    }
                    score += 10;
                    froggerTheme.setVolume(0);
                    hop.play();
                    frogger.move(0, -40);
                    froggerTheme.setVolume(50);
                }
            }
            // *********************************************************************
            // DOWN
            // *********************************************************************
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            {
                
                
                if (isOnLog)
                {
                    sum = (sum + 20);
                }
                
                if (isOnLog2)
                {
                    sum3 = (sum3 + 20);
                }
                if (isOnLog3)
                {
                    sum5 = (sum5 + 20);
                }
                
                if (isOnLog4)
                {
                    sum7 = (sum7 + 20);
                }
                if (isOnLog5)
                {
                    sum9 = (sum9 + 20);
                }
                sf::Vector2f pos = frogger.getPosition();
                if (pos.y >= 650)
                {
                    frogger.move(0, 0);
                }
                else
                {
                    if (rectSourceSprite.left != 149)
                    {
                        rectSourceSprite.left = 149;
                        rectSourceSprite.width = 67;
                        frogger.setTextureRect(rectSourceSprite);
                    }
                    score += 10;
                    froggerTheme.setVolume(0);
                    hop.play();
                    frogger.move(0, 40);
                    froggerTheme.setVolume(50);
                }
            }
        }
        
        // *********************************************************************
        // Checks if player has been hit
        // *********************************************************************
        if (mainPlayer.getIsHit() == true)
        {
            cout << " Number of lives" << mainPlayer.getNumLives() << endl;
            mainPlayer.setIsHit(false);
            rectSourceSprite.left = 0;
            rectSourceSprite.width = 89;
            frogger.setTextureRect(rectSourceSprite);
            frogger.setPosition(320, 605);
        }
        // *********************************************************************
        // Checks if player landed on lily
        // *********************************************************************
        if (froggerLanded == true)
        {
            froggerLanded = false;
            rectSourceSprite.left = 0;
            rectSourceSprite.width = 89;
            frogger.setTextureRect(rectSourceSprite);
            frogger.setPosition(320, 605);
            isOnLily = false;
            isOnLily2 = false;
            isOnLily3 = false;
            isOnLily4 = false;
            isOnLily5 = false;
        }
        // *********************************************************************
        // Checks if player has run out of lives
        // *********************************************************************
        if (mainPlayer.getNumLives() < 1)
        {
            frogOnLily1 = false;
            frogOnLily2 = false;
            frogOnLily3 = false;
            frogOnLily4 = false;
            frogOnLily5 = false;
            mainPlayer.setNumLives(3);
            rectSource.width = 115;
            life.setTextureRect(rectSource);
            occupied1.setPosition(-100, -100);
            occupied2.setPosition(-100, -100);
            occupied3.setPosition(-100, -100);
            occupied4.setPosition(-100, -100);
            occupied5.setPosition(-100, -100);
            froggerTheme.pause();
            clock.restart();
            timeRect.width = 143;
            timer.setTextureRect(timeRect);
            frogger.setPosition(320, 605);
            
            return 2;
            
        }
        
        App.clear(sf::Color(0, 0, 0, 0));
        //Drawing
        App.draw(background);
        App.draw(car2);
        App.draw(car3);
        App.draw(truck2);
        App.draw(truck);
        App.draw(car);
        App.draw(longLog);
        App.draw(longLog2);
        App.draw(shortLog);
        App.draw(shortLog2);
        App.draw(shortLog3);
        App.draw(lillypad);
        App.draw(lillypad2);
        App.draw(lillypad3);
        App.draw(lillypad4);
        App.draw(lillypad5);
        App.draw(life);
        App.draw(timer);
        App.draw(frogger);
        App.draw(occupied1);
        App.draw(occupied2);
        App.draw(occupied3);
        App.draw(occupied4);
        App.draw(occupied5);

        // *********************************************************************
        // The following are for testing purposes only
        // Draws the boundary box
        // *********************************************************************
        App.draw(rect);
        App.draw(rect2);
        App.draw(rect3);
        App.draw(rect4);
        App.draw(rect5);
        App.draw(rect6);
        App.draw(rect7);
        App.draw(rect8);
        App.draw(rect9);
        App.draw(rect10);
        App.draw(rect11);
        App.draw(rect12);
        App.draw(rect13);
        App.draw(rect14);
        App.draw(rect15);
        App.draw(rect16);
        App.draw(rect17);
        
        App.display();
    }
    
    //Never reaching this point normally, but just in case, exit the application
    return -1;
}
Beispiel #7
0
int main(void)
{
    // Update Überprüfung
    stringstream updateVerfuegbarText;
    updateVerfuegbarText << "Robber " << ROBBER_VERSION;

    if(newVersionAvailable())
    {
        // Neue Version verfügbar!
        cout << endl << "! Es steht eine Aktualisierung des Spiels zum Herunterladen bereit !" << endl << endl;
        updateVerfuegbarText << " (Update verfuegbar: " << LATEST_VERSION << " )";
    }
    else
    {
        // Keine neue Version verfügbar
        cout << endl << "Das Spiel läuft in der aktuellsten Version!" << endl << endl;
    }


    // Fenster- und Grafikeinstellungen
    sf::VideoMode aufloesung = sf::VideoMode::getDesktopMode();


    // Musik loopen!
    musik.setLoop(true);

// Fenster erstellen
#ifndef LINUX
    // Nur Windows

    sf::RenderWindow fenster(aufloesung, "Robber", sf::Style::None);

#else
    // Nur Linux

    sf::RenderWindow  fenster(aufloesung, "Robber", sf::Style::Fullscreen);

#endif

    // Fensterreferenz erstellen!
    globalFenster = &fenster;

    // Maximal 50 FPS
    fenster.setFramerateLimit(50);

    // vsync!
    fenster.setVerticalSyncEnabled(true);

    // Cursor off!
    fenster.setMouseCursorVisible(false);

    // SFML View erstellen!
    sf::View ansicht(sf::FloatRect(0,0, aufloesung.width, aufloesung.height));


    // Anzeigebereich festlegen
    ansicht.setViewport(sf::FloatRect(0,0, 1, 1));
    fenster.setView(ansicht);

    // AnimationList vorbereiten
    list<animation *> animationList;

    // Renderlist vorbereiten
    list<sf::Drawable *> renderList;

    // Hintergrundbild
    sf::Texture* hintergrundTextur = 0x0;
    sf::Sprite* hintergrund = 0x0;

    // Globale Schriftart laden!
    standardSchriftart.loadFromFile("resources/DejaVuSans.ttf");

    // Hauptmenü laden!
    aktuellesLevel = levelLaden("hauptmenu");
    aktuellesLevel->loadToScreen(hintergrundTextur, hintergrund, renderList, animationList);

    // Version im Spiel anzeigen!
    benachrichtigung version(updateVerfuegbarText.str(), 25, 25, 20);
    renderList.push_back((sf::Drawable *)&version.text);

    // DebugMsg anzeigen!
    renderList.push_back((sf::Drawable *)&debugMsg.text);

    // DebugMsg2 anzeigen!
    renderList.push_back((sf::Drawable *)&debugMsg2.text);



    // Benachrichtigung für Zeit erstellen
    benachrichtigung zeit("Zeit", 25, 150, 20);

    // Zeit nur anzeigen, wenn man nicht im Hauptmenü und nicht "Game Over" ist
    if(aktuellesLevel->name != "hauptmenu" && aktuellesLevel->name != "gameOver")
    {
        renderList.push_back((sf::Drawable *)&zeit.text);
    }


    // Benachrichtigung für Punkte erstellen
    benachrichtigung anzahlPunkte("0 Punkte", 25, 125, 20);
    if(aktuellesLevel->name != "hauptmenu" && aktuellesLevel->name != "gameOver")
    {
        renderList.push_back((sf::Drawable *)&anzahlPunkte.text);
    }


    // Entwicklernachricht anzeigen
    debugMsg.updateText("Game running in Debug Mode!");


    // Benachrichtigung für Lärm erstellen
    benachrichtigung schall("Lärm", 25, 175, 20);
    if(aktuellesLevel->name != "hauptmenu" && aktuellesLevel->name != "gameOver")
    {
        renderList.push_back((sf::Drawable *)&schall.text);
    }


    // Konsole erstellen!
    console::eingabeFeld.setFont(standardSchriftart);
    console::eingabeFeld.setColor(sf::Color::Red);
    console::eingabeFeld.setCharacterSize(20);

    // Konsole anzeigen lassen!
    renderList.push_back((sf::Drawable *)&console::eingabeFeld);


    // Spielertextur laden!
    sf::Texture spielerTexture;
    sf::Sprite spieler;
    spielerTexture.loadFromFile("resources/spieler.png");

    // Spielertextur zuordnen
    spieler.setTexture(spielerTexture);

    // Textur auf 1/4 Fläche verkleinern
    spieler.setScale(0.5, 0.5);

    // Mitt des Spielers für sämtliche Rotationen (Rotation, Translation)
    spieler.setOrigin(sf::Vector2f(50, 50));

    // Spieler auf Startposition setzen
    spieler.setPosition(aktuellesLevel->spielerPosition);

    // Spieler immer anzeigen!
    renderList.push_back(&spieler);

    // Dunkles Fenster um den Spieler (für dunkle Levels)
    sf::Texture dunkelTextur;
    sf::Sprite dunkel;
    dunkelTextur.loadFromFile("resources/Dunkel.png");

    // Dunkeltextur zuordnen
    dunkel.setTexture(dunkelTextur);

    // Zentrum der Dunkelheit ist auf dem Spieler
    dunkel.setOrigin(960*2, 540*2);

    // Dunkelheit mitverschieben
    dunkel.setPosition(spieler.getPosition());


    // Schallpegel: Am Anfang = 0
    float schallPegel = 0;

    // Standardposition (ist nicht wichtig)
    sf::Vector2i schallPosition(25, 25);
    int sX =  fenster.mapPixelToCoords(schallPosition).x;
    int sY =  fenster.mapPixelToCoords(schallPosition).y;

    // Animation für Schallmesser erstellen
    animation schallAnimation("resources/schall", 11, false, false, true, 1, sX, sY);

    // Mitte des Bildes ist Zentrum
    schallAnimation.sprite.setOrigin(75,75);

    // Animation wird hizugefügt: Muss nicht wiederholt werden.
    animationList.push_back(&schallAnimation);

    // Zoombegrenzung
    int zoomLevel = 0;

    // Input delay
    sf::Clock verzoegerung;

    // Musik
    string vorherigesLevel = "hauptmenu";
    hintergrundMusik("hauptmenu");

    // rand initialisieren (Zufallsseed aus der Zeit lesen)
    srand(time(0x0));

    sf::Sound schritt;
    sf::SoundBuffer schrittbuffer;
    schrittbuffer.loadFromFile("resources/sound/Schritte.wav");
    schritt.setBuffer(schrittbuffer);
    schritt.play();
    schritt.setLoop(true);

    // Solange das Fenster geöffnet ist:
    while(fenster.isOpen())
    {
        // Hat sich das Level geändert?
        if(aktuellesLevel->name != vorherigesLevel)
        {
            // Je nach Level entsprechende Musik abspielen
            if(aktuellesLevel->name == "hauptmenu")
            {
                hintergrundMusik("hauptmenu");
                musik.setVolume(50);
            }

            else if(aktuellesLevel->name == "gameOver")
            {
                hintergrundMusik("gameover");
                musik.setVolume(50);
            }

            else
            {
                // Wenn weder Menü noch Gameover -> main Musik
                hintergrundMusik("main");
                musik.setVolume(100);
            }

            // Zum Überprüfen nächstes Mal
            vorherigesLevel = aktuellesLevel->name;
        }


        // Eingabeüberprüfung!
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
        {
            // Bei Escape Hauptmenü laden
            // Gespeicherte Levels zurücksetzen
            for(auto l: levelListe)
            {
                cout << "Level '" << l.first << "' aus Speicher entfernt\n";
                delete l.second;
            }
            cout << "Alle " << levelListe.size() << " Level entfernt\n";
            levelListe.clear();


            // Punkte zurücksetzen
            spiel.punkte = 0;
            aktuellesLevel = levelLaden("hauptmenu");
            aktuellesLevel->loadToScreen(hintergrundTextur, hintergrund, renderList, animationList);


            // Spieler in die hauptmenu Level positionieren
            spieler.setPosition(520, 375);

            // Den Spieler wieder anzeigen
            renderList.push_back(&spieler);
            renderList.push_back((sf::Drawable *)&version.text);
            renderList.push_back((sf::Drawable *)&debugMsg.text);
            renderList.push_back((sf::Drawable *)&debugMsg2.text);
            renderList.push_back((sf::Drawable *)&console::eingabeFeld);
        }

        // Kollisionsdetektion
        sf::FloatRect spielerEcken = spieler.getGlobalBounds();

        // Zoom erneut auf 1 setzen
        float zoom = 1.0f;

        // Input loop

        // Nur wenn Konsole nicht aktiviert!
        if(!console::activated)
        {
            if(aktuellesLevel->name != "gameOver")
            {
                //rennen: doppelt so schnell, dafür aber laut
                int s;
                if(sf::Keyboard::isKeyPressed(sf::Keyboard::LShift))
                {
                    s = 10;
                }
                else
                {
                    s = 5;
                }

                // Nur in eine Richtung auf einmal!
                // Nach vorne
                if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
                {
                    // Zuerst Kollision überprüfen!
                    spielerEcken.top -= s;

                    if(s == 10 && aktuellesLevel->dunkel)
                        schallPegel += 0.05;// schallpegel wird höher beim rennen

                    if(aktuellesLevel->checkCollision(spielerEcken))
                    {
                        // Nicht bewegen!
                        spielerEcken.top += s;
                    }
                    else
                    {
                        // Bewegen!
                        spieler.setRotation(0);
                        spieler.move(0, -s);
                    }

                }

                else
                    // Nach links
                    if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
                    {
                        spielerEcken.left-=s;

                        if(s == 10 && aktuellesLevel->dunkel)
                        schallPegel += 0.05;// schallpegel wird höher beim rennen

                        if(aktuellesLevel->checkCollision(spielerEcken))
                        {
                            spielerEcken.left +=s;
                        }
                        else
                        {
                            spieler.setRotation(270);
                            spieler.move(-s, 0);
                        }
                    }
                    // Nach hinten
                    else if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
                        {
                            // Zuerst Kollision überprüfen!
                            spielerEcken.top += s;

                            if(s == 10 && aktuellesLevel->dunkel)
                            schallPegel += 0.05;// schallpegel wird höher beim rennen

                            if(aktuellesLevel->checkCollision(spielerEcken))
                            {
                                // Nicht bewegen!
                                spielerEcken.top -= s;
                            }
                            else
                            {
                                // Bewegen!
                                spieler.setRotation(180);
                                spieler.move(0, s);
                            }

                        }

                        else
                            // Nach rechts
                            if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                            {
                                spielerEcken.width +=s;

                                if(s == 10 && aktuellesLevel->dunkel)
                                schallPegel += 0.05;// schallpegel wird höher beim rennen

                                if(aktuellesLevel->checkCollision(spielerEcken))
                                {
                                    spielerEcken.width -=s;
                                }
                                else
                                {
                                    spieler.setRotation(90);
                                    spieler.move(s, 0);
                                }

                            }



                // Kollision überprüfen
                if(aktuellesLevel->checkCollision(spielerEcken))
                {
                    spieler.move(5, 5);
                }


                // Reinzoomen (Begrenzung beachten)
                if(sf::Keyboard::isKeyPressed(sf::Keyboard::Num0))
                {
                    if(zoomLevel > -10)
                    {
                        zoom -= 0.05;
                        zoomLevel--;
                        ansicht.zoom(zoom);
                    }
                }


                // Rauszoomen (Begrenzung beachten)
                if(sf::Keyboard::isKeyPressed(sf::Keyboard::Num9))
                {
                    if(zoomLevel < 10)
                    {
                        zoom += 0.05;
                        zoomLevel++;
                        ansicht.zoom(zoom);
                    }
                }

                // Dunk8les Overlay wandert mit dem Spieler mit
                dunkel.setPosition(spieler.getPosition());
            }

            float minAbstand=10000;
            for(int i=0; i < aktuellesLevel->gegenspielers.size(); i++)
            {
                float abstand = aktuellesLevel->gegenspielers[i]->schrittAbstand(spielerEcken);
                if(abstand < minAbstand)
                {
                    minAbstand = abstand;
                }
            }
            if(minAbstand < 400)
            {
                float vol = 100 - minAbstand/4;
                if(vol < 0)
                    vol = 0;
                else if(vol > 100)
                    vol = 100;

                schritt.setVolume(100 - minAbstand/4);
            }




            // "Spiel beenden"-Feld möglich machen
            if(aktuellesLevel->name == "hauptmenu")
            {
                sf::FloatRect spielEnde;
                spielEnde = sf::FloatRect(50, 400, 370, 60);

                // Beim Überschneiden -> Fenster schliessen, Schleife wird verlassen, Spiel beendet
                if(spielEnde.intersects(spielerEcken))
                {
                    fenster.close();
                }
            }



            // Auf Pfeile achten: -> Wenn ja, wohin Teleportieren?
            int pfeilNummer = aktuellesLevel->checkCollisionPfeile(spielerEcken);

            // Wenn mit Pfeil geschnitten
            if(pfeilNummer != -1)
            {
                if(aktuellesLevel->pfeile[pfeilNummer]->farbe != 0 || (aktuellesLevel->pfeile[pfeilNummer]->farbe == 0 && spiel.gewonnen == true))
                {
                    // Lese x/y Koordinaten heraus, bevor sie verworfen werden!
                    float spielerX = aktuellesLevel->pfeile[pfeilNummer]->nX;
                    float spielerY = aktuellesLevel->pfeile[pfeilNummer]->nY;

                    // Neues Level laden
                    aktuellesLevel = levelLaden(aktuellesLevel->pfeile[pfeilNummer]->nLevel); // neuer Level wird durch den jeweiligen Pfeil bestummen

                    // Neues Level anzeigen
                    aktuellesLevel->loadToScreen(hintergrundTextur, hintergrund, renderList, animationList);

                    // Spieler an die dem i-ten Pfeil zugehörigen Position im neuen Level positionieren
                    spieler.setPosition(spielerX, spielerY);

                    // Wenn das Level dunkel ist
                    if(aktuellesLevel->dunkel)
                    {
                        if(aktuellesLevel->Wert == 1)
                            dunkelTextur.loadFromFile("resources/DunkelDecke.png");
                        else
                            dunkelTextur.loadFromFile("resources/Dunkel.png");
                        renderList.push_back(&dunkel);
                        renderList.push_back(&schallAnimation.sprite);
                        schallPegel = 0; // zurücksetzen
                    }

                    // Spieler und Benachrichtigungen wieder anzeigen
                    renderList.push_back(&spieler);
                    renderList.push_back((sf::Drawable *)&zeit.text);
                    renderList.push_back((sf::Drawable *)&anzahlPunkte.text);
                    renderList.push_back((sf::Drawable *)&version.text);
                    renderList.push_back((sf::Drawable *)&debugMsg.text);
                    renderList.push_back((sf::Drawable *)&debugMsg2.text);
                    renderList.push_back((sf::Drawable *)&console::eingabeFeld);

                    // Zeit für das Level zurücksetzen
                    Uhr.restart();

                }
            }

            // Schätze einsammeln
            if(sf::Keyboard::isKeyPressed(sf::Keyboard::E) && verzoegerung.getElapsedTime().asSeconds() > 0.2)
            {
                int schaetzeNummer = aktuellesLevel->checkCollisionSchaetze(spielerEcken);
                if(schaetzeNummer != -1 && aktuellesLevel->schaetze[schaetzeNummer]->s->istBeendet() && !aktuellesLevel->schaetze[schaetzeNummer]->eingesammelt)
                {
                    renderList.remove(&aktuellesLevel->schaetze[schaetzeNummer]->s->sprite);
                    aktuellesLevel->schaetze[schaetzeNummer]->eingesammelt = true;
                    spiel.punkteHinzufuegen(10);
                }

                // Türe in der Nähe finden!
                int tuereNummer = aktuellesLevel->checkCollisionTuere(spielerEcken);

                // Türe nur öffnen wenn die, die in der Nähe ist, nicht gerade am Öffnen ist
                if(tuereNummer != -1 && aktuellesLevel->tueren[tuereNummer]->t->istBeendet())
                {
                    // Wenn tuere aufgeht ist es laut
                    schallPegel += 1;

                    float Ux = aktuellesLevel->tueren[tuereNummer]->posX;
                    float Uy = aktuellesLevel->tueren[tuereNummer]->posY;


                    // Neue Mauernkoordinaten berechnen!

                    // Fall 1: Rotation der Türe: 0°
                    if(aktuellesLevel->tueren[tuereNummer]->t->sprite.getRotation() == 0)
                    {
                        if(aktuellesLevel->tueren[tuereNummer]->offen)//tuere geschlossen -> tuere offen
                        {
                            aktuellesLevel->mauern.remove(sf::FloatRect(Ux-7, Uy-7, 193, 14));
                            aktuellesLevel->mauern.push_back(sf::FloatRect(Ux-7, Uy-186, 14, 193));
                        }
                        else //tuere offen -> türe geschlossen
                        {
                            aktuellesLevel->mauern.remove(sf::FloatRect(Ux-7, Uy-186, 14, 193));
                            aktuellesLevel->mauern.push_back(sf::FloatRect(Ux-7, Uy-7, 193, 14));
                        }
                    }
                    else if((aktuellesLevel->tueren[tuereNummer]->t->sprite.getRotation())-360 == -90)
                    {
                        if(aktuellesLevel->tueren[tuereNummer]->offen)//tuere geschlossen -> tuere offen
                        {
                            aktuellesLevel->mauern.remove(sf::FloatRect(Ux-7, Uy-186, 14, 193));
                            aktuellesLevel->mauern.push_back(sf::FloatRect(Ux-186, Uy-7, 193, 14));
                        }
                        else //tuere offen -> türe geschlossen
                        {
                            aktuellesLevel->mauern.remove(sf::FloatRect(Ux-186, Uy-7, 193, 14));
                            aktuellesLevel->mauern.push_back(sf::FloatRect(Ux-7, Uy-186, 14, 193));
                        }
                    }

                    else if(aktuellesLevel->tueren[tuereNummer]->t->sprite.getRotation()-360 == -180)
                    {
                        if(aktuellesLevel->tueren[tuereNummer]->offen)//tuere geschlossen -> tuere offen
                        {
                            aktuellesLevel->mauern.remove(sf::FloatRect(Ux-186, Uy-7, 193, 14));
                            aktuellesLevel->mauern.push_back(sf::FloatRect(Ux-7, Uy-7, 14, 193));
                        }
                        else //tuere offen -> türe geschlossen
                        {
                            aktuellesLevel->mauern.remove(sf::FloatRect(Ux-7, Uy-7, 14, 193));
                            aktuellesLevel->mauern.push_back(sf::FloatRect(Ux-186, Uy-7, 193, 14));
                        }
                    }

                    else if(aktuellesLevel->tueren[tuereNummer]->t->sprite.getRotation()-360 == -270)
                    {
                        if(aktuellesLevel->tueren[tuereNummer]->offen)//tuere geschlossen -> tuere offen
                        {
                            aktuellesLevel->mauern.remove(sf::FloatRect(Ux-7, Uy-7, 14, 193));
                            aktuellesLevel->mauern.push_back(sf::FloatRect(Ux-7, Uy-7, 193, 14));
                        }
                        else //tuere offen -> türe geschlossen
                        {
                            aktuellesLevel->mauern.remove(sf::FloatRect(Ux-7, Uy-7, 193, 14));
                            aktuellesLevel->mauern.push_back(sf::FloatRect(Ux-7, Uy-7, 14, 193));
                        }
                    }

                    // Animation abspielen

                    aktuellesLevel->tueren[tuereNummer]->t->setRichtung(aktuellesLevel->tueren[tuereNummer]->offen);
                    aktuellesLevel->tueren[tuereNummer]->t->start();
                    aktuellesLevel->tueren[tuereNummer]->offen = !aktuellesLevel->tueren[tuereNummer]->offen;
                }

                // Zeit für Eingabeverzögerung zurücksetzen
                verzoegerung.restart();
            }
        }

        // Wenn die Konsole nocht nicht aktiviert ist -> Aktivieren wenn RShift gedrückt
        if(!console::activated && sf::Keyboard::isKeyPressed(sf::Keyboard::RShift))
        {
            if(!console::activated)
            {
                showConsole();
            }

        }

        // Wenn die Konsole aber aktiviert ist
        if(console::activated && sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
        {
            string befehl = console::eingabeText.str();

            // Debug: Befehl in der Kommandozeile ausgeben
            cout << "Ausfuehren: '" << befehl << "'" << endl;

            // Befehle auslesen
            if(befehl == "9990")
            {
                // 9990 cheat
                debugMsg2.updateText("----- LOL -----");
            }
            else if(befehl == "toggleWalls")
            {
                // Wände umschalten
                aktuellesLevel->collisionsActivated = (!aktuellesLevel->collisionsActivated);
            }
            else if(befehl.find("loadLevel ") == 0)
            {
                // Levelname auslesen
                aktuellesLevel->name = befehl.substr(befehl.find("loadLevel ") + 10);

                // Neues Level laden
                aktuellesLevel = levelLaden(aktuellesLevel->name);

                // Debugnachricht anzeigen
                cerr << "Lade: '" << aktuellesLevel->name << "'" << endl;

                // Level anzeigen
                aktuellesLevel->loadToScreen(hintergrundTextur, hintergrund, renderList, animationList);

                // Neue Spielerposition setzen!
                spieler.setPosition(aktuellesLevel->spielerPosition);


                // Wenn es dunkel ist -> Overlay anzeigen
                if(aktuellesLevel->dunkel)
                {
                    renderList.push_back(&dunkel);
                    renderList.push_back(&schallAnimation.sprite);
                }

                // Spieler und Labels wieder anzeigen!
                renderList.push_back(&spieler);
                renderList.push_back((sf::Drawable *)&zeit.text);
                renderList.push_back((sf::Drawable *)&anzahlPunkte.text);
                renderList.push_back((sf::Drawable *)&version.text);
                renderList.push_back((sf::Drawable *)&debugMsg.text);
                renderList.push_back((sf::Drawable *)&debugMsg2.text);
                renderList.push_back((sf::Drawable *)&console::eingabeFeld);

                // Uhr für Levelzeit neustarten
                Uhr.restart();
                schallPegel = 0;
            }
            else if(befehl == "dunkel")
            {
                if(dunkelBefehl == true)
                    renderList.remove(&dunkel);
                else
                {
                    if(aktuellesLevel->dunkel)
                    {
                        renderList.remove(&dunkel);
                        renderList.remove(&schallAnimation.sprite);
                    }

                    // Spieler und Labels wieder anzeigen!
                    renderList.remove(&spieler);
                    renderList.remove((sf::Drawable *)&zeit.text);
                    renderList.remove((sf::Drawable *)&anzahlPunkte.text);
                    renderList.remove((sf::Drawable *)&version.text);
                    renderList.remove((sf::Drawable *)&debugMsg.text);
                    renderList.remove((sf::Drawable *)&debugMsg2.text);
                    renderList.remove((sf::Drawable *)&console::eingabeFeld);

                    if(aktuellesLevel->dunkel)
                    {
                        renderList.push_back(&dunkel);
                        renderList.push_back(&schallAnimation.sprite);
                    }

                    // Spieler und Labels wieder anzeigen!
                    renderList.push_back(&spieler);
                    renderList.push_back((sf::Drawable *)&zeit.text);
                    renderList.push_back((sf::Drawable *)&anzahlPunkte.text);
                    renderList.push_back((sf::Drawable *)&version.text);
                    renderList.push_back((sf::Drawable *)&debugMsg.text);
                    renderList.push_back((sf::Drawable *)&debugMsg2.text);
                    renderList.push_back((sf::Drawable *)&console::eingabeFeld);
                }
                dunkelBefehl = !dunkelBefehl;
            }
            else if(befehl == "exit")
            {
                fenster.close();
            }

            // Wenn "Enter" gedrückt und Befehl eingelesen -> Konsole zurücksetzen und verstecken
            hideConsole();
        }



        // Event Poll! (Fenster schliessen, etc.)
        sf::Event event;
        while(fenster.pollEvent(event))
        {
            // Schliessen per "Kreuzchen" (x)
            if(event.type == sf::Event::Closed)
            {
                fenster.close();
            }

            else

                if(console::activated && event.type == sf::Event::TextEntered)
                {
                    // Wenn Konsole aktiviert, Eingabe lesen!
                    updateConsole(static_cast<char>(event.text.unicode));
                }
        }

        // Weil es keinen animationsschritt über 10 gibt -> Zurücksetzen
        if(schallPegel > 10)
            schallPegel = 10;

        // Mit static_cast<int>: float -> int
        schallAnimation.zeigeSchritt(static_cast<int>(schallPegel));

        // Ansicht anpassen! (Neu zentrieren)
        ansicht.setCenter(spieler.getPosition());
        fenster.setView(ansicht);

        // "Fixe" Benachrichtigungen neu setzen
        sf::Vector2i versionPosition(25, 25);
        sf::Vector2i debugPosition(25, 50);
        sf::Vector2i debug2Position(25, 75);
        sf::Vector2i consolePosition(25, 100);
        sf::Vector2i zeitPosition(25, 125);
        sf::Vector2i anzahlPunktePosition(25, 150);

        // Koordinatentransformation: Bildschirm -> Fenster
        version.text.setPosition(fenster.mapPixelToCoords(versionPosition));
        debugMsg.text.setPosition(fenster.mapPixelToCoords(debugPosition));
        debugMsg2.text.setPosition(fenster.mapPixelToCoords(debug2Position));
        console::eingabeFeld.setPosition(fenster.mapPixelToCoords(consolePosition));
        zeit.text.setPosition(fenster.mapPixelToCoords(zeitPosition));
        anzahlPunkte.text.setPosition(fenster.mapPixelToCoords(anzahlPunktePosition));

        // Position des Schallmessers auf dem Bildschirm
        sf::Vector2i schallPosition(100, 600);

        // Koordinatentransformation: Bildschirm -> Fenster
        float sX =  fenster.mapPixelToCoords(schallPosition).x;
        float sY =  fenster.mapPixelToCoords(schallPosition).y;

        // Schallmesser setzen
        schallAnimation.sprite.setPosition(sX, sY);


        // Animation Loop
        // = Alle Animationen ausführen, sodass das nächste Bild geladen wird
        for(animation* a : animationList)
        {
            a->animationAusfuehren();
        }


        // SFML: Fenster leeren!
        fenster.clear();

        for(auto object : renderList)
        {
            // Jedes Objekt anzeigen
            fenster.draw(*object);
        }

        // Fensterinhalt anzeigen
        fenster.display();


        // Debugstring aktualisieren
        stringstream debugMsgText;
        debugMsgText << "Spielerposition: " << spieler.getPosition().x << ", " << spieler.getPosition().y;

        debugMsg.updateText(debugMsgText.str());


        // Gegenspieler bewegen
        for(gegenspieler* g : aktuellesLevel->gegenspielers)
        {
            g->bewegen();
        }

        // Punkte aktualisieren
        stringstream anzahlPunkteAnzeige;
        anzahlPunkteAnzeige << "Punkte: " << spiel.punkte;
        anzahlPunkte.updateText(anzahlPunkteAnzeige.str());


        // Gegenspielerkontakt -> GameOver
        for(gegenspieler* g : aktuellesLevel->gegenspielers)
        {
            float dX = abs(g->sprite.getPosition().x - spieler.getPosition().x);
            float dY = abs(g->sprite.getPosition().y - spieler.getPosition().y);

            if(sqrt(dX*dX + dY*dY) < 120)
            {
                // Punkte zurücksetzen
                spiel.punkte = 0;

                cerr << "GAME OVER: GRUND 3" << endl;

                // Neues Level laden und anzeigen
                aktuellesLevel = levelLaden("gameOver"); // Wegen dem geht man GameOver ohne dass etwas passiert ist
                aktuellesLevel->loadToScreen(hintergrundTextur, hintergrund, renderList, animationList);

                // Hintergrund neu positionieren
                hintergrund->setOrigin(0, 0);

                // Spieler in Mitte setzen
                spieler.setPosition(960, 540);

                // Schall zurücksetzen
                schallPegel = 0;

                // Konsole wieder anzeigen, nachdem renderListe geleert wurde
                renderList.push_back((sf::Drawable *)&console::eingabeFeld);
            }
        }


        //Wenn der Pegel im roten Bereich ist, ist nicht sofort gameOver sondern erst nach einer Zufallszeit
        int Zufall = rand() % 200;
        if(schallPegel >= 7 && Zufall == 199)
        {
            // Punkte zurücksetzen
            spiel.punkte = 0;

            cerr << "GAME OVER: GRUND 2" << endl;

            // Neues Level laden und anzeigen
            aktuellesLevel = levelLaden("gameOver"); // Wegen dem geht man GameOver ohne dass etwas passiert ist
            aktuellesLevel->loadToScreen(hintergrundTextur, hintergrund, renderList, animationList);

            // Hintergrund neu positionieren
            hintergrund->setOrigin(0, 0);

            // Spieler in Mitte setzen
            spieler.setPosition(960, 540);

            // Schall zurücksetzen
            schallPegel = 0;

            // Konsole wieder anzeigen, nachdem renderListe geleert wurde
            renderList.push_back((sf::Drawable *)&console::eingabeFeld);
        }

        if(schallPegel > 0)
        {
            //Pegel nimmt mit der Zeit wieder ab
            schallPegel -= 0.005;
        }


        // Zeit aktualisieren
        int verbleibendeZeit;
        if(aktuellesLevel->Zeit.asSeconds() >= 0.5) // t
        {
            verbleibendeZeit = aktuellesLevel->Zeit.asSeconds() - Uhr.getElapsedTime().asSeconds();

            if(aktuellesLevel->checkCollisionLaser(spielerEcken) == true ??!??! verbleibendeZeit < 0)
            {
                spiel.punkte = 0;
                schallPegel = 0;
                cerr << "GAME OVER: GRUND 1" << endl;
                aktuellesLevel = levelLaden("gameOver");
                aktuellesLevel->loadToScreen(hintergrundTextur, hintergrund, renderList, animationList);
                hintergrund->setOrigin(0, 0);
                spieler.setPosition(960, 540);

                //ansicht.setCenter(fenster.mapPixelToCoords(sf::Vector2i(960, 540)));
                renderList.push_back((sf::Drawable *)&console::eingabeFeld);
            }

            stringstream zeitAnzeige;
            zeitAnzeige << "Zeit: " << verbleibendeZeit << " s";
            zeit.updateText(zeitAnzeige.str());
        }
        else
        {
Beispiel #8
0
void ambiance::tick(int madness)
{
	ambMadness = 101-madness;
	ambMaxVolume = 100;

	// SO THE ENGINE BEGINS //

		// IF NOT PLAYING AA ///////////////////////////////////////////////////
		
		if (ALLambAA[ambAARandom].getStatus() == 0)
		{
			// FILE SELECTOR //
			ambAARandom = rand()% ARRAY_SIZE(ambAAFile);
			//ALLambAA[ambAARandom].openFromFile(ambAAFile[ambAARandom]);

			// VOLUME RESET //
			ALLambAA[ambAARandom].setVolume(0);
			ambAAVolume = 0;
			ambAADynamics = 100000;

			// LENGTH //
			ambAALength = rand() % 60 + 40;
			ambAASecCounter = 0;

			// FADE //
			ambAAFadeSpeed = rand()% 2 + 3;
			ambAAFadeOut = false;

			// PITCH //
			ambAAPitch = rand() % 100;
			ambAAPitch = ambAAPitch/200+0.75;
			ALLambAA[ambAARandom].setPitch(ambAAPitch);
				
			// PLAY //
			ALLambAA[ambAARandom].play();
		}

		// IF NOT PLAYING AB /////////////////////////////////////////////////////////

		if (ALLambAB[ambABRandom].getStatus() == 0)
		{
			// FILE SELECTOR //
			ambABRandom = rand()% ARRAY_SIZE(ambABFile);
			//ALLambAB[ambABRandom].openFromFile(ambABFile[ambABRandom]);

			// VOLUME RESET //
			ALLambAB[ambABRandom].setVolume(0);
			ambABVolume = 0;
			ambABDynamics = 100000;

			// LENGTH //
			ambABLength = rand() % 30 + 30;
			ambABSecCounter = 0;

			// FADE //
			ambABFadeSpeed = rand()% 2 + 3;
			ambABFadeOut = false;

			// PITCH //
			ambABPitch = rand() % 100;
			ambABPitch = ambABPitch/200+0.75;
			ALLambAB[ambABRandom].setPitch(ambABPitch);
				
			// PLAY //
			ALLambAB[ambABRandom].play();
		}
		
		// FADE AA ////////////////////////////////////////////////////////////////
		
		// COUNTERS //

		ambAAFrameCounter++;

		if (ambAAFrameCounter>60)
		{
			ambAAFrameCounter = 0;
			ambAASecCounter++;
		}

		// FADE //

		if (ALLambAB[ambABRandom].getStatus() == 2)
		{
			ambAADynamics = 10000*(ambMadness*0.25/100) + 2500;

			// FADE VOLUME UP //

			if (ambAAVolume + ambAAFadeSpeed < ambAADynamics && ambAAFadeOut == false)
			{
				ambAAVolume = ambAAVolume + ambAAFadeSpeed;

				ambAAIntToFloat = ambAAVolume;
				ALLambAA[ambAARandom].setVolume(ambAAIntToFloat/100*(ambMaxVolume/100));
			}

			// FADE VOLUME DOWN //

			else if (ambAAVolume > ambAADynamics && ambAAFadeOut == false)
			{
				ambAAVolume = ambAAVolume - ambAAFadeSpeed*2;

				ambAAIntToFloat = ambAAVolume;
				ALLambAA[ambAARandom].setVolume(ambAAIntToFloat/100*(ambMaxVolume/100));
			}

			// FADE OUT //

			if (ambAASecCounter > ambAALength && ambABFadeOut == false)
			{
				ambAAFadeOut = true;

				if (ambAAVolume > ambAAFadeSpeed)
				{
					ambAAVolume = ambAAVolume - ambAAFadeSpeed;

					ambAAIntToFloat = ambAAVolume;
					ALLambAA[ambAARandom].setVolume(ambAAIntToFloat/100*(ambMaxVolume/100));
				}

				// STOP //

				if (ambAAVolume <= ambAAFadeSpeed*2)
				{
					ambAAVolume = 0;
					ambAAFadeOut = false;
					ALLambAA[ambAARandom].setVolume(0);
					ALLambAA[ambAARandom].stop();
				}
			}
		}

		// FADE AB ////////////////////////////////////////////////////////////////
		
		// COUNTERS //

		ambABFrameCounter++;

		if (ambABFrameCounter>60)
		{
			ambABFrameCounter = 0;
			ambABSecCounter++;
		}

		// FADE //

		if (ALLambAB[ambABRandom].getStatus() == 2)
		{
			ambABDynamics = 10000*(ambMadness*0.4/100) + 1000;

			// FADE VOLUME UP //

			if (ambABVolume + ambABFadeSpeed < ambABDynamics && ambABFadeOut == false)
			{
				ambABVolume = ambABVolume + ambABFadeSpeed;

				ambABIntToFloat = ambABVolume;
				ALLambAB[ambABRandom].setVolume(ambABIntToFloat/100*(ambMaxVolume/100));
			}

			// FADE VOLUME DOWN //

			else if (ambABVolume > ambABDynamics && ambABFadeOut == false)
			{
				ambABVolume = ambABVolume - ambABFadeSpeed*2;

				ambABIntToFloat = ambABVolume;
				ALLambAB[ambABRandom].setVolume(ambABIntToFloat/100*(ambMaxVolume/100));
			}

			// FADE OUT //

			if (ambABSecCounter > ambABLength && ambAAFadeOut == false)
			{
				ambABFadeOut = true;

				if (ambABVolume > ambABFadeSpeed)
				{
					ambABVolume = ambABVolume - ambABFadeSpeed;

					ambABIntToFloat = ambABVolume;
					ALLambAB[ambABRandom].setVolume(ambABIntToFloat/100*(ambMaxVolume/100));
				}

				// STOP //

				if (ambABVolume <= ambABFadeSpeed*2)
				{
					ambABVolume = 0;
					ambABFadeOut = false;
					ALLambAB[ambABRandom].setVolume(0);
					ALLambAB[ambABRandom].stop();
				}
			}
		}

		// IF NOT PLAYING BA /////////////////////////////////////////////////////////
		
		if (ALLambBA[ambBARandom].getStatus() == 0 && ambMadness > ambBATriggerLevel)
		{
			// FILE SELECTOR //
			ambBARandom = rand()% ARRAY_SIZE(ambBAFile);
			//ALLambBA[ambBARandom].openFromFile(ambBAFile[ambBARandom]);

			// RESETS //
			ALLambBA[ambBARandom].setVolume(0);
			ambBAUpDown = 0;
			ambBAOffOn = 0;

			// PLAY //
			ALLambBA[ambBARandom].play();
		}

		// IF NOT PLAYING BB /////////////////////////////////////////////////////////
		
		if (ALLambBB[ambBBRandom].getStatus() == 0 && ambMadness > ambBBTriggerLevel)
		{
			// FILE SELECTOR //
			ambBBRandom = rand()% ARRAY_SIZE(ambBBFile);
			//ALLambBB[ambBBRandom].openFromFile(ambBBFile[ambBBRandom]);

			// RESETS //
			ALLambBB[ambBBRandom].setVolume(0);
			ambBBUpDown = 0;
			ambBBOffOn = 0;

			// PLAY //
			ALLambBB[ambBBRandom].play();
		}

		// IF NOT PLAYING BC /////////////////////////////////////////////////////////
		
		if (ALLambBC[ambBCRandom].getStatus() == 0 && ambMadness > ambBCTriggerLevel)
		{
			// FILE SELECTOR //
			ambBCRandom = rand()% ARRAY_SIZE(ambBCFile);
			//ALLambBC[ambBCRandom].openFromFile(ambBCFile[ambBCRandom]);

			// RESETS //
			ALLambBC[ambBCRandom].setVolume(0);
			ambBCUpDown = 0;
			ambBCOffOn = 0;

			// PLAY //
			ALLambBC[ambBCRandom].play();
		}
		
		// FADE BA ////////////////////////////////////////////////////////////////
		
		if (ALLambBA[ambBARandom].getStatus() == 2)
		{
			// TRIGGER //

			ambBAFrameCounter++;

			if (ambBAOffOn == 0 && ambBAFrameCounter-300 + (ambMadness-ambBATriggerLevel)*7 + rand()% 200 > 500)
			{
				ambBAOffOn = 1;

				ambBAFadeInSpeed = 300 + (ambMadness-ambBATriggerLevel)*5 + rand()% 200;
				ambBAFadeOutSpeed = 20 + (ambMadness-ambBATriggerLevel)/2 + rand()% 30;

				ambBAPitch = rand() % 100;
				ambBAPitch = ambBAPitch/200+0.75;
				ALLambBA[ambBARandom].setPitch(ambBAPitch*(ambMadness/200)+0.5);
			}

			// FADE IN //

			if (ambBAOffOn == 1 && ambBAUpDown == 0)
			{
				ambBAVolume = ambBAVolume + ambBAFadeInSpeed;

				ambBAIntToFloat = ambBAVolume;
				ambBAIntToFloat = ambBAIntToFloat/100;
				ALLambBA[ambBARandom].setVolume(100*(ambBAIntToFloat*ambBAIntToFloat/100*((ambMadness-40)/100)/100)*(ambMaxVolume/100));

				if (ambBAVolume > 10000)
				{
					ambBAUpDown = 1;
				}
			}

			// FADE OUT //

			else if (ambBAUpDown == 1)
			{
				ambBAVolume = ambBAVolume - ambBAFadeOutSpeed;

				ambBAIntToFloat = ambBAVolume;
				ambBAIntToFloat = ambBAIntToFloat/100;
				ALLambBA[ambBARandom].setVolume(100*(ambBAIntToFloat*ambBAIntToFloat/100*((ambMadness-40)/100)/100)*(ambMaxVolume/100));

				if (ambBAVolume <= ambBAFadeOutSpeed*2)
				{
					ambBAUpDown = 0;
					ambBAOffOn = 0;
					ambBAFrameCounter = 0;
					ambBAVolume = 0;
					ambBAIntToFloat = 0;
					ALLambBA[ambBARandom].setVolume(0);
				}
			}

			// STOP //

			if (ambMadness < ambBATriggerLevel && ALLambBA[ambBARandom].getVolume() == 0)
			{
				ambBAUpDown = 0;
				ambBAOffOn = 0;
				ambBAFrameCounter = 0;
				ambBAVolume = 0;
				ambBAIntToFloat = 0;
				ALLambBA[ambBARandom].setVolume(0);
				ALLambBA[ambBARandom].stop();
			}
		}

		// FADE BB ////////////////////////////////////////////////////////////////
		
		if (ALLambBB[ambBBRandom].getStatus() == 2)
		{
			// TRIGGER //

			ambBBFrameCounter++;

			if (ambBBOffOn == 0 && ambBBFrameCounter-200 + (ambMadness-ambBBTriggerLevel)*7 + rand()% 200 > 400)
			{
				ambBBOffOn = 1;

				ambBBFadeInSpeed = 300 + (ambMadness-ambBBTriggerLevel)*5 + rand()% 200;
				ambBBFadeOutSpeed = 20 + (ambMadness-ambBBTriggerLevel)/2 + rand()% 30;

				ambBBPitch = rand() % 100;
				ambBBPitch = ambBBPitch/200+0.75;
				ALLambBB[ambBBRandom].setPitch(ambBBPitch*(ambMadness/200)+0.5);
			}

			// FADE IN //

			if (ambBBOffOn == 1 && ambBBUpDown == 0)
			{
				ambBBVolume = ambBBVolume + ambBBFadeInSpeed;

				ambBBIntToFloat = ambBBVolume;
				ambBBIntToFloat = ambBBIntToFloat/100;
				ALLambBB[ambBBRandom].setVolume(100*(ambBBIntToFloat*ambBBIntToFloat/100*((ambMadness-40)/100)/100)*(ambMaxVolume/100));

				if (ambBBVolume > 10000)
				{
					ambBBUpDown = 1;
				}
			}

			// FADE OUT //

			else if (ambBBUpDown == 1)
			{
				ambBBVolume = ambBBVolume - ambBBFadeOutSpeed;

				ambBBIntToFloat = ambBBVolume;
				ambBBIntToFloat = ambBBIntToFloat/100;
				ALLambBB[ambBBRandom].setVolume(100*(ambBBIntToFloat*ambBBIntToFloat/100*((ambMadness-40)/100)/100)*(ambMaxVolume/100));

				if (ambBBVolume <= ambBBFadeOutSpeed*2)
				{
					ambBBUpDown = 0;
					ambBBOffOn = 0;
					ambBBFrameCounter = 0;
					ambBBVolume = 0;
					ambBBIntToFloat = 0;
					ALLambBB[ambBBRandom].setVolume(0); 
				}
			}

			// STOP //

			if (ambMadness < ambBBTriggerLevel && ALLambBB[ambBBRandom].getVolume() == 0)
			{
				ambBBUpDown = 0;
				ambBBOffOn = 0;
				ambBBFrameCounter = 0;
				ambBBVolume = 0;
				ambBBIntToFloat = 0;
				ALLambBB[ambBBRandom].setVolume(0);
				ALLambBB[ambBBRandom].stop();
			}
		}

		// FADE BC ////////////////////////////////////////////////////////////////
		
		if (ALLambBC[ambBCRandom].getStatus() == 2)
		{
			// TRIGGER //

			ambBCFrameCounter++;

			if (ambBCOffOn == 0 && ambBCFrameCounter-100 + (ambMadness-ambBCTriggerLevel)*7 + rand()% 200 > 300)
			{
				ambBCOffOn = 1;

				ambBCFadeInSpeed = 300 + (ambMadness-ambBCTriggerLevel)*5 + rand()% 200;
				ambBCFadeOutSpeed = 20 + (ambMadness-ambBCTriggerLevel)/2 + rand()% 30;

				ambBCPitch = rand() % 100;
				ambBCPitch = ambBCPitch/200+0.75;
				ALLambBC[ambBCRandom].setPitch(ambBCPitch*(ambMadness/200)+0.5);
			}

			// FADE IN //

			if (ambBCOffOn == 1 && ambBCUpDown == 0)
			{
				ambBCVolume = ambBCVolume + ambBCFadeInSpeed;

				ambBCIntToFloat = ambBCVolume;
				ambBCIntToFloat = ambBCIntToFloat/100;
				ALLambBC[ambBCRandom].setVolume(100*(ambBCIntToFloat*ambBCIntToFloat/100*((ambMadness-40)/100)/100)*(ambMaxVolume/100));

				if (ambBCVolume > 10000)
				{
					ambBCUpDown = 1;
				}
			}

			// FADE OUT //

			else if (ambBCUpDown == 1)
			{
				ambBCVolume = ambBCVolume - ambBCFadeOutSpeed;

				ambBCIntToFloat = ambBCVolume;
				ambBCIntToFloat = ambBCIntToFloat/100;
				ALLambBC[ambBCRandom].setVolume(100*(ambBCIntToFloat*ambBCIntToFloat/100*((ambMadness-40)/100)/100)*(ambMaxVolume/100));

				if (ambBCVolume <= ambBCFadeOutSpeed*2)
				{
					ambBCUpDown = 0;
					ambBCOffOn = 0;
					ambBCFrameCounter = 0;
					ambBCVolume = 0;
					ambBCIntToFloat = 0;
					ALLambBC[ambBCRandom].setVolume(0);
				}
			}

			// STOP //

			if (ambMadness < ambBCTriggerLevel && ALLambBC[ambBCRandom].getVolume() == 0)
			{
				ambBCUpDown = 0;
				ambBCOffOn = 0;
				ambBCFrameCounter = 0;
				ambBCVolume = 0;
				ambBCIntToFloat = 0;
				ALLambBC[ambBCRandom].setVolume(0);
				ALLambBC[ambBCRandom].stop();
			}
		}

		// IF NOT PLAYING CA /////////////////////////////////////////////////////////
		
		if (ambMadness > ambCATriggerLevel && ALLambCA[ambCARandom].getStatus() == 0)
		{
			// FILE SELECTOR //
			ambCARandom = rand()% ARRAY_SIZE(ambCAFile);
			//ALLambCA[ambCARandom].openFromFile(ambCAFile[ambCARandom]);

			// VOLUME RESET //
			ALLambCA[ambCARandom].setVolume(0);

			// PITCH //
			ambCAPitch = rand() % 100;
			ambCAPitch = ambCAPitch/400+0.87;
			ALLambCA[ambCARandom].setPitch(ambCAPitch);
				
			// PLAY //
			ALLambCA[ambCARandom].play();
		}

		// IF NOT PLAYING CB /////////////////////////////////////////////////////////

		if ( ambMadness > ambCBTriggerLevel && ALLambCB[ambCBRandom].getStatus() == 0)
		{
			// FILE SELECTOR //
			ambCBRandom = rand()% ARRAY_SIZE(ambCBFile);
			//ALLambCB[ambCBRandom].openFromFile(ambCBFile[ambCBRandom]);

			// VOLUME RESET //
			ALLambCB[ambCBRandom].setVolume(0);

			// PITCH //
			ambCBPitch = rand() % 100;
			ambCBPitch = ambCBPitch/400+0.87;
			ALLambCB[ambCBRandom].setPitch(ambCBPitch);
				
			// PLAY //
			ALLambCB[ambCBRandom].play();
		}

		// IF NOT PLAYING CC /////////////////////////////////////////////////////////

		if (ambMadness > ambCCTriggerLevel && ALLambCC[ambCCRandom].getStatus() == 0)
		{
			// FILE SELECTOR //
			ambCCRandom = rand()% ARRAY_SIZE(ambCCFile);
			//ALLambCC[ambCCRandom].openFromFile(ambCCFile[ambCCRandom]);

			// VOLUME RESET //
			ALLambCC[ambCCRandom].setVolume(0);

			// PITCH //
			ambCCPitch = rand() % 100;
			ambCCPitch = ambCCPitch/400+0.87;
			ALLambCC[ambCCRandom].setPitch(ambCCPitch);
				
			// PLAY //
			ALLambCC[ambCCRandom].play();
		}
		
		// VOLUME CA ////////////////////////////////////////////////////////////////

		if (ALLambCA[ambCARandom].getStatus() == 2)
		{
			/*if((ambMadness - ambCATriggerLevel)*(ambMadness/100+1)*0.50*(ambMaxVolume/100)*0.75 >= 50)
				ALLambCA[ambCARandom].setVolume(50);
			else*/
				ALLambCA[ambCARandom].setVolume((ambMadness - ambCATriggerLevel)*(ambMadness/100+1)*0.50*(ambMaxVolume/100)*0.20);

			// STOP //

			if (ambMadness <= ambCATriggerLevel)
			{
				ALLambCA[ambCARandom].stop();
				ALLambCA[ambCARandom].setVolume(0);
			}
		}

		// VOLUME CB ////////////////////////////////////////////////////////////////

		if (ALLambCB[ambCBRandom].getStatus() == 2)
		{
			/*if((ambMadness - ambCATriggerLevel)*(ambMadness/100+1)*0.50*(ambMaxVolume/100)*0.75 >= 50)
				ALLambCB[ambCBRandom].setVolume(50);
			else*/
				ALLambCB[ambCBRandom].setVolume((ambMadness - ambCATriggerLevel)*(ambMadness/100+1)*0.50*(ambMaxVolume/100)*0.20);

			// STOP //

			if (ambMadness <= ambCBTriggerLevel)
			{
				ALLambCB[ambCBRandom].stop();
				ALLambCB[ambCBRandom].setVolume(0);
			}
		}

		// VOLUME CC ////////////////////////////////////////////////////////////////

		if (ALLambCC[ambCCRandom].getStatus() == 2)
		{
			/*if((ambMadness - ambCATriggerLevel)*(ambMadness/100+1)*0.50*(ambMaxVolume/100)*0.75 >= 50)
				ALLambCC[ambCCRandom].setVolume(50);
			else*/
				ALLambCC[ambCCRandom].setVolume((ambMadness - ambCATriggerLevel)*(ambMadness/100+1)*0.50*(ambMaxVolume/100)*0.20);

			// STOP //

			if (ambMadness <= ambCCTriggerLevel)
			{
				ALLambCC[ambCCRandom].stop();
				ALLambCC[ambCCRandom].setVolume(0);
			}
		}
		
		// PLAY D //////////////////////////////////////////////////////////////////////////////
		
		if (ambMadness > ambDTriggerLevel || ambDBeforeAfter == 1)
		{
			ambDCounter++;
			
			// LONG BEEP TRIGGER //

			if (ambMadness >= 100 && ambDB.getStatus() == 0)
			{
				ambDA.stop();
				ambDB.setVolume(ambMaxVolume*0.60);
				ambDB.play();
				ambDBeforeAfter = 1;
				ambDTimer = 0;
			}
			
			// BEFORE BEEP PLAY //

			else if (ambDCounter > 160-((ambMadness*ambMadness)/75) && ambDBeforeAfter == 0 && ambDB.getStatus() == 0)
			{
				ambDCounter = 0;

				ambDA.setVolume((ambMadness-ambDTriggerLevel)*(ambMadness-ambDTriggerLevel)*(ambMaxVolume/100)*0.60);
				ambDA.play();
			}
			
			// AFTER BEEP PLAY //

			else if (ambDB.getStatus() == 0 && ambDCounter > 90 && ambDBeforeAfter == 1)
			{
				ambDCounter = 0;
				ambDTimer++;

				ambDC.setVolume(ambDCVolumeTable[ambDTimer]*(ambMaxVolume/100)*0.4);
				ambDD.setVolume(ambDDVolumeTable[ambDTimer]*(ambMaxVolume/100)*0.4);

				if (ambDBeforeAfter == 1)
				{
					ambDC.play();
					ambDD.play();
				}

				// STOP //

				if (ambDTimer == 11)
				{
					ambDBeforeAfter = 0;
					ambDTimer = 0;
				}
			}
		}
	}
Beispiel #9
0
ambiance::ambiance()
{
// INSTANCES D //

	ambDA.setVolume(0);
	ambDA.setLoop(false); 

	ambDB.setVolume(70);
	ambDB.setLoop(false); 

	ambDC.setVolume(100);
	ambDC.setLoop(false);

	ambDD.setVolume(100);
	ambDD.setLoop(false);

	ambDA.openFromFile(path+"ambDA01.ogg");
	ambDB.openFromFile(path+"ambDB01.ogg");
	ambDC.openFromFile(path+"ambDC01.ogg");
	ambDD.openFromFile(path+"ambDD01.ogg");

	// LOAD ALL FILES (AKA RONNYHAX) ////////////////////////////////////////////


	for(int i = 0; i < ARRAY_SIZE(ambAAFile); i++)
	{
		ALLambAA[i].openFromFile(path+ambAAFile[i]);
		ALLambAA[i].setVolume(0);
		ALLambAA[i].setLoop(true); 
	}

	for(int i = 0; i < ARRAY_SIZE(ambABFile); i++)
	{
		ALLambAB[i].openFromFile(path+ambABFile[i]);
		ALLambAB[i].setVolume(0);
		ALLambAB[i].setLoop(true); 
	}

	for(int i = 0; i < ARRAY_SIZE(ambBAFile); i++)
	{
		ALLambBA[i].openFromFile(path+ambBAFile[i]);
		ALLambBA[i].setVolume(0);
		ALLambBA[i].setLoop(true); 
	}

	for(int i = 0; i < ARRAY_SIZE(ambBBFile); i++)
	{
		ALLambBB[i].openFromFile(path+ambBBFile[i]);
		ALLambBB[i].setVolume(0);
		ALLambBB[i].setLoop(true); 
	}

	for(int i = 0; i < ARRAY_SIZE(ambBCFile); i++)
	{
		ALLambBC[i].openFromFile(path+ambBCFile[i]);
		ALLambBC[i].setVolume(0);
		ALLambBC[i].setLoop(true); 
	}

	for(int i = 0; i < ARRAY_SIZE(ambCAFile); i++)
	{
		ALLambCA[i].openFromFile(path+ambCAFile[i]);
		ALLambCA[i].setVolume(0);
		ALLambCA[i].setLoop(true); 
	}

	for(int i = 0; i < ARRAY_SIZE(ambCBFile); i++)
	{
		ALLambCB[i].openFromFile(path+ambCBFile[i]);
		ALLambCB[i].setVolume(0);
		ALLambCB[i].setLoop(true); 
	}

	for(int i = 0; i < ARRAY_SIZE(ambCCFile); i++)
	{
		ALLambCC[i].openFromFile(path+ambCCFile[i]);
		ALLambCC[i].setVolume(0);
		ALLambCC[i].setLoop(true); 
	}
	// RAND TIME & ARRAYLENGTH DEFINITION //
		srand (time(0));	
}
Beispiel #10
0
void main_resource_init(){
	SoundMusic.setVolume( MUSIC_VOLUME );
}