#include #include #include "Components.h" #include "SunModule.h" namespace ECS { SunModule::SunModule(flecs::world &ecs) { ecs.component().add(flecs::Singleton); ecs.system("UpdateSetupSun") .kind(flecs::OnUpdate) .each([](const EngineData &eng, Sun &sun) { if (!sun.mSun) { Ogre::Light *light = eng.mScnMgr->createLight("Sun"); sun.mSunNode = eng.mScnMgr->getRootSceneNode() ->createChildSceneNode( "SunPivot"); sun.mSunGoal = eng.mScnMgr->getRootSceneNode() ->createChildSceneNode( "SunGoal"); sun.mSunTarget = sun.mSunGoal->createChildSceneNode( "SunGoalTarget", Ogre::Vector3(100.0f, -400.0f, -400.0f), Ogre::Quaternion::IDENTITY); sun.mSunNode->attachObject(light); light->setType(Ogre::Light::LT_DIRECTIONAL); light->setDiffuseColour( Ogre::ColourValue::White); light->setSpecularColour( Ogre::ColourValue(0.4, 0.4, 0.4)); sun.mSunNode->setDirection( Ogre::Vector3(100.0f, -400.0f, -400.f)); sun.mSun = light; } static const float sun_speed = 1.0f; float uangle = M_PI * 2.0f / 24.0f / 60.0f; sun.mSunNode->pitch(Ogre::Radian(uangle) * sun_speed * eng.delta); if (sun.mSunNode->getOrientation() .getPitch() .valueRadians() > 0) eng.mScnMgr->setAmbientLight(Ogre::ColourValue( 0.1f, 0.1f, 0.4f, 1.0f)); else eng.mScnMgr->setAmbientLight(Ogre::ColourValue( 0.2f, 0.2f, 0.2f, 1.0f)); }); } }