public StripRegistrationResult RegisterStrip(StripSide leader) { Preconditions.Assert( Math.Abs(leader.NormalizedMarginUvOfTerrain.x) < 0.00001f && Math.Abs(leader.NormalizedMarginUvOfTerrain.y - 1) < 0.00001f, "Leader's marginUv must be 0-1, but is " + leader.NormalizedMarginUvOfTerrain); for (int i = 0; i < _stripColumns.Length; i++) { var column = _stripColumns[i]; if (column.HasEmptyStrip) { var stripInColumnIndex = column.AllocateStrip(leader); return(new StripRegistrationResult() { StripPosition = new WeldStripPosition() { ColumnIndex = i, StripInColumnIndex = stripInColumnIndex }, WeldUvs = TerrainWeldUvs.CreateFrom(leader.WeldSideType, CreateNormalizedWeldRange( CalculateWeldRange(stripInColumnIndex, leader.NormalizedMarginUvOfTerrain), i)) }); } } Preconditions.Fail("E22. There are no empty strips"); return(null); }
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))); }