X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy%2Fghosttree.cpp;h=b7b4bd6ab40cf3dca00e3fdee9a887dc1172dac6;hb=5f860f41a3f362de0a5dda951ff2ba4ebff95681;hp=d0d234275856ec0bc9c4555fb6945385934b4c90;hpb=a8057c3d1726484928a3091fdd5c7a3d810f5f63;p=supertux.git diff --git a/src/badguy/ghosttree.cpp b/src/badguy/ghosttree.cpp index d0d234275..b7b4bd6ab 100644 --- a/src/badguy/ghosttree.cpp +++ b/src/badguy/ghosttree.cpp @@ -44,7 +44,7 @@ GhostTree::GhostTree(const Reader& lisp) : willo_radius(200), willo_speed(1.8f), willo_color(0), - glow_sprite(), + glow_sprite(SpriteManager::current()->create("images/creatures/ghosttree/ghosttree-glow.sprite")), colorchange_timer(), suck_timer(), root_timer(), @@ -53,10 +53,9 @@ GhostTree::GhostTree(const Reader& lisp) : suck_lantern(0), willowisps() { - glow_sprite = sprite_manager->create("images/creatures/ghosttree/ghosttree-glow.sprite"); set_colgroup_active(COLGROUP_TOUCHABLE); - sound_manager->preload("sounds/tree_howling.ogg"); - sound_manager->preload("sounds/tree_suck.ogg"); + SoundManager::current()->preload("sounds/tree_howling.ogg"); + SoundManager::current()->preload("sounds/tree_suck.ogg"); } GhostTree::~GhostTree() @@ -70,10 +69,9 @@ GhostTree::die() sprite->set_action("dying", 1); glow_sprite->set_action("dying", 1); - std::vector::iterator iter; - for(iter = willowisps.begin(); iter != willowisps.end(); ++iter) { - TreeWillOWisp *willo = *iter; - willo->vanish(); + for(auto iter = willowisps.begin(); iter != willowisps.end(); ++iter) { + TreeWillOWisp& willo = **iter; + willo.vanish(); } run_dead_script(); } @@ -93,7 +91,7 @@ GhostTree::active_update(float elapsed_time) if (mystate == STATE_IDLE) { if(colorchange_timer.check()) { - sound_manager->play("sounds/tree_howling.ogg", get_pos()); + SoundManager::current()->play("sounds/tree_howling.ogg", get_pos()); suck_timer.start(3); treecolor = (treecolor + 1) % 3; @@ -112,12 +110,11 @@ GhostTree::active_update(float elapsed_time) if(suck_timer.check()) { Color col = glow_sprite->get_color(); - sound_manager->play("sounds/tree_suck.ogg", get_pos()); - std::vector::iterator iter; - for(iter = willowisps.begin(); iter != willowisps.end(); ++iter) { - TreeWillOWisp *willo = *iter; - if(willo->get_color() == col) { - willo->start_sucking(get_bbox().get_middle() + SUCK_TARGET_OFFSET + Vector(gameRandom.randf(-SUCK_TARGET_SPREAD, SUCK_TARGET_SPREAD), gameRandom.randf(-SUCK_TARGET_SPREAD, SUCK_TARGET_SPREAD))); + SoundManager::current()->play("sounds/tree_suck.ogg", get_pos()); + for(auto iter = willowisps.begin(); iter != willowisps.end(); ++iter) { + TreeWillOWisp& willo = **iter; + if(willo.get_color() == col) { + willo.start_sucking(get_bbox().get_middle() + SUCK_TARGET_OFFSET + Vector(gameRandom.randf(-SUCK_TARGET_SPREAD, SUCK_TARGET_SPREAD), gameRandom.randf(-SUCK_TARGET_SPREAD, SUCK_TARGET_SPREAD))); } } mystate = STATE_SUCKING; @@ -126,8 +123,7 @@ GhostTree::active_update(float elapsed_time) if(willowisp_timer.check()) { if(willowisps.size() < WILLOWISP_COUNT) { Vector pos = Vector(bbox.get_width() / 2, bbox.get_height() / 2 + willo_spawn_y + WILLOWISP_TOP_OFFSET); - TreeWillOWisp *willowisp - = new TreeWillOWisp(this, pos, 200 + willo_radius, willo_speed); + auto willowisp = std::make_shared(this, pos, 200 + willo_radius, willo_speed); Sector::current()->add_object(willowisp); willowisps.push_back(willowisp); @@ -166,7 +162,7 @@ GhostTree::active_update(float elapsed_time) /* TODO indicate root with an animation */ Player* player = get_nearest_player(); if (player) { - Root* root = new Root(Vector(player->get_bbox().get_left(), get_bbox().get_bottom()+ROOT_TOP_OFFSET)); + auto root = std::make_shared(Vector(player->get_bbox().get_left(), get_bbox().get_bottom()+ROOT_TOP_OFFSET)); Sector::current()->add_object(root); } } @@ -176,15 +172,15 @@ GhostTree::active_update(float elapsed_time) assert (suck_lantern); Vector pos = suck_lantern->get_pos(); Vector delta = get_bbox().get_middle() + SUCK_TARGET_OFFSET - pos; - Vector dir = delta.unit(); + Vector dir_ = delta.unit(); if (delta.norm() < 1) { - dir = delta; + dir_ = delta; suck_lantern->ungrab(*this, RIGHT); suck_lantern->remove_me(); suck_lantern = 0; sprite->set_action("swallow", 1); } else { - pos += dir; + pos += dir_; suck_lantern->grab(*this, pos, RIGHT); } } else { @@ -215,7 +211,11 @@ GhostTree::willowisp_died(TreeWillOWisp *willowisp) if ((mystate == STATE_SUCKING) && (willowisp->was_sucked)) { mystate = STATE_IDLE; } - willowisps.erase(std::find(willowisps.begin(), willowisps.end(), willowisp)); + willowisps.erase(std::find_if(willowisps.begin(), willowisps.end(), + [willowisp](const std::shared_ptr& lhs) + { + return lhs.get() == willowisp; + })); } void @@ -266,7 +266,7 @@ GhostTree::collision(GameObject& other, const CollisionHit& ) { void GhostTree::spawn_lantern() { - Lantern* lantern = new Lantern(get_bbox().get_middle() + SUCK_TARGET_OFFSET); + auto lantern = std::make_shared(get_bbox().get_middle() + SUCK_TARGET_OFFSET); Sector::current()->add_object(lantern); }