LensFlareComponent.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright (C) 2009-2023, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <AnKi/Scene/Components/LensFlareComponent.h>
  6. #include <AnKi/Scene/SceneGraph.h>
  7. #include <AnKi/Resource/ImageResource.h>
  8. #include <AnKi/Resource/ResourceManager.h>
  9. namespace anki {
  10. LensFlareComponent::LensFlareComponent(SceneNode* node)
  11. : SceneComponent(node, kClassType)
  12. , m_spatial(this)
  13. {
  14. }
  15. LensFlareComponent::~LensFlareComponent()
  16. {
  17. m_spatial.removeFromOctree(SceneGraph::getSingleton().getOctree());
  18. }
  19. void LensFlareComponent::loadImageResource(CString filename)
  20. {
  21. ImageResourcePtr image;
  22. const Error err = ResourceManager::getSingleton().loadResource(filename, image);
  23. if(err)
  24. {
  25. ANKI_SCENE_LOGE("Failed to load lens flare image");
  26. return;
  27. }
  28. m_image = std::move(image);
  29. }
  30. Error LensFlareComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
  31. {
  32. updated = m_dirty || info.m_node->movedThisFrame();
  33. if(updated)
  34. {
  35. m_dirty = false;
  36. m_worldPosition = info.m_node->getWorldTransform().getOrigin().xyz();
  37. const Aabb aabb(m_worldPosition - (kAabbSize / 2.0f), m_worldPosition + (kAabbSize / 2.0f));
  38. m_spatial.setBoundingShape(aabb);
  39. }
  40. const Bool spatialUpdated = m_spatial.update(SceneGraph::getSingleton().getOctree());
  41. updated = updated || spatialUpdated;
  42. return Error::kNone;
  43. }
  44. void LensFlareComponent::onDestroy([[maybe_unused]] SceneNode& node)
  45. {
  46. m_spatial.removeFromOctree(SceneGraph::getSingleton().getOctree());
  47. }
  48. } // end namespace anki