void Yeti::drop_stalactite() { // make a stalactite falling down and shake camera a bit Sector::current()->camera->shake(.1f, 0, 10); Player* player = get_nearest_player(); if (!player) return; Sector* sector = Sector::current(); for(Sector::GameObjects::const_iterator i = sector->gameobjects.begin(); i != sector->gameobjects.end(); ++i) { YetiStalactite* stalactite = dynamic_cast<YetiStalactite*>(i->get()); if(stalactite && stalactite->is_hanging()) { if (hit_points >= 3) { // drop stalactites within 3 of player, going out with each jump float distancex = fabsf(stalactite->get_bbox().get_middle().x - player->get_bbox().get_middle().x); if(distancex < stomp_count*32) { stalactite->start_shaking(); } } else { /* if (hitpoints < 3) */ // drop every 3rd pair of stalactites if(((((int)stalactite->get_pos().x + 16) / 64) % 3) == (stomp_count % 3)) { stalactite->start_shaking(); } } } /* if(stalactite && stalactite->is_hanging()) */ } }
void Yeti::drop_stalactite() { // make a stalactite falling down and shake camera a bit Sector::current()->camera->shake(.1, 0, 10); YetiStalactite* nearest = 0; float dist = FLT_MAX; Player* player = this->get_nearest_player(); if (!player) return; Sector* sector = Sector::current(); for(Sector::GameObjects::iterator i = sector->gameobjects.begin(); i != sector->gameobjects.end(); ++i) { YetiStalactite* stalactite = dynamic_cast<YetiStalactite*> (*i); if(stalactite && stalactite->is_hanging()) { float sdist = fabsf(stalactite->get_pos().x - player->get_pos().x); if(sdist < dist) { nearest = stalactite; dist = sdist; } } } if(nearest) nearest->start_shaking(); }