LensFlareComponent.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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, getStaticClassId())
  12. , m_node(node)
  13. , m_spatial(this)
  14. {
  15. }
  16. LensFlareComponent::~LensFlareComponent()
  17. {
  18. m_spatial.removeFromOctree(m_node->getSceneGraph().getOctree());
  19. }
  20. void LensFlareComponent::loadImageResource(CString filename)
  21. {
  22. ImageResourcePtr image;
  23. const Error err = ResourceManager::getSingleton().loadResource(filename, image);
  24. if(err)
  25. {
  26. ANKI_SCENE_LOGE("Failed to load lens flare image");
  27. return;
  28. }
  29. m_image = std::move(image);
  30. }
  31. Error LensFlareComponent::update(SceneComponentUpdateInfo& info, Bool& updated)
  32. {
  33. updated = m_dirty || info.m_node->movedThisFrame();
  34. if(updated)
  35. {
  36. m_dirty = false;
  37. m_worldPosition = info.m_node->getWorldTransform().getOrigin().xyz();
  38. const Aabb aabb(m_worldPosition - (kAabbSize / 2.0f), m_worldPosition + (kAabbSize / 2.0f));
  39. m_spatial.setBoundingShape(aabb);
  40. }
  41. const Bool spatialUpdated = m_spatial.update(info.m_node->getSceneGraph().getOctree());
  42. updated = updated || spatialUpdated;
  43. return Error::kNone;
  44. }
  45. void LensFlareComponent::onDestroy(SceneNode& node)
  46. {
  47. m_spatial.removeFromOctree(node.getSceneGraph().getOctree());
  48. }
  49. } // end namespace anki