Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/new_class_id/src/lib/particles/model_particles.cc @ 9727

Last change on this file since 9727 was 9727, checked in by bensch, 18 years ago

orxonox/new_class_id: new Executor construct, that is much more typesafe, faster, and easier to extend…

Also changed the LoadParam process, and adapted ScriptEngine calls

Then at the end, some missing headers appeared, and appended them to all the cc-files again.

File size: 3.5 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 "model_particles.h"
19
20#include "util/loading/load_param.h"
21#include "util/loading/factory.h"
22#include "material.h"
23#include "state.h"
24#include "shell_command.h"
25#include "debug.h"
26
27#include "class_id_DEPRECATED.h"
28
29ObjectListDefinitionID(ModelParticles, CL_MODEL_PARTICLES);
30CREATE_FACTORY(ModelParticles);
31
32SHELL_COMMAND(texture, ModelParticles, setMaterialTexture)
33->defaultValues("maps/evil-flower.png");
34
35
36
37/**
38 *  standard constructor
39 * @param maxCount the Count of particles in the System
40 * @param type The Type of the ModelParticles
41*/
42ModelParticles::ModelParticles (unsigned int maxCount)
43    : ParticleSystem(maxCount)
44{
45  this->init();
46}
47
48/**
49 * @brief creates a Particle System out of a XML-element
50 * @param root: the XML-element to load from
51 */
52ModelParticles::ModelParticles(const TiXmlElement* root)
53{
54  this->init();
55  if (root != NULL)
56    this->loadParams(root);
57}
58
59/**
60 *  standard deconstructor
61*/
62ModelParticles::~ModelParticles()
63{ }
64
65/**
66 * @brief initializes the ModelParticles with default values
67*/
68void ModelParticles::init()
69{
70  this->registerObject(this, ModelParticles::_objectList);
71
72  this->material.setDiffuseMap("maps/radial-trans-noise.png");
73}
74
75
76/**
77 * loads Parameters from a TiXmlElement
78 * @param root the XML-element to load from.
79 */
80void ModelParticles::loadParams(const TiXmlElement* root)
81{
82  ParticleSystem::loadParams(root);
83
84  LoadParam(root, "texture", this, ModelParticles, setMaterialTexture);
85}
86
87/**
88 * @brief sets the Texutre that is placed onto the particles
89 * @param textureFile the Texture to load onto these ModelParticles
90 */
91void ModelParticles::setMaterialTexture(const std::string& textureFile)
92{
93  this->material.setDiffuseMap(textureFile);
94}
95
96/**
97 * @brief draws all the Particles of this System
98 *
99 * The Cases in this Function all do the same:
100 * Drawing all the particles with the appropriate Type.
101 * This is just the fastest Way to do this, but will most likely be changed in the future.
102 */
103void ModelParticles::draw() const
104{
105  glPushAttrib(GL_ENABLE_BIT);
106  Particle* drawPart = particles;
107
108  GLboolean checkLight = false;
109  glGetBooleanv(GL_LIGHTING, &checkLight);
110  if (checkLight == GL_TRUE)
111    glDisable(GL_LIGHTING);
112  glMatrixMode(GL_MODELVIEW);
113
114  this->material.select();
115  glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
116
117  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE);
118
119  if (likely(this->getModel() != NULL))
120    while (likely(drawPart != NULL))
121    {
122      glPushMatrix();
123      glMatrixMode(GL_MODELVIEW);
124      /* move */
125      glTranslatef(drawPart->position.x, drawPart->position.y, drawPart->position.z);
126      /* scale */
127      glScalef(drawPart->radius, drawPart->radius, drawPart->radius);
128      /* rotate */
129      Vector tmpRot = drawPart->orientation.getSpacialAxis();
130      glRotatef (drawPart->orientation.getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
131
132      this->getModel()->draw();
133
134      glPopMatrix();
135      drawPart = drawPart->next;
136    }
137  else
138    PRINTF(2)("no model loaded onto ParticleSystem-%s\n", this->getCName());
139  glPopAttrib();
140}
Note: See TracBrowser for help on using the repository browser.