Advertisement
dragonslayer0531

DS STATE

Jul 5th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.10 KB | None | 0 0
  1. #include "../includes/ds_state.h"
  2. #include "../includes/movement_system.h"
  3. #include <core/threading/threadpool.h>
  4. #include <Physx/extensions/PxRigidBodyExt.h>
  5.  
  6. #define V_COUNT 64
  7.  
  8. #ifndef UI_MAX_VERTEX_MEM
  9. #define UI_MAX_VERTEX_MEM 1024 * 512
  10. #endif
  11.  
  12. #ifndef UI_MAX_ELEMENT_MEM
  13. #define UI_MAX_ELEMENT_MEM 1024 * 128
  14. #endif
  15.  
  16. void DSState::Configure()
  17. {
  18.     std::ifstream lt_in("lookup_table.bin", std::ios::binary);
  19.     cereal::BinaryInputArchive archive_in(lt_in);
  20.  
  21.     {
  22.         ComponentLookupTable table;
  23.         archive_in(table);
  24.     }
  25.  
  26.     lt_in.close();
  27.  
  28.     PipelineLibrary::LoadLibrary("pipelines.asset");
  29.     PipelineLibrary::Create(pManager_);
  30.     TextureLibrary::LoadLibrary("textures.asset");
  31.  
  32.     glm::mat4 proj = glm::perspective(70.0f, 16.0f / 9.0f, 0.2f, 5000.0f);
  33.  
  34.     auto cam = pManager_->GetEntityManager()->Create();
  35.     cam.AddComponent<gfx::CameraComponent>();
  36.     cam.GetComponent<gfx::CameraComponent>()->SetPosition(glm::vec3(0, 120, -200));
  37.     cam.GetComponent<gfx::CameraComponent>()->SetRotation(glm::vec3(-45, 0, 0));
  38.  
  39.     pManager_->GetSystemManager()->Add<render::RenderSystem>(pManager_, cam, proj);
  40.     pManager_->GetSystemManager()->Add<DebugSystem>();
  41.     pManager_->GetSystemManager()->Add<ecs::Dependency<render::RenderableComponent, TransformationComponent>>();
  42.     pManager_->GetSystemManager()->Add<MovementSystem>(cam);
  43.     pManager_->GetSystemManager()->Add<render::ScreenshotSystem>(pManager_);
  44.     pManager_->GetSystemManager()->Add<physics::PhysicsSystem>(pManager_);
  45.     pManager_->GetSystemManager()->Configure();
  46.  
  47.     Window::GetCurrentWindow()->GetWidth().SetListener([&](uint32_t old_val, uint32_t new_val) {
  48.         auto mat = glm::perspective(70.0f, (float)new_val / (float)Window::GetCurrentWindow()->GetHeight().GetValue(), 0.2f, 5000.0f);
  49.         pManager_->GetSystemManager()->GetSystem<render::RenderSystem>()->GetSceneRenderer()->SetProjectionMatrix(mat);
  50.     });
  51.  
  52.     Window::GetCurrentWindow()->GetHeight().SetListener([&](uint32_t old_val, uint32_t new_val) {
  53.         auto mat = glm::perspective(70.0f, (float)Window::GetCurrentWindow()->GetWidth().GetValue() / (float)new_val, 0.2f, 5000.0f);
  54.         pManager_->GetSystemManager()->GetSystem<render::RenderSystem>()->GetSceneRenderer()->SetProjectionMatrix(mat);
  55.     });
  56.  
  57.     gfx::TextureCreateInfo create_info =
  58.     {
  59.         gfx::FILTER_MIN_LINEAR_MIPMAP_LINEAR_MAG_LINEAR,
  60.         gfx::RGBA8,
  61.     {
  62.         true,
  63.         -0.6f,
  64.         2.0f
  65.     },
  66.         0,
  67.         0,
  68.         0,
  69.         8,
  70.         -0.6f,
  71.         -50.0f,
  72.         5.0f
  73.     };
  74.  
  75.     FastNoise noise;
  76.     noise.SetNoiseType(FastNoise::PerlinFractal);
  77.     noise.SetSeed(1337);
  78.     noise.SetFrequency(0.01f);
  79.     noise.SetInterp(FastNoise::Hermite);
  80.     noise.SetFractalType(FastNoise::FBM);
  81.     noise.SetFractalOctaves(8);
  82.     noise.SetFractalLacunarity(.5f);
  83.     noise.SetFractalGain(0.1f);
  84.     noise.SetGradientPerturbAmp(2);
  85.     noise.SetGradientPerturbFrequency(0.15f);
  86.  
  87.  
  88.     auto cube_mesh = new gfx::Mesh;
  89.     ReadFromFile("cube.asset", *cube_mesh);
  90.     cube_mesh->Name = "cube";
  91.  
  92.     auto mod3 = gfx::Context::LoadMesh(cube_mesh);
  93.  
  94.     std::vector<unsigned char*> data_array;
  95.  
  96.     render::ResourceLibrary::GetInstance().LocationLibrary.AssetTypes.insert(std::make_pair("pine.asset", render::LIBRARY_TEXTURE));
  97.     SendToFile("resource_library.asset", render::ResourceLibrary::GetInstance().LocationLibrary);
  98.  
  99.     glm::mat4 modl = glm::mat4(1.0);
  100.     Transformation * t = new Transformation(glm::vec3(0, 0, 0), glm::vec3(0, 0, 0), glm::vec3(0.5, 0.5, 0.5));
  101.     Transformation * t1 = new Transformation(glm::vec3(-2, 0, -2), glm::vec3(0, 0, 0), glm::vec3(0.5, 0.5, 0.5));
  102.     Transformation * t2 = new Transformation(glm::vec3(5, 1.5, 5), glm::vec3(45, 45, 0), glm::vec3(1, 1, 1));
  103.  
  104.     auto * mat  = new render::Material;
  105.     auto * mat2 = new render::Material;
  106.     auto * mat4 = new render::Material;
  107.  
  108.     ReadFromFile("material.asset", *mat);
  109.     ReadFromFile("material_2.asset", *mat2);
  110.     ReadFromFile("material_4.asset", *mat4);
  111.  
  112.     glm::vec3 scale(1, 1, 1);
  113.  
  114.     gfx::Context::Flush(pManager_);
  115.  
  116.     for (auto x = -6; x < 5; x++)
  117.     {
  118.         for (auto z = -6; z < 5; z++)
  119.         {
  120.             Transformation trans(glm::vec3(x * V_COUNT, 0, z * V_COUNT), glm::vec3(0, 0, 0), glm::vec3(1, 1, 1));
  121.  
  122.             auto * ter = new render::Terrain(V_COUNT, mat4, &trans, noise, 48, 1);
  123. //          auto * ter = render::Terrain::GenerateFlatTerrain(V_COUNT, mat4, &trans);
  124.  
  125.             physics::HeightFieldDesc hfd;
  126.             hfd.ColumnScale = 1;
  127.             hfd.RowScale = 1;
  128.             hfd.NumCols = V_COUNT + 1;
  129.             hfd.NumRows = V_COUNT + 1;
  130.             hfd.pManager = pManager_->GetSystemManager()->GetSystem<physics::PhysicsSystem>()->GetManager();
  131.             hfd.HeightScale = 64;
  132.  
  133.             hfd.HeightMap = static_cast<float*>(calloc(sizeof(float) * hfd.NumCols * hfd.NumRows, 1));
  134.             memcpy(hfd.HeightMap, ter->GetHeightMap(), sizeof(float) * (V_COUNT + 1) * (V_COUNT + 1));
  135.  
  136.             auto e = pManager_->GetEntityManager()->Create();
  137.  
  138.             physics::PhysicsMaterialDescriptor mat_desc;
  139.             mat_desc.DynamicFriction = 0.5f;
  140.             mat_desc.StaticFriction = 0.5f;
  141.             mat_desc.Restitution = 0.5f;
  142.  
  143.             pManager_->GetEntityManager()->AddComponent<render::RenderableComponent>(e.GetID(), *ter);
  144.             e.GetComponent<TransformationComponent>()->SetPosition(trans.GetPosition());
  145.             e.GetComponent<TransformationComponent>()->SetScale(trans.GetScale());
  146.  
  147.             e.AddComponent<physics::PhysicsComponent>(physics::STATIC, physics::HEIGHTFIELD, &hfd, e.GetComponent<TransformationComponent>().Get(), mat_desc, pManager_->GetSystemManager()->GetSystem<physics::PhysicsSystem>().get(), 1.0f);
  148.  
  149.             delete ter;
  150.         }
  151.     }
  152.  
  153.     gfx::Context::Flush(pManager_);
  154.  
  155.     float ter_scale = V_COUNT / 64.0f;
  156.  
  157.     gfx::GraphicsPipeline::SetDefault();
  158.  
  159.     Allocator::Dispose();
  160.  
  161.     render::Renderable renderable(mat, mod3);
  162.     render::Renderable renderable2(mat, mod3);
  163.     render::Renderable renderable3(mat2, mod3);
  164.    
  165.     for (auto i = -5; i < 5; i++)
  166.     {
  167.         for (auto j = -5; j < 5; j++)
  168.         {
  169.             auto ent = pManager_->GetEntityManager()->Create();
  170.             ent.AddComponent<render::RenderableComponent>(renderable2);
  171.             ent.GetComponent<TransformationComponent>()->SetPosition(glm::vec3(i * 15, 65, j * 15));
  172.             ent.GetComponent<TransformationComponent>()->SetScale(glm::vec3(1, 1, 1));
  173.  
  174.             auto new_rot = ent.GetComponent<TransformationComponent>()->GetRotation();
  175.  
  176.             ent.GetComponent<render::RenderableComponent>()->renderables[0].GetMaterial()->SetTransparent(false);
  177.  
  178.             auto physics_system = pManager_->GetSystemManager()->GetSystem<physics::PhysicsSystem>();
  179.  
  180.             physics::BoxDesc desc;
  181.             desc.HalfWidth = 1.0f;
  182.             desc.HalfHeight = 1.0f;
  183.             desc.HalfDepth = 1.0f;
  184.  
  185.  
  186.             physics::PhysicsMaterialDescriptor mat_desc;
  187.             mat_desc.DynamicFriction = 0.5f;
  188.             mat_desc.StaticFriction = 0.5f;
  189.             mat_desc.Restitution = 0.5f;
  190.  
  191.             ent.AddComponent<physics::PhysicsComponent>(physics::DYNAMIC, physics::BOX, &desc, ent.GetComponent<TransformationComponent>().Get(), mat_desc, physics_system.get(), 1.0f);
  192.         }
  193.     }
  194.  
  195.     pManager_->GetEventManager()->EmitEvent<gfx::ModelSubmittedEvent>();
  196.     gfx::Context::Clear();
  197.  
  198.     auto directional_light = pManager_->GetEntityManager()->Create();
  199.     directional_light.AddComponent<render::DirectionalLightComponent>(gfx::DirectionalLight{
  200.         render::Vec3{ 0, -1, 0 },
  201.         render::Vec3{ .2f, .2f, .2f },
  202.         render::Vec3{ .6f, .6f, .6f },
  203.         render::Vec3{ .2f, .2f, .2f }
  204.     });
  205.  
  206.     auto point_light = pManager_->GetEntityManager()->Create();
  207.     point_light.AddComponent<render::PointLightComponent>(gfx::PointLight{
  208.         render::Vec3{ 350, 100, 25 },
  209.         render::Vec3{ .2f, .2f, .2f },
  210.         render::Vec3{ .6f, .6f, .6f },
  211.         render::Vec3{ .2f, .2f, .2f },
  212.         render::Vec3{ 0.0f, 0.01f, 0.0f }
  213.     });
  214.  
  215.     auto point_light_2 = pManager_->GetEntityManager()->Create();
  216.     point_light_2.AddComponent<render::PointLightComponent>(gfx::PointLight{
  217.         render::Vec3{ 50, 100, 25 },
  218.         render::Vec3{ .2f, .2f, .2f },
  219.         render::Vec3{ .6f, .6f, .6f },
  220.         render::Vec3{ .2f, .2f, .2f },
  221.         render::Vec3{ 0.0f, 0.01f, 0.0f }
  222.     });
  223.  
  224.     pManager_->GetSystemManager()->UpdateAll(0);
  225. }
  226.  
  227. void DSState::Run()
  228. {
  229.     std::cout << Timer::FPS() << std::endl;
  230.     if (Keyboard::IsKeyPressed(KEY_0))
  231.     {
  232.         render::Screenshot(this->GetManager());
  233.     }
  234. }
  235.  
  236. void DSState::Shutdown()
  237. {
  238.     TextureLibrary::Clear();
  239.     PipelineLibrary::Clear();
  240.  
  241.     delete mat;
  242.     delete mat2;
  243.     delete mat4;
  244. }
  245.  
  246. bool DSState::ShouldShutdown()
  247. {
  248.     return Keyboard::IsKeyPressed(KEY_ESCAPE);
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement