예제 #1
0
        private List <TerrainPart> GenerateForest(bool isCity)
        {
            var parts = new List <TerrainPart>();

            // 'las
            var images = _imagesStore.GetImages("scene.forest");

            for (var y = 0; y <= 11; y++)
            {
                for (var x = 0; x <= 15; x++)
                {
                    //Paste Bob X*50,Y*50,BIBY+1
                    parts.Add(new TerrainPart(images[0], x * 50, y * 50));
                }
            }

            var visibility = 150;

            for (var i = 0; i <= 30; i++)
            {
                var x  = GlobalUtils.Rand(620) + 20;
                var y  = i * 20;
                var nr = GlobalUtils.Rand(1) + 5;
                // Paste Bob X,Y,BIBY+NR
                parts.Add(new TerrainPart(images[nr - 1], x, y));
            }

            var d = isCity ? 2 : 1;

            for (var i = 0; i <= 15 / d; i++)
            {
                var b = GlobalUtils.Rand(2) + 2;
                // TODO: Gosub LOSUJ

                /*
                 * LOSUJ:
                 * If Rnd(1)=0
                 *  B=Hrev(B)  // Hrev -> AMOS function to flip an image horizontally
                 * End If
                 */

                // Paste Bob X,Y,BIBY+B
                // Set Zone 60+I,X+4,Y+4 To X+28,Y+22
                var x = GlobalUtils.Rand(620) + 20;
                var y = 29 * 20;
                parts.Add(new TerrainPart(images[b - 1], x, y, new Rectangle(x + 4, y + 4, x + 28, y + 22)));
            }

            if (!isCity)
            {
                for (var j = 0; j <= 3; j++)
                {
                    var x2 = GlobalUtils.Rand(640);
                    for (var i = 0; i <= 18; i++)
                    {
                        var x  = x2 + GlobalUtils.Rand(100) - 50;
                        var y  = (j * 100) + (i * 4) - 60;
                        var nr = GlobalUtils.Rand(2) + 7;
                        // Paste Bob X,Y,NR+BIBY
                        parts.Add(new TerrainPart(images[nr - 1], x, y));
                    }

                    var zx1 = x2 - 50;
                    var zy1 = (j * 100) - 60;
                    var zx2 = zx1 + 190;
                    var zy2 = zy1 + 130;
                    var zx3 = zx1 + 40;
                    var zx4 = zx2 - 45;
                    var zy3 = zy1 + 130;
                    var zy4 = zy1 + 180;

                    if (zx1 < 0)
                    {
                        zx1 = 0;
                    }
                    if (zy1 < 0)
                    {
                        zy1 = 0;
                    }
                    if (zx2 > 640)
                    {
                        zx2 = 640;
                    }
                    if (zy2 > 512)
                    {
                        zy2 = 512;
                    }
                    if (zx3 < 0)
                    {
                        zx3 = 0;
                    }
                    if (zy3 < 0)
                    {
                        zy3 = 0;
                    }
                    if (zx4 > 640)
                    {
                        zx4 = 640;
                    }
                    if (zy4 > 512)
                    {
                        zy4 = 512;
                    }

                    // Set Zone 90+J,ZX1,ZY1 To ZX2,ZY2
                    // Set Zone 94+J,ZX3,ZY3 To ZX4,ZY4

                    // bounds only, to be used in obstacles detection
                    parts.Add(new TerrainPart(null, zx1, zy1, new Rectangle(zx1, zy1, zx2, zy2)));
                    parts.Add(new TerrainPart(null, zx3, zy3, new Rectangle(zx3, zy3, zx4, zy4)));
                }
            }

            return(parts);
        }