You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
2.3 KiB
C#
60 lines
2.3 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace GPUInstancer.CrowdAnimations
|
|
{
|
|
public class GPUICrowdOptionalRendererHandler : MonoBehaviour
|
|
{
|
|
private GPUICrowdPrefab _crowdPrefab;
|
|
|
|
|
|
private void Awake()
|
|
{
|
|
_crowdPrefab = GetComponent<GPUICrowdPrefab>();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
if ((_crowdPrefab.state == PrefabInstancingState.None || _crowdPrefab.state == PrefabInstancingState.Disabled))
|
|
{
|
|
_crowdPrefab.state = PrefabInstancingState.Instanced;
|
|
if (_crowdPrefab.runtimeData != null && _crowdPrefab.runtimeData.instanceDataNativeArray.IsCreated)
|
|
{
|
|
_crowdPrefab.runtimeData.instanceDataNativeArray[_crowdPrefab.gpuInstancerID - 1] = _crowdPrefab.GetInstanceTransform().localToWorldMatrix;
|
|
_crowdPrefab.runtimeData.transformDataModified = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (_crowdPrefab.state == PrefabInstancingState.Instanced)
|
|
{
|
|
_crowdPrefab.state = PrefabInstancingState.Disabled;
|
|
if (_crowdPrefab.runtimeData != null && _crowdPrefab.runtimeData.instanceDataNativeArray.IsCreated)
|
|
{
|
|
_crowdPrefab.runtimeData.instanceDataNativeArray[_crowdPrefab.gpuInstancerID - 1] = Matrix4x4.zero;
|
|
_crowdPrefab.runtimeData.transformDataModified = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
internal void SetupOptionalRenderer()
|
|
{
|
|
if (_crowdPrefab.runtimeData.instanceDataNativeArray.IsCreated)
|
|
{
|
|
if (_crowdPrefab.state == PrefabInstancingState.Instanced)
|
|
{
|
|
_crowdPrefab.runtimeData.instanceDataNativeArray[_crowdPrefab.gpuInstancerID - 1] = _crowdPrefab.GetInstanceTransform().localToWorldMatrix;
|
|
_crowdPrefab.runtimeData.transformDataModified = true;
|
|
}
|
|
else if (_crowdPrefab.state == PrefabInstancingState.Disabled)
|
|
{
|
|
_crowdPrefab.runtimeData.instanceDataNativeArray[_crowdPrefab.gpuInstancerID - 1] = Matrix4x4.zero;
|
|
_crowdPrefab.runtimeData.transformDataModified = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|