Example #1
0
        public void GenMountainPositionsForGridCell(List <MountainData> locs, Vector2i mountainPos, Vector2i chunkPos, int seed)
        {
            Vector2i mtChunk     = new Vector2i((int)(mountainPos.X * MountainGridSize), (int)(mountainPos.Y * MountainGridSize));
            Location chunkCenter = chunkPos.ToLocation() * Constants.CHUNK_WIDTH;
            MTRandom random      = new MTRandom(39, (ulong)(mountainPos.X * 39 + mountainPos.Y + seed));
            int      count       = random.Next(1, 3);

            for (int i = 0; i < count; i++)
            {
                int rangeSize;
                if (random.Next(10) > 5)
                {
                    rangeSize = random.Next(5, 13);
                }
                else
                {
                    rangeSize = random.Next(3, 8);
                }
                double       ca       = random.NextDouble();
                double       cb       = random.NextDouble();
                Vector2i     centerMt = new Vector2i(mtChunk.X * Constants.CHUNK_WIDTH + (int)(ca * MountainGridSize * Constants.CHUNK_WIDTH), mtChunk.Y * Constants.CHUNK_WIDTH + (int)(cb * MountainGridSize * Constants.CHUNK_WIDTH));
                double       ch       = random.NextDouble() * 512 + 512;
                double       cradius  = random.NextDouble() * ch * 0.25 + ch * 0.75;
                MountainData cmt      = new MountainData()
                {
                    Center = centerMt, Height = ch, Radius = cradius
                };
                if (centerMt.ToLocation().DistanceSquared(chunkCenter) < (MountainMaxSizeBlocks * MountainMaxSizeBlocks))
                {
                    locs.Add(cmt);
                }
                double ph = ch;
                for (int r = 1; r < rangeSize; r++)
                {
                    double ra = random.NextDouble() * 2.0 - 1.0;
                    double rb = random.NextDouble() * 2.0 - 1.0;
                    ra = ra > 0 ? Math.Max(r / (double)rangeSize, ra) : Math.Min(-r / (double)rangeSize, ra);
                    rb = rb > 0 ? Math.Max(r / (double)rangeSize, rb) : Math.Min(-r / (double)rangeSize, rb);
                    Vector2i     rngMt   = new Vector2i(centerMt.X + (int)(ra * MountainRangeRadius), centerMt.Y + (int)(rb * MountainRangeRadius));
                    double       rh      = random.NextDouble() * (ph * 0.5) + (ph * 0.5);
                    double       rradius = random.NextDouble() * rh * 0.25 + rh * 0.75;
                    MountainData rmt     = new MountainData()
                    {
                        Center = rngMt, Height = rh, Radius = rradius
                    };
                    if (rngMt.ToLocation().DistanceSquared(chunkCenter) < (MountainMaxSizeBlocks * MountainMaxSizeBlocks))
                    {
                        locs.Add(rmt);
                    }
                }
            }
        }
        public static string ConvertDataToString(MountainData data)
        {
            if (data == null)
            {
                return(null);
            }

            var xmlSerializer = new XmlSerializer(typeof(MountainData));

            using (var textWriter = new StringWriter())
            {
                xmlSerializer.Serialize(textWriter, data);
                return(textWriter.ToString());
            }
        }
Example #3
0
 public double GetMountainHeightAt(MountainData mtd, double dx, double dy, bool precise)
 {
     lock (LockMountains[Math.Abs(mtd.Center.X * 39 + mtd.Center.Y) % LockMountains.Length])
     {
         if (!MountainsGenerated.TryGetValue(new Vector2i(mtd.Center.X, mtd.Center.Y), out SimpleMountainGenerator smg))
         {
             smg = SimpleMountainGenerator.PreGenerateMountain(mtd.Center.X, mtd.Center.Y);
             MountainsGenerated[new Vector2i(mtd.Center.X, mtd.Center.Y)] = smg;
         }
         double upScale = mtd.Radius * (2.0 / 512.0);
         int    xCoord  = (int)((dx - mtd.Center.X));
         int    yCoord  = (int)((dy - mtd.Center.Y));
         double h       = smg.GetHeightAt(xCoord, yCoord, upScale, precise);
         return(h * mtd.Height * (1.0 / 255.0));
     }
 }
        public GCodeData GetMountainGCode(MountainData mountainData, GCodeConfiguration configuration)
        {
            var gCodeData = new GCodeData();

            // TODO: convert mountainData to mountain
            var mountain = new GCodeMountain(mountainData, configuration);

            var preparationProcessor = new PreparationProcessor();

            gCodeData.PreparationMoves = preparationProcessor.Process(mountain, configuration);

            var mainGCodeProcessor = new MainGCodeProcessor();

            gCodeData.DirtyMoves = mainGCodeProcessor.ProcessDirty(mountain, configuration);
            gCodeData.CleanMoves = mainGCodeProcessor.ProcessClean(mountain, configuration);

            return(gCodeData);
        }
Example #5
0
        public GCodeMountain(MountainData mountainData, GCodeConfiguration config)
        {
            MountainWidthInGCode  = config.FormSizeMMWidth;
            MountainLengthInGCode = config.FormSizeMMLength;
            MountainHeightInGCode = config.FormSizeMMHeight;

            var minorLength = mountainData.Points.Count;
            var majorLength = mountainData.Points[0].Count;

            Heights = new decimal[minorLength, majorLength];
            for (int i = 0; i < minorLength; i++)
            {
                for (int j = 0; j < majorLength; j++)
                {
                    Heights[i, j] = mountainData.Points[i][j].height;
                }
            }
        }
        public JsonResult GetMountainGCode(MountainViewModel mountain)
        {
            var service      = new MountainService();
            var mountainData = new MountainData();
            var mData        = service.GetMountainData(mountain.id);
            var processor    = new GCodeProcessor();
            var gCode        = processor.GetMountainGCode(mData.MountainData, new GCodeConfiguration
            {
                FormSizeMMHeight = 40,
                FormSizeMMLength = 70,
                FormSizeMMWidth  = 70,
                CleanSpinSizeMM  = 6
            });

            ExportGCodeMovesToFile(gCode.PreparationMoves, @"C:\tfs\k2_prep.txt");
            ExportGCodeMovesToFile(gCode.DirtyMoves, @"C:\tfs\k2_dirty.txt");
            ExportGCodeMovesToFile(gCode.CleanMoves, @"C:\tfs\k2_clean.txt");
            return(Json("OK"));
        }
Example #7
0
    private void Start()
    {
        List <MountainData> currentBatch       = new List <MountainData>();
        List <Matrix4x4>    currentMatrixBatch = new List <Matrix4x4>();

        Vector3 leftPosition  = Vector3.zero;
        Vector3 rightPosition = Vector3.zero;

        for (int i = 0; i < _instances; i++)
        {
            leftPosition.z = i * offset;
            MountainData leftSide = new MountainData(leftPosition, Quaternion.Euler(leftRotation.x, leftRotation.y, leftRotation.z), scale);

            rightPosition.x = 4f;
            rightPosition.z = i * offset;
            MountainData rightSide = new MountainData(rightPosition, Quaternion.Euler(rightRotation.x, rightRotation.y, rightRotation.z), scale);

            currentBatch.Add(leftSide);
            currentBatch.Add(rightSide);

            currentMatrixBatch.Add(leftSide.Matrix);
            currentMatrixBatch.Add(rightSide.Matrix);

            if (currentBatch.Count == 1000)
            {
                _batches.Add(currentBatch);
                _matrixBatches.Add(currentMatrixBatch);

                currentBatch       = new List <MountainData>();
                currentMatrixBatch = new List <Matrix4x4>();
            }
        }

        if (!_batches.Contains(currentBatch))
        {
            _batches.Add(currentBatch);
            _matrixBatches.Add(currentMatrixBatch);
        }
    }