ParticleRendererFactory.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright (C) 2022 The V-Gears Team
  3. *
  4. * This file is part of V-Gears
  5. *
  6. * V-Gears is free software: you can redistribute it and/or modify it under
  7. * terms of the GNU General Public License as published by the Free Software
  8. * Foundation, version 3.0 (GPLv3) of the License.
  9. *
  10. * V-Gears is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. */
  15. #pragma once
  16. #include "ParticleRenderer.h"
  17. /**
  18. * A particle renderer factory.
  19. */
  20. class ParticleRendererFactory{
  21. public:
  22. /**
  23. * Constructor.
  24. */
  25. ParticleRendererFactory(){};
  26. /**
  27. * Destructor.
  28. */
  29. virtual ~ParticleRendererFactory(){};
  30. /**
  31. * Retrieves the renderer type.
  32. *
  33. * @return Renderer type.
  34. */
  35. virtual Ogre::String GetRendererType() const = 0;
  36. /**
  37. * Creates a rendered.
  38. *
  39. * @return Pointer to the new renderer.
  40. */
  41. virtual ParticleRenderer* CreateRenderer() = 0;
  42. /**
  43. * Destroys a renderer.
  44. *
  45. * @param renderer[in|out] The renderer to destroy.
  46. */
  47. void DestroyRenderer (ParticleRenderer* renderer){
  48. if (renderer != NULL) delete renderer;
  49. };
  50. protected:
  51. /**
  52. * Creates a particle renderer.
  53. *
  54. * @tparam T The particle renderer type.
  55. * @return The new particle renderer.
  56. */
  57. template <class T>
  58. ParticleRenderer* _createRenderer(){
  59. ParticleRenderer* particle_renderer = new T();
  60. particle_renderer->SetRendererType(GetRendererType());
  61. return particle_renderer;
  62. };
  63. };