mirror of
https://github.com/4sval/FModel.git
synced 2026-09-25 02:29:21 -05:00
snap to ground and focus on load
This commit is contained in:
Submodule CUE4Parse updated: 746a6d779a...abed739a7d
@@ -50,13 +50,13 @@ public sealed class SnooperHost(Func<EditorWindow> build) : IDisposable
|
||||
// this thread must never die until fmodel closes
|
||||
// if it dies first, opening any menu hangs the ui thread inside UiaReturnRawElementProvider, which is
|
||||
// wpf building the popup, and exiting hangs too (dead thread leaves com state behind???)
|
||||
var thread = new Thread(RenderLoop) { IsBackground = true, Name = "Snooper" };
|
||||
var thread = new Thread(WindowLoop) { IsBackground = true, Name = "Snooper" };
|
||||
thread.Start();
|
||||
|
||||
return thread;
|
||||
}
|
||||
|
||||
private void RenderLoop()
|
||||
private void WindowLoop()
|
||||
{
|
||||
using var _ = LogContext.PushProperty("SourceContext", "Snooper");
|
||||
GLFWProvider.CheckForMainThread = false;
|
||||
|
||||
@@ -1524,6 +1524,7 @@ public class CUE4ParseViewModel : ViewModel
|
||||
// }:
|
||||
case UPaperSprite when isNone && UserSettings.Default.PreviewMaterials:
|
||||
case UStaticMesh when isNone && UserSettings.Default.PreviewStaticMeshes:
|
||||
case UGeometryCollection when isNone && UserSettings.Default.PreviewStaticMeshes:
|
||||
case USkeletalMesh when isNone && UserSettings.Default.PreviewSkeletalMeshes:
|
||||
case USkeleton when isNone && UserSettings.Default.SaveSkeletonAsMesh:
|
||||
case UMaterialInstance when isNone && UserSettings.Default.PreviewMaterials && !ModelIsOverwritingMaterial &&
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using CUE4Parse.UE4.Assets.Exports;
|
||||
using CUE4Parse.UE4.Assets.Exports.GeometryCollection;
|
||||
using CUE4Parse.UE4.Assets.Exports.SkeletalMesh;
|
||||
using CUE4Parse.UE4.Assets.Exports.StaticMesh;
|
||||
using CUE4Parse.UE4.Objects.Engine;
|
||||
@@ -13,6 +14,7 @@ using FModel.Services;
|
||||
using Snooper.Rendering.Actors;
|
||||
using Snooper.Rendering.Components;
|
||||
using Snooper.Rendering.Components.Light;
|
||||
using Snooper.Rendering.Components.Mesh;
|
||||
using Snooper.Rendering.Components.Primitive;
|
||||
using Snooper.Rendering.Components.Transforms;
|
||||
|
||||
@@ -40,6 +42,7 @@ public class SnooperViewModel : ViewModel, IDisposable
|
||||
{
|
||||
UStaticMesh sm => new MeshActor(sm),
|
||||
USkeletalMesh sk => new MeshActor(sk),
|
||||
UGeometryCollection gc => new MeshActor(gc),
|
||||
UWorld w => new WorldActor(w),
|
||||
_ => null
|
||||
};
|
||||
@@ -48,12 +51,19 @@ public class SnooperViewModel : ViewModel, IDisposable
|
||||
editor.Invoke(() =>
|
||||
{
|
||||
if (editor.Manager.RootActor == null)
|
||||
editor.Manager.LoadScene(CreateScene(obj is UWorld));
|
||||
editor.Manager.LoadScene(CreateScene(actor is WorldActor));
|
||||
|
||||
if (actor != null)
|
||||
editor.Manager.LoadScene(actor);
|
||||
|
||||
editor.Show();
|
||||
|
||||
if (actor?.RootComponent is MeshComponent mesh)
|
||||
{
|
||||
mesh.SnapToGround();
|
||||
mesh.UpdateWorldMatrix(); // just so teleport works properly
|
||||
mesh.TeleportTo();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -67,12 +77,12 @@ public class SnooperViewModel : ViewModel, IDisposable
|
||||
scene.Children.Add(grid);
|
||||
|
||||
var camera = new CameraActor("Camera");
|
||||
camera.CameraComponent.LocalTransform.Position = new Vector3(1, 2, -0.5f);
|
||||
camera.CameraComponent.LocalTransform.Rotation = new Quaternion(0, -1, 0, 1);
|
||||
camera.CameraComponent.SetLocalTransform(new Transform(new Vector3(0, 1.14f, 3.5f), new Vector3(180, 18, 0)));
|
||||
scene.Children.Add(camera);
|
||||
|
||||
const float distance = 500;
|
||||
var sun = new Actor("Sun Light");
|
||||
sun.Components.Add(new DirectionalLightComponent(MathF.PI, new Vector3(1.0f, 0.87f, 0.72f), new Transform(new Vector3(16.5f, 0, 0), new Quaternion(new Vector3(0.5f, -0.5f, 0.0f), 1.0f)), "Directional Light"));
|
||||
sun.Components.Add(new DirectionalLightComponent(MathF.PI, new Vector3(1.00f, 0.96f, 0.90f), new Transform(new Vector3(-distance, distance, distance), new Vector3(140, 37, 0)), "Directional Light"));
|
||||
scene.Children.Add(sun);
|
||||
|
||||
return scene;
|
||||
|
||||
2
Snooper
2
Snooper
Submodule Snooper updated: 5c3e4fcc89...896134700b
Reference in New Issue
Block a user