using System;
using System.Collections.Generic;
using UnityEngine;
namespace GPUInstancer
{
///
/// Add this to the prefabs of GameObjects you want to GPU Instance at runtime.
///
public class GPUInstancerPrefab : MonoBehaviour
{
[HideInInspector]
public GPUInstancerPrefabPrototype prefabPrototype;
[NonSerialized]
public int gpuInstancerID;
[NonSerialized]
public PrefabInstancingState state = PrefabInstancingState.None;
public Dictionary variationDataList;
protected bool _isTransformSet;
protected Transform _instanceTransform;
protected bool _isMatrixSet;
protected Matrix4x4 _localToWorldMatrix;
public virtual void AddVariation(string bufferName, T value)
{
if (variationDataList == null)
variationDataList = new Dictionary();
if (variationDataList.ContainsKey(bufferName))
variationDataList[bufferName] = value;
else
variationDataList.Add(bufferName, value);
}
public virtual Transform GetInstanceTransform(bool forceNew = false)
{
if (!_isTransformSet || forceNew)
{
_instanceTransform = transform;
_isTransformSet = true;
}
return _instanceTransform;
}
public virtual Matrix4x4 GetLocalToWorldMatrix(bool forceNew = false)
{
if (!_isMatrixSet || forceNew)
{
_localToWorldMatrix = GetInstanceTransform(forceNew).localToWorldMatrix;
_isMatrixSet = true;
}
return _localToWorldMatrix;
}
public virtual void SetupPrefabInstance(GPUInstancerRuntimeData runtimeData, bool forceNew = false)
{
}
}
public enum PrefabInstancingState
{
None,
Disabled,
Instanced
}
}