Untitled

 avatar
unknown
plain_text
a month ago
4.5 kB
6
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