|
|
|
|
/******************************************************************************/
|
|
|
|
|
/*
|
|
|
|
|
Project - MudBun
|
|
|
|
|
Publisher - Long Bunny Labs
|
|
|
|
|
http://LongBunnyLabs.com
|
|
|
|
|
Author - Ming-Lun "Allen" Chou
|
|
|
|
|
http://AllenChou.net
|
|
|
|
|
*/
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
|
|
using Unity.Collections;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace MudBun
|
|
|
|
|
{
|
|
|
|
|
public class MudBrushGroup : MudSolid
|
|
|
|
|
{
|
|
|
|
|
public enum TypeEnum
|
|
|
|
|
{
|
|
|
|
|
BeginGroup = -2,
|
|
|
|
|
EndGroup = -3,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override bool IsBrushGroup => true;
|
|
|
|
|
|
|
|
|
|
public MudBrushGroup()
|
|
|
|
|
{
|
|
|
|
|
m_countAsBone = false;
|
|
|
|
|
m_canCountAsBone = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int m_iBegin;
|
|
|
|
|
private int m_iEnd;
|
|
|
|
|
internal int m_iProxyBegin = AabbTree<MudBrushBase>.Null;
|
|
|
|
|
internal int m_iProxyEnd = AabbTree<MudBrushBase>.Null;
|
|
|
|
|
|
|
|
|
|
public override void UpdateProxies(AabbTree<MudBrushBase> tree, Aabb opBounds)
|
|
|
|
|
{
|
|
|
|
|
if (m_iProxyBegin == AabbTree<MudBrushBase>.Null)
|
|
|
|
|
m_iProxyBegin = tree.CreateProxy(opBounds, this);
|
|
|
|
|
|
|
|
|
|
if (m_iProxyEnd == AabbTree<MudBrushBase>.Null)
|
|
|
|
|
m_iProxyEnd = tree.CreateProxy(opBounds, this);
|
|
|
|
|
|
|
|
|
|
tree.UpdateProxy(m_iProxyBegin, opBounds, m_iBegin);
|
|
|
|
|
tree.UpdateProxy(m_iProxyEnd, opBounds, m_iEnd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void DestroyProxies(AabbTree<MudBrushBase> tree)
|
|
|
|
|
{
|
|
|
|
|
tree.DestroyProxy(m_iProxyBegin);
|
|
|
|
|
tree.DestroyProxy(m_iProxyEnd);
|
|
|
|
|
|
|
|
|
|
m_iProxyBegin = AabbTree<MudBrushBase>.Null;
|
|
|
|
|
m_iProxyEnd = AabbTree<MudBrushBase>.Null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override int FillComputeData(NativeArray<SdfBrush> aBrush, int iStart, List<Transform> aBone)
|
|
|
|
|
{
|
|
|
|
|
SdfBrush brush = SdfBrush.New();
|
|
|
|
|
brush.Type = (int) TypeEnum.BeginGroup;
|
|
|
|
|
aBrush[iStart] = brush;
|
|
|
|
|
m_iBegin = iStart;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void FillBrushData(ref SdfBrush brush, int iBrush)
|
|
|
|
|
{
|
|
|
|
|
base.FillBrushData(ref brush, iBrush);
|
|
|
|
|
|
|
|
|
|
brush.Proxy = m_iProxyBegin;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override int FillComputeDataPostChildren(NativeArray<SdfBrush> aBrush, int iStart)
|
|
|
|
|
{
|
|
|
|
|
SdfBrush brush = SdfBrush.New();
|
|
|
|
|
brush.Type = (int) TypeEnum.EndGroup;
|
|
|
|
|
aBrush[iStart] = brush;
|
|
|
|
|
m_iEnd = iStart;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void FillBrushDataPostChildren(ref SdfBrush brush, int iBrush)
|
|
|
|
|
{
|
|
|
|
|
brush.Proxy = m_iProxyEnd;
|
|
|
|
|
brush.Flags.AssignBit((int) SdfBrush.FlagBit.Hidden, Hidden);
|
|
|
|
|
|
|
|
|
|
brush.Operator = SdfBrush.GetShaderOperatorIntValue(Operator, BooleanOperatorType, DyeBlendMode);
|
|
|
|
|
brush.Blend = Blend;
|
|
|
|
|
|
|
|
|
|
brush.Flags.AssignBit((int) SdfBrush.FlagBit.ContributeMaterial, m_material.ContributeMaterial);
|
|
|
|
|
brush.Flags.AssignBit((int) SdfBrush.FlagBit.CountAsBone, CountAsBone);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|