back to the barn
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