void FastWorldDrawer::paintProjectiles() { std::list<Projectile *>::const_iterator it; for (it = manager->GetModel()->GetProjectiles().begin(); it != manager->GetModel()->GetProjectiles().end(); ++it) { glPushMatrix(); Projectile *projectile = *it; glTranslatef(projectile->GetPosition().getX(), projectile->GetPosition().getY(), 0); glRotatef(projectile->GetAngle() * 180 / M_PI, 0, 0, 1); glBegin(GL_TRIANGLES); glColor3f(1, 1, 1); glVertex3f(-0.545f, 0.f, 0.f); glColor4f(1, 1, 1, 0.0); glVertex3f(0.0225f, 0.020f, 0.f); glVertex3f(0.0225f, -0.020f, 0.f); glEnd(); glPopMatrix(); } }
Float SpellAreaProjectiles(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()); List<Projectile *> * ActiveProjectiles = GetActiveProjectiles(); ActiveProjectiles->ToStart(); for (uint32 i = 0; i < ActiveProjectiles->GetSize(); i++) { Projectile * projectile = ActiveProjectiles->GetCurrent(); ActiveProjectiles->ToNext(); uint32 baseSize = projectile->GetUInt32Value(PROJ_VAR_BASE_SIZE); Point2D position = projectile->GetPosition(); Rect bounds(position.GetX(), position.GetY(), position.GetX() + baseSize, position.GetY() + baseSize); if (Intersect(newShape, &bounds) == true) { if (projectile->ActiveSpell(spell, source) == false) { projectile->ApplySpell(spell, source); } } else { projectile->RemoveSpell(spell, source); } } delete newShape; return true; } } } return false; }