From dc80d0597b6746cd24495a89e7b4f534911a0f88 Mon Sep 17 00:00:00 2001 From: Turanszki Janos Date: Thu, 8 Jul 2021 22:59:42 +0200 Subject: [PATCH] editor: if load model contains new camera, snap to the first one --- Editor/Editor.cpp | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index d656b4721..8386f2e6e 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -722,6 +722,9 @@ void EditorComponent::Load() params.extensions.push_back("glb"); wiHelper::FileDialog(params, [&](std::string fileName) { wiEvent::Subscribe_Once(SYSTEM_EVENT_THREAD_SAFE_POINT, [=](uint64_t userdata) { + + size_t camera_count_prev = wiScene::GetScene().cameras.GetCount(); + main->loader.addLoadingFunction([=](wiJobArgs args) { std::string extension = wiHelper::toUpper(wiHelper::GetExtensionFromFileName(fileName)); @@ -749,6 +752,22 @@ void EditorComponent::Load() } }); main->loader.onFinished([=] { + + // Detect when the new scene contains a new camera, and snap the camera onto it: + size_t camera_count = wiScene::GetScene().cameras.GetCount(); + if (camera_count > 0 && camera_count > camera_count_prev) + { + Entity entity = wiScene::GetScene().cameras.GetEntity(camera_count_prev); + if (entity != INVALID_ENTITY) + { + TransformComponent* camera_transform = wiScene::GetScene().transforms.GetComponent(entity); + if (camera_transform != nullptr) + { + cameraWnd.camera_transform = *camera_transform; + } + } + } + main->ActivatePath(this, 0.2f, wiColor::Black()); weatherWnd.Update(); RefreshSceneGraphView(); @@ -1195,7 +1214,7 @@ void EditorComponent::Update(float dt) XMVECTOR disV = XMVector3LinePointDistance(XMLoadFloat3(&pickRay.origin), XMLoadFloat3(&pickRay.origin) + XMLoadFloat3(&pickRay.direction), transform.GetPositionV()); float dis = XMVectorGetX(disV); - if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) + if (dis > 0.01f && dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { hovered = wiScene::PickResult(); hovered.entity = entity; @@ -1212,7 +1231,7 @@ void EditorComponent::Update(float dt) XMVECTOR disV = XMVector3LinePointDistance(XMLoadFloat3(&pickRay.origin), XMLoadFloat3(&pickRay.origin) + XMLoadFloat3(&pickRay.direction), transform.GetPositionV()); float dis = XMVectorGetX(disV); - if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) + if (dis > 0.01f && dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { hovered = wiScene::PickResult(); hovered.entity = entity; @@ -1229,7 +1248,7 @@ void EditorComponent::Update(float dt) XMVECTOR disV = XMVector3LinePointDistance(XMLoadFloat3(&pickRay.origin), XMLoadFloat3(&pickRay.origin) + XMLoadFloat3(&pickRay.direction), transform.GetPositionV()); float dis = XMVectorGetX(disV); - if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) + if (dis > 0.01f && dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { hovered = wiScene::PickResult(); hovered.entity = entity; @@ -1246,7 +1265,7 @@ void EditorComponent::Update(float dt) XMVECTOR disV = XMVector3LinePointDistance(XMLoadFloat3(&pickRay.origin), XMLoadFloat3(&pickRay.origin) + XMLoadFloat3(&pickRay.direction), transform.GetPositionV()); float dis = XMVectorGetX(disV); - if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) + if (dis > 0.01f && dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { hovered = wiScene::PickResult(); hovered.entity = entity; @@ -1263,7 +1282,7 @@ void EditorComponent::Update(float dt) XMVECTOR disV = XMVector3LinePointDistance(XMLoadFloat3(&pickRay.origin), XMLoadFloat3(&pickRay.origin) + XMLoadFloat3(&pickRay.direction), transform.GetPositionV()); float dis = XMVectorGetX(disV); - if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) + if (dis > 0.01f && dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { hovered = wiScene::PickResult(); hovered.entity = entity; @@ -1300,7 +1319,7 @@ void EditorComponent::Update(float dt) XMVECTOR disV = XMVector3LinePointDistance(XMLoadFloat3(&pickRay.origin), XMLoadFloat3(&pickRay.origin) + XMLoadFloat3(&pickRay.direction), transform.GetPositionV()); float dis = XMVectorGetX(disV); - if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) + if (dis > 0.01f && dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { hovered = wiScene::PickResult(); hovered.entity = entity; @@ -1317,7 +1336,7 @@ void EditorComponent::Update(float dt) XMVECTOR disV = XMVector3LinePointDistance(XMLoadFloat3(&pickRay.origin), XMLoadFloat3(&pickRay.origin) + XMLoadFloat3(&pickRay.direction), transform.GetPositionV()); float dis = XMVectorGetX(disV); - if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) + if (dis > 0.01f && dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { hovered = wiScene::PickResult(); hovered.entity = entity; @@ -1334,7 +1353,7 @@ void EditorComponent::Update(float dt) XMVECTOR disV = XMVector3LinePointDistance(XMLoadFloat3(&pickRay.origin), XMLoadFloat3(&pickRay.origin) + XMLoadFloat3(&pickRay.direction), transform.GetPositionV()); float dis = XMVectorGetX(disV); - if (dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) + if (dis > 0.01f && dis < wiMath::Distance(transform.GetPosition(), pickRay.origin) * 0.05f && dis < hovered.distance) { hovered = wiScene::PickResult(); hovered.entity = entity;