Skip to content

Commit 7e93210

Browse files
committed
ResizePersonalColliderCapacity
1 parent 9d67d37 commit 7e93210

File tree

1 file changed

+44
-17
lines changed

1 file changed

+44
-17
lines changed

Basis/Packages/UnityJigglePhysics-upm/Scripts/JiggleMemoryBus.cs

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using Unity.Collections;
34
using Unity.Jobs;
@@ -130,7 +131,7 @@ public enum CommandType {
130131
private static void Init() {
131132
if (dummyTransforms != null) {
132133
foreach (Transform t in dummyTransforms) {
133-
Object.Destroy(t.gameObject);
134+
UnityEngine.Object.Destroy(t.gameObject);
134135
}
135136

136137
dummyTransforms.Clear();
@@ -182,7 +183,7 @@ public void GetResults(out JiggleTransform[] poses, out JiggleTreeJobData[] tree
182183
public static Transform GetDummyTransform(int index) {
183184
while (dummyTransforms.Count <= index) {
184185
Transform dummyTransform = new GameObject($"JigglePhysicsDummyTransform{index}").transform;
185-
Object.DontDestroyOnLoad(dummyTransform.gameObject);
186+
UnityEngine.Object.DontDestroyOnLoad(dummyTransform.gameObject);
186187
dummyTransform.gameObject.hideFlags = HideFlags.HideAndDontSave;
187188
dummyTransforms.Add(dummyTransform);
188189
}
@@ -218,23 +219,49 @@ private void ResizeSceneColliderCapacity(int newColliderCapacity) {
218219
sceneColliderCapacity = newColliderCapacity;
219220
}
220221

221-
private void ResizePersonalColliderCapacity(int newColliderCapacity) {
222-
personalColliderMemoryFragmenter.Resize(newColliderCapacity);
223-
var newColliders = new JiggleCollider[newColliderCapacity];
224-
personalColliderArrayOutput = new JiggleCollider[newColliderCapacity];
225-
if (personalColliderArray != null) {
226-
System.Array.Copy(personalColliderArray, newColliders,
227-
System.Math.Min(personalColliderCount, newColliderCapacity));
228-
}
229-
personalColliderArray = newColliders;
230-
if (personalColliders.IsCreated) {
231-
personalColliders.Dispose();
222+
private void ResizePersonalColliderCapacity(int newColliderCapacity)
223+
{
224+
if (newColliderCapacity < 0)
225+
{
226+
throw new ArgumentOutOfRangeException(nameof(newColliderCapacity), "Capacity cannot be negative.");
227+
}
228+
229+
personalColliderMemoryFragmenter.Resize(newColliderCapacity);
230+
231+
var newColliders = new JiggleCollider[newColliderCapacity];
232+
personalColliderArrayOutput = new JiggleCollider[newColliderCapacity];
233+
234+
if (personalColliderArray != null && newColliderCapacity > 0)
235+
{
236+
// Clamp copy length to BOTH arrays (and ensure count can't exceed old array length)
237+
int copyLen = personalColliderCount;
238+
239+
if (copyLen < 0) copyLen = 0; // extra paranoia
240+
if (copyLen > personalColliderArray.Length) copyLen = personalColliderArray.Length;
241+
if (copyLen > newColliders.Length) copyLen = newColliders.Length;
242+
243+
if (copyLen > 0)
244+
Array.Copy(personalColliderArray, 0, newColliders, 0, copyLen);
245+
}
246+
247+
personalColliderArray = newColliders;
248+
249+
if (personalColliders.IsCreated)
250+
{
251+
personalColliders.Dispose();
252+
}
253+
254+
personalColliders = new NativeArray<JiggleCollider>(personalColliderArray, Allocator.Persistent);
255+
personalColliderCapacity = newColliderCapacity;
256+
257+
// Optional but recommended: keep count sane when shrinking
258+
if (personalColliderCount > personalColliderCapacity)
259+
{
260+
personalColliderCount = personalColliderCapacity;
261+
}
232262
}
233-
personalColliders = new NativeArray<JiggleCollider>(personalColliderArray, Allocator.Persistent);
234-
personalColliderCapacity = newColliderCapacity;
235-
}
236263

237-
private void ResizeTransformCapacity(int newTransformCapacity) {
264+
private void ResizeTransformCapacity(int newTransformCapacity) {
238265
memoryFragmenter.Resize(newTransformCapacity);
239266
var newSimulateInputPosesArray = new JiggleTransform[newTransformCapacity];
240267
var newRestPoseTransformsArray = new JiggleTransform[newTransformCapacity];

0 commit comments

Comments
 (0)