Пример #1
0
        public NavigationGridlet Quad(float cx, float cy, float cz, float pitch, float yaw, float roll, int xLength, int yLength)
        {
            var cells = Util.Generate(xLength * yLength, i => new NavigationGridletCell(i, i % xLength, i / xLength));
             for (var i = 0; i < cells.Length; i++) {
            var zzx = i % xLength - xLength / 2;
            var zzy = i / xLength - yLength / 2;
                        cells[i].Height = 1;
            //            cells[i].Height = (float)(Math.Sqrt(zzx * zzx + zzy * zzy) / 2); //(float)StaticRandom.NextDouble(2);
             }
             for (var y = 0; y < yLength; y++) {
            cells[y * xLength].Flags = CellFlags.Edge;
            cells[(y + 1) * xLength - 1].Flags = CellFlags.Edge;
             }
             for (var x = 1; x < xLength - 1; x++) {
            cells[x].Flags = CellFlags.Edge;
            cells[x + xLength * (yLength - 1)].Flags = CellFlags.Edge;
             }
             var gridlet = new NavigationGridlet { X = cx, Y = cy, Z = cz, XLength = xLength, YLength = yLength, Cells = cells, IsEnabled = true };
             gridlet.Orientation = Matrix.RotationZ(yaw) * Matrix.RotationY(pitch) * Matrix.RotationZ(roll);
             foreach (var cell in cells) {
            cell.Gridlet = gridlet;
             }
             gridlet.Initialize();

             for (var x = 20; x < 30; x++) {
            for (var y = 20; y < 30; y++) {
               cells[x + y * xLength].Flags |= CellFlags.Blocked;
            }
             }
             for (var x = 40; x < 50; x++) {
            for (var y = 20; y < 30; y++) {
               cells[x + y * xLength].Flags |= CellFlags.Blocked;
            }
             }
             return gridlet;
        }