CScene.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. #include "CScene.h"
  2. #include "CProject.h"
  3. #include "WallpaperEngine/FileSystem/FileSystem.h"
  4. #include "WallpaperEngine/Core/Types/FloatColor.h"
  5. using namespace WallpaperEngine::Core;
  6. using namespace WallpaperEngine::Core::Types;
  7. CScene::CScene (
  8. CContainer* container,
  9. Scenes::CCamera* camera,
  10. FloatColor ambientColor,
  11. bool bloom,
  12. double bloomStrength,
  13. double bloomThreshold,
  14. bool cameraFade,
  15. bool cameraParallax,
  16. double cameraParallaxAmount,
  17. double cameraParallaxDelay,
  18. double cameraParallaxMouseInfluence,
  19. bool cameraPreview,
  20. bool cameraShake,
  21. double cameraShakeAmplitude,
  22. double cameraShakeRoughness,
  23. double cameraShakeSpeed,
  24. FloatColor clearColor,
  25. Scenes::CProjection* orthogonalProjection,
  26. FloatColor skylightColor) :
  27. CWallpaper (Type),
  28. m_container (container),
  29. m_camera (camera),
  30. m_ambientColor (ambientColor),
  31. m_bloom (bloom),
  32. m_bloomStrength (bloomStrength),
  33. m_bloomThreshold (bloomThreshold),
  34. m_cameraFade (cameraFade),
  35. m_cameraParallax (cameraParallax),
  36. m_cameraParallaxAmount (cameraParallaxAmount),
  37. m_cameraParallaxDelay (cameraParallaxDelay),
  38. m_cameraParallaxMouseInfluence (cameraParallaxMouseInfluence),
  39. m_cameraPreview (cameraPreview),
  40. m_cameraShake (cameraShake),
  41. m_cameraShakeAmplitude (cameraShakeAmplitude),
  42. m_cameraShakeRoughness (cameraShakeRoughness),
  43. m_cameraShakeSpeed (cameraShakeSpeed),
  44. m_clearColor (clearColor),
  45. m_orthogonalProjection (orthogonalProjection),
  46. m_skylightColor (skylightColor)
  47. {
  48. }
  49. CScene* CScene::fromFile (const std::string& filename, CContainer* container)
  50. {
  51. std::string stringContent = WallpaperEngine::FileSystem::loadFullFile (filename, container);
  52. json content = json::parse (WallpaperEngine::FileSystem::loadFullFile (filename, container));
  53. auto camera_it = jsonFindRequired (content, "camera", "Scenes must have a defined camera");
  54. auto general_it = jsonFindRequired (content, "general", "Scenes must have a general section");
  55. auto objects_it = jsonFindRequired (content, "objects", "Scenes must have a list of objects to display");
  56. // TODO: FIND IF THESE DEFAULTS ARE SENSIBLE OR NOT AND PERFORM PROPER VALIDATION WHEN CAMERA PREVIEW AND CAMERA PARALLAX ARE PRESENT
  57. auto ambientcolor_it = jsonFindRequired (*general_it, "ambientcolor", "General section must have ambient color");
  58. auto bloom = jsonFindDefault <bool> (*general_it, "bloom", false);
  59. auto bloomstrength = jsonFindDefault <double> (*general_it, "bloomstrength", 0.0f);
  60. auto bloomthreshold = jsonFindDefault <double> (*general_it, "bloomthreshold", 0.0f);
  61. auto camerafade = jsonFindDefault <bool> (*general_it, "camerafade", false);
  62. auto cameraparallax = jsonFindDefault <bool> (*general_it, "cameraparallax", true);
  63. auto cameraparallaxamount = jsonFindDefault <double> (*general_it, "cameraparallaxamount", 1.0f);
  64. auto cameraparallaxdelay = jsonFindDefault <double> (*general_it, "cameraparallaxdelay", 0.0f);
  65. auto cameraparallaxmouseinfluence = jsonFindDefault <double> (*general_it, "cameraparallaxmouseinfluence", 1.0f);
  66. auto camerapreview = jsonFindDefault <bool> (*general_it, "camerapreview", false);
  67. auto camerashake = jsonFindDefault <bool> (*general_it, "camerashake", false);
  68. auto camerashakeamplitude = jsonFindDefault <double> (*general_it, "camerashakeamplitude", 0.0f);
  69. auto camerashakeroughness = jsonFindDefault <double> (*general_it, "camerashakeroughness", 0.0f);
  70. auto camerashakespeed = jsonFindDefault <double> (*general_it, "camerashakespeed", 0.0f);
  71. auto clearcolor_it = jsonFindRequired (*general_it, "clearcolor", "General section must have clear color");
  72. auto orthogonalprojection_it = jsonFindRequired (*general_it, "orthogonalprojection", "General section must have orthogonal projection info");
  73. auto skylightcolor_it = jsonFindRequired (*general_it, "skylightcolor", "General section must have skylight color");
  74. CScene* scene = new CScene (
  75. container,
  76. Scenes::CCamera::fromJSON (*camera_it),
  77. WallpaperEngine::Core::aToColorf(*ambientcolor_it),
  78. bloom,
  79. bloomstrength,
  80. bloomthreshold,
  81. camerafade,
  82. cameraparallax,
  83. cameraparallaxamount,
  84. cameraparallaxdelay,
  85. cameraparallaxmouseinfluence,
  86. camerapreview,
  87. camerashake,
  88. camerashakeamplitude,
  89. camerashakeroughness,
  90. camerashakespeed,
  91. WallpaperEngine::Core::aToColorf(*clearcolor_it),
  92. Scenes::CProjection::fromJSON (*orthogonalprojection_it),
  93. WallpaperEngine::Core::aToColorf(*skylightcolor_it)
  94. );
  95. auto cur = (*objects_it).begin ();
  96. auto end = (*objects_it).end ();
  97. for (; cur != end; cur ++)
  98. {
  99. scene->insertObject (
  100. CObject::fromJSON (*cur, container)
  101. );
  102. }
  103. return scene;
  104. }
  105. const std::vector<CObject*>& CScene::getObjects () const
  106. {
  107. return this->m_objects;
  108. }
  109. void CScene::insertObject (CObject* object)
  110. {
  111. /// TODO: XXXHACK -- TO REMOVE WHEN PARTICLE SUPPORT IS PROPERLY IMPLEMENTED
  112. if (object != nullptr)
  113. this->m_objects.push_back (object);
  114. }
  115. CContainer* CScene::getContainer ()
  116. {
  117. return this->m_container;
  118. }
  119. const Scenes::CCamera* CScene::getCamera () const
  120. {
  121. return this->m_camera;
  122. }
  123. const FloatColor &CScene::getAmbientColor() const
  124. {
  125. return this->m_ambientColor;
  126. }
  127. const bool CScene::isBloom () const
  128. {
  129. return this->m_bloom;
  130. }
  131. const double CScene::getBloomStrength () const
  132. {
  133. return this->m_bloomStrength;
  134. }
  135. const double CScene::getBloomThreshold () const
  136. {
  137. return this->m_bloomThreshold;
  138. }
  139. const bool CScene::isCameraFade () const
  140. {
  141. return this->m_cameraFade;
  142. }
  143. const bool CScene::isCameraParallax () const
  144. {
  145. return this->m_cameraParallax;
  146. }
  147. const double CScene::getCameraParallaxAmount () const
  148. {
  149. return this->m_cameraParallaxAmount;
  150. }
  151. const double CScene::getCameraParallaxDelay () const
  152. {
  153. return this->m_cameraParallaxDelay;
  154. }
  155. const double CScene::getCameraParallaxMouseInfluence () const
  156. {
  157. return this->m_cameraParallaxMouseInfluence;
  158. }
  159. const bool CScene::isCameraPreview () const
  160. {
  161. return this->m_cameraPreview;
  162. }
  163. const bool CScene::isCameraShake () const
  164. {
  165. return this->m_cameraShake;
  166. }
  167. const double CScene::getCameraShakeAmplitude () const
  168. {
  169. return this->m_cameraShakeAmplitude;
  170. }
  171. const double CScene::getCameraShakeRoughness () const
  172. {
  173. return this->m_cameraShakeRoughness;
  174. }
  175. const double CScene::getCameraShakeSpeed () const
  176. {
  177. return this->m_cameraShakeSpeed;
  178. }
  179. const FloatColor& CScene::getClearColor () const
  180. {
  181. return this->m_clearColor;
  182. }
  183. const Scenes::CProjection* CScene::getOrthogonalProjection () const
  184. {
  185. return this->m_orthogonalProjection;
  186. }
  187. const FloatColor& CScene::getSkylightColor () const
  188. {
  189. return this->m_skylightColor;
  190. }
  191. const std::string CScene::Type = "scene";