summaryrefslogtreecommitdiff
path: root/Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicMeshFusionSource.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicMeshFusionSource.cs')
-rw-r--r--Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicMeshFusionSource.cs130
1 files changed, 130 insertions, 0 deletions
diff --git a/Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicMeshFusionSource.cs b/Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicMeshFusionSource.cs
new file mode 100644
index 0000000..bf92aec
--- /dev/null
+++ b/Thronefall_1_57/Decompile/NGS.MeshFusionPro/DynamicMeshFusionSource.cs
@@ -0,0 +1,130 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace NGS.MeshFusionPro;
+
+public class DynamicMeshFusionSource : MeshFusionSource
+{
+ [SerializeField]
+ [HideInInspector]
+ private MeshRenderer _renderer;
+
+ [SerializeField]
+ [HideInInspector]
+ private MeshFilter _filter;
+
+ [SerializeField]
+ [HideInInspector]
+ private Mesh _mesh;
+
+ private DynamicCombineSource[] _sources;
+
+ private DynamicCombinedObjectPart[] _parts;
+
+ public override bool TryGetBounds(ref Bounds bounds)
+ {
+ if (_renderer != null)
+ {
+ bounds = _renderer.bounds;
+ return true;
+ }
+ return false;
+ }
+
+ protected override void OnSourceCombinedInternal(ICombinedObject root, ICombinedObjectPart part)
+ {
+ for (int i = 0; i < _parts.Length; i++)
+ {
+ if (_parts[i] == null)
+ {
+ _parts[i] = (DynamicCombinedObjectPart)part;
+ return;
+ }
+ }
+ throw new Exception("Unexpected Behaviour");
+ }
+
+ protected override bool CheckCompatibilityAndGetComponents(out string incompatibilityReason)
+ {
+ incompatibilityReason = "";
+ return CanCreateCombineSource(base.gameObject, ref incompatibilityReason, ref _renderer, ref _filter, ref _mesh);
+ }
+
+ protected override void CreateSources()
+ {
+ if (_sources == null)
+ {
+ _sources = new DynamicCombineSource[_mesh.subMeshCount];
+ }
+ if (_parts == null)
+ {
+ _parts = new DynamicCombinedObjectPart[_mesh.subMeshCount];
+ }
+ for (int i = 0; i < _sources.Length; i++)
+ {
+ _sources[i] = new DynamicCombineSource(_mesh, _renderer, i);
+ }
+ }
+
+ protected override IEnumerable<ICombineSource> GetCombineSources()
+ {
+ if (_sources == null)
+ {
+ yield break;
+ }
+ for (int i = 0; i < _sources.Length; i++)
+ {
+ DynamicCombineSource dynamicCombineSource = _sources[i];
+ if (dynamicCombineSource == null)
+ {
+ break;
+ }
+ yield return dynamicCombineSource;
+ }
+ }
+
+ protected override IEnumerable<ICombinedObjectPart> GetCombinedParts()
+ {
+ if (_parts == null)
+ {
+ yield break;
+ }
+ for (int i = 0; i < _parts.Length; i++)
+ {
+ DynamicCombinedObjectPart dynamicCombinedObjectPart = _parts[i];
+ if (dynamicCombinedObjectPart == null)
+ {
+ break;
+ }
+ yield return dynamicCombinedObjectPart;
+ }
+ }
+
+ protected override void ClearSources()
+ {
+ if (_sources != null)
+ {
+ for (int i = 0; i < _sources.Length && _sources[i] != null; i++)
+ {
+ _sources[i] = null;
+ }
+ }
+ }
+
+ protected override void ClearParts()
+ {
+ if (_parts != null)
+ {
+ for (int i = 0; i < _parts.Length; i++)
+ {
+ _parts[i] = null;
+ }
+ }
+ }
+
+ protected override void ToggleComponents(bool enabled)
+ {
+ _renderer.enabled = enabled;
+ }
+}