Beispiel #1
0
        public override void Draw()
        {
            if (_useWireframe)
            {
                GraphicsMgr.Rasterizer = GameController.WireframeRasterizer;
            }

            var startingPosition = new Vector2(100, 100);
            var position         = startingPosition;
            var spacing          = 100;

            // Trianglefan.
            _trianglefan.Position = position;
            _trianglefan.Draw();
            // Trianglefan.


            position += Vector2.UnitX * spacing;


            // Trianglestrip.
            _trianglestrip.Position = position;
            _trianglestrip.Draw();
            // Trianglestrip.


            position += Vector2.UnitX * spacing * 2;


            // Mesh.
            _mesh.Position = position;

            var cell = new Vector2(
                Default.AutismCat.Width / (float)_mesh.Width,
                Default.AutismCat.Height / (float)_mesh.Height
                ) * _meshRepeat;
            var c = 0;

            for (var k = 0; k < _mesh.Height; k += 1)
            {
                for (var i = 0; i < _mesh.Width; i += 1)
                {
                    var v = _mesh.Vertices[c];
                    // Displacing vertices to make ripple effect.
                    v.Position        = new Vector2(i, k) * cell + Vector2.One * (float)Math.Sin(GameMgr.ElapsedTimeTotal + i) * 4;
                    _mesh.Vertices[c] = v;
                    c += 1;
                }
            }

            _mesh.Draw();
            // Mesh.


            position  += Vector2.UnitY * spacing * 2;
            position.X = startingPosition.X;


            // Linestrip.
            var vertex = _linestrip.Vertices[0];

            // Tail effect.
            vertex.Position = position + new Vector2(
                (float)Math.Cos(GameMgr.ElapsedTimeTotal * 2),
                (float)Math.Sin(-GameMgr.ElapsedTimeTotal * 4)
                ) * 50;
            _linestrip.Vertices[0] = vertex;

            for (var i = 1; i < _linestrip.Vertices.Count; i += 1)
            {
                vertex = _linestrip.Vertices[i];
                var delta = _linestrip.Vertices[i - 1].Position - vertex.Position;
                if (delta.Length() > 8)
                {
                    var e = delta.GetSafeNormalize();
                    vertex.Position        = _linestrip.Vertices[i - 1].Position - e * 8;
                    _linestrip.Vertices[i] = vertex;
                }
            }

            _linestrip.Draw();
            // Linestrip.


            position += Vector2.UnitX * spacing;


            // Custom.
            _custom.Position = position;
            _custom.Draw();
            // Custom.


            if (_useWireframe)
            {
                GraphicsMgr.Rasterizer = GameController.DefaultRasterizer;
            }
        }