public bool RemoveWeld(WeldStripPosition position, int terrainId) { var column = _stripColumns[position.ColumnIndex]; var strip = column.GetSegment(position.StripInColumnIndex); bool removeStrip = false; if (strip.Followers.Any(c => c.TerrainId == terrainId)) { strip.Followers.RemoveAll(c => c.TerrainId == terrainId); if (!strip.Followers.Any()) { removeStrip = true; // no followers - strip can be removed! } } else if (strip.Leader.TerrainId == terrainId) { removeStrip = true; } if (removeStrip) { column.RemoveStrip(position.StripInColumnIndex); return(true); } else { return(false); } }
public TerrainWeldUvs AddStipSegment(WeldStripPosition stripPosition, StripSide follower) { var strip = _stripColumns[stripPosition.ColumnIndex].GetSegment(stripPosition.StripInColumnIndex); strip.Followers.Add(follower); var leader = strip.Leader; var leaderSideInfo = CreateDrawingSideInfo(leader, follower.NormalizedMarginUvOfTerrain); var followerSideInfo = CreateDrawingSideInfo(follower, new Vector2(0, 1)); var donorSide = leaderSideInfo; var acceptorSide = followerSideInfo; if (follower.WeldSideType.IsDonorSide()) { donorSide = followerSideInfo; acceptorSide = leaderSideInfo; } var weldRange = CalculateWeldRange(stripPosition.StripInColumnIndex, follower.NormalizedMarginUvOfTerrain); WeldOnTextureInfo weldInfo = new WeldOnTextureInfo() { ColumnIndex = stripPosition.ColumnIndex, WeldRange = weldRange }; acceptorSide.SamplingDistance = weldInfo.WeldRange.Length / (acceptorSide.FullLodSidePixelsRange.Length - 1); donorSide.SamplingDistance = weldInfo.WeldRange.Length / (donorSide.FullLodSidePixelsRange.Length - 1); _weldingExecutor.RenderWeld(new WeldTextureDrawingOrder() { FirstSideInfo = acceptorSide, SecondSideInfo = donorSide, WeldOnTextureInfo = weldInfo }); return(TerrainWeldUvs.CreateFrom(follower.WeldSideType, CreateNormalizedWeldRange(weldRange, stripPosition.ColumnIndex))); }