PolyParticle.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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, bool isScreenParticle, Material *material, Texture *texture, Mesh *particleMesh) {
  12. life = 0;
  13. if(isScreenParticle) {
  14. createScreenParticle(particleType, texture, particleMesh);
  15. } else {
  16. createSceneParticle(particleType, texture, particleMesh);
  17. }
  18. Reset(true);
  19. }
  20. void Particle::createSceneParticle(int particleType, Texture *texture, Mesh *particleMesh) {
  21. switch(particleType) {
  22. case BILLBOARD_PARTICLE:
  23. {
  24. ScenePrimitive *primitive = new ScenePrimitive(ScenePrimitive::TYPE_PLANE, 1.0f, 1.0f);
  25. primitive->setTexture(texture);
  26. primitive->billboardMode = true;
  27. primitive->billboardRoll = true;
  28. // primitive->alphaTest = true;
  29. // primitive->depthTest = false;
  30. primitive->depthWrite = false;
  31. primitive->backfaceCulled = false;
  32. particleBody = primitive;
  33. }
  34. break;
  35. case MESH_PARTICLE:
  36. {
  37. SceneMesh *primitive = new SceneMesh(particleMesh);
  38. if(particleMesh->getMeshType() == Mesh::TRI_MESH)
  39. primitive->cacheToVertexBuffer(true);
  40. primitive->setTexture(texture);
  41. // primitive->billboardMode = true;
  42. // primitive->billboardRoll = true;
  43. //primitive->depthTest = false;
  44. // primitive->backfaceCulled = false;
  45. particleBody = primitive;
  46. }
  47. break;
  48. default:
  49. assert(0);
  50. break;
  51. }
  52. }
  53. void Particle::createScreenParticle(int particleType, Texture *texture, Mesh *particleMesh) {
  54. ScreenShape *primitive = new ScreenShape(ScreenShape::SHAPE_RECT, 1.0f, 1.0f);
  55. primitive->setTexture(texture);
  56. particleBody = primitive;
  57. return;
  58. switch(particleType) {
  59. case BILLBOARD_PARTICLE:
  60. {
  61. ScreenShape *primitive = new ScreenShape(ScreenShape::SHAPE_RECT, 1.0f, 1.0f);
  62. // primitive->setTexture(texture->get)
  63. particleBody = primitive;
  64. }
  65. break;
  66. case MESH_PARTICLE:
  67. {
  68. // ScreenMesh *primitive = new ScreenMesh(particleMesh);
  69. // primitive->cacheToVertexBuffer(true);
  70. // primitive->setMaterial(texture);
  71. // particleBody = primitive;
  72. }
  73. break;
  74. }
  75. }
  76. void Particle::Reset(bool continuious) {
  77. if(continuious) {
  78. if(life > lifespan)
  79. life = 0 + (life - lifespan);
  80. else
  81. life = 0;
  82. } else {
  83. life = 0;
  84. }
  85. perlinPosX = (Number)rand()/RAND_MAX;
  86. perlinPosY = (Number)rand()/RAND_MAX;
  87. perlinPosZ = (Number)rand()/RAND_MAX;
  88. }
  89. Particle::~Particle() {
  90. }