예제 #1
0
    public SkinnedMetaballCell AddChild(Vector3 position, float in_radius, float minDistanceCoef = 1.0f)
    {
        SkinnedMetaballCell child = new SkinnedMetaballCell();

        child.baseColor = baseColor;
        //     child.resource = 0.0f;
        child.radius           = in_radius;
        child.distanceFromRoot = distanceFromRoot + 1;
        child.modelPosition    = position;

        child.parent = this;
        children.Add(child);

        // collision test
        bool bFail = false;

        Root.DoForeachSkinnedCell((c) =>
        {
            if (c != child)
            {
                if ((child.modelPosition - c.modelPosition).sqrMagnitude < child.radius * child.radius * minDistanceCoef * minDistanceCoef)
                {
                    bFail = true;
                }
            }
        });

        if (bFail)
        {
            children.Remove(child);
            return(null);
        }

        child.CalcRotation();

        return(child);
    }
    public SkinnedMetaballCell AddChild(
        Vector3 position,
        float in_radius,
        float minDistanceCoef = 1f)
    {
        SkinnedMetaballCell child = new SkinnedMetaballCell();

        child.baseColor        = this.baseColor;
        child.radius           = in_radius;
        child.distanceFromRoot = this.distanceFromRoot + 1;
        child.modelPosition    = position;
        child.parent           = this;
        this.children.Add(child);
        bool bFail = false;

        this.Root.DoForeachSkinnedCell((SkinnedMetaballCell.ForeachSkinnedCellDeleg)(c =>
        {
            if (c == child)
            {
                return;
            }
            Vector3 vector3 = Vector3.op_Subtraction(child.modelPosition, c.modelPosition);
            if ((double)((Vector3) ref vector3).get_sqrMagnitude() >= (double)child.radius * (double)child.radius * (double)minDistanceCoef * (double)minDistanceCoef)
            {
                return;
            }
            bFail = true;
        }));
        if (bFail)
        {
            this.children.Remove(child);
            return((SkinnedMetaballCell)null);
        }
        child.CalcRotation();
        return(child);
    }