editor: if load model contains new camera, snap to the first one

This commit is contained in:
Turanszki Janos
2021-07-08 22:59:42 +02:00
parent bf831f9cd2
commit dc80d0597b
+27 -8
View File
@@ -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;