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; } }