summaryrefslogtreecommitdiff
path: root/Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicCombinedObjectPartInternal.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicCombinedObjectPartInternal.cs')
-rw-r--r--Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicCombinedObjectPartInternal.cs61
1 files changed, 61 insertions, 0 deletions
diff --git a/Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicCombinedObjectPartInternal.cs b/Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicCombinedObjectPartInternal.cs
new file mode 100644
index 0000000..d7a0c1c
--- /dev/null
+++ b/Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicCombinedObjectPartInternal.cs
@@ -0,0 +1,61 @@
+using UnityEngine;
+
+namespace NGS.MeshFusionPro;
+
+public class DynamicCombinedObjectPartInternal : DynamicCombinedObjectPart
+{
+ private Matrix4x4 _localTransform;
+
+ private Matrix4x4 _targetLocalTransform;
+
+ private Matrix4x4 _worldToLocalMatrix;
+
+ private bool _inMove;
+
+ public DynamicCombinedObjectPartInternal(DynamicCombinedObject root, CombinedObjectPart basePart, Matrix4x4 transformMatrix)
+ : base(root, basePart, transformMatrix)
+ {
+ Vector3 pos = transformMatrix.GetTranslation() - root.transform.position;
+ _localTransform = transformMatrix.SetTranslation(pos);
+ _worldToLocalMatrix = base.Root.transform.worldToLocalMatrix;
+ }
+
+ public override void Move(Vector3 position, Quaternion rotation, Vector3 scale)
+ {
+ Move(Matrix4x4.TRS(position, rotation, scale));
+ }
+
+ public override void Move(Matrix4x4 transform)
+ {
+ Matrix4x4 localTransform = _worldToLocalMatrix * transform;
+ MoveLocal(localTransform);
+ }
+
+ public override void MoveLocal(Matrix4x4 localTransform)
+ {
+ if (!_inMove)
+ {
+ _targetLocalTransform = localTransform;
+ _root.UpdatePart(this);
+ _inMove = true;
+ }
+ }
+
+ public PartMoveInfo CreateMoveInfo()
+ {
+ CombinedMeshPart meshPart = _basePart.MeshPart;
+ PartMoveInfo result = default(PartMoveInfo);
+ result.partIndex = meshPart.Index;
+ result.vertexStart = meshPart.VertexStart;
+ result.vertexCount = meshPart.VertexCount;
+ result.currentTransform = _localTransform;
+ result.targetTransform = _targetLocalTransform;
+ return result;
+ }
+
+ public void PositionUpdated()
+ {
+ _localTransform = _targetLocalTransform;
+ _inMove = false;
+ }
+}