54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
#include <iostream>
|
|
#include <Ogre.h>
|
|
#include "Components.h"
|
|
#include "SunModule.h"
|
|
|
|
namespace ECS
|
|
{
|
|
SunModule::SunModule(flecs::world &ecs)
|
|
{
|
|
ecs.component<Sun>().add(flecs::Singleton);
|
|
ecs.system<const EngineData, Sun>("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));
|
|
});
|
|
}
|
|
}
|