//Spell stuff void GameEngine::useSpell(Point mouseLoc) { Spell spell = invLog.getSpell(mouseLoc); if (spell.isUnlocked()) { if (hero->getMana() < spell.getCost()) log.registerEvent("Not enough mana!"); else { log.registerEvent(spell.getTitle() + " activated!"); Point start = hero->getLoc() + Point(-1, -1); Point end = hero->getLoc() + Point(2, 2); int type = spell.getSpellType(); switch (type) { case 1: //Field of fire { spell.setTurnActivated(turns); lib.loop_portion(start, end, [&](Point p) { map[p.x()][p.y()].setSpell(spell); }); break; } case 2: //Death Rattle { lib.loop_portion(start, end, [&](Point p) { Actor* a = map[p.x()][p.y()].getActor(); if (a != NULL) { Point relToHero = p - hero->getLoc(); Point d(p.x() + relToHero.x(), p.y() + relToHero.y()); a->doDMG(2); if (a->getHP() <= 0) killMonster(a->getLoc()); if (moveableCell(d)) { map[p.x()][p.y()].setActor(NULL); a->setLoc(d); map[d.x()][d.y()].setActor(a); } } }); break; } case 3: //Blessing of Katar { hero->changeHP(10); break; } case 4: //Ice Block { spell.setTurnActivated(turns); lib.loop_portion(start, end, [&](Point p) { map[p.x()][p.y()].setSpell(spell); }); break; } case 5: //Death Curse { spell.setTurnActivated(turns); lib.loop_portion(start, end, [&](Point p) { Actor* a = map[p.x()][p.y()].getActor(); if (a != NULL) { a->setSpell(spell); } }); break; } case 6: //Fist of Katar { map[hero->getLoc().x()][hero->getLoc().y()].setSpell(spell); break; } } hero->changeMana(-spell.getCost()); lib.play("Spell" + to_string(spell.getSpellType())); } } }