Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/particles/spark_particles.cc @ 6695

Last change on this file since 6695 was 6653, checked in by bensch, 19 years ago

optimize

File size: 2.6 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Benjamin Grauer
13   co-programmer: ...
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_GRAPHICS
17
18#include "spark_particles.h"
19
20#include "load_param.h"
21#include "factory.h"
22#include "material.h"
23#include "state.h"
24#include "shell_command.h"
25
26#include "parser/tinyxml/tinyxml.h"
27#include <algorithm>
28
29
30
31using namespace std;
32
33CREATE_FACTORY(SparkParticles, CL_SPARK_PARTICLES);
34
35/**
36 *  standard constructor
37 * @param maxCount the Count of particles in the System
38 * @param type The Type of the SparkParticles
39*/
40SparkParticles::SparkParticles (unsigned int maxCount)
41    : ParticleSystem(maxCount)
42{
43  this->init();
44}
45
46/**
47 * @brief creates a Particle System out of a XML-element
48 * @param root: the XML-element to load from
49 */
50SparkParticles::SparkParticles(const TiXmlElement* root)
51{
52  this->init();
53
54  if (root != NULL)
55    this->loadParams(root);
56}
57
58/**
59 *  standard deconstructor
60*/
61SparkParticles::~SparkParticles()
62{ }
63
64/**
65 * @brief initializes the SparkParticles with default values
66*/
67void SparkParticles::init()
68{
69  this->setClassID(CL_SPARK_PARTICLES, "SparkParticles");
70
71  this->material = NULL;
72}
73
74
75/**
76 * loads Parameters from a TiXmlElement
77 * @param root the XML-element to load from.
78 */
79void SparkParticles::loadParams(const TiXmlElement* root)
80{
81  ParticleSystem::loadParams(root);
82}
83
84/**
85 * @brief draws all the Particles of this System
86 *
87 * The Cases in this Function all do the same:
88 * Drawing all the particles with the appropriate Type.
89 * This is just the fastest Way to do this, but will most likely be changed in the future.
90 */
91void SparkParticles::draw() const
92{
93  glPushAttrib(GL_ENABLE_BIT);
94
95  Particle* drawPart = particles;
96
97  glDepthMask(GL_FALSE);
98
99  glDisable(GL_LIGHTING);
100  glEnable(GL_LINE_SMOOTH);
101  glEnable(GL_BLEND);
102  glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
103
104  glBegin(GL_LINES);
105  while (likely(drawPart != NULL))
106  {
107    glColor4fv(drawPart->color);
108    glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
109    glVertex3f(drawPart->position.x - drawPart->velocity.x * drawPart->radius,
110               drawPart->position.y - drawPart->velocity.y * drawPart->radius,
111               drawPart->position.z - drawPart->velocity.z * drawPart->radius);
112    drawPart = drawPart->next;
113  }
114  glEnd();
115
116  glDepthMask(GL_TRUE);
117  glPopAttrib();
118}
Note: See TracBrowser for help on using the repository browser.