Untitled
unknown
plain_text
2 months ago
4.5 kB
7
Indexable
void update_lvl5_logic(RenderWindow& window, float deltatime) {
static Clock logicClock;
Sprite& currentSheep = heroes.heroesArray[activeSheepIndex].sprite;
//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(sf::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(sf::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(sf::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 (sf::Keyboard::isKeyPressed(sf::Keyboard::Space)) {
if (!soundbarn.prisonfalling && !soundbarn.isLanded) {
soundbarn.prisonfalling = true;
}
}
float time = logicClock.getElapsedTime().asSeconds();
if (!soundbarn.prisonfalling && !soundbarn.isLanded) {
float angle = sin(time * 0.6f) * 5.0f;
soundbarn.cage_lvl5_sp.setRotation(angle);
float shadowXOffset = std::sin(time * 0.6f) * 15.0f;
soundbarn.shadowCage.setPosition(816 + shadowXOffset, 565);
}
else if (soundbarn.prisonfalling) {
soundbarn.fallspeed += 0.5f * deltatime; // استخدام deltatime عشان السقوط يبقى ناعم
soundbarn.cage_lvl5_sp.move(0, soundbarn.fallspeed);
soundbarn.cage_lvl5_sp.setRotation(0);
//If the cage touched the fox
sf::FloatRect foxhitbox = soundbarn.levelfox.fox_sp.getGlobalBounds();
foxhitbox.width = 1;
foxhitbox.height = 50;
foxhitbox.left += 2;
foxhitbox.top += 20;
sf::Vector2f cagePosi = soundbarn.cage_lvl5_sp.getPosition();
sf::FloatRect cageHitbox;
// 1. Width: Keep it around 350 to cover the full width of the bars
cageHitbox.width = 350.0f;
// 2. Height: Increase this to about 250 to cover the top beam down to the floor of the cage
cageHitbox.height = 250.0f;
// 3. Left: Center it based on the new width
cageHitbox.left = cagePosi.x - (cageHitbox.width / 2.0f);
// 4. Top: Increase the offset to ~180 to push it down past the rope
cageHitbox.top = cagePosi.y + 180.0f;
/*sf::Vector2f cagePos = soundbarn.cage_lvl5_sp.getPosition();
sf::FloatRect cageHitbox;
cageHitbox.width = 250.0f;
cageHitbox.height = 150.0f;
cageHitbox.left = cagePos.x - (cageHitbox.width / 2.0f);
cageHitbox.top = cagePos.y + 100.0f; */
if (cageHitbox.intersects(foxhitbox)) {
soundbarn.levelfox.isTrapped = true;
soundbarn.prisonfalling = false;
soundbarn.isLanded = true;
soundbarn.prison.play();
soundbarn.cage_lvl5_sp.setPosition(soundbarn.cage_lvl5_sp.getPosition().x, 250);
soundbarn.cage_lvl5_sp.setTexture(soundbarn.cage_landed_lvl5_txt);
soundbarn.shadowCage.setColor(sf::Color::Transparent);
}
else if (soundbarn.cage_lvl5_sp.getPosition().y >= 200) { //runs if not trapped
soundbarn.prisonfalling = false;
soundbarn.isLanded = 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(sf::Color::Transparent);
soundbarn.levelfox.isTrapped = false;
}
}Editor is loading...
Leave a Comment