PolyParticle.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * PolyParticle.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 7/18/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolyParticle.h"
  10. using namespace Polycode;
  11. Particle::Particle(int particleType, Material *texture, Mesh *particleMesh) {
  12. switch(particleType) {
  13. case BILLBOARD_PARTICLE:
  14. {
  15. ScenePrimitive *primitive = new ScenePrimitive(ScenePrimitive::TYPE_PLANE, 1.0f, 1.0f);
  16. primitive->setMaterial(texture);
  17. primitive->billboardMode = true;
  18. primitive->billboardRoll = true;
  19. primitive->setDepthWrite(false);
  20. primitive->backfaceCulled = false;
  21. particleBody = primitive;
  22. }
  23. break;
  24. case MESH_PARTICLE:
  25. {
  26. SceneMesh *primitive = new SceneMesh(particleMesh);
  27. if(particleMesh->getMeshType() == Mesh::TRI_MESH)
  28. primitive->cacheToVertexBuffer(true);
  29. primitive->setMaterial(texture);
  30. // primitive->billboardMode = true;
  31. // primitive->billboardRoll = true;
  32. //primitive->depthTest = false;
  33. // primitive->backfaceCulled = false;
  34. particleBody = primitive;
  35. }
  36. break;
  37. }
  38. life = 0;
  39. Reset();
  40. }
  41. void Particle::Reset() {
  42. if(life > lifespan)
  43. life = 0 + (life - lifespan);
  44. else
  45. life = 0;
  46. perlinPosX = (float)rand()/RAND_MAX;
  47. perlinPosY = (float)rand()/RAND_MAX;
  48. perlinPosZ = (float)rand()/RAND_MAX;
  49. }
  50. Particle::~Particle() {
  51. }