Ejemplo n.º 1
0
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();
    }

}
Ejemplo n.º 2
0
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;
}