bool TaperedLimb(Vector3i start, Vector3i end, float startSize, float endSize)
{
Vector3i delta = end - start;
int primidx = delta.GetLargestComponent();
int maxdist = delta[primidx];
if (maxdist == 0)
{
return(false);
}
int primsign = (maxdist > 0 ? 1 : -1);
int secidx1 = (primidx - 1) % 3;
int secidx2 = (primidx + 1) % 3;
int secdelta1 = delta[secidx1];
float secfac1 = secdelta1 / (float)delta[primidx];
int secdelta2 = delta[secidx2];
float secfac2 = secdelta2 / (float)delta[primidx];
Vector3i coord = new Vector3i();
int endoffset = delta[primidx] + primsign;
for (int primoffset = 0; primoffset < endoffset; primoffset += primsign)
{
int primloc = start[primidx] + primoffset;
int secloc1 = (int)(start[secidx1] + primoffset * secfac1);
int secloc2 = (int)(start[secidx2] + primoffset * secfac2);
coord[primidx] = primloc;
coord[secidx1] = secloc1;
coord[secidx2] = secloc2;
float primdist = (float)Math.Abs(delta[primidx]);
float radius = endSize + (startSize - endSize) * Math.Abs(delta[primidx] - primoffset) / (float)primdist;
CrossSection(coord, radius, primidx, TILETYPE_LOG);
}
return(true);
}