void MultiBullet::nextFrame(){ Tower *temp = getTower(); if(temp != NULL){ SetPosition(temp->GetPosition().x, temp->GetPosition().y); m_circ = sf::Shape::Circle(temp->GetPosition().x, temp->GetPosition().y, m_attack_radius, sf::Color::Red, 2, sf::Color::Blue); } }
Float BuildTower(Script * script) { if (script->VerifyArguments(2) == true) { Word * targetWord = script->GetNextWord(); Word * posWord = script->GetNextWord(); Point2D position(0, 0); Point2D * pos = (Point2D *)(uint32)posWord->value; if (pos != NULL) { position.SetValues(pos->GetX(), pos->GetY()); } else { return false; } if ((IntervalCheck(position.GetX(), 1, GRID_SIZE - 2) == true) && (IntervalCheck(position.GetY(), 1, GRID_SIZE - 2) == true)) { if (targetWord->type == POINTER) { Object * target = script->GetTarget(targetWord); if ((target != NULL) && (target->CheckType(OBJ_TYPE_TOWER) == true)) { Grid * grid = WorldGame.GetGrid(); Tower * tower = (Tower *)target; //To bypass grid auto-filling tower->SetState(false); Point2D towerCoords = tower->GetPosition(); towerCoords.SetValues((towerCoords.GetX() - 80)/32, (towerCoords.GetY() - 80)/32); grid->SetPath(towerCoords, 0); if (BuildTower(tower->GetTowerType(), position, true) == true) { Tower * newTower = grid->GetData(Point2D(position.GetX(), position.GetY())); tower->SetState(true); grid->FindPath(Origin); newTower->Copy(*tower); newTower->SetUInt32Value(TOWER_VAR_BUILD_TIME, GetGameTime()); return true; } else { tower->SetState(true); grid->FindPath(Origin); } } } else if ((targetWord->type == NUMERIC) && (IntervalCheck(targetWord->value, 1, GetTowerDataSize()) == true)) { return (BuildTower(targetWord->value, position, 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; }