diff --git a/cloc b/cloc new file mode 100644 index 0000000..d9b8137 --- /dev/null +++ b/cloc @@ -0,0 +1,71 @@ +include/application.h +include/components/collider.h +include/components/custom.h +include/components/mesh_renderable.h +include/components/transform.h +include/components/ui_renderable.h +include/ecs.h +include/engine_api.h +include/event_system.h +include/gfx.h +include/gfx_device.h +include/input_manager.h +include/inputs/keyboard.h +include/inputs/mouse.h +include/log.h +include/logger.h +include/renderer.h +include/resource_manager.h +include/resources/font.h +include/resources/material.h +include/resources/mesh.h +include/resources/shader.h +include/resources/texture.h +include/scene.h +include/scene_manager.h +include/systems/collisions.h +include/systems/custom_behaviour.h +include/systems/mesh_render_system.h +include/systems/transform.h +include/systems/ui_render_system.h +include/util.h +include/util/files.h +include/util/gltf_loader.h +include/util/model_loader.h +include/window.h +src/application.cpp +src/ecs.cpp +src/gfx_device_vulkan.cpp +src/input_manager.cpp +src/renderer.cpp +src/resources/font.cpp +src/resources/material.cpp +src/resources/mesh.cpp +src/resources/shader.cpp +src/resources/texture.cpp +src/scene.cpp +src/scene_manager.cpp +src/systems/collisions.cpp +src/systems/custom_behaviour.cpp +src/systems/mesh_render_system.cpp +src/systems/transform.cpp +src/systems/ui_render_system.cpp +src/util/files.cpp +src/util/gltf_loader.cpp +src/util/model_loader.cpp +src/vulkan/device.cpp +src/vulkan/device.h +src/vulkan/gpu_allocator.cpp +src/vulkan/gpu_allocator.h +src/vulkan/instance.cpp +src/vulkan/instance.h +src/vulkan/swapchain.cpp +src/vulkan/swapchain.h +src/window.cpp +test/src/camera_controller.cpp +test/src/camera_controller.hpp +test/src/game.cpp +test/src/game.hpp +test/src/main.cpp +test/src/meshgen.cpp +test/src/meshgen.hpp diff --git a/doc/blender_template.blend b/doc/blender_template.blend new file mode 100644 index 0000000..36c2bfd --- /dev/null +++ b/doc/blender_template.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f61082618f19f3559334bd97002a7212a6b595cb91453a8363ab679754ea7a8c +size 988493 diff --git a/doc/blender_template.blend1 b/doc/blender_template.blend1 new file mode 100644 index 0000000..3d62b63 --- /dev/null +++ b/doc/blender_template.blend1 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f4c1baed50943d62f42f5cb4fee2789c5d81ea03415ba44337d907fa90c2a05 +size 924537 diff --git a/res/engine/shaders/fancy.frag b/res/engine/shaders/fancy.frag index 7a0bf07..7d5f27d 100644 --- a/res/engine/shaders/fancy.frag +++ b/res/engine/shaders/fancy.frag @@ -33,7 +33,7 @@ void main() { const float roughness = metallic_roughness.b; const float roughness_2 = roughness * roughness; - const vec3 light_colour = vec3(1.0, 1.0, 1.0) * 5.0; + const vec3 light_colour = vec3(1.0, 1.0, 1.0) * 2.4; const vec3 emission = vec3(0.0, 0.0, 0.0); const float ao = texture(materialSetOcclusionSampler, fragUV).r; @@ -72,4 +72,4 @@ void main() { const vec3 lighting = brdf * light_colour * L_dot_N; outColor = vec4(min(emission + lighting, 1.0), 1.0); -} \ No newline at end of file +} diff --git a/res/engine/shaders/fancy.vert b/res/engine/shaders/fancy.vert index 47125e7..ec61072 100644 --- a/res/engine/shaders/fancy.vert +++ b/res/engine/shaders/fancy.vert @@ -34,7 +34,7 @@ void main() { fragUV = inUV; fragPosTangentSpace = worldToTangentSpace * vec3(worldPosition); fragViewPosTangentSpace = worldToTangentSpace * vec3(inverse(frameSetUniformBuffer.view) * vec4(0.0, 0.0, 0.0, 1.0)); - fragLightPosTangentSpace = worldToTangentSpace * vec3(59000.0, 0000.0, 10000.0); + fragLightPosTangentSpace = worldToTangentSpace * vec3(10000.0, 0000.0, 59000.0); gl_Position.y *= -1.0; } diff --git a/test/res/models/DamagedHelmet.glb b/test/res/models/DamagedHelmet.glb new file mode 100644 index 0000000..2cee76d Binary files /dev/null and b/test/res/models/DamagedHelmet.glb differ diff --git a/test/res/models/ToyCar.glb b/test/res/models/ToyCar.glb new file mode 100644 index 0000000..42d648b Binary files /dev/null and b/test/res/models/ToyCar.glb differ diff --git a/test/src/camera_controller.cpp b/test/src/camera_controller.cpp index c2c94d3..6878478 100644 --- a/test/src/camera_controller.cpp +++ b/test/src/camera_controller.cpp @@ -34,10 +34,6 @@ void CameraControllerSystem::OnUpdate(float ts) const float dt = ts; - // in metres per second - float speed = c->kWalkSpeed; - if (scene_->app()->input_manager()->GetButton("sprint")) speed *= 10.0f; - float dx = scene_->app()->input_manager()->GetAxis("movex"); float dy = scene_->app()->input_manager()->GetAxis("movey"); @@ -57,28 +53,36 @@ void CameraControllerSystem::OnUpdate(float ts) const glm::vec3 d2x_rotated = glm::rotateZ(glm::vec3{dx, 0.0f, 0.0f}, c->yaw); const glm::vec3 d2y_rotated = glm::rotateZ(glm::vec3{0.0f, dy, 0.0f}, c->yaw); glm::vec3 h_vel = (d2x_rotated + d2y_rotated); - h_vel *= speed; - t->position += h_vel * dt; + c->vel.x = h_vel.x; + c->vel.y = h_vel.y; + // keep vel.z as gravity can increase it every frame // gravity stuff here: constexpr float g = -9.81f; // constant velocity gravity??? constexpr float player_height = 71.0f * 25.4f / 1000.0f; c->vel.z += g * dt; + if (scene_->app()->input_manager()->GetButtonPress("jump")) { + c->vel.z += 4.4f; // m/s + } + + // update position with velocity: + // check for collision during next frame and push back and remove velocity in the normal of the collision direction if so engine::Ray ray{}; ray.origin = t->position; ray.origin.z -= player_height; // check for collision from the player's feet - ray.direction = c-> - const engine::Raycast fall_raycast = scene_->GetSystem()->GetRaycast(fall_ray); - if (fall_raycast.hit && fall_raycast.distance < player_height + (-c->fall_vel * dt)) { - t->position.z += -(fall_raycast.distance - player_height); - c->fall_vel = 0.0f; - } - else { - t->position.z += c->fall_vel * dt; + const glm::vec3 dX = c->vel * dt; // where player will end up with no collision + ray.direction = glm::normalize(dX); + const engine::Raycast raycast = scene_->GetSystem()->GetRaycast(ray); + if (raycast.hit && raycast.distance < glm::length(dX)) { + // will collide + t->position -= raycast.distance * ray.direction; // push out of collision zone + c->vel.z = 0.0f; // remove velocity normal to collision surface } + + t->position += c->vel * dt; constexpr float kMaxDistanceFromOrigin = 10000.0f; @@ -142,4 +146,4 @@ void CameraControllerSystem::OnUpdate(float ts) LOG_INFO("Distance: {} m", cast.distance); } } -} \ No newline at end of file +} diff --git a/test/src/game.cpp b/test/src/game.cpp index d3f67d5..30304c8 100644 --- a/test/src/game.cpp +++ b/test/src/game.cpp @@ -107,7 +107,6 @@ void PlayGame(GameSettings settings) floor_col->aabb.min = glm::vec3{0.0f, 0.0f, 0.0f}; floor_col->aabb.max = glm::vec3{100.0f, 100.0f, 0.1f }; - engine::Entity redcube = engine::util::LoadGLTF(*main_scene, app.GetResourcePath("models/redcube.glb")); engine::Entity monke = engine::util::LoadGLTF(*main_scene, app.GetResourcePath("models/monke.glb")); main_scene->GetComponent(monke)->position.y += 10.0f; @@ -126,6 +125,20 @@ void PlayGame(GameSettings settings) skybox_renderable->mesh = GenCuboidMesh(app.renderer()->GetDevice(), 10.0f, 10.0f, 10.0f, 1.0f, true); skybox_renderable->material = std::make_unique(app.renderer(), app.GetResource("builtin.skybox")); skybox_renderable->material->SetAlbedoTexture(app.GetResource("builtin.black")); + + engine::Entity helmet = engine::util::LoadGLTF(*main_scene, app.GetResourcePath("models/DamagedHelmet.glb")); + main_scene->GetPosition(helmet) += glm::vec3{20.0f, 10.0f, 5.0f}; + + engine::Entity toycar = engine::util::LoadGLTF(*main_scene, app.GetResourcePath("models/ToyCar.glb")); + main_scene->GetScale(toycar) *= 100.0f; + auto car_spin = main_scene->AddComponent(toycar); + car_spin->onInit = []() -> void {}; + car_spin->onUpdate = [&](float dt) -> void { + static float yaw = 0.0f; + yaw += dt; + main_scene->GetRotation(toycar) = glm::angleAxis(yaw, glm::vec3{0.0f, 0.0f, 1.0f}); + main_scene->GetRotation(toycar) *= glm::angleAxis(glm::half_pi(), glm::vec3{1.0f, 0.0f, 0.0f}); + }; } start_scene->GetSystem()->next_scene_ = main_scene;