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