Refactoring: split items
This commit is contained in:
@@ -296,15 +296,71 @@ public:
|
||||
void frameRendered(const Ogre::FrameEvent &evt) override;
|
||||
};
|
||||
|
||||
class App : public OgreBites::ApplicationContext {
|
||||
Ogre::SceneNode *mCameraNode, *mCameraPivot, *mCameraGoal;
|
||||
Ogre::Camera *mCamera;
|
||||
Ogre::Real mPivotPitch;
|
||||
struct SceneData {
|
||||
Ogre::SceneManager *mScnMgr;
|
||||
Ogre::Camera *mCamera;
|
||||
Ogre::SceneNode *mCameraNode, *mCameraPivot, *mCameraGoal;
|
||||
Ogre::Real mPivotPitch;
|
||||
SceneData()
|
||||
: mScnMgr(nullptr)
|
||||
, mCamera(nullptr)
|
||||
, mCameraNode(nullptr)
|
||||
, mCameraPivot(nullptr)
|
||||
, mCameraGoal(nullptr)
|
||||
{
|
||||
}
|
||||
void setup(Ogre::Root *root, Ogre::OverlaySystem *overlaySystem)
|
||||
{
|
||||
Ogre::SceneManager *scnMgr = root->createSceneManager();
|
||||
mScnMgr = scnMgr;
|
||||
mScnMgr->addRenderQueueListener(overlaySystem);
|
||||
}
|
||||
void initCamera(const Ogre::String &cameraName)
|
||||
{
|
||||
mCameraNode = mScnMgr->getRootSceneNode()->createChildSceneNode(
|
||||
cameraName + "CameraNode");
|
||||
mCameraNode->setPosition(0, 2, 3);
|
||||
mCameraNode->lookAt(Ogre::Vector3(0, 1, -1),
|
||||
Ogre::Node::TS_PARENT);
|
||||
|
||||
// create the camera
|
||||
mCamera = mScnMgr->createCamera(cameraName);
|
||||
mCamera->setNearClipDistance(0.05f);
|
||||
mCamera->setAutoAspectRatio(true);
|
||||
mCameraNode->attachObject(mCamera);
|
||||
mCameraPivot =
|
||||
mScnMgr->getRootSceneNode()->createChildSceneNode(
|
||||
cameraName + "FPSCameraPivot");
|
||||
mCameraGoal = mCameraPivot->createChildSceneNode(
|
||||
cameraName + "FPSCameraGoal", Ogre::Vector3(0, 2, 3));
|
||||
mCameraNode->setPosition(mCameraPivot->getPosition() +
|
||||
mCameraGoal->getPosition());
|
||||
mCameraPivot->setFixedYawAxis(true);
|
||||
mCameraGoal->setFixedYawAxis(true);
|
||||
mCameraNode->setFixedYawAxis(true);
|
||||
// our model is quite small, so reduce the clipping planes
|
||||
mCamera->setNearClipDistance(0.1f);
|
||||
mCamera->setFarClipDistance(800);
|
||||
mPivotPitch = 0;
|
||||
}
|
||||
void setupRTSS()
|
||||
{
|
||||
Ogre::RTShader::ShaderGenerator *shadergen =
|
||||
Ogre::RTShader::ShaderGenerator::getSingletonPtr();
|
||||
shadergen->addSceneManager(mScnMgr);
|
||||
}
|
||||
Ogre::SceneManager *getSceneManager()
|
||||
{
|
||||
return mScnMgr;
|
||||
}
|
||||
};
|
||||
|
||||
class App : public OgreBites::ApplicationContext {
|
||||
Ogre::Viewport *mViewport;
|
||||
SkyBoxRenderer *sky;
|
||||
bool mGrab;
|
||||
KeyboardListener mKbd;
|
||||
SceneData mEditorNormalScene, mEditorAltScene;
|
||||
|
||||
public:
|
||||
App()
|
||||
@@ -316,16 +372,12 @@ public:
|
||||
virtual ~App()
|
||||
{
|
||||
}
|
||||
void setup()
|
||||
void setup() override
|
||||
{
|
||||
OgreBites::ApplicationContext::setup();
|
||||
Ogre::Root *root = getRoot();
|
||||
Ogre::SceneManager *scnMgr = root->createSceneManager();
|
||||
mScnMgr = scnMgr;
|
||||
Ogre::OverlaySystem *pOverlaySystem = getOverlaySystem();
|
||||
mScnMgr->addRenderQueueListener(pOverlaySystem);
|
||||
// mTrayMgr = new OgreBites::TrayManager("AppTrays",
|
||||
// getRenderWindow());
|
||||
mEditorNormalScene.setup(root, getOverlaySystem());
|
||||
mEditorAltScene.setup(root, getOverlaySystem());
|
||||
}
|
||||
bool isWindowGrab()
|
||||
{
|
||||
@@ -353,85 +405,41 @@ public:
|
||||
|
||||
void initCamera()
|
||||
{
|
||||
mCameraNode = mScnMgr->getRootSceneNode()->createChildSceneNode(
|
||||
"CameraNode");
|
||||
mCameraNode->setPosition(0, 2, 3);
|
||||
mCameraNode->lookAt(Ogre::Vector3(0, 1, -1),
|
||||
Ogre::Node::TS_PARENT);
|
||||
|
||||
// create the camera
|
||||
mCamera = mScnMgr->createCamera("fps_camera");
|
||||
mCamera->setNearClipDistance(0.05f);
|
||||
mCamera->setAutoAspectRatio(true);
|
||||
mCameraNode->attachObject(mCamera);
|
||||
|
||||
// and tell it to render into the main window
|
||||
mViewport = getRenderWindow()->addViewport(mCamera);
|
||||
mCameraPivot =
|
||||
mScnMgr->getRootSceneNode()->createChildSceneNode(
|
||||
"FPSCameraPivot");
|
||||
mCameraGoal = mCameraPivot->createChildSceneNode(
|
||||
"FPSCameraGoal", Ogre::Vector3(0, 2, 3));
|
||||
mCameraNode->setPosition(mCameraPivot->getPosition() +
|
||||
mCameraGoal->getPosition());
|
||||
mCameraPivot->setFixedYawAxis(true);
|
||||
mCameraGoal->setFixedYawAxis(true);
|
||||
mCameraNode->setFixedYawAxis(true);
|
||||
// our model is quite small, so reduce the clipping planes
|
||||
mCamera->setNearClipDistance(0.1f);
|
||||
mCamera->setFarClipDistance(800);
|
||||
mPivotPitch = 0;
|
||||
mEditorNormalScene.initCamera("fps_camera");
|
||||
mEditorNormalScene.initCamera("alt_camera");
|
||||
mViewport = getRenderWindow()->addViewport(
|
||||
mEditorNormalScene.mCamera);
|
||||
}
|
||||
void configure()
|
||||
{
|
||||
std::cout << "Startup"
|
||||
<< "\n";
|
||||
std::cout << "Startup"
|
||||
<< "\n";
|
||||
initApp();
|
||||
std::cout << "Set up RTSS"
|
||||
<< "\n";
|
||||
std::cout << "Set up RTSS"
|
||||
<< "\n";
|
||||
Ogre::Root *root = getRoot();
|
||||
Ogre::SceneManager *scnMgr = getSceneManager();
|
||||
|
||||
// register our scene with the RTSS
|
||||
Ogre::RTShader::ShaderGenerator *shadergen =
|
||||
Ogre::RTShader::ShaderGenerator::getSingletonPtr();
|
||||
shadergen->addSceneManager(scnMgr);
|
||||
mEditorNormalScene.setupRTSS();
|
||||
mEditorAltScene.setupRTSS();
|
||||
setWindowGrab(false);
|
||||
std::cout << "Init camera"
|
||||
<< "\n";
|
||||
std::cout << "Init camera"
|
||||
<< "\n";
|
||||
initCamera();
|
||||
std::cout << "Set up water"
|
||||
<< "\n";
|
||||
std::cout << "Set up cursor"
|
||||
<< "\n";
|
||||
Ogre::ResourceGroupManager::getSingleton()
|
||||
.initialiseAllResourceGroups();
|
||||
// OgreBites::ApplicationContext::loadResources();
|
||||
// setupCursor();
|
||||
std::cout << "Setup input"
|
||||
<< "\n";
|
||||
std::cout << "Setup input"
|
||||
<< "\n";
|
||||
setupInput();
|
||||
std::cout << "Create content"
|
||||
<< "\n";
|
||||
std::cout << "Create content"
|
||||
<< "\n";
|
||||
createContent();
|
||||
std::cout << "Setup done"
|
||||
<< "\n";
|
||||
#if 0
|
||||
mDbgDraw->setDebugMode(mDbgDraw->getDebugMode() |
|
||||
btIDebugDraw::DBG_DrawContactPoints);
|
||||
#endif
|
||||
}
|
||||
Ogre::SceneManager *getSceneManager()
|
||||
{
|
||||
return mScnMgr;
|
||||
std::cout << "Setup done"
|
||||
<< "\n";
|
||||
}
|
||||
Ogre::Timer mTerrainUpd;
|
||||
// TODO: implement rough water level calculation
|
||||
float getWaterLevel(const Ogre::Vector3 &position)
|
||||
{
|
||||
Ogre::Vector3::UNIT_Y;
|
||||
float etime =
|
||||
Ogre::ControllerManager::getSingleton().getElapsedTime();
|
||||
return 0.0f;
|
||||
}
|
||||
void updateWorld(float delta)
|
||||
@@ -447,6 +455,26 @@ public:
|
||||
ECS::get().modified<ECS::GUI>();
|
||||
}
|
||||
ECS::update(delta);
|
||||
#if 0
|
||||
if (switchWindow) {
|
||||
int scene = ECS::get<ECS::EditorSceneSwitch>().scene;
|
||||
mEditorNormalScene.mScnMgr->removeRenderQueueListener(
|
||||
getOverlaySystem());
|
||||
mEditorAltScene.mScnMgr->removeRenderQueueListener(
|
||||
getOverlaySystem());
|
||||
mViewport->setOverlaysEnabled(false);
|
||||
if (scene == 0)
|
||||
mViewport->setCamera(
|
||||
mEditorNormalScene.mCamera);
|
||||
else if (scene == 1)
|
||||
mViewport->setCamera(mEditorAltScene.mCamera);
|
||||
mViewport->setOverlaysEnabled(true);
|
||||
mEditorNormalScene.mScnMgr->addRenderQueueListener(
|
||||
getOverlaySystem());
|
||||
mEditorAltScene.mScnMgr->addRenderQueueListener(
|
||||
getOverlaySystem());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
class InputListenerChainFlexible : public OgreBites::InputListener {
|
||||
protected:
|
||||
@@ -580,10 +608,11 @@ public:
|
||||
void setupInput()
|
||||
{
|
||||
}
|
||||
bool switchWindow = false;
|
||||
void createContent()
|
||||
{
|
||||
int i;
|
||||
sky = new SkyBoxRenderer(getSceneManager());
|
||||
sky = new SkyBoxRenderer(mEditorNormalScene.getSceneManager());
|
||||
bool drawFirst = true;
|
||||
uint8_t renderQueue = drawFirst ?
|
||||
Ogre::RENDER_QUEUE_SKIES_EARLY :
|
||||
@@ -599,8 +628,14 @@ public:
|
||||
"Skybox/Dynamic", "General");
|
||||
OgreAssert(m, "Sky box material not found.");
|
||||
m->load();
|
||||
ECS::setupEditor(mScnMgr, /*mDynWorld.get(), */ mCameraNode,
|
||||
mCamera, getRenderWindow());
|
||||
ECS::setupEditor(
|
||||
mEditorNormalScene.mScnMgr,
|
||||
/*mDynWorld.get(), */ mEditorNormalScene.mCameraNode,
|
||||
mEditorNormalScene.mCamera, getRenderWindow());
|
||||
ECS::setupEditorAlt(
|
||||
mEditorAltScene.mScnMgr,
|
||||
/*mDynWorld.get(), */ mEditorAltScene.mCameraNode,
|
||||
mEditorAltScene.mCamera, getRenderWindow());
|
||||
ECS::get().import <ECS::EditorGizmoModule>();
|
||||
ECS::get().import <ECS::EditorInputModule>();
|
||||
ECS::get().set<ECS::RenderWindow>(
|
||||
@@ -632,11 +667,20 @@ public:
|
||||
nullptr,
|
||||
{ getImGuiInputListener(), &mKbd } });
|
||||
ECS::get().add<ECS::EditorDebugMaterial>();
|
||||
#if 0
|
||||
ECS::get()
|
||||
.observer<ECS::EditorSceneSwitch>("UpdateEditorScene")
|
||||
.event(flecs::OnSet)
|
||||
.each([&](ECS::EditorSceneSwitch &sw) {
|
||||
switchWindow = true;
|
||||
});
|
||||
#endif
|
||||
std::shared_ptr<Ogre::ManualObject> manualObj(
|
||||
mScnMgr->createManualObject("EditorGizmo"));
|
||||
mEditorNormalScene.mScnMgr->createManualObject(
|
||||
"EditorGizmo"));
|
||||
Ogre::SceneNode *gizmoNode =
|
||||
mScnMgr->getRootSceneNode()->createChildSceneNode(
|
||||
"EditorGizmoNode");
|
||||
mEditorNormalScene.mScnMgr->getRootSceneNode()
|
||||
->createChildSceneNode("EditorGizmoNode");
|
||||
gizmoNode->attachObject(manualObj.get());
|
||||
manualObj->setRenderQueueGroup(Ogre::RENDER_QUEUE_OVERLAY);
|
||||
ECS::get().set<ECS::EditorGizmo>({ manualObj, gizmoNode });
|
||||
@@ -723,13 +767,9 @@ public:
|
||||
ECS::get().get_mut<ECS::GUI>().enabled = active;
|
||||
ECS::get().modified<ECS::GUI>();
|
||||
}
|
||||
Ogre::Camera *getCamera()
|
||||
{
|
||||
return mCamera;
|
||||
}
|
||||
flecs::entity getPlayer() const
|
||||
{
|
||||
return ECS::player;
|
||||
return ECS::player;
|
||||
}
|
||||
void enableDbgDraw(bool enable)
|
||||
{
|
||||
@@ -795,7 +835,7 @@ int main()
|
||||
{
|
||||
App ctx;
|
||||
ctx.configure();
|
||||
// ctx.enableDbgDraw(false);
|
||||
// ctx.enableDbgDraw(false);
|
||||
ctx.getRoot()->startRendering();
|
||||
ctx.setWindowGrab(false);
|
||||
ctx.closeApp();
|
||||
|
||||
Reference in New Issue
Block a user