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; } } } }