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.

99 lines
2.7 KiB
C#

/******************************************************************************/
/*
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);
}
}
}