Example #1
0
void BreakingHookTile::update()
{
	if (mDestroyed) {
		return;
	}

	if (mBreaking) {
		mBreakCounter++;
		int breakFrames = lerp(MAX_BREAK_FRAMES, MIN_BREAK_FRAMES, PlayerSkill::get());

		if (mRoom->getHero()->getRopeState() != Hero::RopeState_Attached) {
			breakFrames = -1;
		}

		if (mBreakCounter >= breakFrames) {
			mDestroyed = true;
			mRoom->setHookable(mTileX, mTileY, false);
			mRoom->setCollidable(mTileX, mTileY, false);

			ParticleSystem* ps = new ParticleSystem(Resource::getAnimation("data/images/debris.bmp", 4), 10, 50, 20, 1, 50, 2, -float2(0.0f, 30.0f), 2.0f);
			ps->setPosition(getPosition(), 2.0f);
			mRoom->addEntity(ps);

		}
	}

	Hero *hero = mRoom->getHero();

	if (hero != 0) {
		if (hero->getRopeState() == Hero::RopeState_Attached) {
			int ropeTileX = (int)(hero->getRopePosition().x / mRoom->getTileWidth());
			int ropeTileY = (int)(hero->getRopePosition().y / mRoom->getTileWidth());
			if (ropeTileX == mTileX && ropeTileY == mTileY) {
				mBreaking = true;
			}
		}
	}
}