#include #include #include #ifdef ANKI_BUILD #undef ANKI_BUILD #endif #include "anki/AnKi.h" using namespace anki; #define PLAYER 0 #define MOUSE 1 class MyApp : public App { public: Bool m_profile = false; Error init(); Error userMainLoop(Bool& quit) override; }; MyApp* app = nullptr; //============================================================================== Error MyApp::init() { Error err = Error::NONE; ANKI_LOGI("Other init..."); SceneGraph& scene = app->getSceneGraph(); MainRenderer& renderer = app->getMainRenderer(); ResourceManager& resources = app->getResourceManager(); renderer.getOffscreenRenderer().getVolumetric().setFogParticleColor( Vec3(1.0, 0.9, 0.9), 0.7); if(getenv("PROFILE")) { m_profile = true; app->setTimerTick(0.0); } { ScriptResourcePtr script; // ANKI_CHECK(resources.loadResource("maps/hell/scene.lua", script)); ANKI_CHECK(resources.loadResource("data/map/scene.lua", script)); if(err) return err; err = app->getScriptManager().evalString(script->getSource()); if(err) return err; app->getMainRenderer() .getOffscreenRenderer() .getFinalComposite(); // .loadColorGradingTexture("textures/adis/dungeon.ankitex"); } return Error::NONE; } //============================================================================== Error MyApp::userMainLoop(Bool& quit) { Error err = Error::NONE; F32 dist = 0.1; F32 ang = toRad(2.5); F32 scale = 0.01; F32 mouseSensivity = 9.0; quit = false; SceneGraph& scene = getSceneGraph(); Input& in = getInput(); MainRenderer& renderer = getMainRenderer(); if(in.getKey(KeyCode::ESCAPE)) { quit = true; return err; } // move the camera static MoveComponent* mover = &scene.getActiveCamera().getComponent(); if(in.getKey(KeyCode::_1)) { mover = scene.getActiveCamera().tryGetComponent(); } if(in.getKey(KeyCode::_2)) { mover = &scene.findSceneNode("proxy").getComponent(); } if(in.getKey(KeyCode::_3)) { mover = &scene.findSceneNode("spot0").getComponent(); } if(in.getKey(KeyCode::_4)) { mover = &scene.findSceneNode("spot1").getComponent(); } if(in.getKey(KeyCode::_5)) { mover = &scene.findSceneNode("pe").getComponent(); } if(in.getKey(KeyCode::_6)) { mover = &scene.findSceneNode("shape0").getComponent(); } if(in.getKey(KeyCode::_7)) { mover = &scene.findSceneNode("shape1").getComponent(); } if(in.getKey(KeyCode::L) == 1) { Vec3 origin = mover->getWorldTransform().getOrigin().xyz(); printf("%f %f %f\n", origin.x(), origin.y(), origin.z()); } if(in.getKey(KeyCode::F1) == 1) { renderer.getDbg().setEnabled(!renderer.getDbg().getEnabled()); } if(in.getKey(KeyCode::F2) == 1) { renderer.getDbg().flipFlags(DbgFlag::SPATIAL_COMPONENT); } if(in.getKey(KeyCode::F3) == 1) { renderer.getDbg().flipFlags(DbgFlag::PHYSICS); } if(in.getKey(KeyCode::F4) == 1) { renderer.getDbg().flipFlags(DbgFlag::SECTOR_COMPONENT); } if(in.getKey(KeyCode::F6) == 1) { renderer.getDbg().switchDepthTestEnabled(); } if(in.getKey(KeyCode::F12) == 1) { printf("F12\n"); scene.getActiveCamera() .getComponent() .markShapeForUpdate(); scene.getActiveCamera() .getComponent() .markTransformForUpdate(); } #if !PLAYER if(in.getKey(KeyCode::UP)) mover->rotateLocalX(ang); if(in.getKey(KeyCode::DOWN)) mover->rotateLocalX(-ang); if(in.getKey(KeyCode::LEFT)) mover->rotateLocalY(ang); if(in.getKey(KeyCode::RIGHT)) mover->rotateLocalY(-ang); if(in.getKey(KeyCode::A)) { mover->moveLocalX(-dist); } if(in.getKey(KeyCode::D)) mover->moveLocalX(dist); if(in.getKey(KeyCode::Z)) mover->moveLocalY(dist); if(in.getKey(KeyCode::SPACE)) mover->moveLocalY(-dist); if(in.getKey(KeyCode::W)) mover->moveLocalZ(-dist); if(in.getKey(KeyCode::S)) mover->moveLocalZ(dist); if(in.getKey(KeyCode::Q)) mover->rotateLocalZ(ang); if(in.getKey(KeyCode::E)) mover->rotateLocalZ(-ang); if(in.getKey(KeyCode::PAGEUP)) { mover->scale(scale); } if(in.getKey(KeyCode::PAGEDOWN)) { mover->scale(-scale); } #endif #if !PLAYER && MOUSE if(in.getMousePosition() != Vec2(0.0) && !m_profile) { // printf("%f %f\n", in.getMousePosition().x(), // in.getMousePosition().y()); F32 angY = -ang * in.getMousePosition().x() * mouseSensivity * renderer.getAspectRatio(); mover->rotateLocalY(angY); mover->rotateLocalX(ang * in.getMousePosition().y() * mouseSensivity); } #endif if(m_profile && getGlobalTimestamp() == 500) { quit = true; return err; } return err; } //============================================================================== Error init(int argc, char* argv[]) { Error err = Error::NONE; // Config Config config; if(getenv("ANKI_DATA_PATH")) { config.set("dataPaths", getenv("ANKI_DATA_PATH")); } else { config.set("dataPaths", "assets"); } // config.set("maxTextureSize", 256); // config.set("lodDistance", 3.0); // config.saveToFile("./config.xml"); // config.loadFromFile("./config.xml"); app = new MyApp; ANKI_CHECK(app->create(config, allocAligned, nullptr)); ANKI_CHECK(app->init()); // Input #if MOUSE app->getInput().lockCursor(true); app->getInput().hideCursor(true); app->getInput().moveCursor(Vec2(0.0)); #endif return err; } //============================================================================== int main(int argc, char* argv[]) { Error err = Error::NONE; err = init(argc, argv); if(!err) { err = app->mainLoop(); } if(err) { ANKI_LOGE("Error reported. See previous messages"); } else { delete app; ANKI_LOGI("Bye!!"); } return 0; }