Float FireTower(Script * script) { Tower * tower = (Tower *)script->GetSource(); if ((tower != NULL) && (tower->GetState() == true) && (tower->CheckType(OBJ_TYPE_TOWER) == true)) { AddProjectile(tower); return true; } return false; }
Float SpellAreaTowers(Script * script) { if (script->VerifyArguments(1) == true) { Word * spellWord = script->GetNextWord(); GameObject * source = (GameObject *)script->GetSource(); if ((source != NULL) && (source->CheckType(OBJ_TYPE_GAME_OBJECT) == true)) { const Spell * spell = GetSpell(spellWord->value); if (spell != NULL) { Shape * shape = source->GetShape(); Shape * newShape = shape->CreateInstance(); newShape->Translate(source->GetPosition()); Grid * grid = WorldGame.GetGrid(); Tower ** TowerData = grid->GetData(); for (uint32 i = 1; i < GRID_SIZE - 1; i++) { for (uint32 j = 1; j < GRID_SIZE - 1; j++) { Tower * tower = TowerData[(i*GRID_SIZE)+j]; if ((tower != NULL) && (tower->GetState() == true) && (tower->ActiveSpell(spell, source) == false)) { Point2D towerPos = tower->GetPosition(); Rect towerRect(towerPos.GetX(), towerPos.GetY(), towerPos.GetX() + 32, towerPos.GetY() + 32); if (Intersect(newShape, &towerRect) == true) { if (tower->ActiveSpell(spell, source) == false) { tower->ApplySpell(spell, source); } } else { tower->RemoveSpell(spell, source); } } } } delete newShape; return true; } } } return false; }