#include #include #include #include #include #include #include #include "FreeCameraController.h" #include #include #include "BoundsView.h" #include #include #include #include #include #include #include #include #include #include #include #include #include GameObjectPtr CreateCube() { auto cubeObject = GameObject::create(); cubeObject->AddComponent()->SetMesh(Mesh::Create([](MeshPtr mesh) {MeshGenerator::Cube(mesh, true); })); return cubeObject; } struct TestObject : public Object { uint8_t uint8_t_; uint16_t uint16_t_; uint32_t uint32_t_; uint64_t uint64_t_; std::string string_; LString wstring_; std::shared_ptr next; virtual void serialize(Archive& archive) override { archive << uint8_t_ << uint16_t_ << uint32_t_; archive << uint64_t_ << string_ << wstring_; auto ptr = std::static_pointer_cast(next); archive << ptr; } }; void SaveScene(const LString& path) { AssetDatabase::get().open_asset_file(path); AssetFile asset(LFramework::Guid(1, 2, 3, 4), path); //find all game objects auto scene_objects = Object::FindObjectsOfType(); //add all game objects and components to scene asset for (auto obj : scene_objects) { asset.AddObject(obj); auto components = obj->GetComponents(); for (auto component : components) { asset.AddObject(component); } } asset.Save(); } void CreateTestScene() { using namespace lm; auto cameraGo = GameObject::create(); cameraGo->SetName(LTEXT("Main camera")); cameraGo->AddComponent()->fov = 45.0f; cameraGo->transform->SetLocalPosition(float3(0.0f, 4.0f, -4.0f)); cameraGo->AddComponent(); } void LoadScene(const LString& path) { auto archive = AssetDatabase::get().open_asset_file(path); } //int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { int main(int argc, char** argv) { using namespace lm; const char* currentFilePathRaw = __FILE__; std::filesystem::path currentFilePath(currentFilePathRaw); auto assetsDirPath = currentFilePath.parent_path().parent_path() / "Assets"; float angleY = 3.14159265358979f / 2; auto q = Quaternion_f::angleAxis(angleY, float3(0.0f, 1.0f, 0.0f)); auto mm = lm::matrix4x4RotationQuaternion(q); auto mm2 = lm::matrix4x4RotationY(angleY); float4 v0{ 1.0f, 0.0f, 0.0f, 1.0f}; auto v1 = lm::mul(mm2, v0); auto right = mm.get(0); auto up = mm.y(); auto forward = mm.z(); auto right2= mm.x(); auto up2 = mm.y(); auto forward2 = mm.z(); //matrix4x4RotationQuaternion(_rotation); //auto positionMatrix = matrix4x4Translation(_position); VulkanApplication app(RenderWindow::getRequiredExtensionNames(), "LEngine::GameEditor", 1); auto window = std::make_shared(app.instance(), LTEXT("LEngine::GameEditor::😀RenderWindow")); AssetDatabase::get().set_root_path(assetsDirPath.string()); auto engine = LEngine::Instance(); engine->Init(assetsDirPath.string(), app.instance(), window); engine->LoadScene(""); auto renderer = engine->GetRenderer(); auto ints = Input::Instance(); auto tex = AssetManager::Instance()->LoadTexture(LTEXT("textures/1_store.dds")); auto sceneptr = LEngine::Instance()->GetActiveScene(); //auto editorWindow = UiSwapChainWindow::Create(LTEXT("LEngineEditorWindow")); ObjMeshLoader loader; auto objects = loader.Load(AssetManager::Instance()->GetFullAssetPath(LTEXT("Boxes.obj"))); auto obj = objects[0]; auto mr = obj->GetComponent(); auto m = mr->GetMesh(); std::vector v; v.resize(3); v[0].position = float4(1.0f, 0.0f, 0.0f, 1.0f); v[0].normal = float3(1.0f, 0.0f, 0.0f); v[1].position = float4(0.0f, 0.0f, 0.0f, 1.0f); v[2].position = float4(0.0f, 0.0f, 1.0f, 1.0f); v[2].normal = float3(0.0f, 0.0f, 1.0f); m->SetVertices(v); LString scene = LTEXT("TestScene.asset"); CreateTestScene(); //SaveScene(scene); //LoadScene(scene); //editorWindow->size = UiSize(640, 480); // auto output = std::make_shared(engine->GetRenderer(), editorWindow->GetWindow()->GetHwnd(), 640, 480, false); //engine->AddOutput(output); auto renderWindowOutput = std::make_shared(window); auto sceneRenderer = std::make_shared(renderer, renderWindowOutput); //ob[0]->AddComponent(); //auto mat = Material::Create(Shader::Create(LTEXT("shaders/shader.fx")), ""); //mat->GetParametersBlock().SetTexture("diffuse", tex); //for (auto o : ob) //{ // o->GetComponent()->SetMaterial(mat, 0); //} /*AssetMetadata meta(L"D:\\lengine\\Assets\\Boxes.obj"); meta.Save(); auto& factory = ObjectsFactory::instance(); */ auto cameras = Object::FindObjectsOfType(); auto cameraGo = cameras[0]->gameObject; cameraGo->transform->SetLocalPosition(float3(0.0f, 0.0f, -4.0f)); typedef std::chrono::high_resolution_clock clock; auto last_time = clock::now(); float delta_time = 0.0f; float totalTime = 0; while (window->update()) { auto now_time = clock::now(); delta_time = (float)((double)std::chrono::duration_cast(now_time - last_time).count() / 1000000.0); last_time = now_time; totalTime += delta_time; if (totalTime >= 30.0f) { //sceneRenderer->createPSO = false; } //std::chrono::high_resolution_clock::now(); LEngine::Instance()->GetActiveScene()->tick(delta_time); sceneRenderer->RenderScene(engine->GetActiveScene(), cameraGo->GetComponent()); // sceneRenderer->RenderScene(engine->GetRenderer(),, output); //editorWindow->Update(1); Input::Instance()->strobe(); //output->Present();а } return 0; }