Spell* Champion::castSpell(uint8 slot, float x, float y, Unit* target) { if(slot >= spells.size()) { return 0; } Spell* s = spells[slot]; if(s->getCost() > stats->getCurrentMana() || s->getState() != STATE_READY) { return 0; } s->cast(x, y, target); stats->setCurrentMana(stats->getCurrentMana()-s->getCost()); return s; }
Spell* Champion::castSpell(uint8 slot, float x, float y, Unit* target, uint32 futureProjNetId) { if(slot >= spells.size()) { return 0; } Spell* s = spells[slot]; s->setSlot(slot);//temporary hack until we redo spells to be almost fully lua-based if(s->getCost() > stats->getCurrentMana() || s->getState() != STATE_READY) { return 0; } s->cast(x, y, target, futureProjNetId); stats->setCurrentMana(stats->getCurrentMana()-s->getCost()); return s; }
//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())); } } }