back to the barn

 avatar
unknown
c_cpp
a month ago
143 kB
11
Indexable
#include<SFML/Graphics.hpp>
#include<SFML/Audio.hpp>
#include<vector>
#include <sstream>
#include <fstream>
#include<string>
#include <iomanip>
#include<iostream>
using namespace std;
using namespace sf;

Text timerText;
RectangleShape loseground(Vector2f(250.f, 100.f));
const int MAIN = 4, SETTINGS = 5, PAUSE = 4, CREDIT = 8, WIN = 4, LOSE = 3, TIMEOUT = 3, MAP = 6, SCENES = 7,OUTROSCENES=6;
struct menus {

	Font font;

	Text  menutxt[MAIN], settingstxt[SETTINGS], creditxt[CREDIT], pausetxt[PAUSE], wintxt[WIN], losetxt[LOSE], timeouttxt[TIMEOUT], maptxt[MAP];
	Texture maintexture, maptexture, menustexture, backtexture, lvls_lock_texture;
	Sprite mainbackground, mapbackground, menusbackground, back, lvls_lock_sp;
	RectangleShape loseground{ Vector2f(250.f, 100.f) };

	string
		mainstr[MAIN] = { "Play","Settings","Credit","Exit" },
		settingstr[SETTINGS] = { "Sound On","Sound up","Sound down","Mute","Back" },
		creditstr[CREDIT] = { "Menna tullah sherif Mohamed Mohamed Ibrahim","Malak Mohamed Ahmed Yassin Ahmed Nassar ",
		"Mennahtullah Ahmed Mohamed Yussef Fayed","Nada Ahmed Mohamed Salah El-Deen Ahmed",
		"Naema Ahmed Yahia Mohamed Taha","Nada Ahmed El-Sayed Abd-Elraouf",
		"Jana Sameh Abdelazim Mohammed","Back" },
		pausestr[PAUSE] = { "Sound on","Mute","Map","Continue" },
		winstr[WIN] = { "WIN!","Retry","Map","Next" },
		losestr[LOSE] = { "Sheep Lose!","Retry","Map" },
		timeoutstr[TIMEOUT] = { "Time is Out!","Retry","Map" },
		mapstr[MAP] = { "The FOREST","On The ROOFS","The MILL","The GIANT WALLS","The BARN","Back" };

}menu;

struct Gsound {

	SoundBuffer winbuff, losebuff, walkbuff, runbuff, jump1buff, jump2buff, jump3buff, fallbuff, menubuff, shaunbuff, timmybuff, shirleybuff, introbuff, endbuff;
	Sound win, lose, walk, run, jumpshirley, jumpshaun, jumptimmy, menu, shaun, timmy, shirley, intro, end;

	bool winning = true, losing = true, walking = false, running = false,
		shirleyjumping = false, shaunjumping = false, timmyjumping = false,
		menusound = true, enterlvl = false, endsound = true,
		shaunvoice = false, shirleyvoice = false, timmyvoice = false;

}soundgeneral;

struct Intro {

	Texture intro_txt[SCENES], backbtn_txt, nextbtn_txt, skipbtn_txt;
	Sprite intro_sp[SCENES], backbtn_sp, nextbtn_sp, skipbtn_sp;

	int currentscene = 0;
	bool introrun = true;
}introstru;

struct Outro {

	Texture outro_txt[OUTROSCENES], backbtn_txt, nextbtn_txt, skipbtn_txt, backtomenubtn_txt;
	Sprite outro_sp[OUTROSCENES], backbtn_sp, nextbtn_sp, skipbtn_sp, backtomenubtn_sp;

	int currentscene = 0;

	bool outrorun = true;

}outrostru;

struct SheepIcon {
	Sprite sheep_icon_sprite;
	Texture normalTexture;
	Texture selectedTexture;
	bool isSelected;
};

SheepIcon sheepIcons[3];// 0:sharley 1:shaun 2:timmy

struct States {

	bool islose = false, iswin = false, istimeout = false;

}state;

struct Forest {
	Texture Level1_background_txt, Hay_lv1_txt, Arrow_sign_lvl1_txt, LongStick_lvl1_txt, ShortStick_lvl1_txt, Stone_wall_lvl1_txt, Floating_pillar_lvl1_txt;
	Sprite Level1_background_sp, Hay_lvl1_sp, Arrow_sign_lvl1_sp, LongStick_lvl1_sp, ShortStick_lvl1_sp, Stone_wall_lvl1_sp, Floating_pillar_lvl1_sp;
	SoundBuffer haybuff, woodbuff, backbuff;
	Sound hayfall, wood, backforest;


	float hayVelocityX = 0, shrtVelocityX = 0, lngstckVelocityX = 0;


	bool hayfalling = false, woodfalling = false,
		forestsound = true, is_won = false;

	RectangleShape winZone;

}soundforest;

struct OnTheRoof {
	Texture lvl2_background_txt, home_lvl2_txt, bridge_lvl2_txt, wood_lvl2_txt, sign_lvl2_txt, box_lvl2_txt;
	Sprite lvl2_background_sp, home_lvl2_sp, bridge_lvl2_sp, wood_lvl2_sp, sign_lvl2_sp, box_lvl2_sp;
	SoundBuffer moveobjectbuff, jumpwoodbuff, walkwoodbuff, back2buff;
	Sound objectmove, jumpwood, walkwood, backontheroof;


	bool objectmoving = false, woodjumping = false,
		woodwalking = false, ontheroofsound = false,
		is_won = false;

	RectangleShape winZone;


}soundontheroof;

struct Mill {
	Texture Background_lvl3_txt, Tunnel_lvl3_txt, Blue_lvl3_txt, Wooden_lvl3_txt, Rock_lvl3_txt,
		Button_lvl3_txt, Box_lvl3_txt, Arrow_Sign_lvl3_txt, Button2_lvl3_txt,
		Red1_lvl3_txt, Red2_lvl3_txt, Red3_lvl3_txt, Bomb_lvl3_txt;
	Sprite Background_lvl3_sp, Tunnel_lvl3_sp, Blue_lvl3_sp, Wooden_Column_lvl3_sp, RockColumn_lvl3_sp,
		Button_lvl3_sp, Box_lvl3_sp, Arrow_Sign_lvl3_sp, Button_Pressed_lvl3_sp,
		Red_Ballon1_lvl3_sp, Red_Ballon2_lvl3_sp, Red_Ballon3_lvl3_sp, Bomb_lvl3_sp;
	SoundBuffer ballonbuff, timerbombbuff, bombbuff, tunnelfallbuff, tunnelwalkbuff, boxbuff, buttonbuff, doorbuff, back3buff;
	Sound ballon, timerbomb, bomb, tunnelfall, tunnelwalk, button, box, door, backmill;

	float boxVelocityX = 0;

	float woodenColumnTargetY = 135.0f;
	float woodenColumnSpeed = 300.0f;

	bool isTimmyInTunnel = false;
	float tunnelSpeed = 150.0f;
	float tunnelExitX = 950.0f;

	bool  isballonbomb = false, isbombed = false,
		tunnelfalling = false, tunnelwalking = false, boxmoving = false,
		buttonispressed = false, buttonnotpressed = false,
		dooropen = false, millsound = true, is_won = false;

	RectangleShape winZone;

}soundmill;

struct TheGiantWalls {
	Texture Level4_background_txt, plateforms_lv4_txt, Arrow_sign_lvl4_txt, Swichable_Barrier_lvl4_txt;
	Sprite Level4_background_sp, plateforms_lv4_sp, Arrow_sign_lvl4_sp, Swichable_Barrier_lvl4_sp;
	SoundBuffer doorbuff, back4buff;
	Sound door, backgiantwalls;

	bool doorsound = false, giantwallssound = true, is_won = false;

	RectangleShape winZone;

	FloatRect platform1;
	FloatRect platform2;
	FloatRect platform3;

}soundgiantwalls;

struct Fox {

	Sprite fox_sp;
	Texture fox1_txt; // 737 x 130
	Texture  fox2_txt; // 823 x 136

	int currentframe = 0;

	float timer = 0.0f;
	float speed = 0.15f;

	int box_width = 0;
	int box_height = 0;

	bool isTrapped = false;

};

struct Barn {
	Texture background_level5_txt, sign_lvl5_txt, stonenight_lvl5_txt, stick_lvl5_txt, button_lvl5_txt, button_on_lvl5_txt, cage_lvl5_txt, cage_landed_lvl5_txt, broken_cage_lvl5_txt , cage_with_fox_inside_txt;
	Sprite background_level5_sp, sign_lvl5_sp, stonenight_lvl5_sp, stick_lvl5_sp, button_lvl5_sp, button_on_lvl5_sp, cage_lvl5_sp, cage_landed_lvl5_sp, broken_cage_lvl5_sp , cage_with_fox_inside_sp;
	Sprite shadowSign, shadowStick, shadowCage;
	SoundBuffer woodjumpbuff, prisonbuff, buttonbuff, foxbuff, barndoorbuff, dangerbuff, back5buff;
	Sound woodjump, prison, button, fox, barndoor, danger, backbarn;

	Fox levelfox;

	Clock foxClock;

	RectangleShape platform1, platform2, platform3, stonePlatform, winZone;

	float initialX = 816.0f;
	float initialY = -35.0f;
	float speed = 2.0f;
	float range = 15.0f;
	float fallspeed = 0.0f;

	bool prisonfalling = false, isLanded = false,
		woodjumping = false,
		buttonispressed = false, foxsound = false,
		barndoorsound = false, isdanger = false,
		barnsound = true, isBroken = false,
		isOnWood = false, hitsWall = false, isFoxTrapped = false,
		isStandingOnPlatform = false, is_won = false,isTrapped=false; 

}soundbarn;

struct Game_icon
{
	Texture  retry_icon_texture, pause_icon_texture;
	Sprite   retry_sp, pause_sp;
}icons;

struct sheep {
	Sprite sprite;
	Texture texture;
	float velocityY = 0;
	float jumpPower = -600;
	float gravity = 1500;
	bool isJumping = false;
};

struct Charachters {
	sheep heroesArray[3]; // 0:sharley 1:shaun 2:timmy
	sheep walkHeroesArray[3]; // 0:sharley 1:shaun 2:timmy
	sheep jumpHeroesArray[3]; // 0:sharley 1:shaun 2:timmy
}heroes;

int frame = 0;
int activeSheepIndex = 0;
int lastlevelBeggining = -1;
float animationTimer = 0;
float animationSpeed = 0.15;
float groundLevels[3] = { 600.0f, 600.0f, 600.0f };
bool isMoving = false , isWalkingNow = false , levelBeggining = false , introPlayed = false , needReset = false;

int Windows[11] = { 0,1,2,3,4,5,6,7,8,9,10 }, currentwindow = 0, selected = 0, selectedlvl = 0, selectedop = 1;//0=main,1=map,2=lvl,3=settings,4=credit,5=pause,6=win,7=lose,8=timeout,9=intro,10=ending
Event event;
struct GameTime
{
	Clock gameClock;
	float levelTime[5] = { 61.0f, 21.0f, 41.0f, 21.0f, 31.0f };
	//float startTime = 0;
	float TimeSpentBeforePause = 0;
	float remainingTime = 0;
	bool isGameOver = false;
	void setupTimer(RenderWindow& window) {
		if (!menu.font.loadFromFile("assets\\menu background\\Lora-SemiBoldItalic.ttf"))
			std::cout << "Load Failed";
		timerText.setFont(menu.font);
		timerText.setCharacterSize(40);
		timerText.setFillColor(Color::Black);
		timerText.setPosition(550, 50);

	}
	void startLevel(int levelIndex) {
		currentwindow = 2;
		isGameOver = false;
		TimeSpentBeforePause = 0;
		remainingTime = levelTime[levelIndex];
		gameClock.restart();
		levelBeggining = false;
	}

	void updateTimer(int selectedlvl) {

		if (currentwindow != 2) {
			timerText.setString("");
			return;
		}

		if (selectedlvl == 4) {
			timerText.setFillColor(Color::White);
		}
		else {
			timerText.setFillColor(Color::Black);
		}
		if (!isGameOver) {
			float elaps = gameClock.getElapsedTime().asSeconds();
			float secondsInLevel = remainingTime - elaps;

			if (secondsInLevel <= 0) {
				secondsInLevel = 0;
				isGameOver = true;

				currentwindow = 8;


				switch (selectedlvl) {
				case 0: soundforest.backforest.pause(); break;
				case 1: soundontheroof.backontheroof.pause(); break;
				case 2: soundmill.backmill.pause(); break;
				case 3: soundgiantwalls.backgiantwalls.pause(); break;
				case 4: soundbarn.backbarn.pause(); break;
				}


				soundgeneral.lose.play();
			}

			timerText.setString("Time: " + to_string((int)secondsInLevel));

		}

		if (currentwindow == 2 && !isGameOver) {

			float totalElapsed = gameClock.getElapsedTime().asSeconds() + TimeSpentBeforePause;
			float secondsInLevel = remainingTime - totalElapsed;

			if (secondsInLevel <= 0) {
				secondsInLevel = 0;
				isGameOver = true;
				currentwindow = 8;
				soundgeneral.lose.play();
			}
			timerText.setString("Time: " + to_string((int)secondsInLevel));
		}

	}
}myTimer;

Vector2f levelPositions[4] = {
	  Vector2f(417, 262), // Level 2 circl's place
	  Vector2f(674, 193), // Level 3 circl's place
	  Vector2f(931, 261), // Level 4 circl's place	
	  Vector2f(1188, 193)  // Level 5 circl's place
};

void loadmenus(RenderWindow& window) {

	if (!menu.font.loadFromFile("assets\\menu background\\Lora-SemiBoldItalic.ttf"))
		cout << "Load Failed";

	menu.maintexture.loadFromFile("assets\\menu background\\main background.png");
	menu.maptexture.loadFromFile("assets\\menu background\\map menu.png");
	menu.menustexture.loadFromFile("assets\\menu background\\menusbackground.png");
	menu.backtexture.loadFromFile("assets\\menu background\\back button.jpeg");


	Vector2u mainSize = menu.maintexture.getSize(), mapSize = menu.maptexture.getSize(), menusSize = menu.menustexture.getSize(), backSize = menu.backtexture.getSize();
	Vector2u windowSize = window.getSize();

	float mainScaleX = (float)windowSize.x / mainSize.x, mapScaleX = (float)windowSize.x / mapSize.x, menusScaleX = (float)windowSize.x / menusSize.x, backScaleX = (float)windowSize.x / backSize.x;
	float mainScaleY = (float)windowSize.y / mainSize.y, mapScaleY = (float)windowSize.y / mapSize.y, menusScaleY = (float)windowSize.y / menusSize.y, backScaleY = (float)windowSize.y / backSize.y;

	menu.mainbackground.setTexture(menu.maintexture);
	menu.mapbackground.setTexture(menu.maptexture);
	menu.menusbackground.setTexture(menu.menustexture);
	menu.back.setTexture(menu.backtexture);


	menu.mainbackground.setScale(mainScaleX, mainScaleY);
	menu.mapbackground.setScale(mapScaleX, mapScaleY);
	menu.menusbackground.setScale(menusScaleX, menusScaleY);
	menu.back.setScale(backScaleX, backScaleY);



	for (int i = 0; i < MAIN; i++) {
		menu.menutxt[i].setString(menu.mainstr[i]);
		menu.menutxt[i].setFont(menu.font);
		menu.menutxt[i].setCharacterSize(50);
		menu.menutxt[i].setPosition(600, 260 + 90 * i);
		menu.menutxt[i].setFillColor(Color::White);
	}
	menu.menutxt[0].setFillColor(Color::Black);

	for (int i = 0; i < SETTINGS; i++) {
		menu.settingstxt[i].setString(menu.settingstr[i]);
		menu.settingstxt[i].setFont(menu.font);
		menu.settingstxt[i].setCharacterSize(50);
		menu.settingstxt[i].setPosition(520, 250 + 50 * i);
		menu.settingstxt[i].setFillColor(Color::White);
	}
	menu.settingstxt[4].setPosition(580, 550);
	menu.settingstxt[0].setFillColor(Color::Black);

	for (int i = 0; i < CREDIT; i++) {
		menu.creditxt[i].setString(menu.creditstr[i]);
		menu.creditxt[i].setFont(menu.font);
		menu.creditxt[i].setCharacterSize(20);
		menu.creditxt[i].setPosition(420, 250 + 30 * i);
		menu.creditxt[i].setFillColor(Color::White);

	}
	menu.creditxt[7].setPosition(580, 550);
	menu.creditxt[7].setCharacterSize(50);

	for (int i = 0; i < PAUSE; i++) {
		menu.pausetxt[i].setString(menu.pausestr[i]);
		menu.pausetxt[i].setFont(menu.font);
		menu.pausetxt[i].setCharacterSize(50);
		menu.pausetxt[i].setFillColor(Color::White);

	}
	menu.pausetxt[0].setPosition(540, 240);
	menu.pausetxt[1].setPosition(580, 300);
	menu.pausetxt[2].setPosition(590, 365);
	menu.pausetxt[3].setPosition(535, 430);
	menu.pausetxt[0].setFillColor(Color::Black);

	for (int i = 0; i < WIN; i++) {
		menu.wintxt[i].setString(menu.winstr[i]);
		menu.wintxt[i].setFont(menu.font);
		menu.wintxt[i].setCharacterSize(50);
		menu.wintxt[i].setFillColor(Color::White);

	}
	menu.wintxt[0].setPosition(580, 240);
	menu.wintxt[1].setPosition(580, 300);
	menu.wintxt[2].setPosition(580, 365);
	menu.wintxt[3].setPosition(580, 430);
	menu.wintxt[1].setFillColor(Color::Black);

	for (int i = 0; i < LOSE; i++) {
		menu.losetxt[i].setString(menu.losestr[i]);
		menu.losetxt[i].setFont(menu.font);
		menu.losetxt[i].setCharacterSize(50);
		menu.losetxt[i].setFillColor(Color::White);
	}
	menu.losetxt[0].setPosition(500, 250);
	menu.losetxt[1].setPosition(575, 330);
	menu.losetxt[2].setPosition(575, 380);
	menu.losetxt[1].setFillColor(Color::Black);

	for (int i = 0; i < TIMEOUT; i++) {
		menu.timeouttxt[i].setString(menu.timeoutstr[i]);
		menu.timeouttxt[i].setFont(menu.font);
		menu.timeouttxt[i].setCharacterSize(50);
		//menu.timeouttxt[i].setPosition(500, 200 + 100 * i);
		menu.timeouttxt[i].setFillColor(Color::White);

	}
	menu.timeouttxt[0].setPosition(500, 250);
	menu.timeouttxt[1].setPosition(575, 330);
	menu.timeouttxt[2].setPosition(575, 380);
	menu.timeouttxt[1].setFillColor(Color::Black);

	for (int i = 0; i < MAP; i++) {
		menu.maptxt[i].setString(menu.mapstr[i]);
		menu.maptxt[i].setFont(menu.font);
		menu.maptxt[i].setCharacterSize(30);
		menu.maptxt[i].setFillColor(Color::White);

	}
	menu.maptxt[0].setPosition(50, 560);
	menu.maptxt[1].setPosition(300, 600);
	menu.maptxt[2].setPosition(600, 560);
	menu.maptxt[3].setPosition(800, 610);
	menu.maptxt[4].setPosition(1100, 560);
	menu.maptxt[5].setPosition(600, 630);
	menu.maptxt[0].setFillColor(Color::Black);

}

void loadgeneral(RenderWindow& window) {

	soundgeneral.winbuff.loadFromFile("assets\\general\\win approved.wav");
	soundgeneral.losebuff.loadFromFile("assets\\general\\lose approved.wav");
	soundgeneral.walkbuff.loadFromFile("assets\\general\\walk approved.wav");
	soundgeneral.runbuff.loadFromFile("assets\\general\\run approved.wav");
	soundgeneral.jump1buff.loadFromFile("assets\\general\\shirley jump.wav");
	soundgeneral.jump2buff.loadFromFile("assets\\general\\shaun jump.wav");
	soundgeneral.jump3buff.loadFromFile("assets\\general\\timmy jump.wav");
	soundgeneral.menubuff.loadFromFile("assets\\general\\menu.ogg");
	soundgeneral.shaunbuff.loadFromFile("assets\\general\\shaun approved.wav");
	soundgeneral.timmybuff.loadFromFile("assets\\general\\timmy approved.wav");
	soundgeneral.shirleybuff.loadFromFile("assets\\general\\shirley.wav");
	soundgeneral.introbuff.loadFromFile("assets\\general\\intro approved.ogg");
	soundgeneral.endbuff.loadFromFile("assets\\general\\end.ogg");

	soundgeneral.win.setBuffer(soundgeneral.winbuff);
	soundgeneral.lose.setBuffer(soundgeneral.losebuff);
	soundgeneral.walk.setBuffer(soundgeneral.walkbuff);
	soundgeneral.run.setBuffer(soundgeneral.runbuff);
	soundgeneral.jumpshirley.setBuffer(soundgeneral.jump1buff);
	soundgeneral.jumpshaun.setBuffer(soundgeneral.jump2buff);
	soundgeneral.jumptimmy.setBuffer(soundgeneral.jump3buff);
	soundgeneral.menu.setBuffer(soundgeneral.menubuff);
	soundgeneral.shaun.setBuffer(soundgeneral.shaunbuff);
	soundgeneral.timmy.setBuffer(soundgeneral.timmybuff);
	soundgeneral.shirley.setBuffer(soundgeneral.shirleybuff);
	soundgeneral.intro.setBuffer(soundgeneral.introbuff);
	soundgeneral.end.setBuffer(soundgeneral.endbuff);

	soundgeneral.win.setVolume(50.f);
	soundgeneral.lose.setVolume(50.f);
	soundgeneral.walk.setVolume(50.f);
	soundgeneral.run.setVolume(50.f);
	soundgeneral.run.setLoop(true);
	soundgeneral.jumpshirley.setVolume(100.f);
	soundgeneral.jumpshaun.setVolume(90.f);
	soundgeneral.jumptimmy.setVolume(90.f);
	soundgeneral.menu.setVolume(50.f);
	soundgeneral.shaun.setVolume(50.f);
	soundgeneral.timmy.setVolume(50.f);
	soundgeneral.shirley.setVolume(50.f);
	soundgeneral.intro.setVolume(90.f);
	soundgeneral.end.setVolume(80.f);
	menu.lvls_lock_texture.loadFromFile("assets\\menu background\\Lock.png");
	menu.lvls_lock_sp.setTexture(menu.lvls_lock_texture);
	icons.retry_icon_texture.loadFromFile("assets\\icon\\retry.png");
	icons.retry_sp.setTexture(icons.retry_icon_texture);
	icons.pause_icon_texture.loadFromFile("assets\\icon\\pause.png");
	icons.pause_sp.setTexture(icons.pause_icon_texture);
	icons.retry_sp.setScale(0.28f, 0.28f);
	icons.retry_sp.setPosition(200, 55);
	icons.pause_sp.setScale(0.28f, 0.28f);
	icons.pause_sp.setPosition(80, 55);

}

void loadforest(RenderWindow& window) {
	soundforest.Level1_background_txt.loadFromFile("assets\\level 1 jungle\\Level 1 background.jpg");
	soundforest.Level1_background_sp.setTexture(soundforest.Level1_background_txt);
	soundforest.haybuff.loadFromFile("assets\\level 1 forest\\wheat fall.wav");
	soundforest.woodbuff.loadFromFile("assets\\level 1 forest\\wood.wav");
	soundforest.backbuff.loadFromFile("assets\\level 1 forest\\forest last edition.ogg");
	soundforest.Hay_lv1_txt.loadFromFile("assets\\level 1 jungle\\Hay.png");
	soundforest.Arrow_sign_lvl1_txt.loadFromFile("assets\\level 1 jungle\\Arrow direction sign.png");
	soundforest.LongStick_lvl1_txt.loadFromFile("assets\\level 1 jungle\\long stick.png");
	soundforest.LongStick_lvl1_sp.setTexture(soundforest.LongStick_lvl1_txt);
	soundforest.LongStick_lvl1_sp.setScale(0.25f, 0.22f);
	soundforest.LongStick_lvl1_sp.setPosition(725, 430);
	soundforest.Arrow_sign_lvl1_sp.setTexture(soundforest.Arrow_sign_lvl1_txt);
	soundforest.Arrow_sign_lvl1_sp.setScale(0.098f, 0.098f);
	soundforest.Arrow_sign_lvl1_sp.setPosition(1000, 380);
	soundforest.Hay_lvl1_sp.setTexture(soundforest.Hay_lv1_txt);
	soundforest.Hay_lvl1_sp.setScale(1.0f, 0.9f);
	soundforest.Hay_lvl1_sp.setPosition(627, 330);
	soundforest.ShortStick_lvl1_txt.loadFromFile("assets\\level 1 jungle\\short stick.png");
	soundforest.ShortStick_lvl1_sp.setTexture(soundforest.ShortStick_lvl1_txt);
	soundforest.ShortStick_lvl1_sp.setOrigin(0, 0);
	soundforest.ShortStick_lvl1_sp.setPosition(695, 419);
	soundforest.Stone_wall_lvl1_txt.loadFromFile("assets\\level 1 jungle\\Stone wall.png");

	soundforest.Stone_wall_lvl1_sp.setTexture(soundforest.Stone_wall_lvl1_txt);
	soundforest.Stone_wall_lvl1_sp.setScale(1.05f, 1.0f);
	soundforest.Stone_wall_lvl1_sp.setPosition(380, 510);
	soundforest.Floating_pillar_lvl1_txt.loadFromFile("assets\\level 1 jungle\\floating pillar.png");
	soundforest.Floating_pillar_lvl1_sp.setTexture(soundforest.Floating_pillar_lvl1_txt);
	soundforest.Floating_pillar_lvl1_sp.setScale(0.9f, 0.9f);
	soundforest.Floating_pillar_lvl1_sp.setPosition(776, 415.2);

	Vector2u textureSize = soundforest.Level1_background_txt.getSize();
	Vector2f win_zone_size = soundforest.winZone.getSize();
	Vector2u windowSize = window.getSize();

	float scaleX = (float)windowSize.x / textureSize.x, win_scale_x = (float)windowSize.x / win_zone_size.x;
	float scaleY = (float)windowSize.y / textureSize.y, win_scale_y = (float)windowSize.y / win_zone_size.y;

	soundforest.Level1_background_sp.setScale(scaleX, scaleY);
	soundforest.hayfall.setBuffer(soundforest.haybuff);
	soundforest.wood.setBuffer(soundforest.woodbuff);
	soundforest.backforest.setBuffer(soundforest.backbuff);

	soundforest.hayfall.setVolume(50.f);
	soundforest.wood.setVolume(50.f);
	soundforest.backforest.setVolume(100.f);

	soundforest.winZone.setScale(win_scale_x, win_scale_y);
	soundforest.winZone.setScale(1, 1);
	soundforest.winZone.setSize(Vector2f(270.0f, 400.0f));
	soundforest.winZone.setPosition(1000.0f, 300.0f);
	soundforest.winZone.setFillColor(Color::Transparent);



}

void loadontheroof(RenderWindow& window) {
	soundontheroof.lvl2_background_txt.loadFromFile("assets\\level2\\background.png");
	soundontheroof.lvl2_background_sp.setTexture(soundontheroof.lvl2_background_txt);

	Vector2u textureSize = soundontheroof.lvl2_background_txt.getSize();
	Vector2f win_zone_size = soundontheroof.winZone.getSize();
	Vector2u windowSize = window.getSize();

	float scalex = (float)windowSize.x / textureSize.x, win_scale_x = (float)windowSize.x / win_zone_size.x;
	float scaley = (float)windowSize.y / textureSize.y, win_scale_y = (float)windowSize.y / win_zone_size.y;
	soundontheroof.lvl2_background_sp.setScale(scalex, scaley);

	soundontheroof.home_lvl2_txt.loadFromFile("assets\\level2\\home.png");

	soundontheroof.home_lvl2_sp.setTexture(soundontheroof.home_lvl2_txt);
	soundontheroof.home_lvl2_sp.setScale(0.97f, 0.97f);
	soundontheroof.home_lvl2_sp.setPosition(840, 450);

	soundontheroof.bridge_lvl2_txt.loadFromFile("assets\\level2\\bridge.png");

	soundontheroof.bridge_lvl2_sp.setTexture(soundontheroof.bridge_lvl2_txt);
	soundontheroof.bridge_lvl2_sp.setScale(0.7f, 0.7f);
	soundontheroof.bridge_lvl2_sp.setPosition(30, 475);

	soundontheroof.wood_lvl2_txt.loadFromFile("assets\\level2\\wood.png");

	soundontheroof.wood_lvl2_sp.setTexture(soundontheroof.wood_lvl2_txt);
	soundontheroof.wood_lvl2_sp.setScale(0.3f, 0.3f);
	soundontheroof.wood_lvl2_sp.setPosition(235, 325);

	soundontheroof.sign_lvl2_txt.loadFromFile("assets\\level2\\sign.png");

	soundontheroof.sign_lvl2_sp.setTexture(soundontheroof.sign_lvl2_txt);
	soundontheroof.sign_lvl2_sp.setScale(0.35f, 0.345f);
	soundontheroof.sign_lvl2_sp.setPosition(1100, 344);

	soundontheroof.box_lvl2_txt.loadFromFile("assets\\level2\\box.png");

	soundontheroof.box_lvl2_sp.setTexture(soundontheroof.box_lvl2_txt);
	soundontheroof.box_lvl2_sp.setScale(0.25f, 0.25f);
	soundontheroof.box_lvl2_sp.setPosition(550, 380);

	soundontheroof.moveobjectbuff.loadFromFile("assets\\level 2 on the roof\\wood slide.wav");
	soundontheroof.jumpwoodbuff.loadFromFile("assets\\level 2 on the roof\\wood.wav");
	soundontheroof.back2buff.loadFromFile("assets\\level 2 on the roof\\on the roof back last edition.ogg");
	soundontheroof.walkwoodbuff.loadFromFile("assets\\level 2 on the roof\\wood walk.wav");

	soundontheroof.objectmove.setBuffer(soundontheroof.moveobjectbuff);
	soundontheroof.jumpwood.setBuffer(soundontheroof.jumpwoodbuff);
	soundontheroof.backontheroof.setBuffer(soundontheroof.back2buff);
	soundontheroof.walkwood.setBuffer(soundontheroof.walkwoodbuff);

	soundontheroof.objectmove.setVolume(50.f);
	soundontheroof.jumpwood.setVolume(50.f);
	soundontheroof.walkwood.setVolume(50.f);
	soundontheroof.backontheroof.setVolume(80.f);

	Vector2f loseSize = menu.loseground.getSize();
	float loseScaleX = (float)windowSize.x / loseSize.x;
	float loseScaleY = (float)windowSize.y / loseSize.y;


	menu.loseground.setScale(loseScaleX, loseScaleY);
	menu.loseground.setScale(1, 1);
	menu.loseground.setFillColor(Color::Transparent);
	menu.loseground.setPosition(630, 600);


	menu.loseground.setScale(loseScaleX, loseScaleY);
	menu.loseground.setScale(1, 1);
	menu.loseground.setFillColor(Color::Transparent);
	menu.loseground.setPosition(630, 600);

	soundontheroof.winZone.setScale(win_scale_x, win_scale_y);
	soundontheroof.winZone.setScale(1, 1);
	soundontheroof.winZone.setSize(Vector2f(310.0f, 350.0f));
	soundontheroof.winZone.setPosition(970.0f, 150.0f);
	soundontheroof.winZone.setFillColor(Color::Transparent);

}

void loadmill(RenderWindow& window) {

	soundmill.tunnelfallbuff.loadFromFile("assets\\level 3 the mill\\falling in the tunnel.wav");
	soundmill.tunnelwalkbuff.loadFromFile("assets\\level 3 the mill\\walking tunnel.wav");
	soundmill.boxbuff.loadFromFile("assets\\level 3 the mill\\wood slide.wav");
	soundmill.buttonbuff.loadFromFile("assets\\level 3 the mill\\button on.wav");
	soundmill.doorbuff.loadFromFile("assets\\level 3 the mill\\wood.wav");
	soundmill.back3buff.loadFromFile("assets\\level 3 the mill\\the mill back last edition.ogg");
	soundmill.ballonbuff.loadFromFile("assets\\level 3 the mill\\ballon pop.wav");
	soundmill.timerbombbuff.loadFromFile("assets\\level 3 the mill\\timer bomb.wav");
	soundmill.bombbuff.loadFromFile("assets\\level 3 the mill\\bomb exposure.wav");

	soundmill.Background_lvl3_txt.loadFromFile("assets\\level 3 the mill\\background3.png");
	soundmill.Background_lvl3_sp.setTexture(soundmill.Background_lvl3_txt);
	soundmill.Background_lvl3_sp.setScale(0.8f, 0.81f);

	soundmill.Tunnel_lvl3_txt.loadFromFile("assets\\level 3 the mill\\tunnel.png");
	soundmill.Tunnel_lvl3_sp.setTexture(soundmill.Tunnel_lvl3_txt);
	soundmill.Tunnel_lvl3_sp.setPosition(530, 510);
	soundmill.Tunnel_lvl3_sp.setScale(1.1, 1.05);

	soundmill.Blue_lvl3_txt.loadFromFile("assets\\level 3 the mill\\blue.png");
	soundmill.Blue_lvl3_sp.setTexture(soundmill.Blue_lvl3_txt);
	soundmill.Blue_lvl3_sp.setPosition(710, 150);
	soundmill.Blue_lvl3_sp.setScale(0.33, 0.33);

	soundmill.Wooden_lvl3_txt.loadFromFile("assets\\level 3 the mill\\wooden.png");
	soundmill.Wooden_Column_lvl3_sp.setTexture(soundmill.Wooden_lvl3_txt);
	soundmill.Wooden_Column_lvl3_sp.setPosition(668, 135);
	soundmill.Wooden_Column_lvl3_sp.setScale(0.34, 0.34);

	soundmill.Rock_lvl3_txt.loadFromFile("assets\\level 3 the mill\\rock.png");
	soundmill.RockColumn_lvl3_sp.setTexture(soundmill.Rock_lvl3_txt);
	soundmill.RockColumn_lvl3_sp.setPosition(350, 200);
	soundmill.RockColumn_lvl3_sp.setScale(0.42, 0.42);

	soundmill.Button_lvl3_txt.loadFromFile("assets\\level 3 the mill\\button.png");
	soundmill.Button_lvl3_sp.setTexture(soundmill.Button_lvl3_txt);
	soundmill.Button_lvl3_sp.setPosition(730, 492);
	soundmill.Button_lvl3_sp.setScale(0.035, 0.035);

	soundmill.Box_lvl3_txt.loadFromFile("assets\\level 3 the mill\\box.png");
	soundmill.Box_lvl3_sp.setTexture(soundmill.Box_lvl3_txt);
	soundmill.Box_lvl3_sp.setPosition(520, 448);
	soundmill.Box_lvl3_sp.setScale(0.25, 0.25);

	soundmill.Arrow_Sign_lvl3_txt.loadFromFile("assets\\level 3 the mill\\arrow.png");
	soundmill.Arrow_Sign_lvl3_sp.setTexture(soundmill.Arrow_Sign_lvl3_txt);
	soundmill.Arrow_Sign_lvl3_sp.setPosition(1100, 420);
	soundmill.Arrow_Sign_lvl3_sp.setScale(0.35, 0.35);

	soundmill.Button2_lvl3_txt.loadFromFile("assets\\level 3 the mill\\button 2 (1).png");

	soundmill.Button_Pressed_lvl3_sp.setTexture(soundmill.Button2_lvl3_txt);
	soundmill.Button_Pressed_lvl3_sp.setPosition(1100, 420);
	soundmill.Button_Pressed_lvl3_sp.setScale(0.35, 0.35);

	soundmill.Red1_lvl3_txt.loadFromFile("assets\\level 3 the mill\\red_ball.png");
	soundmill.Red_Ballon1_lvl3_sp.setTexture(soundmill.Red1_lvl3_txt);
	soundmill.Red_Ballon1_lvl3_sp.setPosition(340, 435);
	soundmill.Red_Ballon1_lvl3_sp.setScale(0.13, 0.13);

	soundmill.Red2_lvl3_txt.loadFromFile("assets\\level 3 the mill\\red_ball.png");
	soundmill.Red_Ballon2_lvl3_sp.setTexture(soundmill.Red2_lvl3_txt);
	soundmill.Red_Ballon2_lvl3_sp.setPosition(295, 435);
	soundmill.Red_Ballon2_lvl3_sp.setScale(0.13, 0.13);

	soundmill.Red3_lvl3_txt.loadFromFile("assets\\level 3 the mill\\red_ball.png");
	soundmill.Red_Ballon3_lvl3_sp.setTexture(soundmill.Red3_lvl3_txt);
	soundmill.Red_Ballon3_lvl3_sp.setPosition(250, 435);
	soundmill.Red_Ballon3_lvl3_sp.setScale(0.13, 0.13);

	soundmill.Bomb_lvl3_txt.loadFromFile("assets\\level 3 the mill\\bomb.png");
	soundmill.Bomb_lvl3_sp.setTexture(soundmill.Bomb_lvl3_txt);
	soundmill.Bomb_lvl3_sp.setPosition(290, 580);
	soundmill.Bomb_lvl3_sp.setScale(0.1, 0.1);

	soundmill.tunnelfall.setBuffer(soundmill.tunnelfallbuff);
	soundmill.tunnelwalk.setBuffer(soundmill.tunnelwalkbuff);
	soundmill.button.setBuffer(soundmill.buttonbuff);
	soundmill.box.setBuffer(soundmill.boxbuff);
	soundmill.door.setBuffer(soundmill.doorbuff);
	soundmill.backmill.setBuffer(soundmill.back3buff);

	soundmill.tunnelfall.setVolume(50.f);
	soundmill.tunnelwalk.setVolume(50.f);
	soundmill.button.setVolume(50.f);
	soundmill.box.setVolume(50.f);
	soundmill.door.setVolume(50.f);
	soundmill.backmill.setVolume(80.f);

	Vector2u textureSize = soundmill.Background_lvl3_txt.getSize();
	Vector2f win_zone_size = soundmill.winZone.getSize();
	Vector2u windowSize = window.getSize();

	float scalex = (float)windowSize.x / textureSize.x, win_scale_x = (float)windowSize.x / win_zone_size.x;
	float scaley = (float)windowSize.y / textureSize.y, win_scale_y = (float)windowSize.y / win_zone_size.y;
	
	soundmill.Background_lvl3_sp.setScale(scalex, scaley);

	soundmill.winZone.setScale(win_scale_x, win_scale_y);
	soundmill.winZone.setScale(1, 1);
	soundmill.winZone.setSize(Vector2f(135.0f, 400.0f));
	soundmill.winZone.setPosition(1100.0f, 300.0f);

	soundmill.winZone.setFillColor(Color::Transparent);

}

void loadthegiantwalls(RenderWindow& window) {

	soundgiantwalls.doorbuff.loadFromFile("assets\\level 4 the giant walls\\wood slide.wav");
	soundgiantwalls.back4buff.loadFromFile("assets\\level 4 the giant walls\\the giant walls back last edition.ogg");
	soundgiantwalls.Level4_background_txt.loadFromFile("assets\\level 4 the giant walls\\leve4 background.jpg");
	soundgiantwalls.Level4_background_sp.setTexture(soundgiantwalls.Level4_background_txt);

	Vector2u textureSize = soundgiantwalls.Level4_background_txt.getSize();
	Vector2f win_zone_size = soundgiantwalls.winZone.getSize();
	Vector2u windowSize = window.getSize();

	float scaleX = (float)windowSize.x / textureSize.x, win_scale_x = (float)windowSize.x / win_zone_size.x;
	float scaleY = (float)windowSize.y / textureSize.y, win_scale_y = (float)windowSize.y / win_zone_size.y;

	soundgiantwalls.Level4_background_sp.setScale(scaleX, scaleY);



	soundgiantwalls.plateforms_lv4_txt.loadFromFile("assets\\level 4 the giant walls\\3platforms.png");

	soundgiantwalls.plateforms_lv4_sp.setTexture(soundgiantwalls.plateforms_lv4_txt);
	soundgiantwalls.plateforms_lv4_sp.setScale(0.37f, 0.37f);
	soundgiantwalls.plateforms_lv4_sp.setPosition(340, 350);


	soundgiantwalls.Arrow_sign_lvl4_txt.loadFromFile("assets\\level 4 the giant walls\\Arrow direction sign.png");

	soundgiantwalls.Arrow_sign_lvl4_sp.setTexture(soundgiantwalls.Arrow_sign_lvl4_txt);
	soundgiantwalls.Arrow_sign_lvl4_sp.setScale(0.098f, 0.098f);
	soundgiantwalls.Arrow_sign_lvl4_sp.setPosition(1010, 400);



	soundgiantwalls.Swichable_Barrier_lvl4_txt.loadFromFile("assets\\level 4 the giant walls\\Swichable Barrier.png");

	soundgiantwalls.Swichable_Barrier_lvl4_sp.setTexture(soundgiantwalls.Swichable_Barrier_lvl4_txt);
	soundgiantwalls.Swichable_Barrier_lvl4_sp.setScale(0.8f, 1.15f);
	soundgiantwalls.Swichable_Barrier_lvl4_sp.setPosition(1010, 350);



	soundgiantwalls.door.setBuffer(soundgiantwalls.doorbuff);
	soundgiantwalls.backgiantwalls.setBuffer(soundgiantwalls.back4buff);

	soundgiantwalls.door.setVolume(50.f);
	soundgiantwalls.backgiantwalls.setVolume(80.f);


	soundgiantwalls.platform1 = sf::FloatRect(325.f, 570.f, 200.f, 150.f);
	soundgiantwalls.platform2 = sf::FloatRect(570.f, 570.f, 200.f, 150.f);
	soundgiantwalls.platform3 = sf::FloatRect(810.f, 570.f, 200.f, 150.f);

	soundgiantwalls.platform1 = FloatRect(325.f, 570.f, 200.f, 150.f);
	soundgiantwalls.platform2 = FloatRect(570.f, 570.f, 200.f, 150.f);
	soundgiantwalls.platform3 = FloatRect(810.f, 570.f, 200.f, 150.f);

	soundgiantwalls.winZone.setScale(win_scale_x, win_scale_y);
	soundgiantwalls.winZone.setScale(1, 1);
	soundgiantwalls.winZone.setSize(Vector2f(270.0f, 400.0f));
	soundgiantwalls.winZone.setPosition(1060.0f, 300.0f);
	soundgiantwalls.winZone.setFillColor(Color::Transparent);

}

void loadbarn(RenderWindow& window) {

	soundbarn.prisonbuff.loadFromFile("assets\\level 5 the barn\\prison.wav");
	soundbarn.buttonbuff.loadFromFile("assets\\level 5 the barn\\button on.wav");
	soundbarn.foxbuff.loadFromFile("assets\\level 5 the barn\\fox.wav");
	soundbarn.barndoorbuff.loadFromFile("assets\\level 5 the barn\\barn door.wav");
	soundbarn.woodjumpbuff.loadFromFile("assets\\level 5 the barn\\wood.wav");
	soundbarn.dangerbuff.loadFromFile("assets\\level 5 the barn\\warning.wav");
	soundbarn.back5buff.loadFromFile("assets\\level 5 the barn\\Barn sound.ogg");
	soundbarn.background_level5_txt.loadFromFile("assets\\Level 5 final destination the barn\\level 5 background.png");
	soundbarn.background_level5_sp.setTexture(soundbarn.background_level5_txt);

	Vector2u textureSize = soundbarn.background_level5_txt.getSize();
	Vector2f win_zone_size = soundgiantwalls.winZone.getSize();
	Vector2u windowSize = window.getSize();
	float  scaleX = (float)windowSize.x / textureSize.x, win_scale_x = (float)windowSize.x / win_zone_size.x;
	float scaleY = (float)windowSize.y / textureSize.y, win_scale_y = (float)windowSize.x / win_zone_size.y;

	soundbarn.background_level5_sp.setScale(scaleX, scaleY);

	soundbarn.sign_lvl5_txt.loadFromFile("assets\\Level 5 final destination the barn\\sign3f-removebg-preview.png");
	soundbarn.sign_lvl5_sp.setTexture(soundbarn.sign_lvl5_txt);
	soundbarn.sign_lvl5_sp.setScale(0.4f, 0.4f);
	soundbarn.sign_lvl5_sp.setPosition(1045, 400);

	soundbarn.shadowSign = soundbarn.sign_lvl5_sp;
	soundbarn.shadowSign.setColor(Color(0, 0, 0, 100));
	soundbarn.shadowSign.setOrigin(175, 350);
	soundbarn.shadowSign.setPosition(soundbarn.sign_lvl5_sp.getPosition().x + 60, soundbarn.sign_lvl5_sp.getPosition().y + 145);
	soundbarn.shadowSign.setScale(soundbarn.sign_lvl5_sp.getScale().x, -soundbarn.sign_lvl5_sp.getScale().y * 0.2f);


	soundbarn.stick_lvl5_txt.loadFromFile("assets\\Level 5 final destination the barn\\stickgreen.png");
	soundbarn.stick_lvl5_sp.setTexture(soundbarn.stick_lvl5_txt);
	soundbarn.stick_lvl5_sp.setScale(0.85f, 0.85f);
	soundbarn.stick_lvl5_sp.setPosition(210, 55);

	soundbarn.shadowStick = soundbarn.stick_lvl5_sp;
	soundbarn.shadowStick.setColor(Color(0, 0, 0, 100));
	soundbarn.shadowStick.setScale(soundbarn.stick_lvl5_sp.getScale().x, soundbarn.stick_lvl5_sp.getScale().y * 0.15f);
	soundbarn.shadowStick.setPosition(soundbarn.stick_lvl5_sp.getPosition().x, soundbarn.stick_lvl5_sp.getPosition().y + 510);



	soundbarn.cage_lvl5_txt.loadFromFile("assets\\Level 5 final destination the barn\\cage2-removebg-preview.png");
	soundbarn.cage_lvl5_sp.setTexture(soundbarn.cage_lvl5_txt);
	soundbarn.cage_lvl5_sp.setScale(0.9f, 0.9f);
	soundbarn.cage_lvl5_sp.setPosition(816, -40);
	soundbarn.cage_lvl5_sp.setOrigin(soundbarn.cage_lvl5_sp.getLocalBounds().width / 2, 0);


	soundbarn.shadowCage = soundbarn.cage_lvl5_sp;

	FloatRect shadowBounds = soundbarn.shadowCage.getLocalBounds();
	soundbarn.shadowCage.setOrigin(shadowBounds.width / 2.f, shadowBounds.height / 2.f);
	soundbarn.shadowCage.setColor(Color(0, 0, 0, 45));
	soundbarn.shadowCage.setScale(soundbarn.cage_lvl5_sp.getScale().x, soundbarn.cage_lvl5_sp.getScale().y * 0.12f);
	soundbarn.shadowCage.setPosition(816, 565);

	soundbarn.cage_landed_lvl5_txt.loadFromFile("assets\\Level 5 final destination the barn\\Landed_cage-removebg-preview.png");
	soundbarn.cage_landed_lvl5_sp.setTexture(soundbarn.cage_landed_lvl5_txt);

	soundbarn.broken_cage_lvl5_txt.loadFromFile("assets\\Level 5 final destination the barn\\Broken cage.png");
	soundbarn.broken_cage_lvl5_sp.setTexture(soundbarn.broken_cage_lvl5_txt);

	soundbarn.cage_with_fox_inside_txt.loadFromFile("assets\\Level 5 final destination the barn\\FoxInCage.png");
	soundbarn.cage_with_fox_inside_sp.setTexture(soundbarn.cage_with_fox_inside_txt);

	soundbarn.stonenight_lvl5_txt.loadFromFile("assets\\Level 5 final destination the barn\\stonef.png");
	soundbarn.stonenight_lvl5_sp.setTexture(soundbarn.stonenight_lvl5_txt);
	soundbarn.stonenight_lvl5_sp.setScale(0.38f, 0.38f);
	soundbarn.stonenight_lvl5_sp.setPosition(400, 470);

	soundbarn.button_lvl5_txt.loadFromFile("assets\\Level 5 final destination the barn\\button.png");
	soundbarn.button_lvl5_sp.setTexture(soundbarn.button_lvl5_txt);
	soundbarn.button_lvl5_sp.setScale(0.09f, 0.09f);
	soundbarn.button_lvl5_sp.setPosition(460, 360);
	soundbarn.button_lvl5_sp.setRotation(180.0f);

	soundbarn.button_on_lvl5_txt.loadFromFile("assets\\Level 5 final destination the barn\\button on.png");
	soundbarn.button_on_lvl5_sp.setTexture(soundbarn.button_on_lvl5_txt);
	soundbarn.button_on_lvl5_sp.setScale(0.08f, 0.08f);
	soundbarn.button_on_lvl5_sp.setPosition(460, 350);
	soundbarn.button_on_lvl5_sp.setRotation(180.0f);

	soundbarn.prison.setBuffer(soundbarn.prisonbuff);
	soundbarn.button.setBuffer(soundbarn.buttonbuff);
	soundbarn.fox.setBuffer(soundbarn.foxbuff);
	soundbarn.barndoor.setBuffer(soundbarn.barndoorbuff);
	soundbarn.danger.setBuffer(soundbarn.dangerbuff);
	soundbarn.woodjump.setBuffer(soundbarn.woodjumpbuff);
	soundbarn.backbarn.setBuffer(soundbarn.back5buff);

	soundbarn.prison.setVolume(50.f);
	soundbarn.button.setVolume(50.f);
	soundbarn.fox.setVolume(80.f);
	soundbarn.barndoor.setVolume(50.f);
	soundbarn.danger.setVolume(70.f);
	soundbarn.woodjump.setVolume(50.f);
	soundbarn.backbarn.setVolume(80.f);

	soundbarn.platform1.setSize(Vector2f(120, 20));
	soundbarn.platform1.setPosition(270, 210);
	soundbarn.platform1.setFillColor(Color::Transparent);

	soundbarn.platform2.setSize(Vector2f(120, 20));
	soundbarn.platform2.setPosition(272, 425);
	soundbarn.platform2.setFillColor(Color::Transparent);

	soundbarn.platform3.setSize(Vector2f(120, 20));
	soundbarn.platform3.setPosition(386, 320);
	soundbarn.platform3.setFillColor(Color::Transparent);


	soundbarn.stonePlatform.setSize(Vector2f(230.0f, 70.0f));
	soundbarn.stonePlatform.setPosition(414.0f, 530.0f);
	soundbarn.stonePlatform.setFillColor(Color::Transparent);


	soundbarn.levelfox.fox1_txt.loadFromFile("assets\\Level 5 final destination the barn\\fox.png");
	soundbarn.levelfox.fox2_txt.loadFromFile("assets\\Level 5 final destination the barn\\fox2.png");

	soundbarn.levelfox.fox_sp.setTexture(soundbarn.levelfox.fox1_txt);
	soundbarn.levelfox.fox_sp.setPosition(690, 530);
	soundbarn.levelfox.fox_sp.setOrigin(85, 52);

	soundgiantwalls.winZone.setScale(win_scale_x, win_scale_y);
	soundgiantwalls.winZone.setScale(1, 1);
	soundbarn.winZone.setSize(Vector2f(300.0f, 400.0f));
	soundbarn.winZone.setPosition(1000.0f, 300.0f);
	soundbarn.winZone.setFillColor(Color::Transparent);
}

void loadcharchaters(RenderWindow& window) {
	heroes.heroesArray[0].texture.loadFromFile("assets\\Sheeps\\Shirley.stand.png");
	heroes.heroesArray[1].texture.loadFromFile("assets\\Sheeps\\Shaun.stand.png");
	heroes.heroesArray[2].texture.loadFromFile("assets\\Sheeps\\Timmy.stand.png");

	for (int i = 0; i < 3; i++) {
		heroes.heroesArray[i].sprite.setTexture(heroes.heroesArray[i].texture);
	}

	heroes.walkHeroesArray[0].texture.loadFromFile("assets\\Sheeps\\Shirley.walk.png");
	heroes.walkHeroesArray[1].texture.loadFromFile("assets\\Sheeps\\Shaun.walk.png");
	heroes.walkHeroesArray[2].texture.loadFromFile("assets\\Sheeps\\Timmy.walk.png");

	for (int j = 0; j < 3; j++) {
		heroes.walkHeroesArray[j].sprite.setTexture(heroes.walkHeroesArray[j].texture);
	}

	heroes.jumpHeroesArray[0].texture.loadFromFile("assets\\Sheeps\\Shirley.jump.png");
	heroes.jumpHeroesArray[1].texture.loadFromFile("assets\\Sheeps\\Shaun.jump.png");
	heroes.jumpHeroesArray[2].texture.loadFromFile("assets\\Sheeps\\Timmy.jump.png");

	for (int k = 0; k < 3; k++) {
		heroes.jumpHeroesArray[k].sprite.setTexture(heroes.jumpHeroesArray[k].texture);
	}

}

void loadSheepIcons() {


	sheepIcons[0].normalTexture.loadFromFile("assets\\sheeps_icons\\shirley_normal.png");
	sheepIcons[1].normalTexture.loadFromFile("assets\\sheeps_icons\\shaun_normal.png");
	sheepIcons[2].normalTexture.loadFromFile("assets\\sheeps_icons\\timmy_normal.png");

	sheepIcons[0].selectedTexture.loadFromFile("assets\\sheeps_icons\\shirley_selected.png");
	sheepIcons[1].selectedTexture.loadFromFile("assets\\sheeps_icons\\shaun_selected.png");
	sheepIcons[2].selectedTexture.loadFromFile("assets\\sheeps_icons\\timmy_selected.png");
	for (int i = 0; i < 3; i++) {


		sheepIcons[i].sheep_icon_sprite.setTexture(sheepIcons[i].normalTexture);

		sheepIcons[i].sheep_icon_sprite.setPosition(830.0f + (i * 128.f), 45.f);
		sheepIcons[i].isSelected = false;
		sheepIcons[i].sheep_icon_sprite.setScale(0.28f, 0.28f);
	}
	// the first sheep is selected by default
	sheepIcons[0].isSelected = true;
	sheepIcons[0].sheep_icon_sprite.setTexture(sheepIcons[0].selectedTexture);
}

void loadintro(RenderWindow& window) {

	introstru.intro_txt[0].loadFromFile("assets\\intro and outro\\introstart.png");
	introstru.intro_txt[1].loadFromFile("assets\\intro and outro\\intro.1.png");
	introstru.intro_txt[2].loadFromFile("assets\\intro and outro\\intro.2.png");
	introstru.intro_txt[3].loadFromFile("assets\\intro and outro\\intro.3.png");
	introstru.intro_txt[4].loadFromFile("assets\\intro and outro\\intro.40.png");
	introstru.intro_txt[5].loadFromFile("assets\\intro and outro\\intro.50.png");
	introstru.intro_txt[6].loadFromFile("assets\\intro and outro\\intro.6.png");

	introstru.intro_sp[SCENES].setTexture(introstru.intro_txt[0]);

	introstru.backbtn_txt.loadFromFile("assets\\intro and outro\\arrowleft-removebg-preview.png");
	introstru.nextbtn_txt.loadFromFile("assets\\intro and outro\\arrowright-removebg-preview .png");
	introstru.skipbtn_txt.loadFromFile("assets\\intro and outro\\skipbutton-removebg-preview .png");

	introstru.backbtn_sp.setTexture(introstru.backbtn_txt);
	introstru.nextbtn_sp.setTexture(introstru.nextbtn_txt);
	introstru.skipbtn_sp.setTexture(introstru.skipbtn_txt);

	Vector2u introsize[SCENES], windowSize = window.getSize();
	Vector2u  backSize = introstru.backbtn_txt.getSize(),
		nextSize = introstru.nextbtn_txt.getSize(), skipSize = introstru.skipbtn_txt.getSize();

	float introscaleX[SCENES], introscaleY[SCENES];

	for (int currentscene = 0; currentscene < SCENES; currentscene++) {
		introsize[currentscene] = introstru.intro_txt[currentscene].getSize();
		introscaleX[currentscene] = 1280.0f / introsize[currentscene].x;
		introscaleY[currentscene] = 720.0f / introsize[currentscene].y;
		introstru.intro_sp[currentscene].setScale(introscaleX[currentscene], introscaleY[currentscene]);

		introstru.intro_sp[currentscene].setPosition(0, 0);
	}

	float backbtn_scaleX = (float)windowSize.x / backSize.x,
		nextbtn_scaleX = (float)windowSize.x / nextSize.x,
		skipbtn_scaleX = (float)windowSize.x / skipSize.x;

	float backbtn_scaleY = (float)windowSize.y / backSize.y,
		nextbtn_scaleY = (float)windowSize.y / nextSize.y,
		skipbtn_scaleY = (float)windowSize.y / skipSize.y;

	introstru.backbtn_sp.setScale(backbtn_scaleX, backbtn_scaleY);
	introstru.nextbtn_sp.setScale(nextbtn_scaleX, nextbtn_scaleY);
	introstru.skipbtn_sp.setScale(skipbtn_scaleX, skipbtn_scaleY);

	introstru.backbtn_sp.setScale(0.6f, 0.6f);
	introstru.nextbtn_sp.setScale(0.6f, 0.6f);
	introstru.skipbtn_sp.setScale(0.8f, 0.8f);

	introstru.backbtn_sp.setPosition(10, 620);
	introstru.nextbtn_sp.setPosition(1075, 620);
	introstru.skipbtn_sp.setPosition(1120, 0);

}

void loadoutro(RenderWindow& window) {

	outrostru.outro_txt[0].loadFromFile("assets\\intro and outro\\outro.1.png");
	outrostru.outro_txt[1].loadFromFile("assets\\intro and outro\\outro.2.png");
	outrostru.outro_txt[2].loadFromFile("assets\\intro and outro\\outro.3.png");
	outrostru.outro_txt[3].loadFromFile("assets\\intro and outro\\outro.4.png");
	outrostru.outro_txt[4].loadFromFile("assets\\intro and outro\\outro.5.png");
	outrostru.outro_txt[5].loadFromFile("assets\\intro and outro\\outroend.png");

	for (int i = 0; i < 6; i++) {

		outrostru.outro_sp[i].setTexture(outrostru.outro_txt[i]);
		outrostru.outro_sp[i].setScale(1280.0f / outrostru.outro_txt[i].getSize().x, 720.0f / outrostru.outro_txt[i].getSize().y);

		outrostru.outro_sp[i].setPosition(0, 0);
	}

	//outrostru.outro_sp[OUTROSCENES].setTexture(outrostru.outro_txt[0]);


	outrostru.backbtn_txt.loadFromFile("assets\\intro and outro\\arrowleft-removebg-preview.png");
	outrostru.nextbtn_txt.loadFromFile("assets\\intro and outro\\arrowright-removebg-preview .png");
	outrostru.skipbtn_txt.loadFromFile("assets\\intro and outro\\skipbutton-removebg-preview .png");
	outrostru.backtomenubtn_txt.loadFromFile("assets\\Level 5 final destination the barn\\backtomenu-removebg-preview.png");

	outrostru.backbtn_sp.setTexture(outrostru.backbtn_txt);
	outrostru.nextbtn_sp.setTexture(outrostru.nextbtn_txt);
	outrostru.skipbtn_sp.setTexture(outrostru.skipbtn_txt);
	outrostru.backtomenubtn_sp.setTexture(outrostru.backtomenubtn_txt);

	//from here we handle scenes & buttons scale
	Vector2u outrosize[OUTROSCENES], windowSize = window.getSize();
	Vector2u  backSize = outrostru.backbtn_txt.getSize(),
		nextSize = outrostru.nextbtn_txt.getSize(), skipSize = outrostru.skipbtn_txt.getSize(), backtomenuSize = outrostru.backtomenubtn_txt.getSize();

	float outroscaleX[OUTROSCENES], outroscaleY[OUTROSCENES];

	for (int currentscene = 0; currentscene < OUTROSCENES; currentscene++) {
		outrosize[currentscene] = outrostru.outro_txt[currentscene].getSize();
		outroscaleX[currentscene] = 1280.0f / outrosize[currentscene].x;
		outroscaleY[currentscene] = 720.0f / outrosize[currentscene].y;
		outrostru.outro_sp[currentscene].setScale(outroscaleX[currentscene], outroscaleY[currentscene]);

		outrostru.outro_sp[currentscene].setPosition(0, 0);
	}

	float backbtn_scaleX = (float)windowSize.x / backSize.x,
		nextbtn_scaleX = (float)windowSize.x / nextSize.x,
		skipbtn_scaleX = (float)windowSize.x / skipSize.x,
		backtomenubtn_scaleX = (float)windowSize.x / backtomenuSize.x;

	float backbtn_scaleY = (float)windowSize.y / backSize.y,
		nextbtn_scaleY = (float)windowSize.y / nextSize.y,
		skipbtn_scaleY = (float)windowSize.y / skipSize.y,
		backtomenubtn_scaleY = (float)windowSize.y / backtomenuSize.y;

	outrostru.backbtn_sp.setScale(backbtn_scaleX, backbtn_scaleY);
	outrostru.nextbtn_sp.setScale(nextbtn_scaleX, nextbtn_scaleY);
	outrostru.skipbtn_sp.setScale(skipbtn_scaleX, skipbtn_scaleY);
	outrostru.backtomenubtn_sp.setScale(backtomenubtn_scaleX, backtomenubtn_scaleY);

	outrostru.backbtn_sp.setScale(0.6f, 0.6f);
	outrostru.nextbtn_sp.setScale(0.6f, 0.6f);
	outrostru.skipbtn_sp.setScale(0.8f, 0.8f);
	outrostru.backtomenubtn_sp.setScale(0.3f, 0.3f);

	//its end

	outrostru.backbtn_sp.setPosition(10, 620);
	outrostru.nextbtn_sp.setPosition(1075, 620);
	outrostru.skipbtn_sp.setPosition(10, 0);
	outrostru.backtomenubtn_sp.setPosition(1080, 0);

	for (int i = 0; i < OUTROSCENES; i++) {
		outrostru.outro_sp[i].setTexture(outrostru.outro_txt[i]);
	}
}

/*void sheepToSheepCollision(float deltaTime) {
	// 1. تحديد الخروف النشط (اللي اللاعب بيحركه حالياً)
	int activeIdx = activeSheepIndex;
	Sprite& activeSheep = heroes.walkHeroesArray[activeIdx].sprite;
	FloatRect activeBounds = activeSheep.getGlobalBounds();

	// تضييق منطقة التصادم الجانبية لضمان سلاسة الحركة (مثل الـ Box)
	float pX = 20.0f;
	FloatRect activeCollisionBounds = activeBounds;
	activeCollisionBounds.left += pX;
	activeCollisionBounds.width -= (pX * 2);

	for (int i = 0; i < 3; i++) {
		if (i == activeIdx) continue; // لا نتصادم مع أنفسنا

		Sprite& targetSheep = heroes.walkHeroesArray[i].sprite;
		FloatRect targetBounds = targetSheep.getGlobalBounds();

		// 2. فحص التصادم بين الخروف النشط وأي خروف آخر
		if (activeCollisionBounds.intersects(targetBounds)) {

			// حساب المسافة الرأسية لمعرفة هل هو فوقه أم لا
			float overlapTop = (activeBounds.top + activeBounds.height) - targetBounds.top;

			// --- الحالة الأولى: الوقوف فوق ضهر الخروف الآخر (كأنه منصة) ---
			if (overlapTop < 40.0f && heroes.walkHeroesArray[activeIdx].velocityY >= 0) {

				// قيمة تصحيحية بسيطة لضمان ملامسة الأقدام للضهر (جربي 2.0f أو 5.0f)
				float groundCorrection = 5.0f;

				activeSheep.setPosition(activeSheep.getPosition().x, targetBounds.top - activeBounds.height + groundCorrection);
				heroes.walkHeroesArray[activeIdx].velocityY = 0;
				heroes.walkHeroesArray[activeIdx].isJumping = false;
			}
			// --- الحالة الثانية: التصادم الجانبي (دفع أو منع) ---
			else {
				float activeCenterX = activeCollisionBounds.left + (activeCollisionBounds.width / 2.0f);
				float targetCenterX = targetBounds.left + (targetBounds.width / 2.0f);

				// --- منطق الدفع (خاص بـ Shirley فقط) ---
				if (activeIdx == 0) { // لو Shirley هي اللي بتخبط
					bool pressingRight = sf::Keyboard::isKeyPressed(sf::Keyboard::Right);
					bool pressingLeft = sf::Keyboard::isKeyPressed(sf::Keyboard::Left);

					if (activeCenterX < targetCenterX) { // Shirley على الشمال وبتحرك يمين
						if (pressingRight) {
							// Shirley تزق الخروف التاني
							targetSheep.move(250.0f * deltaTime, 0);
							// تثبيت Shirley بجانب الخروف عشان متمشيش جواه
							activeSheep.setPosition(targetBounds.left - (activeBounds.width - pX), activeSheep.getPosition().y);
						}
					}
					else if (pressingLeft) { // Shirley على اليمين وبتحرك شمال
						// Shirley تزق الخروف التاني شمال
						targetSheep.move(-250.0f * deltaTime, 0);
						activeSheep.setPosition(targetBounds.left + targetBounds.width - pX, activeSheep.getPosition().y);
					}
				}
				// --- منطق المنع (باقي الخرفان يمنعوا بعض فقط دون دفع) ---
				else {
					if (activeCenterX < targetCenterX) {
						activeSheep.setPosition(targetBounds.left - (activeBounds.width - pX), activeSheep.getPosition().y);
					}
					else {
						activeSheep.setPosition(targetBounds.left + targetBounds.width - pX, activeSheep.getPosition().y);
					}
				}
			}
		}
	}
}*/

void Movement(float deltaTime) {
	//TUNNEL MOTION
	if ((selectedlvl == 2 ) && soundmill.isTimmyInTunnel && activeSheepIndex == 2) {

		float tunnelBottomY = soundmill.Tunnel_lvl3_sp.getPosition().y + 170.0f;

		if (heroes.walkHeroesArray[2].sprite.getPosition().y < tunnelBottomY) {
			isMoving = false;
		}
		else {
			isMoving = true;
			heroes.walkHeroesArray[2].isJumping = false;

			float startOfSlopeX = soundmill.Tunnel_lvl3_sp.getPosition().x + 170.0f; 

			float slopeIntensity = 0.5f; 

			float currentX = heroes.walkHeroesArray[2].sprite.getPosition().x;
			float currentY = heroes.walkHeroesArray[2].sprite.getPosition().y;

			if (currentX > startOfSlopeX) {
				float calculatedY = tunnelBottomY - ((currentX - startOfSlopeX) * slopeIntensity);

				if (calculatedY < groundLevels[2]) calculatedY = groundLevels[2];
				heroes.walkHeroesArray[2].sprite.setPosition(currentX, calculatedY);
		
				heroes.walkHeroesArray[2].sprite.setRotation(-10.0f);
			}
			else {
				heroes.walkHeroesArray[2].sprite.setPosition(currentX, tunnelBottomY);
				heroes.walkHeroesArray[2].sprite.setRotation(0.0f);
			}
			heroes.walkHeroesArray[2].velocityY = 0;

			if (Keyboard::isKeyPressed(Keyboard::Right)) {
				heroes.walkHeroesArray[2].sprite.move(soundmill.tunnelSpeed * deltaTime, 0);
				heroes.walkHeroesArray[2].sprite.setScale(0.5, 0.5);
				if (heroes.walkHeroesArray[2].sprite.getPosition().x >= soundmill.tunnelExitX) {
					soundmill.isTimmyInTunnel = false;
					heroes.walkHeroesArray[2].sprite.setPosition(soundmill.tunnelExitX, groundLevels[2]);
					heroes.walkHeroesArray[2].sprite.setRotation(0.0f);
					heroes.walkHeroesArray[2].velocityY = 0;

					return; 
				}
				return; 
			}
		}
	}

	//THE JUMP
	heroes.walkHeroesArray[0].jumpPower = -500.0f;
	heroes.walkHeroesArray[0].gravity = 2000.0f;

	heroes.walkHeroesArray[1].jumpPower = -600.0f;
	heroes.walkHeroesArray[1].gravity = 1300.0f;

	heroes.walkHeroesArray[2].jumpPower = -500.0f;
	heroes.walkHeroesArray[2].gravity = 2000.0f;

	isMoving = false;

	if (Keyboard::isKeyPressed(Keyboard::Right)) {
		heroes.walkHeroesArray[activeSheepIndex].sprite.move(250 * deltaTime, 0);
		isMoving = true;
		float currentScaleX = abs(heroes.walkHeroesArray[activeSheepIndex].sprite.getScale().x);
		float currentScaleY = abs(heroes.walkHeroesArray[activeSheepIndex].sprite.getScale().y);
		heroes.walkHeroesArray[activeSheepIndex].sprite.setScale(currentScaleX, currentScaleY);
	}
	if (Keyboard::isKeyPressed(Keyboard::Left)) {
		heroes.walkHeroesArray[activeSheepIndex].sprite.move(-250 * deltaTime, 0);
		isMoving = true;
		float currentScaleX = abs(heroes.walkHeroesArray[activeSheepIndex].sprite.getScale().x);
		float currentScaleY = abs(heroes.walkHeroesArray[activeSheepIndex].sprite.getScale().y);
		heroes.walkHeroesArray[activeSheepIndex].sprite.setScale(-currentScaleX, currentScaleY);

	}
	// WALK SOUNDS
	if (isMoving && !isWalkingNow) {
		soundgeneral.walk.play();
		isWalkingNow = true;
	}
	else if (!isMoving && isWalkingNow) {
		soundgeneral.walk.pause();
		isWalkingNow = false;
	}

	//THE JUMP
	if (Keyboard::isKeyPressed(Keyboard::Up) && !heroes.walkHeroesArray[activeSheepIndex].isJumping) {
		heroes.walkHeroesArray[activeSheepIndex].velocityY = heroes.walkHeroesArray[activeSheepIndex].jumpPower;
		heroes.walkHeroesArray[activeSheepIndex].isJumping = true;

		//JUMP SOUNDS
		switch (activeSheepIndex) {
		case 0: soundgeneral.jumpshirley.stop(); soundgeneral.jumpshirley.play(); break;
		case 1: soundgeneral.jumpshaun.stop(); soundgeneral.jumpshaun.play(); break;
		case 2: soundgeneral.jumptimmy.stop(); soundgeneral.jumptimmy.play(); break;
		}
	}

	heroes.walkHeroesArray[activeSheepIndex].velocityY += heroes.walkHeroesArray[activeSheepIndex].gravity * deltaTime;
	heroes.walkHeroesArray[activeSheepIndex].sprite.move(0, heroes.walkHeroesArray[activeSheepIndex].velocityY * deltaTime);//Pulls them down

	if (heroes.walkHeroesArray[activeSheepIndex].sprite.getPosition().y >= groundLevels[activeSheepIndex]) {
		if (!(activeSheepIndex == 2 && soundmill.isTimmyInTunnel)) {
			heroes.walkHeroesArray[activeSheepIndex].sprite.setPosition(heroes.walkHeroesArray[activeSheepIndex].sprite.getPosition().x, groundLevels[activeSheepIndex]);
			heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
			heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
		}
	}
}

void loselogic(RenderWindow& window) {
	if (selectedlvl == 1) {
		if (heroes.heroesArray[0].sprite.getGlobalBounds().intersects(menu.loseground.getGlobalBounds()) ||
			heroes.heroesArray[1].sprite.getGlobalBounds().intersects(menu.loseground.getGlobalBounds()) ||
			heroes.heroesArray[2].sprite.getGlobalBounds().intersects(menu.loseground.getGlobalBounds())) {
			currentwindow = 7;
			soundontheroof.backontheroof.pause();
			soundgeneral.lose.play();
			state.islose = true;
		}
	}
	else if (selectedlvl == 4) {
		if (soundbarn.isBroken) {
			currentwindow = 7;
			soundbarn.backbarn.stop();
			soundgeneral.lose.play();
			state.islose = true;
			soundbarn.isBroken = false;
		}
	}
}

void drawSheepIcons(RenderWindow& window) {
	for (int i = 0; i < 3; i++) {
		window.draw(sheepIcons[i].sheep_icon_sprite);
	}
}

void DrawLevel1(RenderWindow& window) {

	window.draw(soundforest.Level1_background_sp);
	window.draw(soundforest.Hay_lvl1_sp);
	window.draw(soundforest.Arrow_sign_lvl1_sp);
	window.draw(soundforest.LongStick_lvl1_sp);
	window.draw(soundforest.ShortStick_lvl1_sp);
	window.draw(soundforest.Stone_wall_lvl1_sp);
	window.draw(soundforest.Floating_pillar_lvl1_sp);
	window.draw(icons.retry_sp);
	window.draw(icons.pause_sp);
	window.draw(soundforest.winZone);

}

void DrawLevel2(RenderWindow& window) {


	window.draw(soundontheroof.lvl2_background_sp);

	window.draw(menu.loseground);

	window.draw(soundontheroof.home_lvl2_sp);

	window.draw(soundontheroof.bridge_lvl2_sp);

	window.draw(soundontheroof.wood_lvl2_sp);

	window.draw(soundontheroof.sign_lvl2_sp);

	window.draw(soundontheroof.box_lvl2_sp);

	window.draw(icons.retry_sp);

	window.draw(icons.pause_sp);

	window.draw(soundontheroof.winZone);

}

void Drawlevel3(RenderWindow& window)
{

	window.draw(soundmill.Background_lvl3_sp);
	window.draw(soundmill.Tunnel_lvl3_sp);
	window.draw(soundmill.Blue_lvl3_sp);
	window.draw(soundmill.Wooden_Column_lvl3_sp);
	window.draw(soundmill.Button_lvl3_sp);
	window.draw(soundmill.Arrow_Sign_lvl3_sp);
	window.draw(soundmill.Box_lvl3_sp);
	window.draw(icons.retry_sp);
	window.draw(icons.pause_sp);
	window.draw(soundmill.winZone);

}

void DrawLevel4(RenderWindow& window) {
	window.draw(soundgiantwalls.Level4_background_sp);
	window.draw(soundgiantwalls.plateforms_lv4_sp);
	window.draw(soundgiantwalls.Arrow_sign_lvl4_sp);
	window.draw(soundgiantwalls.Swichable_Barrier_lvl4_sp);
	window.draw(icons.retry_sp);
	window.draw(icons.pause_sp);
	window.draw(soundgiantwalls.winZone);

}

void DrawLevel5(RenderWindow& window) {
	window.draw(soundbarn.background_level5_sp);
	window.draw(soundbarn.shadowSign);
	window.draw(soundbarn.sign_lvl5_sp);

	window.draw(soundbarn.shadowStick);
	window.draw(soundbarn.stick_lvl5_sp);

	window.draw(soundbarn.stonenight_lvl5_sp);
	if (!soundbarn.buttonispressed) {
		window.draw(soundbarn.button_lvl5_sp);
	}
	else {
		window.draw(soundbarn.button_on_lvl5_sp);
	}
	window.draw(soundbarn.levelfox.fox_sp);
	window.draw(soundbarn.shadowCage);
	window.draw(soundbarn.cage_lvl5_sp);
	window.draw(soundbarn.platform1);
	window.draw(soundbarn.platform2);
	window.draw(soundbarn.platform3);
	window.draw(soundbarn.stonePlatform);
	window.draw(icons.retry_sp);
	window.draw(icons.pause_sp);
	window.draw(soundbarn.winZone);

}

void collisionhay(RenderWindow& window, float deltaTime) {

	Sprite& hay = soundforest.Hay_lvl1_sp;
	FloatRect hayBounds = hay.getGlobalBounds();

	Sprite currentSheep;

	if (activeSheepIndex == 0) {
		currentSheep = heroes.walkHeroesArray[0].sprite;
	}
	else if (activeSheepIndex == 1) {
		currentSheep = heroes.walkHeroesArray[1].sprite;
	}
	else if (activeSheepIndex == 2) {
		currentSheep = heroes.walkHeroesArray[2].sprite;
	}
	FloatRect sheepBounds = currentSheep.getGlobalBounds();

	float pX = 20.0f;
	FloatRect sheepColBounds = sheepBounds;
	sheepColBounds.left += pX;
	sheepColBounds.width -= (pX * 2);

	if (sheepColBounds.intersects(hayBounds)) {

		float overlapTop = (sheepBounds.top + sheepBounds.height) - hayBounds.top;
		float overlapBottom = (hayBounds.top + hayBounds.height) - sheepBounds.top;
		float overlapLeft = (sheepBounds.left + sheepBounds.width) - hayBounds.left;
		float overlapRight = (hayBounds.left + hayBounds.width) - sheepBounds.left;

		float minOverlapX = min(overlapLeft, overlapRight);
		float minOverlapY = min(overlapTop, overlapBottom);

		if (minOverlapY < minOverlapX) {


			if (overlapTop < overlapBottom && heroes.walkHeroesArray[activeSheepIndex].velocityY >= 0) {

				currentSheep.setPosition(currentSheep.getPosition().x, hayBounds.top);
				heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
				heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
			}
		}

		else {
			float sheepCenterX = sheepColBounds.left + (sheepColBounds.width / 2.0f);
			float hayCenterX = hayBounds.left + (hayBounds.width / 2.0f);

			if (activeSheepIndex == 0) {
				bool pressingRight = Keyboard::isKeyPressed(Keyboard::Right);
				bool pressingLeft = Keyboard::isKeyPressed(Keyboard::Left);

				if (sheepCenterX < hayCenterX) {
					if (pressingRight) {
						soundforest.hayVelocityX = 180.0f;
					}

					currentSheep.setPosition(hayBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else if (pressingLeft) {
					soundforest.hayVelocityX = -180.0f;
					currentSheep.setPosition(hayBounds.left + hayBounds.width - pX, currentSheep.getPosition().y);
				}
			}
			else if (activeSheepIndex == 1) {
				bool pressingRight = Keyboard::isKeyPressed(Keyboard::Right);
				bool pressingLeft = Keyboard::isKeyPressed(Keyboard::Left);

				if (sheepCenterX < hayCenterX) {
					if (pressingRight) {
						soundforest.hayVelocityX = 100.0f;
					}

					currentSheep.setPosition(hayBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else if (pressingLeft) {
					soundforest.hayVelocityX = -100.0f;
					currentSheep.setPosition(hayBounds.left + hayBounds.width - pX, currentSheep.getPosition().y);
				}
			}

			else {
				if (sheepCenterX < hayCenterX) {
					currentSheep.setPosition(hayBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else {
					currentSheep.setPosition(hayBounds.left + hayBounds.width - pX, currentSheep.getPosition().y);
				}
			}
		}

		if (activeSheepIndex == 0 && soundforest.hayVelocityX != 0 && soundforest.hayfall.getStatus() != Sound::Playing) {
			soundforest.hayfall.play();
		}
	}
	else {
		soundforest.hayVelocityX *= 0.90f;
		if (abs(soundforest.hayVelocityX) < 1.0f) {
			soundforest.hayVelocityX = 0;
			if (soundforest.hayfall.getStatus() == Sound::Playing) soundforest.hayfall.stop();
		}
	}

	hay.move(soundforest.hayVelocityX * deltaTime, 0);
}

void collisionshrtstick(RenderWindow& window, float deltaTime) {

	Sprite& shrtstick = soundforest.ShortStick_lvl1_sp;
	FloatRect shrtBounds = soundforest.ShortStick_lvl1_sp.getGlobalBounds();

	Sprite currentSheep;

	if (activeSheepIndex == 0) {
		currentSheep = heroes.walkHeroesArray[0].sprite;
	}
	else if (activeSheepIndex == 1) {
		currentSheep = heroes.walkHeroesArray[1].sprite;
	}
	else if (activeSheepIndex == 2) {
		currentSheep = heroes.walkHeroesArray[2].sprite;
	}
	FloatRect sheepBounds = currentSheep.getGlobalBounds();

	float pX = 20.0f;
	FloatRect sheepColBounds = sheepBounds;
	sheepColBounds.left += pX;
	sheepColBounds.width -= (pX * 2);

	if (sheepColBounds.intersects(shrtBounds)) {

		float overlapTop = (sheepBounds.top + sheepBounds.height) - shrtBounds.top;
		float overlapBottom = (shrtBounds.top + shrtBounds.height) - sheepBounds.top;
		float overlapLeft = (sheepBounds.left + sheepBounds.width) - shrtBounds.left;
		float overlapRight = (shrtBounds.left + shrtBounds.width) - sheepBounds.left;

		float minOverlapX = min(overlapLeft, overlapRight);
		float minOverlapY = min(overlapTop, overlapBottom);

		if (minOverlapY < minOverlapX) {


			if (overlapTop < overlapBottom && heroes.walkHeroesArray[activeSheepIndex].velocityY >= 0) {

				currentSheep.setPosition(currentSheep.getPosition().x, shrtBounds.top);
				heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
				heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
			}
		}

		else {
			float sheepCenterX = sheepColBounds.left + (sheepColBounds.width / 2.0f);
			float shrtCenterX = shrtBounds.left + (shrtBounds.width / 2.0f);

			if (activeSheepIndex == 0) {
				bool pressingRight = Keyboard::isKeyPressed(Keyboard::Right);
				bool pressingLeft = Keyboard::isKeyPressed(Keyboard::Left);

				if (sheepCenterX < shrtCenterX) {
					if (pressingRight) {
						soundforest.shrtVelocityX = 180.0f;
					}

					currentSheep.setPosition(shrtBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else if (pressingLeft) {
					soundforest.shrtVelocityX = -180.0f;
					currentSheep.setPosition(shrtBounds.left + shrtBounds.width - pX, currentSheep.getPosition().y);
				}
			}
			else if (activeSheepIndex == 1) {
				bool pressingRight = Keyboard::isKeyPressed(Keyboard::Right);
				bool pressingLeft = Keyboard::isKeyPressed(Keyboard::Left);

				if (sheepCenterX < shrtCenterX) {
					if (pressingRight) {
						soundforest.shrtVelocityX = 100.0f;
					}

					currentSheep.setPosition(shrtBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else if (pressingLeft) {
					soundforest.shrtVelocityX = -100.0f;
					currentSheep.setPosition(shrtBounds.left + shrtBounds.width - pX, currentSheep.getPosition().y);
				}
			}
			else {
				if (sheepCenterX < shrtCenterX) {
					currentSheep.setPosition(shrtBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else {
					currentSheep.setPosition(shrtBounds.left + shrtBounds.width - pX, currentSheep.getPosition().y);
				}
			}
		}

		if (activeSheepIndex == 0 && soundforest.shrtVelocityX != 0 && soundforest.wood.getStatus() != Sound::Playing) {
			soundforest.wood.play();
		}
	}
	else {
		soundforest.shrtVelocityX *= 0.90f;
		if (abs(soundforest.shrtVelocityX) < 1.0f) {
			soundforest.shrtVelocityX = 0;
			if (soundforest.wood.getStatus() == Sound::Playing) soundforest.wood.stop();
		}
	}

	shrtstick.move(soundforest.shrtVelocityX * deltaTime, 0);
}

void collisionlngstick(RenderWindow& window, float deltaTime) {

	Sprite& lngstick = soundforest.LongStick_lvl1_sp;
	FloatRect lngstckBounds = soundforest.LongStick_lvl1_sp.getGlobalBounds();

	Sprite currentSheep;

	if (activeSheepIndex == 0) {
		currentSheep = heroes.walkHeroesArray[0].sprite;
	}
	else if (activeSheepIndex == 1) {
		currentSheep = heroes.walkHeroesArray[1].sprite;
	}
	else if (activeSheepIndex == 2) {
		currentSheep = heroes.walkHeroesArray[2].sprite;
	}
	FloatRect sheepBounds = currentSheep.getGlobalBounds();

	float pX = 20.0f;
	FloatRect sheepColBounds = sheepBounds;
	sheepColBounds.left += pX;
	sheepColBounds.width -= (pX * 2);

	if (sheepColBounds.intersects(lngstckBounds)) {

		float overlapTop = (sheepBounds.top + sheepBounds.height) - lngstckBounds.top;
		float overlapBottom = (lngstckBounds.top + lngstckBounds.height) - sheepBounds.top;
		float overlapLeft = (sheepBounds.left + sheepBounds.width) - lngstckBounds.left;
		float overlapRight = (lngstckBounds.left + lngstckBounds.width) - sheepBounds.left;

		float minOverlapX = min(overlapLeft, overlapRight);
		float minOverlapY = min(overlapTop, overlapBottom);

		if (minOverlapY < minOverlapX) {


			if (overlapTop < overlapBottom && heroes.walkHeroesArray[activeSheepIndex].velocityY >= 0) {

				currentSheep.setPosition(currentSheep.getPosition().x, lngstckBounds.top);
				heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
				heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
			}
		}

		else {
			float sheepCenterX = sheepColBounds.left + (sheepColBounds.width / 2.0f);
			float lngstckCenterX = lngstckBounds.left + (lngstckBounds.width / 2.0f);

			if (activeSheepIndex == 0) {
				bool pressingRight = Keyboard::isKeyPressed(Keyboard::Right);
				bool pressingLeft = Keyboard::isKeyPressed(Keyboard::Left);

				if (sheepCenterX < lngstckCenterX) {
					if (pressingRight) {
						soundforest.lngstckVelocityX = 180.0f;
					}

					currentSheep.setPosition(lngstckBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else if (pressingLeft) {
					soundforest.lngstckVelocityX = -180.0f;
					currentSheep.setPosition(lngstckBounds.left + lngstckBounds.width - pX, currentSheep.getPosition().y);
				}
			}
			else if (activeSheepIndex == 1) {
				bool pressingRight = Keyboard::isKeyPressed(Keyboard::Right);
				bool pressingLeft = Keyboard::isKeyPressed(Keyboard::Left);

				if (sheepCenterX < lngstckCenterX) {
					if (pressingRight) {
						soundforest.lngstckVelocityX = 100.0f;
					}

					currentSheep.setPosition(lngstckBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else if (pressingLeft) {
					soundforest.lngstckVelocityX = -100.0f;
					currentSheep.setPosition(lngstckBounds.left + lngstckBounds.width - pX, currentSheep.getPosition().y);
				}
			}
			else {
				if (sheepCenterX < lngstckCenterX) {
					currentSheep.setPosition(lngstckBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
				}
				else {
					currentSheep.setPosition(lngstckBounds.left + lngstckBounds.width - pX, currentSheep.getPosition().y);
				}
			}
		}


		if (activeSheepIndex == 0 && soundforest.lngstckVelocityX != 0 && soundforest.wood.getStatus() != Sound::Playing) {
			soundforest.wood.play();
		}
	}
	else {

		soundforest.lngstckVelocityX *= 0.90f;
		if (abs(soundforest.lngstckVelocityX) < 1.0f) {
			soundforest.lngstckVelocityX = 0;
			if (soundforest.wood.getStatus() == Sound::Playing) soundforest.wood.stop();
		}
	}

	lngstick.move(soundforest.lngstckVelocityX * deltaTime, 0);
}

void collisionstone(RenderWindow& window, float deltaTime) {

	Sprite& stone = soundforest.Stone_wall_lvl1_sp;
	FloatRect stoneBounds = soundforest.Stone_wall_lvl1_sp.getGlobalBounds();

	Sprite currentSheep;

	if (activeSheepIndex == 0) {
		currentSheep = heroes.walkHeroesArray[0].sprite;
	}
	else if (activeSheepIndex == 1) {
		currentSheep = heroes.walkHeroesArray[1].sprite;
	}
	else if (activeSheepIndex == 2) {
		currentSheep = heroes.walkHeroesArray[2].sprite;
	}
	FloatRect sheepBounds = currentSheep.getGlobalBounds();

	float pX = 20.0f;
	FloatRect sheepColBounds = sheepBounds;
	sheepColBounds.left += pX;
	sheepColBounds.width -= (pX * 2);

	if (sheepColBounds.intersects(stoneBounds)) {

		float overlapTop = (sheepBounds.top + sheepBounds.height) - stoneBounds.top;
		float overlapBottom = (stoneBounds.top + stoneBounds.height) - sheepBounds.top;
		float overlapLeft = (sheepBounds.left + sheepBounds.width) - stoneBounds.left;
		float overlapRight = (stoneBounds.left + stoneBounds.width) - sheepBounds.left;

		float minOverlapX = min(overlapLeft, overlapRight);
		float minOverlapY = min(overlapTop, overlapBottom);

		if (minOverlapY < minOverlapX) {
			if (overlapTop < overlapBottom && heroes.walkHeroesArray[activeSheepIndex].velocityY >= 0) {

				currentSheep.setPosition(currentSheep.getPosition().x, stoneBounds.top);
				heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
				heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
			}
		}

		float sheepCenterX = sheepColBounds.left + (sheepColBounds.width / 2.0f);
		float stoneCenterX = stoneBounds.left + (stoneBounds.width / 2.0f);

		if (sheepCenterX < stoneCenterX) {
			currentSheep.setPosition(stoneBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
		}
		else {
			currentSheep.setPosition(stoneBounds.left + stoneBounds.width - pX, currentSheep.getPosition().y);
		}
	}
}

void collisionpillar(RenderWindow& window, float deltaTime) {

	Sprite& pillar = soundforest.Floating_pillar_lvl1_sp;
	FloatRect pillarBounds = soundforest.Floating_pillar_lvl1_sp.getGlobalBounds();

	Sprite currentSheep;

	if (activeSheepIndex == 0) {
		currentSheep = heroes.walkHeroesArray[0].sprite;
	}
	else if (activeSheepIndex == 1) {
		currentSheep = heroes.walkHeroesArray[1].sprite;
	}
	else if (activeSheepIndex == 2) {
		currentSheep = heroes.walkHeroesArray[2].sprite;
	}
	FloatRect sheepBounds = currentSheep.getGlobalBounds();

	float pX = 20.0f;
	FloatRect sheepColBounds = sheepBounds;
	sheepColBounds.left += pX;
	sheepColBounds.width -= (pX * 2);

	if (sheepColBounds.intersects(pillarBounds)) {

		float overlapTop = (sheepBounds.top + sheepBounds.height) - pillarBounds.top;
		float overlapBottom = (pillarBounds.top + pillarBounds.height) - sheepBounds.top;
		float overlapLeft = (sheepBounds.left + sheepBounds.width) - pillarBounds.left;
		float overlapRight = (pillarBounds.left + pillarBounds.width) - sheepBounds.left;

		float minOverlapX = min(overlapLeft, overlapRight);
		float minOverlapY = min(overlapTop, overlapBottom);

		if (minOverlapY < minOverlapX) {


			if (overlapTop < overlapBottom && heroes.walkHeroesArray[activeSheepIndex].velocityY >= 0) {

				currentSheep.setPosition(currentSheep.getPosition().x, pillarBounds.top);
				heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
				heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
			}
		}

		else {
			float sheepCenterX = sheepColBounds.left + (sheepColBounds.width / 2.0f);
			float pillarCenterX = pillarBounds.left + (pillarBounds.width / 2.0f);

			if (sheepCenterX < pillarCenterX) {
				currentSheep.setPosition(pillarBounds.left - (sheepBounds.width - pX), currentSheep.getPosition().y);
			}
			else {
				currentSheep.setPosition(pillarBounds.left + pillarBounds.width - pX, currentSheep.getPosition().y);
			}
		}

	}
}

void resetLevel1(RenderWindow& window) {
	soundforest.Hay_lvl1_sp.setPosition(627, 330);
	soundforest.LongStick_lvl1_sp.setPosition(725, 440);
	soundforest.ShortStick_lvl1_sp.setPosition(695, 440);
	levelBeggining = false;
	soundforest.winZone.setPosition(1000.0f, 300.0f);
	//velocity , jump , sheep ,collosion 
};

void resetLevel2(RenderWindow& window) {
	soundontheroof.wood_lvl2_sp.setPosition(235, 325);
	soundontheroof.box_lvl2_sp.setPosition(550, 380);
	menu.loseground.setPosition(630, 600);
	levelBeggining = false;
	//velocity , jump , sheep ,collosion
}

void resetLevel3(RenderWindow& window) {
	soundmill.boxVelocityX = 0;
	soundmill.Wooden_Column_lvl3_sp.setPosition(668, 135);
	soundmill.woodenColumnTargetY = 135.0f;
	soundmill.Button_lvl3_sp.setTexture(soundmill.Button_lvl3_txt);
	soundmill.Button_lvl3_sp.setPosition(730, 492);
	soundmill.Box_lvl3_sp.setPosition(540, 445);
	soundmill.Red_Ballon1_lvl3_sp.setPosition(340, 435);
	soundmill.Red_Ballon2_lvl3_sp.setPosition(295, 435);
	soundmill.Red_Ballon3_lvl3_sp.setPosition(250, 435);
	soundmill.isTimmyInTunnel = false;
	levelBeggining = false;
}

void resetLevel4(RenderWindow& window) {
	soundgiantwalls.plateforms_lv4_sp.setPosition(340, 350);
	soundgiantwalls.Swichable_Barrier_lvl4_sp.setPosition(1010, 350);
	levelBeggining = false;
	//velocity , jump , sheep ,collosion

	heroes.walkHeroesArray[0].sprite.setPosition(137, 503);
	heroes.walkHeroesArray[1].sprite.setPosition(158, 448);
	heroes.walkHeroesArray[2].sprite.setPosition(180, 432);
	for (int i = 0; i < 3; i++) {
		heroes.walkHeroesArray[i].velocityY = 0;
		heroes.walkHeroesArray[i].isJumping = false;
		heroes.heroesArray[i].sprite.setPosition(heroes.walkHeroesArray[i].sprite.getPosition());
	}
}

void resetLevel5(RenderWindow& window) {
	soundbarn.buttonispressed = false;
	soundbarn.isFoxTrapped = false;
	soundbarn.prisonfalling = false;
	soundbarn.isLanded = false;
	soundbarn.fallspeed = 0;
	// Button back to it's original positions
	soundbarn.button_lvl5_sp.setTexture(soundbarn.button_lvl5_txt);
	soundbarn.button_lvl5_sp.setScale(0.09f, 0.09f);
	soundbarn.button_lvl5_sp.setPosition(460, 360);
	levelBeggining = false;

	// Cage back to its original position
	soundbarn.cage_lvl5_sp.setPosition(816, -35);
	soundbarn.cage_lvl5_sp.setScale(0.9f, 0.9f);
	soundbarn.cage_lvl5_sp.setTexture(soundbarn.cage_lvl5_txt);

	//fox original position
	soundbarn.levelfox.fox_sp.setColor(Color::White);
	soundbarn.levelfox.isTrapped = false;
	soundbarn.isFoxTrapped = false;
	soundbarn.levelfox.fox_sp.setPosition(690, 530);
	soundbarn.levelfox.speed = 0.15f; //restore movement
	soundbarn.levelfox.fox_sp.setScale(1.0f, 1.0f); //face right
	soundbarn.levelfox.currentframe = 0;
	soundbarn.levelfox.timer = 0.0f;
	soundbarn.levelfox.fox_sp.setTexture(soundbarn.levelfox.fox1_txt);

	//velocity , jump , sheep ,collosion
	heroes.walkHeroesArray[0].sprite.setPosition(33, 600);
	heroes.walkHeroesArray[1].sprite.setPosition(60, 385);
	heroes.walkHeroesArray[2].sprite.setPosition(92, 375);

	for (int i = 0; i < 3; i++) {
		heroes.walkHeroesArray[i].velocityY = 0;
		heroes.walkHeroesArray[i].isJumping = false;
		heroes.heroesArray[i].sprite.setPosition(heroes.walkHeroesArray[i].sprite.getPosition());
	}
}

void resetLevel(int selectedlvl, RenderWindow& window) {
	if (selectedlvl == 0) resetLevel1(window);
	else if (selectedlvl == 1) resetLevel2(window);
	else if (selectedlvl == 2) resetLevel3(window);
	else if (selectedlvl == 3) resetLevel4(window);
	else if (selectedlvl == 4) resetLevel5(window);

	soundforest.is_won = false;
	soundontheroof.is_won = false;
	soundmill.is_won = false;
	soundgiantwalls.is_won = false;
	soundbarn.is_won = false;
}

void intro(RenderWindow& window) {

	View view(FloatRect(0, 0, 1280, 720));
	window.setView(view);

	while (window.isOpen() && introstru.introrun) {

		Event event;

		introstru.intro_sp[introstru.currentscene].setTexture(introstru.intro_txt[introstru.currentscene], true);


		while (window.pollEvent(event)) {
			if (event.type == Event::Closed)window.close();

			if (event.type == Event::MouseButtonPressed && event.mouseButton.button == Mouse::Left)
			{
				Vector2f mousePos = window.mapPixelToCoords(Mouse::getPosition(window));

				if (introstru.nextbtn_sp.getGlobalBounds().contains(mousePos)) {
					if (introstru.currentscene < SCENES - 1) {
						introstru.currentscene++;
					}
					else {
						introstru.introrun = false;
						currentwindow = 2;
						selectedlvl = 0;
						myTimer.startLevel(selectedlvl);
						soundgeneral.intro.pause();
						soundforest.backforest.play();
					}
				}

				if (introstru.backbtn_sp.getGlobalBounds().contains(mousePos)) {
					if (introstru.currentscene > 0) {
						introstru.currentscene--;
					}
				}

				if (introstru.skipbtn_sp.getGlobalBounds().contains(mousePos)) {
					introstru.introrun = false;
				}

				if (introstru.skipbtn_sp.getGlobalBounds().contains(mousePos)) {
					soundgeneral.intro.pause();
					//currentwindow = 2;
					selectedlvl = 0;
					soundforest.backforest.play();
					myTimer.startLevel(selectedlvl);
				}
			}
		}

		window.clear();
		window.draw(introstru.intro_sp[introstru.currentscene]);

		if (introstru.currentscene > 0) {
			window.draw(introstru.backbtn_sp);
		}

		window.draw(introstru.nextbtn_sp);

		if (introstru.currentscene < SCENES - 1) {
			window.draw(introstru.skipbtn_sp);
		}

		window.display();

	}
}

void outro(RenderWindow& window) {

	View view(sf::FloatRect(0, 0, 1280, 720));
	window.setView(view);

	/*to help lag
	window.clear();
	window.draw(outrostru.outro_sp[0]);
	window.draw(outrostru.nextbtn_sp);
	window.draw(outrostru.skipbtn_sp);
	window.display();*/

	while (window.isOpen() && outrostru.outrorun) {

		Event event;

		//outrostru.outro_sp[outrostru.currentscene].setTexture(outrostru.outro_txt[outrostru.currentscene], true);


		while (window.pollEvent(event)) {
			if (event.type == Event::Closed)window.close();

			if (event.type == Event::MouseButtonPressed && event.mouseButton.button == Mouse::Left)
			{
				Vector2f mousePos = window.mapPixelToCoords(Mouse::getPosition(window));

				if (outrostru.nextbtn_sp.getGlobalBounds().contains(mousePos)) {
					if (outrostru.currentscene < OUTROSCENES - 1) {
						outrostru.currentscene++;
					}
				}

				if (outrostru.backbtn_sp.getGlobalBounds().contains(mousePos)) {
					if (outrostru.currentscene > 0) {
						outrostru.currentscene--;
					}
				}

				if (outrostru.skipbtn_sp.getGlobalBounds().contains(mousePos)) {
					outrostru.currentscene = OUTROSCENES - 1;
				}

				if (outrostru.backtomenubtn_sp.getGlobalBounds().contains(mousePos)) {
					soundgeneral.end.pause();
					outrostru.outrorun = false;
					currentwindow = 0;
					if (soundgeneral.menusound) soundgeneral.menu.play();
				}

			}
		}

		window.clear();
		window.draw(outrostru.outro_sp[outrostru.currentscene]);

		if (outrostru.currentscene > 0) {
			window.draw(outrostru.backbtn_sp);
		}

		if (outrostru.currentscene <= OUTROSCENES - 2) {
			window.draw(outrostru.nextbtn_sp);
		}

		if (outrostru.currentscene <= OUTROSCENES - 2) {
			window.draw(outrostru.skipbtn_sp);
		}

		if (outrostru.currentscene == OUTROSCENES - 1) {
			window.draw(outrostru.backtomenubtn_sp);
		}

		window.display();

	}
}

void winlogic(RenderWindow& window) {

	switch (selectedop) {//retry map next

	case 1://retry

		currentwindow = 2;
		soundgeneral.win.stop();
		resetLevel(selectedlvl, window);
		break;

	case 2://map

		if (selectedlvl == 0) {
			soundgeneral.win.stop();
			currentwindow = 1;
			selected = 0;
			selectedop = 1;

			if (soundgeneral.menusound && soundgeneral.enterlvl) {
				soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
				soundgeneral.menu.play();
			}

			menu.wintxt[WIN - 1].setFillColor(Color::White);
			menu.wintxt[1].setFillColor(Color::Black);
		}
		else if (selectedlvl == 1) {
			soundgeneral.win.stop();
			currentwindow = 1;
			selected = 1;
			selectedop = 1;

			if (soundgeneral.menusound && soundgeneral.enterlvl) {
				soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
				soundgeneral.menu.play();
			}

			menu.wintxt[WIN - 1].setFillColor(Color::White);
			menu.wintxt[1].setFillColor(Color::Black);
		}
		else if (selectedlvl == 2) {
			soundgeneral.win.stop();
			currentwindow = 1;
			selected = 2;
			selectedop = 1;

			if (soundgeneral.menusound && soundgeneral.enterlvl) {
				soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
				soundgeneral.menu.play();
			}

			menu.wintxt[WIN - 1].setFillColor(Color::White);
			menu.wintxt[1].setFillColor(Color::Black);
		}
		else if (selectedlvl == 3) {
			soundgeneral.win.stop();
			currentwindow = 1;
			selected = 3;
			selectedop = 1;

			if (soundgeneral.menusound && soundgeneral.enterlvl) {
				soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
				soundgeneral.menu.play();
			}

			menu.wintxt[WIN - 1].setFillColor(Color::White);
			menu.wintxt[1].setFillColor(Color::Black);
		}
		else if (selectedlvl == 4) {
			soundgeneral.win.stop();
			currentwindow = 1;
			selected = 4;
			selectedop = 1;

			if (soundgeneral.menusound && soundgeneral.enterlvl) {
				soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
				soundgeneral.menu.play();
			}

			menu.wintxt[WIN - 1].setFillColor(Color::White);
			menu.wintxt[1].setFillColor(Color::Black);
		}

		break;

	case 3://next
		soundgeneral.win.stop();

		if (selectedlvl < 4) {
			selectedlvl++; //To start the next level after winning the current one
			currentwindow = 2;
			//needReset = true;
			resetLevel(selectedlvl, window);
			myTimer.startLevel(selectedlvl);
			soundforest.is_won = false;
			soundontheroof.is_won = false;
			soundmill.is_won = false;
			soundgiantwalls.is_won = false;
			soundbarn.is_won = false;

		}
		else {
			currentwindow = 10;
		}
		break;
	}

}

void updateSheepIcons(RenderWindow& window) {
	Vector2f mousePos = window.mapPixelToCoords(Mouse::getPosition(window));

	for (int i = 0; i < 3; i++) {

		if (sheepIcons[i].sheep_icon_sprite.getGlobalBounds().contains(mousePos.x, mousePos.y)) {
			activeSheepIndex = i;


			for (int j = 0; j < 3; j++) {
				if (j == i) {
					sheepIcons[j].sheep_icon_sprite.setTexture(sheepIcons[j].selectedTexture);
				}
				else {
					sheepIcons[j].sheep_icon_sprite.setTexture(sheepIcons[j].normalTexture);
				}
			}
		}
	}
}

bool islevelunlocked[5] = { true, false, false, false, false }; // Array to track unlocked levels

void updateLevelUnlocks(RenderWindow& window) {
	for (int i = 0; i < 5; i++) {
		if (!islevelunlocked[i]) {

			CircleShape overlay(26);
			overlay.setOrigin(26, 26);
			overlay.setPosition(levelPositions[i - 1].x, levelPositions[i - 1].y);
			overlay.setFillColor(Color(0, 0, 0, 160));
			window.draw(overlay);


			menu.lvls_lock_sp.setScale(0.08f, 0.08f);
			FloatRect lockBounds = menu.lvls_lock_sp.getGlobalBounds();
			menu.lvls_lock_sp.setOrigin(lockBounds.width / 2.f / 0.08f, lockBounds.height / 2.f / 0.08f);
			menu.lvls_lock_sp.setPosition(levelPositions[i - 1]);
			window.draw(menu.lvls_lock_sp);
		}
	}

}

void update(RenderWindow& window, float deltatime) {

	while (window.pollEvent(event)) {
		if (event.type == Event::Closed)
			window.close();



		if (event.type == sf::Event::MouseButtonPressed) {
			if (event.mouseButton.button == Mouse::Left) {
				if (currentwindow == 2)
					updateSheepIcons(window);
			}
		}

		switch (currentwindow) {

		case 0://main

			if (event.type == Event::KeyPressed) {

				if (event.key.code == Keyboard::Up) {

					menu.menutxt[selected].setFillColor(Color::White);
					selected--;
					if (selected < 0)
						selected = MAIN - 1;
					menu.menutxt[selected].setFillColor(Color::Black);

				}

				else if (event.key.code == Keyboard::Down) {

					menu.menutxt[selected].setFillColor(Color::White);
					selected++;
					if (selected > MAIN - 1)
						selected = 0;
					menu.menutxt[selected].setFillColor(Color::Black);

				}

				if (event.key.code == Keyboard::Enter) {
					soundgeneral.menu.pause();
					if (selected == 0) {//play
						currentwindow = 1;//map
						if (soundgeneral.menusound)
							soundgeneral.menu.play();
						selected = 0;
					}
					else if (selected == 1) {//settings
						currentwindow = 3;//settings
						if (soundgeneral.menusound)
							soundgeneral.menu.play();
						selected = 0;
					}
					else if (selected == 2) {//credit
						currentwindow = 4;//credit
						if (soundgeneral.menusound)
							soundgeneral.menu.play();
					}
					else if (selected == 3)//exit
						window.close();

				}
			}
			break;

		case 1://map

			if (event.type == Event::KeyPressed) {
				if (event.key.code == Keyboard::Left) {

					menu.maptxt[selected].setFillColor(Color::White);
					selected--;
					if (selected < 0)
						selected = MAP - 1;
					menu.maptxt[selected].setFillColor(Color::Black);

				}

				else if (event.key.code == Keyboard::Right) {

					menu.maptxt[selected].setFillColor(Color::White);
					selected++;
					if (selected > MAP - 1)
						selected = 0;
					menu.maptxt[selected].setFillColor(Color::Black);

				}

				if (event.key.code == Keyboard::Enter) {

					if (selected == 0) {
						if (soundgeneral.menusound) {
							soundgeneral.menu.pause();
							soundgeneral.enterlvl = true;
						}
						currentwindow = 2;
						selectedlvl = 0;
						myTimer.startLevel(selectedlvl);

						if (!introPlayed) {
							currentwindow = 9;
							introPlayed = true;
							/*intro(window);
							introPlayed = true;*/
						}
						else if (introPlayed) {
							currentwindow = 2;
							soundforest.backforest.play();
						}
						selectedlvl = 0;
						selected = 0;

					}
					else if (selected == 1) {
						//if (islevelunlocked[1]) 
						if (soundgeneral.menusound) {
							soundgeneral.menu.pause();
							soundgeneral.enterlvl = true;

						}
						currentwindow = 2;
						selectedlvl = 1;
						myTimer.startLevel(selectedlvl);

					}
					else if (selected == 2) {
						//if (islevelunlocked[2]) //
						currentwindow = 2;
						selectedlvl = 2;
						if (soundgeneral.menusound) {
							soundgeneral.menu.pause();
							soundgeneral.enterlvl = true;

							//myTimer.startLevel(selectedlvl);

							//soundmill.backmill.setLoop(true);
							//soundmill.backmill.play();
						}
						myTimer.startLevel(selectedlvl);

						soundmill.backmill.setLoop(true);
						soundmill.backmill.play();
					}
					else if (selected == 3) {
						//if (islevelunlocked[3]) 
						currentwindow = 2;
						selectedlvl = 3;
						if (soundgeneral.menusound) {
							soundgeneral.menu.pause();
							soundgeneral.enterlvl = true;
						}

						myTimer.startLevel(selectedlvl);



					}
					else if (selected == 4) {
						//if (islevelunlocked[4]) 
						currentwindow = 2;
						selectedlvl = 4;
						if (soundgeneral.menusound) {
							soundgeneral.menu.pause();
							soundgeneral.enterlvl = true;
						}

						myTimer.startLevel(selectedlvl);

						myTimer.startLevel(selectedlvl);

						//selected = 4;
						// logic the barn
						soundbarn.backbarn.setLoop(true);
						soundbarn.backbarn.play();
					}
					else if (selected == 5) {
						currentwindow = 0;
						selected = 0;
						menu.maptxt[MAP - 1].setFillColor(Color::White);
						menu.maptxt[0].setFillColor(Color::Black);
					}

				}

			}
			break;

		case 2://levels window

			switch (selectedlvl) {

			case 0://forest
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::P) {
					myTimer.TimeSpentBeforePause += myTimer.gameClock.getElapsedTime().asSeconds();
					currentwindow = 5;//pause
					selected = 0;//sound on
				}
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::R) {
					resetLevel1(window);
					myTimer.startLevel(selectedlvl);
				}
				if (currentwindow == 2) {
					if (heroes.heroesArray[0].sprite.getGlobalBounds().intersects(soundforest.winZone.getGlobalBounds())
						&& heroes.heroesArray[1].sprite.getGlobalBounds().intersects(soundforest.winZone.getGlobalBounds())
						&& heroes.heroesArray[2].sprite.getGlobalBounds().intersects(soundforest.winZone.getGlobalBounds()))

						soundforest.is_won = true;

					if (soundforest.is_won) {
						currentwindow = 6;
						soundforest.backforest.stop();
						soundgeneral.win.play();
					}
				}
				break;

			case 1:// on the roof
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::P) {
					myTimer.TimeSpentBeforePause += myTimer.gameClock.getElapsedTime().asSeconds();
					currentwindow = 5;
					selected = 0;

				}
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::R) {
					resetLevel2(window);
					myTimer.startLevel(selectedlvl);
				}
				if (currentwindow == 2) {
					if (heroes.heroesArray[0].sprite.getGlobalBounds().intersects(soundontheroof.winZone.getGlobalBounds())
						&& heroes.heroesArray[1].sprite.getGlobalBounds().intersects(soundontheroof.winZone.getGlobalBounds())
						&& heroes.heroesArray[2].sprite.getGlobalBounds().intersects(soundontheroof.winZone.getGlobalBounds()))

						soundontheroof.is_won = true;

					if (soundontheroof.is_won) {
						currentwindow = 6;
						soundontheroof.backontheroof.stop();
						soundgeneral.win.play();
					}
				}
				//loselogic(window);

				break;

			case 2:// the mill

				if (event.type == Event::KeyPressed && event.key.code == Keyboard::P) {
					myTimer.TimeSpentBeforePause += myTimer.gameClock.getElapsedTime().asSeconds();
					currentwindow = 5;
					selected = 0;
				}
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::R) {
					resetLevel3(window);
					myTimer.startLevel(selectedlvl);
				}

				if (currentwindow == 2) {
					if (heroes.heroesArray[0].sprite.getGlobalBounds().intersects(soundmill.winZone.getGlobalBounds())
						&& heroes.heroesArray[1].sprite.getGlobalBounds().intersects(soundmill.winZone.getGlobalBounds())
						&& heroes.heroesArray[2].sprite.getGlobalBounds().intersects(soundmill.winZone.getGlobalBounds()))

						soundmill.is_won = true;

					if (soundmill.is_won) {
						currentwindow = 6;
						soundmill.backmill.stop();
						soundgeneral.win.play();
					}
				}
				//loselogic(window);
				break;

			case 3:// the giant walls
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::P) {
					myTimer.TimeSpentBeforePause += myTimer.gameClock.getElapsedTime().asSeconds();
					currentwindow = 5;
					selected = 0;
				}
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::R) {
					resetLevel4(window);
					myTimer.startLevel(selectedlvl);
				}
				if (currentwindow == 2) {
					if (heroes.heroesArray[0].sprite.getGlobalBounds().intersects(soundgiantwalls.winZone.getGlobalBounds())
						&& heroes.heroesArray[1].sprite.getGlobalBounds().intersects(soundgiantwalls.winZone.getGlobalBounds())
						&& heroes.heroesArray[2].sprite.getGlobalBounds().intersects(soundgiantwalls.winZone.getGlobalBounds()))

						soundgiantwalls.is_won = true;

					if (soundgiantwalls.is_won) {
						currentwindow = 6;
						soundgiantwalls.backgiantwalls.stop();
						soundgeneral.win.play();
					}
				}
				break;

			case 4:// barn
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::P) {
					myTimer.TimeSpentBeforePause += myTimer.gameClock.getElapsedTime().asSeconds();
					currentwindow = 5;
					selected = 0;
				}
				if (event.type == Event::KeyPressed && event.key.code == Keyboard::R) {
					resetLevel5(window);
					myTimer.startLevel(selectedlvl);
				}


				loselogic(window);

				if (currentwindow == 2) {
					if (heroes.heroesArray[0].sprite.getGlobalBounds().intersects(soundbarn.winZone.getGlobalBounds())
						&& heroes.heroesArray[1].sprite.getGlobalBounds().intersects(soundbarn.winZone.getGlobalBounds())
						&& heroes.heroesArray[2].sprite.getGlobalBounds().intersects(soundbarn.winZone.getGlobalBounds()))

						soundbarn.is_won = true;

					if (soundbarn.is_won) {
						currentwindow = 6;
						soundbarn.backbarn.stop();
						soundgeneral.win.play();
					}
				}

				//loselogic(window);

				break;
			}
			break;

		case 3://settings
			if (event.type == Event::KeyPressed) {
				if (event.key.code == Keyboard::Up) {

					menu.settingstxt[selected].setFillColor(Color::White);
					selected--;
					if (selected < 0)
						selected = SETTINGS - 1;
					menu.settingstxt[selected].setFillColor(Color::Black);

				}

				else if (event.key.code == Keyboard::Down) {

					menu.settingstxt[selected].setFillColor(Color::White);
					selected++;
					if (selected > SETTINGS - 1)
						selected = 0;
					menu.settingstxt[selected].setFillColor(Color::Black);

				}

				if (event.key.code == Keyboard::Enter) {

					switch (selected) {//sounds handled here is the main&map only

					case 0://added sound on 
						if (soundgeneral.menusound == false) {
							soundgeneral.menu.play();
							soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
							soundgeneral.menusound = true;
						}
						break;
					case 1://set sounds to a higher level
						if (soundgeneral.menusound == false) {
							soundgeneral.menu.play();
							soundgeneral.menu.setVolume(100);
							soundgeneral.menusound = true;
						}
						soundgeneral.menu.setVolume(100);
						break;

					case 2://set sounds to a lower level
						if (soundgeneral.menusound == false) {
							soundgeneral.menu.play();
							soundgeneral.menu.setVolume(40);
							soundgeneral.menusound = true;
						}
						soundgeneral.menu.setVolume(40);
						break;

					case 3://mute
						soundgeneral.menu.pause();
						soundgeneral.menusound = false;
						break;

					case 4://back
						currentwindow = 0;//main
						if (soundgeneral.menusound == false)
							soundgeneral.menu.pause();
						selected = 1;
						menu.settingstxt[SETTINGS - 1].setFillColor(Color::White);
						menu.settingstxt[0].setFillColor(Color::Black);
						break;
					}

				}
			}
			break;

		case 4://credit
			selected = 7;
			menu.creditxt[selected].setFillColor(Color::Black);
			if (event.type == Event::KeyPressed) {
				if (event.key.code == Keyboard::Enter) {
					currentwindow = 0;//main
					selected = 2;
				}
			}
			break;

		case 5://pause

			if (event.type == Event::KeyPressed) {
				if (event.key.code == Keyboard::Up) {

					menu.pausetxt[selected].setFillColor(Color::White);
					selected--;
					if (selected < 0)
						selected = PAUSE - 1;
					menu.pausetxt[selected].setFillColor(Color::Black);

				}

				else if (event.key.code == Keyboard::Down) {

					menu.pausetxt[selected].setFillColor(Color::White);
					selected++;
					if (selected > PAUSE - 1)
						selected = 0;
					menu.pausetxt[selected].setFillColor(Color::Black);

				}

				if (event.key.code == Keyboard::Enter) {
					switch (selected) {// sound on mute  map continue
					case 0://sound on

						if (selectedlvl == 0) {
							//play sounds
							soundforest.backforest.setLoop(true);
							soundforest.backforest.play();

						}
						else if (selectedlvl == 1) {
							//play sounds
							soundontheroof.backontheroof.setLoop(true);
							soundontheroof.backontheroof.play();
						}
						else if (selectedlvl == 2) {
							//play sounds
							soundmill.backmill.setLoop(true);
							soundmill.backmill.play();
						}
						else if (selectedlvl == 3) {
							//play sounds
							soundgiantwalls.backgiantwalls.setLoop(true);
							soundgiantwalls.backgiantwalls.play();
						}
						else if (selectedlvl == 4) {
							//play sounds
							soundbarn.backbarn.setLoop(true);
							soundbarn.backbarn.play();
						}
						break;
					case 1://mute

						if (selectedlvl == 0) {
							//pause sounds
							soundforest.backforest.pause();
						}
						else if (selectedlvl == 1) {
							//pause sounds
							soundontheroof.backontheroof.pause();
						}
						else if (selectedlvl == 2) {
							//pause sounds
							soundmill.backmill.pause();
						}
						else if (selectedlvl == 3) {
							//pause sounds
							soundgiantwalls.backgiantwalls.pause();
						}
						else if (selectedlvl == 4) {
							//pause sounds
							soundbarn.backbarn.pause();
						}
						break;
					case 2://map

						if (selectedlvl == 0) {
							soundforest.backforest.stop();
							currentwindow = 1;
							selected = 0;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.pausetxt[PAUSE - 2].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
						}
						else if (selectedlvl == 1) {
							soundontheroof.backontheroof.stop();
							currentwindow = 1;
							selected = 1;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.pausetxt[PAUSE - 2].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
						}
						else if (selectedlvl == 2) {
							soundmill.backmill.stop();
							currentwindow = 1;
							selected = 2;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.pausetxt[PAUSE - 2].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
						}
						else if (selectedlvl == 3) {
							soundgiantwalls.backgiantwalls.stop();
							currentwindow = 1;
							selected = 3;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.pausetxt[PAUSE - 2].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
						}
						else if (selectedlvl == 4) {
							soundbarn.backbarn.stop();
							currentwindow = 1;
							selected = 4;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.pausetxt[PAUSE - 2].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
						}
						break;
					case 3://continue

						switch (selectedlvl) {
						case 0:
							myTimer.gameClock.restart();
							currentwindow = 2;
							selected = 0;
							menu.pausetxt[PAUSE - 1].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);

							break;
						case 1:
							myTimer.gameClock.restart();
							currentwindow = 2;
							selected = 1;
							menu.pausetxt[PAUSE - 1].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
							break;

						case 2:
							myTimer.gameClock.restart();
							currentwindow = 2;
							selected = 2;
							menu.pausetxt[PAUSE - 1].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
							break;

						case 3:
							myTimer.gameClock.restart();
							currentwindow = 2;
							selected = 3;
							menu.pausetxt[PAUSE - 1].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
							break;
						case 4:
							myTimer.gameClock.restart();
							currentwindow = 2;
							selected = 4;
							menu.pausetxt[PAUSE - 1].setFillColor(Color::White);
							menu.pausetxt[0].setFillColor(Color::Black);
							break;

							break;

						}
					}
				}
			}
			break;

		case 6://win
			if (selected < 4) {
				islevelunlocked[selected + 1] = true; //To open the new level after winning the current one
			}
			if (event.type == Event::KeyPressed) {
				if (event.key.code == Keyboard::Up) {

					menu.wintxt[selectedop].setFillColor(Color::White);
					selectedop--;
					if (selectedop <= 1)
						selectedop = WIN - 1;
					menu.wintxt[selectedop].setFillColor(Color::Black);

				}


				else if (event.key.code == Keyboard::Down) {

					menu.wintxt[selectedop].setFillColor(Color::White);
					selectedop++;
					if (selectedop > WIN - 1)
						selectedop = 1;
					menu.wintxt[selectedop].setFillColor(Color::Black);

				}

				if (event.key.code == Keyboard::Enter) {//0 win 1 retry 2 next
					winlogic(window);
				}
			}
			break;

		case 7://lose
			if (state.islose == true) {
				if (event.type == Event::KeyPressed) {
					if (event.key.code == Keyboard::Up) {

						menu.losetxt[selectedop].setFillColor(Color::White);
						selectedop--;
						if (selectedop <= 0)
							selectedop = LOSE - 1;
						menu.losetxt[selectedop].setFillColor(Color::Black);

					}

					else if (event.key.code == Keyboard::Down) {

						menu.losetxt[selectedop].setFillColor(Color::White);
						selectedop++;
						if (selectedop > LOSE - 1)
							selectedop = 1;
						menu.losetxt[selectedop].setFillColor(Color::Black);

					}


					if (event.key.code == Keyboard::Enter) {
						switch (selectedop) {//retry
						case 1:
							currentwindow = 2;
							if (selectedlvl == 1) {
								soundgeneral.lose.stop();
								soundontheroof.backontheroof.play();
								resetLevel2(window);
							}
							else if (selectedlvl == 4) {
								soundgeneral.lose.stop();
								soundbarn.backbarn.play();
								resetLevel5(window);

							}
							break;
						case 2://map
							if (selectedlvl == 1) {
								soundgeneral.lose.stop();
								currentwindow = 1;
								selectedop = 1;
								selected = 1;

								if (soundgeneral.menusound && soundgeneral.enterlvl) {
									soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
									soundgeneral.menu.play();
								}

								menu.losetxt[LOSE - 1].setFillColor(Color::White);
								menu.losetxt[1].setFillColor(Color::Black);
							}
							else if (selectedlvl == 2) {
								soundgeneral.lose.stop();
								currentwindow = 1;
								selectedop = 1;
								selected = 2;

								if (soundgeneral.menusound && soundgeneral.enterlvl) {
									soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
									soundgeneral.menu.play();
								}

								menu.losetxt[LOSE - 1].setFillColor(Color::White);
								menu.losetxt[1].setFillColor(Color::Black);
							}
							else if (selectedlvl == 4) {
								soundgeneral.lose.stop();
								currentwindow = 1;
								selectedop = 1;
								selected = 4;

								if (soundgeneral.menusound && soundgeneral.enterlvl) {
									soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
									soundgeneral.menu.play();
								}

								menu.losetxt[LOSE - 1].setFillColor(Color::White);
								menu.losetxt[1].setFillColor(Color::Black);
							}

							break;
						}
					}
				}
			}
			break;

		case 8://timeout

			if (event.type == Event::KeyPressed) {
				if (event.key.code == Keyboard::Up) {

					menu.timeouttxt[selectedop].setFillColor(Color::White);
					selectedop--;
					if (selectedop < 1)
						selectedop = TIMEOUT - 1;
					menu.timeouttxt[selectedop].setFillColor(Color::Black);
				}

				else if (event.key.code == Keyboard::Down) {

					menu.timeouttxt[selectedop].setFillColor(Color::White);
					selectedop++;
					if (selectedop > TIMEOUT - 1)
						selectedop = 1;
					menu.timeouttxt[selectedop].setFillColor(Color::Black);
				}

				if (event.key.code == Keyboard::Enter) {
					switch (selectedop) {
					case 1://retry

						myTimer.startLevel(selectedlvl); // restart the timer

						soundgeneral.lose.stop();

						if (selectedlvl == 0) {
							resetLevel1(window);
							soundforest.backforest.play();
						}
						else if (selectedlvl == 1) {
							resetLevel2(window);
							soundontheroof.backontheroof.play();
						}
						else if (selectedlvl == 2) {
							resetLevel3(window);
							soundmill.backmill.play();
						}
						else if (selectedlvl == 3) {
							resetLevel4(window);
							soundgiantwalls.backgiantwalls.play();
						}
						else if (selectedlvl == 4) {
							resetLevel5(window);
							soundbarn.backbarn.play();
						}

						currentwindow = 2;
						break;
					case 2://map

						if (selectedlvl == 0) {
							soundgeneral.lose.stop();
							soundforest.backforest.stop();
							resetLevel1(window);
							currentwindow = 1;
							selectedop = 1;
							selected = 0;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.timeouttxt[TIMEOUT - 1].setFillColor(Color::White);
							menu.timeouttxt[1].setFillColor(Color::Black);
						}

						else if (selectedlvl == 1) {
							soundgeneral.lose.stop();
							soundontheroof.backontheroof.stop();
							resetLevel2(window);
							currentwindow = 1;
							selectedop = 1;
							selected = 1;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.timeouttxt[TIMEOUT - 1].setFillColor(Color::White);
							menu.timeouttxt[1].setFillColor(Color::Black);
						}
						else if (selectedlvl == 2) {
							soundgeneral.lose.stop();
							soundmill.backmill.stop();
							resetLevel3(window);
							currentwindow = 1;
							selectedop = 1;
							selected = 2;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.timeouttxt[TIMEOUT - 1].setFillColor(Color::White);
							menu.timeouttxt[1].setFillColor(Color::Black);
						}

						else if (selectedlvl == 3) {
							soundgeneral.lose.stop();
							soundgiantwalls.backgiantwalls.stop();
							resetLevel4(window);
							currentwindow = 1;
							selectedop = 1;
							selected = 3;
							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}
							menu.timeouttxt[TIMEOUT - 1].setFillColor(Color::White);
							menu.timeouttxt[1].setFillColor(Color::Black);
						}

						else if (selectedlvl == 4) {
							soundgeneral.lose.stop();
							soundbarn.backbarn.stop();
							resetLevel5(window);
							currentwindow = 1;
							selectedop = 1;
							selected = 4;

							if (soundgeneral.menusound && soundgeneral.enterlvl) {
								soundgeneral.menu.setVolume(soundgeneral.menu.getVolume());
								soundgeneral.menu.play();
							}

							menu.timeouttxt[TIMEOUT - 1].setFillColor(Color::White);
							menu.timeouttxt[1].setFillColor(Color::Black);
						}

						break;
					}
				}
			}
			break;

		case 9://intro
			soundgeneral.intro.play();
			intro(window);

			break;

		case 10:
			outrostru.outrorun = true;
			outrostru.currentscene = 0;

			//stop sounds
			soundbarn.backbarn.stop();
			soundbarn.fox.stop();
			soundbarn.danger.stop();
			soundbarn.barndoor.stop();

			//start outro sounds
			soundgeneral.end.play();
			outro(window);
			break;
		}
	}
}

float boxVelocityX = 0.0f;
float boxVelocityY = 0.0f;
float woodVelocityX = 0.0f;
const float gravity = 980.0f;

void update_lvl2_box_logic(float deltaTime) {
	auto& sheep = heroes.walkHeroesArray[activeSheepIndex].sprite;
	auto& box = soundontheroof.box_lvl2_sp;
	auto& wood = soundontheroof.wood_lvl2_sp;

	FloatRect sheepBounds = sheep.getGlobalBounds();
	FloatRect boxBounds = box.getGlobalBounds();

	if (activeSheepIndex == 0) {
		if (sheepBounds.intersects(boxBounds)) {

			float sheepCenter = sheep.getPosition().x + sheepBounds.width / 2;
			float boxCenter = box.getPosition().x + boxBounds.width / 2;

			if (Keyboard::isKeyPressed(Keyboard::Right) && sheepCenter < boxCenter) {

				boxVelocityX = 400.0f; 
				sheep.move(-50 * deltaTime, 0);
			}

			if (Keyboard::isKeyPressed(Keyboard::Left) && sheepCenter > boxCenter) {

				boxVelocityX = -400.0f;

				sheep.move(50 * deltaTime, 0);
			}
		}
	}
	if (sheep.getGlobalBounds().intersects(box.getGlobalBounds()))
	{
		if (sheep.getPosition().x < box.getPosition().x)
			sheep.move(-5.f, 0);
		else
			sheep.move(5.f, 0);
	}


	boxVelocityX *= 0.9f; 


	float platformTopY = 474.0f;
	float platformEndX = 670.0f;
	float platformStartX = 0.0f;


	float boxBottom = box.getPosition().y + box.getGlobalBounds().height;

	bool onGround =
		boxBottom >= platformTopY - 2.f &&
		boxBottom <= platformTopY + 5.f &&
		box.getPosition().x + box.getGlobalBounds().width > platformStartX &&
		box.getPosition().x < platformEndX;
	if (!onGround)
	{
		boxVelocityY += gravity * deltaTime;
	}
	else
	{
		if (boxVelocityY > 0)
			boxVelocityY = 0;
	}
	box.move(boxVelocityX * deltaTime, boxVelocityY * deltaTime);
	if (onGround && boxVelocityY >= 0)
	{
		box.setPosition(
			box.getPosition().x,
			platformTopY - box.getGlobalBounds().height
		);
	}


	FloatRect woodBounds = wood.getGlobalBounds();
	if (activeSheepIndex == 0 || activeSheepIndex == 1) {
		if (sheep.getGlobalBounds().intersects(wood.getGlobalBounds()))
		{

			if (Keyboard::isKeyPressed(Keyboard::Right))
			{
				woodVelocityX += 400.f * deltaTime;


				//sheep.move(woodVelocityX * deltaTime, 0);
			}

		}
	}

	wood.move(woodVelocityX * deltaTime, 0);
	woodVelocityX *= 0.98f;

	if (!soundontheroof.ontheroofsound)
	{
		soundontheroof.backontheroof.play();
		soundontheroof.backontheroof.setLoop(true);
		soundontheroof.ontheroofsound = true;
	}

}

void update_lvl3_logic(RenderWindow& defaultWindow, float deltaTime) {
	//	Tunnel
	if (!soundmill.isTimmyInTunnel && activeSheepIndex == 2) {
		Sprite& timmy = heroes.walkHeroesArray[2].sprite;
		FloatRect timmyBounds = timmy.getGlobalBounds();
		FloatRect tunnelBounds = soundmill.Tunnel_lvl3_sp.getGlobalBounds();


		if (timmy.getPosition().x > tunnelBounds.left  &&
			timmy.getPosition().x < tunnelBounds.left + 65.0f &&
			timmy.getPosition().y >= groundLevels[2] - 10.0f) {

			soundmill.isTimmyInTunnel = true;
		}
	}//	Box Collision
	Sprite& box = soundmill.Box_lvl3_sp;

	box.move(soundmill.boxVelocityX * deltaTime, 0);

	FloatRect boxBounds = box.getGlobalBounds();
	Sprite& currentSheep = heroes.walkHeroesArray[activeSheepIndex].sprite;
	FloatRect sheepBounds = currentSheep.getGlobalBounds();

	float pX = 20.0f;
	FloatRect sheepColBounds = sheepBounds;
	sheepColBounds.left += pX;
	sheepColBounds.width -= pX;

	if (sheepColBounds.intersects(boxBounds)) {

		float overlapTop = (sheepBounds.top + sheepBounds.height) - boxBounds.top;
		float overlapBottom = (boxBounds.top + boxBounds.height) - sheepBounds.top;
		float overlapLeft = (sheepColBounds.left + sheepColBounds.width) - boxBounds.left;
		float overlapRight = (boxBounds.left + boxBounds.width) - sheepColBounds.left;

		float minOverlapX = min(overlapLeft, overlapRight);
		float minOverlapY = min(overlapTop, overlapBottom);

		if (minOverlapY < minOverlapX) {
			if (overlapTop < overlapBottom && heroes.walkHeroesArray[activeSheepIndex].velocityY >= 0) {
				if (activeSheepIndex == 0) {
					currentSheep.setPosition(currentSheep.getPosition().x, boxBounds.top + 20);
					heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
					heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
				}
				if (activeSheepIndex == 1) {
					currentSheep.setPosition(currentSheep.getPosition().x, boxBounds.top + 45);
					heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
					heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
				}
			}
		}

		else {
			float sheepCenterX = sheepColBounds.left + (sheepColBounds.width / 2.0f);
			float boxCenterX = boxBounds.left + (boxBounds.width / 2.0f);

			if (activeSheepIndex == 0) {
				bool pressingRight = Keyboard::isKeyPressed(Keyboard::Right);
				bool pressingLeft = Keyboard::isKeyPressed(Keyboard::Left);

				if (sheepCenterX < boxCenterX) {
					if (pressingRight) {
						soundmill.boxVelocityX = 150.0f;
					}
					else {
						soundmill.boxVelocityX = 0;
					}

					currentSheep.setPosition(boxBounds.left - (sheepBounds.width - 130) , currentSheep.getPosition().y);
				}
				else {
					if (pressingLeft) {
						soundmill.boxVelocityX = -150.0f;
					}
					else {
						soundmill.boxVelocityX = 0;
					}

					currentSheep.setPosition(boxBounds.left + boxBounds.width + 50, currentSheep.getPosition().y);
				}
			}
			else {
				if (sheepCenterX < boxCenterX) {
					if (activeSheepIndex == 1) {
						currentSheep.setPosition(boxBounds.left - (sheepBounds.width - 100), currentSheep.getPosition().y);
					}
					if (activeSheepIndex == 2) {
						currentSheep.setPosition(boxBounds.left - (sheepBounds.width - 50), currentSheep.getPosition().y);
					}
				}
				else {
					currentSheep.setPosition(boxBounds.left + boxBounds.width - 200, currentSheep.getPosition().y);
				}
			}
		}

		if (activeSheepIndex == 0 && abs(soundmill.boxVelocityX) > 0) {
			if (soundmill.box.getStatus() != Sound::Playing) soundmill.box.play();
		}
		else {
			soundmill.box.stop();
		}
	}
	else {
		//(Friction of the box)
		soundmill.boxVelocityX *= 0.90f;
		if (abs(soundmill.boxVelocityX) < 1.0f) {
			soundmill.boxVelocityX = 0;
			if (soundmill.box.getStatus() == Sound::Playing) soundmill.box.stop();
		}
	}
	
	//	Box Wooden Column Collision
	Sprite& column = soundmill.Wooden_Column_lvl3_sp;
	FloatRect columnBounds = column.getGlobalBounds();

	float padding = 25.0f;
	FloatRect adjustedBoxBounds = boxBounds;
	adjustedBoxBounds.left += padding;
	adjustedBoxBounds.width -= (padding * 2);

	if (adjustedBoxBounds.intersects(columnBounds)) {

		float boxCenterX = boxBounds.left + boxBounds.width / 2.0f;
		float columnCenterX = columnBounds.left + columnBounds.width / 2.0f;

		if (boxCenterX < columnCenterX) {
			box.setPosition(columnBounds.left - boxBounds.width + padding, box.getPosition().y);
		}
		else {
			box.setPosition(columnBounds.left + columnBounds.width - padding, box.getPosition().y);
		}
		soundmill.boxVelocityX = 0;
	}//	Wooden Column Collision
	FloatRect colBounds = column.getGlobalBounds();

	float pad = 15.0f;
	FloatRect colColBounds = colBounds;
	colColBounds.left += pad;
	colColBounds.width -= (pad * 2);

	FloatRect currentSheepBounds = currentSheep.getGlobalBounds();

	sheepColBounds.left += pX;
	sheepColBounds.width -= (pX * 2);

	if (sheepColBounds.intersects(colColBounds)) {

		bool pressingRight = Keyboard::isKeyPressed(Keyboard::Right);
		bool pressingLeft = Keyboard::isKeyPressed(Keyboard::Left);

		if (pressingRight || pressingLeft) {
			float sheepCenterX = sheepColBounds.left + (sheepColBounds.width / 2.0f);
			float colCenterX = colColBounds.left + (colColBounds.width / 2.0f);

			if (sheepCenterX < colCenterX) {
				currentSheep.setPosition(colColBounds.left - (currentSheepBounds.width - 110), currentSheep.getPosition().y);
			}
			else {
				currentSheep.setPosition(colColBounds.left + colColBounds.width, currentSheep.getPosition().y);
			}
		}
	}//	Button Collision
	bool anySheepOnButton = false;

	for (int i = 0; i < 3; i++) {
		Sprite& sheep = heroes.walkHeroesArray[i].sprite;
		FloatRect sheepBounds = sheep.getGlobalBounds();
		FloatRect buttonBounds = soundmill.Button_lvl3_sp.getGlobalBounds();

		FloatRect feetBounds = sheepBounds;
		feetBounds.top += sheepBounds.height * 0.7f;
		feetBounds.height = sheepBounds.height * 0.3f;

		if (feetBounds.intersects(buttonBounds)) {
			anySheepOnButton = true;
			break;
		}
	}

	bool boxOnButton = boxBounds.intersects(soundmill.Button_lvl3_sp.getGlobalBounds());

	bool isPressed = anySheepOnButton || boxOnButton;

	if (isPressed) {
		if (soundmill.Button_lvl3_sp.getTexture() != &soundmill.Button2_lvl3_txt) {
			soundmill.Button_lvl3_sp.setTexture(soundmill.Button2_lvl3_txt);
			soundmill.button.play();
		}
		soundmill.woodenColumnTargetY = -300.0f;
	}
	else {
		if (soundmill.Button_lvl3_sp.getTexture() != &soundmill.Button_lvl3_txt) {
			soundmill.Button_lvl3_sp.setTexture(soundmill.Button_lvl3_txt);
		}
		soundmill.woodenColumnTargetY = 135.0f;
	}

	// the column
	float currentY = soundmill.Wooden_Column_lvl3_sp.getPosition().y;
	float direction = soundmill.woodenColumnTargetY - currentY;
	float distance = abs(direction);

	if (distance > 1.0f) {
		float moveAmount = soundmill.woodenColumnSpeed * deltaTime;
		if (direction > 0)
			soundmill.Wooden_Column_lvl3_sp.move(0, min(moveAmount, distance));
		else
			soundmill.Wooden_Column_lvl3_sp.move(0, -min(moveAmount, distance));
	}
}

void update_lvl4_logic(RenderWindow& window, float deltaTime) {


	bool sh1_in_place = false;
	bool sh2_in_place = false;
	bool sh3_in_place = false;

	//Shirley is on the platform
	if (heroes.walkHeroesArray[0].sprite.getGlobalBounds().intersects(soundgiantwalls.platform1)) {
		sh1_in_place = true;
	}
	// Shaun is on the platform
	if (heroes.walkHeroesArray[1].sprite.getGlobalBounds().intersects(soundgiantwalls.platform2)) {
		sh2_in_place = true;
	}
	// Timmy is on the platform
	if (heroes.walkHeroesArray[2].sprite.getGlobalBounds().intersects(soundgiantwalls.platform3)) {
		sh3_in_place = true;
	}


	if (sh1_in_place && sh2_in_place && sh3_in_place) {

		if (soundgiantwalls.Swichable_Barrier_lvl4_sp.getPosition().y > 50.f) {
			soundgiantwalls.Swichable_Barrier_lvl4_sp.move(0.f, -100.f * deltaTime);

			if (soundgiantwalls.doorsound == false) {
				soundgiantwalls.door.play();
				soundgiantwalls.doorsound = true;
			}
		}
	}



	// door collision
	if (soundgiantwalls.Swichable_Barrier_lvl4_sp.getPosition().y > 100.f) {
		for (int i = 0; i < 3; i++) {
			if (heroes.walkHeroesArray[i].sprite.getGlobalBounds().intersects(soundgiantwalls.Swichable_Barrier_lvl4_sp.getGlobalBounds())) {

				float currentX = heroes.walkHeroesArray[i].sprite.getPosition().x;
				heroes.walkHeroesArray[i].sprite.setPosition(currentX - 2.f, heroes.walkHeroesArray[i].sprite.getPosition().y);
			}
		}
	}



	if (soundgiantwalls.giantwallssound == true) {
		soundgiantwalls.backgiantwalls.play();
		soundgiantwalls.backgiantwalls.setLoop(true);
		soundgiantwalls.giantwallssound = false;
	}
}

void update_lvl5_logic(RenderWindow& window, float deltatime) {

	static Clock logicClock;
	Sprite& currentSheep = heroes.walkHeroesArray[activeSheepIndex].sprite;


	if (!soundbarn.buttonispressed && currentSheep.getGlobalBounds().intersects(soundbarn.button_lvl5_sp.getGlobalBounds())) {
		if (currentSheep.getPosition().x > 10.0f) {
			soundbarn.buttonispressed = true;
			soundbarn.prisonfalling = true;
			soundbarn.buttonispressed = true;
			soundbarn.button.play();
		}
	}
	float time = logicClock.getElapsedTime().asSeconds();
	

	if (!soundbarn.levelfox.isTrapped) {
		if (currentSheep.getPosition().x > 550.0f) {
			// Force all sprites for the active sheep to stay behind the rock
			heroes.heroesArray[activeSheepIndex].sprite.setPosition(550.0f, currentSheep.getPosition().y);
			heroes.walkHeroesArray[activeSheepIndex].sprite.setPosition(550.0f, currentSheep.getPosition().y);
			heroes.jumpHeroesArray[activeSheepIndex].sprite.setPosition(550.0f, currentSheep.getPosition().y);
		}
	}


	//fox logic
	float dt = soundbarn.foxClock.restart().asSeconds();

	if (soundbarn.levelfox.isTrapped) {
		soundbarn.levelfox.fox_sp.setTexture(soundbarn.levelfox.fox1_txt);
		soundbarn.levelfox.fox_sp.setTextureRect(IntRect(10, 0, 174, 111));
		soundbarn.levelfox.timer = 0; soundbarn.levelfox.fox_sp.setOrigin(72, 55);
		return;
	}

	//animation timer logic
	soundbarn.levelfox.timer += dt;

	if (soundbarn.levelfox.timer >= 0.15f) { //every 0.15 sec
		soundbarn.levelfox.currentframe++;//move to next pose

		if (soundbarn.levelfox.currentframe >= 8) {
			soundbarn.levelfox.currentframe = 0; // loop to the start
		}

		if (soundbarn.levelfox.currentframe < 4) {

			soundbarn.levelfox.fox_sp.setTexture(soundbarn.levelfox.fox1_txt);
			soundbarn.levelfox.fox_sp.setTextureRect(IntRect(soundbarn.levelfox.currentframe * 165, 0, 174, 111));
		}
		else {

			soundbarn.levelfox.fox_sp.setTexture(soundbarn.levelfox.fox2_txt);
			int frameoff = (soundbarn.levelfox.currentframe) - 4;
			soundbarn.levelfox.fox_sp.setTextureRect(IntRect(frameoff, 0, 174, 111));
		}
		soundbarn.levelfox.timer = 0; soundbarn.levelfox.fox_sp.setOrigin(72, 55);
	}

	//movement
	soundbarn.levelfox.fox_sp.move(soundbarn.levelfox.speed, 0);

	//hits the sign
	if (soundbarn.levelfox.fox_sp.getPosition().x > 1150) {
		soundbarn.levelfox.speed = -0.15f;
		soundbarn.levelfox.fox_sp.setScale(-1, 1);//flip left
	}

	//hits the stone wall
	if (soundbarn.levelfox.fox_sp.getPosition().x < 720) {
		soundbarn.levelfox.speed = 0.15f;
		soundbarn.levelfox.fox_sp.setScale(1, 1);//flip right
	}

	if (Keyboard::isKeyPressed(Keyboard::Space)) {
		if (!soundbarn.prisonfalling && !soundbarn.isLanded) {
			soundbarn.prisonfalling = true;
		}
	}


	if (!soundbarn.prisonfalling && !soundbarn.isLanded) {
		float angle = sin(time * 0.6f) * 5.0f;
		soundbarn.cage_lvl5_sp.setRotation(angle);
		float shadowXOffset = sin(time * 0.6f) * 15.0f;
		soundbarn.shadowCage.setPosition(816 + shadowXOffset, 565);
	}


	else if (soundbarn.prisonfalling) {
		soundbarn.fallspeed += 0.5f * deltatime;
		soundbarn.cage_lvl5_sp.move(0, soundbarn.fallspeed);
		soundbarn.cage_lvl5_sp.setRotation(0);

		Vector2f foxPosi = soundbarn.levelfox.fox_sp.getPosition();

		FloatRect foxHitbox;
		foxHitbox.width = 60.0f;
		foxHitbox.height = 120.0f;
		foxHitbox.top = foxPosi.y - 60.0f; // Adjust this value to go up or down
		foxHitbox.left = foxPosi.x - 30.0f;

		Vector2f cagePosi = soundbarn.cage_lvl5_sp.getPosition();
		FloatRect cageHitbox;

		cageHitbox.width = 240.0f;
		cageHitbox.height = 180.0f;
		cageHitbox.left = cagePosi.x - 120.0f;
		cageHitbox.top = cagePosi.y + 160.0f;

		if (cageHitbox.intersects(foxHitbox)) {
			soundbarn.levelfox.isTrapped = true;
			soundbarn.prisonfalling = false;
			soundbarn.isLanded = true;
			soundbarn.prison.play();

			float foxDirection = soundbarn.levelfox.fox_sp.getScale().x;

			soundbarn.cage_lvl5_sp.setPosition(soundbarn.cage_lvl5_sp.getPosition().x, 250);
			soundbarn.cage_lvl5_sp.setTexture(soundbarn.cage_with_fox_inside_txt);
			soundbarn.cage_lvl5_sp.setScale(0.6f * foxDirection, 0.6f);
			if (foxDirection < 0) { //Looking left
				soundbarn.cage_lvl5_sp.setPosition(soundbarn.cage_lvl5_sp.getPosition().x - 5.0f, 360.0f);
			}
			else {//Looking right
				soundbarn.cage_lvl5_sp.setPosition(soundbarn.cage_lvl5_sp.getPosition().x + 50.0f, 360.0f);
			}
			soundbarn.levelfox.fox_sp.setColor(Color::Transparent);
			soundbarn.shadowCage.setColor(Color::Transparent);
		}
		else if (soundbarn.cage_lvl5_sp.getPosition().y >= 250) { //runs if not trapped
			soundbarn.prisonfalling = false;
			soundbarn.isLanded = true;
			soundbarn.isBroken = true;
			soundbarn.levelfox.isTrapped = false;
			soundbarn.prison.play();

			soundbarn.cage_lvl5_sp.setPosition(soundbarn.cage_lvl5_sp.getPosition().x, 250);
			soundbarn.cage_lvl5_sp.setTexture(soundbarn.broken_cage_lvl5_txt);
			soundbarn.shadowCage.setColor(Color::Transparent);

			loselogic(window);


		}

	}
	
}

void level5_Collision() {
	Sprite& currentSheep = heroes.walkHeroesArray[activeSheepIndex].sprite;
	FloatRect sheepBounds = currentSheep.getGlobalBounds();
	float velocityY = heroes.walkHeroesArray[activeSheepIndex].velocityY;

	soundbarn.isStandingOnPlatform = false;
	Vector2f frontFoot;
	frontFoot.y = sheepBounds.top + sheepBounds.height;
	if (currentSheep.getScale().x > 0) {
		frontFoot.x = sheepBounds.left + (sheepBounds.width * 0.7f);
	}
	else {
		frontFoot.x = sheepBounds.left + (sheepBounds.width * 0.2f);
	}

	auto checkPlatform = [&](RectangleShape& plat) {
		FloatRect platBounds = plat.getGlobalBounds();

		bool isInsideHorizontal = (frontFoot.x >= platBounds.left && frontFoot.x <= platBounds.left + platBounds.width);
		bool isTouchingTop = (frontFoot.y >= platBounds.top && frontFoot.y <= platBounds.top + 20.0f);

		if (isInsideHorizontal && isTouchingTop && velocityY >= 0) {
			currentSheep.setPosition(currentSheep.getPosition().x, platBounds.top - sheepBounds.height);
			heroes.walkHeroesArray[activeSheepIndex].velocityY = 0;
			heroes.walkHeroesArray[activeSheepIndex].isJumping = false;
			soundbarn.isStandingOnPlatform = true;
		}
		};

	checkPlatform(soundbarn.platform1);
	checkPlatform(soundbarn.platform2);
	checkPlatform(soundbarn.platform3);
	checkPlatform(soundbarn.stonePlatform);

	if (!soundbarn.isFoxTrapped && currentSheep.getPosition().x > 150.0f) {
		if (!soundbarn.isFoxTrapped) {
			float rockRightEdge = soundbarn.stonePlatform.getGlobalBounds().left + soundbarn.stonePlatform.getGlobalBounds().width;
			if (currentSheep.getPosition().x + sheepBounds.width > rockRightEdge) {
				currentSheep.setPosition(rockRightEdge - sheepBounds.width, currentSheep.getPosition().y);
			}
		}
	}
}

void DrawSheeps(RenderWindow& window) {
	
	int drawOrder[3] = { 0, 1, 2 };

	for (int i = 0; i < 3; i++) {
		for (int j = i + 1; j < 3; j++) {
			if (heroes.walkHeroesArray[drawOrder[i]].sprite.getPosition().y >
				heroes.walkHeroesArray[drawOrder[j]].sprite.getPosition().y) {
				int temp = drawOrder[i];
				drawOrder[i] = drawOrder[j];
				drawOrder[j] = temp;
			}
		}
	}

	for (int idx = 0; idx < 3; idx++) {
		int i = drawOrder[idx];
		Vector2f pos = heroes.walkHeroesArray[i].sprite.getPosition();
		Vector2f currentScale = heroes.walkHeroesArray[i].sprite.getScale();

		heroes.heroesArray[i].sprite.setPosition(pos);
		heroes.heroesArray[i].sprite.setScale(currentScale);

		heroes.jumpHeroesArray[i].sprite.setPosition(pos);
		heroes.jumpHeroesArray[i].sprite.setScale(currentScale);

		if (heroes.walkHeroesArray[i].isJumping && i == activeSheepIndex) {
			window.draw(heroes.jumpHeroesArray[i].sprite);
		}
		else if (isMoving && i == activeSheepIndex) {
			window.draw(heroes.walkHeroesArray[i].sprite);
		}
		else {
			window.draw(heroes.heroesArray[i].sprite);
		}
	}
}

void initLevel() {

	// level 1
	if (selectedlvl == 0) {

		groundLevels[0] = 630.0f;
		groundLevels[1] = 650.0f;
		groundLevels[2] = 630.0f;

		heroes.heroesArray[0].sprite.setScale(0.4, 0.4);
		heroes.heroesArray[1].sprite.setScale(0.3, 0.3);
		heroes.heroesArray[2].sprite.setScale(0.42, 0.42);

		float walkScales[3] = { 1.2f, 1.0f, 0.5f };

		heroes.walkHeroesArray[0].sprite.setPosition(80, groundLevels[0]);
		heroes.walkHeroesArray[1].sprite.setPosition(80, groundLevels[1]);
		heroes.walkHeroesArray[2].sprite.setPosition(80, groundLevels[2]);

		for (int i = 0; i < 3; i++) {
			heroes.walkHeroesArray[i].velocityY = 0;
			heroes.walkHeroesArray[i].isJumping = false;
		}


		float jumpHeights[3] = { 149.0f, 179.0f, 174.0f };
		float targetHeights[3] = { 300,400,500 };
		float standHeights[3] = { 512.0f, 493.0f, 166.0f };

		for (int i = 0; i < 3; i++) {

			heroes.walkHeroesArray[i].sprite.setScale(walkScales[i], walkScales[i]);


			float jumpScale = targetHeights[i] / jumpHeights[i];
			heroes.jumpHeroesArray[i].sprite.setScale(jumpScale, jumpScale);


			float standScale = targetHeights[i] / standHeights[i];
			heroes.heroesArray[i].sprite.setScale(standScale, standScale);

		}
	}

	// level 2
	else if (selectedlvl == 1) {
		groundLevels[0] = 486.0f;
		groundLevels[1] = 507.0f;
		groundLevels[2] = 486.0f;

		heroes.walkHeroesArray[0].sprite.setPosition(120, groundLevels[0]);
		heroes.walkHeroesArray[1].sprite.setPosition(120, groundLevels[1]);
		heroes.walkHeroesArray[2].sprite.setPosition(120, groundLevels[2]);
		heroes.walkHeroesArray[2].sprite.setScale(0.50f, 0.50f);  // make Timmy huge
		heroes.jumpHeroesArray[2].sprite.setScale(0.50f, 0.50f);
		heroes.heroesArray[2].sprite.setScale(0.50f, 0.50f);
		float platformTopY = 474.0f;
		auto& box = soundontheroof.box_lvl2_sp;
		box.setPosition(
			box.getPosition().x,
			platformTopY - box.getGlobalBounds().height
		);
	}

	// level 3
	else if (selectedlvl == 2) {
		groundLevels[0] = 530.0f;
		groundLevels[1] = 560.0f;
		groundLevels[2] = 535.0f;


		heroes.walkHeroesArray[0].sprite.setPosition(100, groundLevels[0]);
		heroes.walkHeroesArray[1].sprite.setPosition(100, groundLevels[1]);
		heroes.walkHeroesArray[2].sprite.setPosition(120, groundLevels[2]);

		heroes.walkHeroesArray[2].sprite.setScale(0.50f, 0.50f);  // make Timmy huge
		heroes.jumpHeroesArray[2].sprite.setScale(0.50f, 0.50f);
		heroes.heroesArray[2].sprite.setScale(0.50f, 0.50f);

		for (int i = 0; i < 3; i++) {
			heroes.walkHeroesArray[i].velocityY = 0;
			heroes.walkHeroesArray[i].isJumping = false;
		}

		soundmill.backmill.setLoop(true);
		soundmill.backmill.play();
	}

	// level 4
	else if (selectedlvl == 3) {
		groundLevels[0] = 605.0f;
		groundLevels[1] = 630.5f;
		groundLevels[2] = 605.0f;
		heroes.heroesArray[0].sprite.setScale(0.4, 0.4);
		heroes.heroesArray[1].sprite.setScale(0.3, 0.3);
		heroes.heroesArray[2].sprite.setScale(0.42, 0.42);


		heroes.walkHeroesArray[0].sprite.setScale(1.2, 1.1);
		heroes.walkHeroesArray[1].sprite.setScale(0.97, 0.97);
		heroes.walkHeroesArray[2].sprite.setScale(0.5, 0.55);

		heroes.jumpHeroesArray[0].sprite.setScale(1, 1);
		heroes.jumpHeroesArray[1].sprite.setScale(0.85, 0.85);
		heroes.jumpHeroesArray[2].sprite.setScale(0.5, 0.5);

		heroes.walkHeroesArray[0].sprite.setPosition(120, groundLevels[0]);
		heroes.walkHeroesArray[1].sprite.setPosition(120, groundLevels[1]);
		heroes.walkHeroesArray[2].sprite.setPosition(120, groundLevels[2]);

		for (int i = 0; i < 3; i++) {
			heroes.walkHeroesArray[i].velocityY = 0;
			heroes.walkHeroesArray[i].isJumping = false;
		}
	}

	// level 5
	else if (selectedlvl == 4) {
		groundLevels[0] = 580.0f;
		groundLevels[1] = 605.0f;
		groundLevels[2] = 580.0f;
		heroes.heroesArray[0].sprite.setScale(0.4, 0.4);
		heroes.heroesArray[1].sprite.setScale(0.3, 0.3);
		heroes.heroesArray[2].sprite.setScale(0.42, 0.42);

		heroes.walkHeroesArray[0].sprite.setScale(1.2, 1.2);
		heroes.walkHeroesArray[1].sprite.setScale(1, 1);
		heroes.walkHeroesArray[2].sprite.setScale(0.5, 0.5);

		heroes.jumpHeroesArray[0].sprite.setScale(1, 1);
		heroes.jumpHeroesArray[1].sprite.setScale(0.85, 0.85);
		heroes.jumpHeroesArray[2].sprite.setScale(0.5, 0.5);

		heroes.walkHeroesArray[0].sprite.setPosition(120, groundLevels[0]);
		heroes.walkHeroesArray[1].sprite.setPosition(120, groundLevels[1]);
		heroes.walkHeroesArray[2].sprite.setPosition(120, groundLevels[2]);
	}

	for (int i = 0; i < 3; i++) {
		heroes.walkHeroesArray[i].velocityY = 0;
		heroes.walkHeroesArray[i].isJumping = false;
	}

	levelBeggining = true;
	lastlevelBeggining = selectedlvl;

}

void Animation(float deltatime) {
	// --- Walk ---
	if (isMoving) {
		animationTimer += deltatime;
		if (animationTimer >= animationSpeed) {
			animationTimer = 0;
			frame++;
		}

		int shirleyFrame = frame % 6;
		heroes.walkHeroesArray[0].sprite.setTextureRect(IntRect(shirleyFrame * 162, 0, 162, 105));
		heroes.walkHeroesArray[0].sprite.setOrigin(162 / 2.0f, 105);

		int shaunFrame = frame % 6;
		heroes.walkHeroesArray[1].sprite.setTextureRect(IntRect(shaunFrame * 159, 0, 159, 133));
		heroes.walkHeroesArray[1].sprite.setOrigin(159 / 2.0f, 133);

		int timmyFrame = frame % 6;
		int timmyWidth = 144;
		int timmyHeight = 87;
		heroes.walkHeroesArray[2].sprite.setTextureRect(IntRect(timmyFrame * timmyWidth, 0, timmyWidth, timmyHeight));
		heroes.walkHeroesArray[2].sprite.setOrigin(timmyWidth / 2.0f, timmyHeight);
	}
	else if (heroes.walkHeroesArray[activeSheepIndex].isJumping) {
		animationTimer += deltatime;

		if (animationTimer >= animationSpeed) {
			animationTimer = 0;
			frame++;
			if (frame >= 6) frame = 0;
		}
		heroes.jumpHeroesArray[0].sprite.setTextureRect(IntRect(frame * 194, 0, 194, 149));
		heroes.jumpHeroesArray[0].sprite.setOrigin(194 / 2.0f, 149);

		heroes.jumpHeroesArray[1].sprite.setTextureRect(IntRect(frame * 190, 0, 190, 179));
		heroes.jumpHeroesArray[1].sprite.setOrigin(190 / 2.0f, 179);

		heroes.jumpHeroesArray[2].sprite.setTextureRect(IntRect(frame * 182, 0, 182, 174));
		heroes.jumpHeroesArray[2].sprite.setOrigin(182 / 2.0f, 174);
	}
	else {
		heroes.heroesArray[0].sprite.setTextureRect(IntRect(0, 0, 161, 113));
		heroes.heroesArray[0].sprite.setOrigin(161 / 2.0f, 113);

		heroes.heroesArray[1].sprite.setTextureRect(IntRect(0, 0, 159, 155));
		heroes.heroesArray[1].sprite.setOrigin(159 / 2.0f, 155);

		heroes.heroesArray[2].sprite.setTextureRect(IntRect(0, 0, 206, 156));
		heroes.heroesArray[2].sprite.setOrigin(144 / 2.0f, 108);
	}
}

void draw(RenderWindow& window) {
	window.clear();
	switch (currentwindow) {

	case 0://main
		window.draw(menu.mainbackground);
		for (int i = 0; i < MAIN; i++) {
			window.draw(menu.menutxt[i]);
		}

		break;

	case 1://map
		menu.back.setPosition(545, 630);
		menu.back.setScale(0.5, 0.5);
		window.draw(menu.mapbackground);
		window.draw(menu.back);
		updateLevelUnlocks(window);
		for (int i = 0; i < MAP; i++) {
			window.draw(menu.maptxt[i]);
		}

		break;

	case 2://levels

		if (!levelBeggining || lastlevelBeggining != selectedlvl) {
			initLevel();
		}

		if (selectedlvl == 0) {//draw forest here
			DrawLevel1(window);
			DrawSheeps(window);
			drawSheepIcons(window);
		}
		else if (selectedlvl == 1) {//draw on the roof here
			DrawLevel2(window);
			DrawSheeps(window);
			drawSheepIcons(window);
		}
		else if (selectedlvl == 2) {//draw the mill here
			Drawlevel3(window);
			DrawSheeps(window);
			drawSheepIcons(window);
		}
		else if (selectedlvl == 3) {//draw the giant walls here
			DrawLevel4(window);
			DrawSheeps(window);
			drawSheepIcons(window);
		}
		else if (selectedlvl == 4) {//draw the barn here
			DrawLevel5(window);
			DrawSheeps(window);
			drawSheepIcons(window);
		}
		window.draw(timerText);
		break;

	case 3://settings
		menu.back.setPosition(470, 550);
		menu.back.setScale(1, 1);
		window.draw(menu.mainbackground);
		window.draw(menu.menusbackground);
		window.draw(menu.back);
		for (int i = 0; i < SETTINGS; i++) {
			window.draw(menu.settingstxt[i]);
		}

		break;

	case 4://credit
		menu.back.setPosition(470, 550);
		menu.back.setScale(1, 1);
		window.draw(menu.mainbackground);
		window.draw(menu.menusbackground);
		window.draw(menu.back);
		for (int i = 0; i < CREDIT; i++) {
			window.draw(menu.creditxt[i]);
		}

		break;

	case 5://pause

		switch (selectedlvl) {

		case 0:
			DrawLevel1(window);
			window.draw(menu.menusbackground);
			break;
		case 1:
			DrawLevel2(window);
			window.draw(menu.menusbackground);
			break;
		case 2:
			Drawlevel3(window);
			window.draw(menu.menusbackground);
			break;
		case 3:
			DrawLevel4(window);
			window.draw(menu.menusbackground);
			break;
		case 4:
			DrawLevel5(window);
			window.draw(menu.menusbackground);
			break;
		}

		for (int i = 0; i < PAUSE; i++) {
			window.draw(menu.pausetxt[i]);
		}

		break;

	case 6:

		if (selectedlvl == 0) DrawLevel1(window);
		else if (selectedlvl == 1) DrawLevel2(window);
		else if (selectedlvl == 2) Drawlevel3(window);
		else if (selectedlvl == 3) DrawLevel4(window);
		else if (selectedlvl == 4) DrawLevel5(window);

		window.draw(menu.menusbackground);
		for (int i = 0; i < WIN; i++) {
			window.draw(menu.wintxt[i]);
		}

		//window.display();

		break;

	case 7:
		if (state.islose == true) {
			switch (selectedlvl) {
			case 1://if fall
				DrawLevel2(window);
				window.draw(menu.menusbackground);

				break;

			case 2://if the bomb kills sheep
				Drawlevel3(window);
				window.draw(menu.menusbackground);

				break;

			case 4://if fox kills sheep
				DrawLevel5(window);
				window.draw(menu.menusbackground);

				break;
			}
		}
		for (int i = 0; i < LOSE; i++) {
			window.draw(menu.losetxt[i]);
		}

		break;
	case 8:
		if (selectedlvl == 0) DrawLevel1(window);
		else if (selectedlvl == 1) DrawLevel2(window);
		else if (selectedlvl == 2) Drawlevel3(window);
		else if (selectedlvl == 3) DrawLevel4(window);
		else if (selectedlvl == 4) DrawLevel5(window);

		/*if (selectedlvl == 0) soundforest.backforest.play();
		else if (selectedlvl == 1) soundontheroof.backontheroof.play();
		else if (selectedlvl == 2) soundmill.backmill.play();
		else if (selectedlvl == 3) soundgiantwalls.backgiantwalls.play();
		else if (selectedlvl == 4) soundbarn.backbarn.play(); */

		DrawSheeps(window);
		drawSheepIcons(window);
		window.draw(timerText);

		// Draw the dark overlay
		RectangleShape darkOverlay(Vector2f(1280, 720));
		darkOverlay.setFillColor(Color(0, 0, 0, 100));
		window.draw(darkOverlay);

		// Draw the timeout menu on top
		window.draw(menu.menusbackground);
		for (int i = 0; i < TIMEOUT; i++) {
			window.draw(menu.timeouttxt[i]);
		}
		break;
	}

}

int main() {

	RenderWindow window = { VideoMode(1280,720), "Back to The Barn" };
	myTimer.setupTimer(window);

	Clock clock;

	loadmenus(window);
	loadgeneral(window);
	loadintro(window);
	loadoutro(window);
	loadforest(window);
	loadontheroof(window);
	loadmill(window);
	loadthegiantwalls(window);
	loadbarn(window);
	loadcharchaters(window);
	loadSheepIcons();

	if (currentwindow == 0 && soundgeneral.menusound) {
		soundgeneral.menu.setLoop(true);
		soundgeneral.menu.play();
	}
	while (window.isOpen()) {
		if (event.type == sf::Event::MouseButtonPressed) {
			if (event.mouseButton.button == sf::Mouse::Left) {
				cout << "Mouse Clicked at X: " << event.mouseButton.x << "  Y: " << event.mouseButton.y << endl;
			}
		}

		float deltaTime = clock.restart().asSeconds();
		if (needReset) {
			resetLevel(selectedlvl, window);
			needReset = false;
		}

		update(window, deltaTime);
		if (currentwindow == 2) {
			if (selectedlvl == 0) {
				collisionhay(window, deltaTime);
				collisionshrtstick(window, deltaTime);
				collisionlngstick(window, deltaTime);
				collisionstone(window, deltaTime);
				collisionpillar(window, deltaTime);

			}
			else if (selectedlvl == 1) {
				//Call the function that updates the logic of level 2
				update_lvl2_box_logic(deltaTime);
			}
			else if (selectedlvl == 2) {
				//Call the function that updates the logic of level 3
				update_lvl3_logic(window, deltaTime);
			}
			else if (selectedlvl == 3) {
				update_lvl4_logic(window, deltaTime);
			}
			else if (selectedlvl == 4) {
				update_lvl5_logic(window, deltaTime);
			}
			Movement(deltaTime);
			//sheepToSheepCollision(deltaTime);
			Animation(deltaTime);
			myTimer.updateTimer(selectedlvl);
		}

		Vector2f positionsheep = heroes.walkHeroesArray[activeSheepIndex].sprite.getPosition();
		FloatRect sheepbounds = heroes.walkHeroesArray[activeSheepIndex].sprite.getGlobalBounds();

		if (positionsheep.x < 50) {
			heroes.walkHeroesArray[activeSheepIndex].sprite.setPosition(50, positionsheep.y);
		}

		if (positionsheep.x + sheepbounds.width > 1280) {
			heroes.walkHeroesArray[activeSheepIndex].sprite.setPosition(1280 - sheepbounds.width, positionsheep.y);
		}

		

		draw(window);

		window.display();
	}


	return 0;

}
Editor is loading...
Leave a Comment