From 549d30396efc70194f3cbbef91152743c2017bbf Mon Sep 17 00:00:00 2001 From: Recrown Date: Tue, 15 Jan 2019 17:59:19 -0600 Subject: [PATCH] implemented the refactors in RA --- .../RecrownedAthenaeum/MonoGame.Framework.dll | Bin 0 -> 198656 bytes .../RecrownedAthenaeum/MonoGame.Framework.xml | 18061 ++++++++++++++++ .../RecrownedAthenaeum/Newtonsoft.Json.dll | Bin 0 -> 675240 bytes .../RecrownedAthenaeum/Newtonsoft.Json.xml | 11121 ++++++++++ .../RecrownedAthenaeum/RecrownedAthenaeum.dll | Bin 0 -> 40448 bytes .../RecrownedAthenaeum/RecrownedAthenaeum.xml | 1600 ++ .../ResolutionContentResolver.cs | 2 +- RhythmBullet/Preferences/General.cs | 2 +- RhythmBullet/RhythmBullet.csproj | 2 +- RhythmBullet/RhythmBulletGame.cs | 5 +- 10 files changed, 30789 insertions(+), 4 deletions(-) create mode 100644 References/RecrownedAthenaeum/MonoGame.Framework.dll create mode 100644 References/RecrownedAthenaeum/MonoGame.Framework.xml create mode 100644 References/RecrownedAthenaeum/Newtonsoft.Json.dll create mode 100644 References/RecrownedAthenaeum/Newtonsoft.Json.xml create mode 100644 References/RecrownedAthenaeum/RecrownedAthenaeum.dll create mode 100644 References/RecrownedAthenaeum/RecrownedAthenaeum.xml diff --git a/References/RecrownedAthenaeum/MonoGame.Framework.dll b/References/RecrownedAthenaeum/MonoGame.Framework.dll new file mode 100644 index 0000000000000000000000000000000000000000..d9f3fd8483b245a5c0091efb66f77247e495a6fc GIT binary patch literal 198656 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 + + + MonoGame.Framework + + + + + Create a bounding box from the given list of points. + + The list of Vector3 instances defining the point cloud to bound + A bounding box that encapsulates the given point cloud. + Thrown if the given list has no points. + + + + Deconstruction method for . + + + + + + + Defines a viewing frustum for intersection operations. + + + + + The number of planes in the frustum. + + + + + The number of corner points in the frustum. + + + + + Constructs the frustum by extracting the view planes from a matrix. + + Combined matrix which usually is (View * Projection). + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Containment test between this and specified . + + A for testing. + Result of testing for containment between this and specified . + + + + Containment test between this and specified . + + A for testing. + Result of testing for containment between this and specified as an output parameter. + + + + Containment test between this and specified . + + A for testing. + Result of testing for containment between this and specified . + + + + Containment test between this and specified . + + A for testing. + Result of testing for containment between this and specified . + + + + Containment test between this and specified . + + A for testing. + Result of testing for containment between this and specified as an output parameter. + + + + Containment test between this and specified . + + A for testing. + Result of testing for containment between this and specified . + + + + Containment test between this and specified . + + A for testing. + Result of testing for containment between this and specified as an output parameter. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Returns a copy of internal corners array. + + The array of corners. + + + + Returns a copy of internal corners array. + + The array which values will be replaced to corner values of this instance. It must have size of . + + + + Gets the hash code of this . + + Hash code of this . + + + + Gets whether or not a specified intersects with this . + + A for intersection test. + true if specified intersects with this ; false otherwise. + + + + Gets whether or not a specified intersects with this . + + A for intersection test. + true if specified intersects with this ; false otherwise as an output parameter. + + + + Gets whether or not a specified intersects with this . + + An other for intersection test. + true if other intersects with this ; false otherwise. + + + + Gets whether or not a specified intersects with this . + + A for intersection test. + true if specified intersects with this ; false otherwise. + + + + Gets whether or not a specified intersects with this . + + A for intersection test. + true if specified intersects with this ; false otherwise as an output parameter. + + + + Gets type of intersection between specified and this . + + A for intersection test. + A plane intersection type. + + + + Gets type of intersection between specified and this . + + A for intersection test. + A plane intersection type as an output parameter. + + + + Gets the distance of intersection of and this or null if no intersection happens. + + A for intersection test. + Distance at which ray intersects with this or null if no intersection happens. + + + + Gets the distance of intersection of and this or null if no intersection happens. + + A for intersection test. + Distance at which ray intersects with this or null if no intersection happens as an output parameter. + + + + Returns a representation of this in the format: + {Near:[nearPlane] Far:[farPlane] Left:[leftPlane] Right:[rightPlane] Top:[topPlane] Bottom:[bottomPlane]} + + representation of this . + + + + Gets or sets the of the frustum. + + + + + Gets the near plane of the frustum. + + + + + Gets the far plane of the frustum. + + + + + Gets the left plane of the frustum. + + + + + Gets the right plane of the frustum. + + + + + Gets the top plane of the frustum. + + + + + Gets the bottom plane of the frustum. + + + + + Describes a sphere in 3D-space for bounding operations. + + + + + The sphere center. + + + + + The sphere radius. + + + + + Constructs a bounding sphere with the specified center and radius. + + The sphere center. + The sphere radius. + + + + Test if a bounding box is fully inside, outside, or just intersecting the sphere. + + The box for testing. + The containment type. + + + + Test if a bounding box is fully inside, outside, or just intersecting the sphere. + + The box for testing. + The containment type as an output parameter. + + + + Test if a frustum is fully inside, outside, or just intersecting the sphere. + + The frustum for testing. + The containment type. + + + + Test if a frustum is fully inside, outside, or just intersecting the sphere. + + The frustum for testing. + The containment type as an output parameter. + + + + Test if a sphere is fully inside, outside, or just intersecting the sphere. + + The other sphere for testing. + The containment type. + + + + Test if a sphere is fully inside, outside, or just intersecting the sphere. + + The other sphere for testing. + The containment type as an output parameter. + + + + Test if a point is fully inside, outside, or just intersecting the sphere. + + The vector in 3D-space for testing. + The containment type. + + + + Test if a point is fully inside, outside, or just intersecting the sphere. + + The vector in 3D-space for testing. + The containment type as an output parameter. + + + + Creates the smallest that can contain a specified . + + The box to create the sphere from. + The new . + + + + Creates the smallest that can contain a specified . + + The box to create the sphere from. + The new as an output parameter. + + + + Creates the smallest that can contain a specified . + + The frustum to create the sphere from. + The new . + + + + Creates the smallest that can contain a specified list of points in 3D-space. + + List of point to create the sphere from. + The new . + + + + Creates the smallest that can contain two spheres. + + First sphere. + Second sphere. + The new . + + + + Creates the smallest that can contain two spheres. + + First sphere. + Second sphere. + The new as an output parameter. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Gets whether or not a specified intersects with this sphere. + + The box for testing. + true if intersects with this sphere; false otherwise. + + + + Gets whether or not a specified intersects with this sphere. + + The box for testing. + true if intersects with this sphere; false otherwise. As an output parameter. + + + + Gets whether or not the other intersects with this sphere. + + The other sphere for testing. + true if other intersects with this sphere; false otherwise. + + + + Gets whether or not the other intersects with this sphere. + + The other sphere for testing. + true if other intersects with this sphere; false otherwise. As an output parameter. + + + + Gets whether or not a specified intersects with this sphere. + + The plane for testing. + Type of intersection. + + + + Gets whether or not a specified intersects with this sphere. + + The plane for testing. + Type of intersection as an output parameter. + + + + Gets whether or not a specified intersects with this sphere. + + The ray for testing. + Distance of ray intersection or null if there is no intersection. + + + + Gets whether or not a specified intersects with this sphere. + + The ray for testing. + Distance of ray intersection or null if there is no intersection as an output parameter. + + + + Returns a representation of this in the format: + {Center:[] Radius:[]} + + A representation of this . + + + + Creates a new that contains a transformation of translation and scale from this sphere by the specified . + + The transformation . + Transformed . + + + + Creates a new that contains a transformation of translation and scale from this sphere by the specified . + + The transformation . + Transformed as an output parameter. + + + + Deconstruction method for . + + + + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Describes a 32-bit packed color. + + + + + Constructs an RGBA color from a packed value. + The value is a 32-bit unsigned integer, with R in the least significant octet. + + The packed value. + + + + Constructs an RGBA color from the XYZW unit length components of a vector. + + A representing color. + + + + Constructs an RGBA color from the XYZ unit length components of a vector. Alpha value will be opaque. + + A representing color. + + + + Constructs an RGBA color from a and an alpha value. + + A for RGB values of new instance. + The alpha component value from 0 to 255. + + + + Constructs an RGBA color from color and alpha value. + + A for RGB values of new instance. + Alpha component value from 0.0f to 1.0f. + + + + Constructs an RGBA color from scalars representing red, green and blue values. Alpha value will be opaque. + + Red component value from 0.0f to 1.0f. + Green component value from 0.0f to 1.0f. + Blue component value from 0.0f to 1.0f. + + + + Constructs an RGBA color from scalars representing red, green, blue and alpha values. + + Red component value from 0.0f to 1.0f. + Green component value from 0.0f to 1.0f. + Blue component value from 0.0f to 1.0f. + Alpha component value from 0.0f to 1.0f. + + + + Constructs an RGBA color from scalars representing red, green and blue values. Alpha value will be opaque. + + Red component value from 0 to 255. + Green component value from 0 to 255. + Blue component value from 0 to 255. + + + + Constructs an RGBA color from scalars representing red, green, blue and alpha values. + + Red component value from 0 to 255. + Green component value from 0 to 255. + Blue component value from 0 to 255. + Alpha component value from 0 to 255. + + + + Constructs an RGBA color from scalars representing red, green, blue and alpha values. + + + This overload sets the values directly without clamping, and may therefore be faster than the other overloads. + + + + + + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Compares whether current instance is equal to specified object. + + The to compare. + true if the instances are equal; false otherwise. + + + + Performs linear interpolation of . + + Source . + Destination . + Interpolation factor. + Interpolated . + + + + should be used instead of this function. + + Interpolated . + + + + Multiply by value. + + Source . + Multiplicator. + Multiplication result. + + + + Multiply by value. + + Source . + Multiplicator. + Multiplication result. + + + + Gets a representation for this object. + + A representation for this object. + + + + Gets a representation for this object. + + A representation for this object. + + + + Returns a representation of this in the format: + {R:[red] G:[green] B:[blue] A:[alpha]} + + representation of this . + + + + Translate a non-premultipled alpha to a that contains premultiplied alpha. + + A representing color. + A which contains premultiplied alpha data. + + + + Translate a non-premultipled alpha to a that contains premultiplied alpha. + + Red component value. + Green component value. + Blue component value. + Alpha component value. + A which contains premultiplied alpha data. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Deconstruction method for . + + + + + + + + Deconstruction method for with Alpha. + + + + + + + + + Gets or sets the blue component. + + + + + Gets or sets the green component. + + + + + Gets or sets the red component. + + + + + Gets or sets the alpha component. + + + + + TransparentBlack color (R:0,G:0,B:0,A:0). + + + + + Transparent color (R:0,G:0,B:0,A:0). + + + + + AliceBlue color (R:240,G:248,B:255,A:255). + + + + + AntiqueWhite color (R:250,G:235,B:215,A:255). + + + + + Aqua color (R:0,G:255,B:255,A:255). + + + + + Aquamarine color (R:127,G:255,B:212,A:255). + + + + + Azure color (R:240,G:255,B:255,A:255). + + + + + Beige color (R:245,G:245,B:220,A:255). + + + + + Bisque color (R:255,G:228,B:196,A:255). + + + + + Black color (R:0,G:0,B:0,A:255). + + + + + BlanchedAlmond color (R:255,G:235,B:205,A:255). + + + + + Blue color (R:0,G:0,B:255,A:255). + + + + + BlueViolet color (R:138,G:43,B:226,A:255). + + + + + Brown color (R:165,G:42,B:42,A:255). + + + + + BurlyWood color (R:222,G:184,B:135,A:255). + + + + + CadetBlue color (R:95,G:158,B:160,A:255). + + + + + Chartreuse color (R:127,G:255,B:0,A:255). + + + + + Chocolate color (R:210,G:105,B:30,A:255). + + + + + Coral color (R:255,G:127,B:80,A:255). + + + + + CornflowerBlue color (R:100,G:149,B:237,A:255). + + + + + Cornsilk color (R:255,G:248,B:220,A:255). + + + + + Crimson color (R:220,G:20,B:60,A:255). + + + + + Cyan color (R:0,G:255,B:255,A:255). + + + + + DarkBlue color (R:0,G:0,B:139,A:255). + + + + + DarkCyan color (R:0,G:139,B:139,A:255). + + + + + DarkGoldenrod color (R:184,G:134,B:11,A:255). + + + + + DarkGray color (R:169,G:169,B:169,A:255). + + + + + DarkGreen color (R:0,G:100,B:0,A:255). + + + + + DarkKhaki color (R:189,G:183,B:107,A:255). + + + + + DarkMagenta color (R:139,G:0,B:139,A:255). + + + + + DarkOliveGreen color (R:85,G:107,B:47,A:255). + + + + + DarkOrange color (R:255,G:140,B:0,A:255). + + + + + DarkOrchid color (R:153,G:50,B:204,A:255). + + + + + DarkRed color (R:139,G:0,B:0,A:255). + + + + + DarkSalmon color (R:233,G:150,B:122,A:255). + + + + + DarkSeaGreen color (R:143,G:188,B:139,A:255). + + + + + DarkSlateBlue color (R:72,G:61,B:139,A:255). + + + + + DarkSlateGray color (R:47,G:79,B:79,A:255). + + + + + DarkTurquoise color (R:0,G:206,B:209,A:255). + + + + + DarkViolet color (R:148,G:0,B:211,A:255). + + + + + DeepPink color (R:255,G:20,B:147,A:255). + + + + + DeepSkyBlue color (R:0,G:191,B:255,A:255). + + + + + DimGray color (R:105,G:105,B:105,A:255). + + + + + DodgerBlue color (R:30,G:144,B:255,A:255). + + + + + Firebrick color (R:178,G:34,B:34,A:255). + + + + + FloralWhite color (R:255,G:250,B:240,A:255). + + + + + ForestGreen color (R:34,G:139,B:34,A:255). + + + + + Fuchsia color (R:255,G:0,B:255,A:255). + + + + + Gainsboro color (R:220,G:220,B:220,A:255). + + + + + GhostWhite color (R:248,G:248,B:255,A:255). + + + + + Gold color (R:255,G:215,B:0,A:255). + + + + + Goldenrod color (R:218,G:165,B:32,A:255). + + + + + Gray color (R:128,G:128,B:128,A:255). + + + + + Green color (R:0,G:128,B:0,A:255). + + + + + GreenYellow color (R:173,G:255,B:47,A:255). + + + + + Honeydew color (R:240,G:255,B:240,A:255). + + + + + HotPink color (R:255,G:105,B:180,A:255). + + + + + IndianRed color (R:205,G:92,B:92,A:255). + + + + + Indigo color (R:75,G:0,B:130,A:255). + + + + + Ivory color (R:255,G:255,B:240,A:255). + + + + + Khaki color (R:240,G:230,B:140,A:255). + + + + + Lavender color (R:230,G:230,B:250,A:255). + + + + + LavenderBlush color (R:255,G:240,B:245,A:255). + + + + + LawnGreen color (R:124,G:252,B:0,A:255). + + + + + LemonChiffon color (R:255,G:250,B:205,A:255). + + + + + LightBlue color (R:173,G:216,B:230,A:255). + + + + + LightCoral color (R:240,G:128,B:128,A:255). + + + + + LightCyan color (R:224,G:255,B:255,A:255). + + + + + LightGoldenrodYellow color (R:250,G:250,B:210,A:255). + + + + + LightGray color (R:211,G:211,B:211,A:255). + + + + + LightGreen color (R:144,G:238,B:144,A:255). + + + + + LightPink color (R:255,G:182,B:193,A:255). + + + + + LightSalmon color (R:255,G:160,B:122,A:255). + + + + + LightSeaGreen color (R:32,G:178,B:170,A:255). + + + + + LightSkyBlue color (R:135,G:206,B:250,A:255). + + + + + LightSlateGray color (R:119,G:136,B:153,A:255). + + + + + LightSteelBlue color (R:176,G:196,B:222,A:255). + + + + + LightYellow color (R:255,G:255,B:224,A:255). + + + + + Lime color (R:0,G:255,B:0,A:255). + + + + + LimeGreen color (R:50,G:205,B:50,A:255). + + + + + Linen color (R:250,G:240,B:230,A:255). + + + + + Magenta color (R:255,G:0,B:255,A:255). + + + + + Maroon color (R:128,G:0,B:0,A:255). + + + + + MediumAquamarine color (R:102,G:205,B:170,A:255). + + + + + MediumBlue color (R:0,G:0,B:205,A:255). + + + + + MediumOrchid color (R:186,G:85,B:211,A:255). + + + + + MediumPurple color (R:147,G:112,B:219,A:255). + + + + + MediumSeaGreen color (R:60,G:179,B:113,A:255). + + + + + MediumSlateBlue color (R:123,G:104,B:238,A:255). + + + + + MediumSpringGreen color (R:0,G:250,B:154,A:255). + + + + + MediumTurquoise color (R:72,G:209,B:204,A:255). + + + + + MediumVioletRed color (R:199,G:21,B:133,A:255). + + + + + MidnightBlue color (R:25,G:25,B:112,A:255). + + + + + MintCream color (R:245,G:255,B:250,A:255). + + + + + MistyRose color (R:255,G:228,B:225,A:255). + + + + + Moccasin color (R:255,G:228,B:181,A:255). + + + + + MonoGame orange theme color (R:231,G:60,B:0,A:255). + + + + + NavajoWhite color (R:255,G:222,B:173,A:255). + + + + + Navy color (R:0,G:0,B:128,A:255). + + + + + OldLace color (R:253,G:245,B:230,A:255). + + + + + Olive color (R:128,G:128,B:0,A:255). + + + + + OliveDrab color (R:107,G:142,B:35,A:255). + + + + + Orange color (R:255,G:165,B:0,A:255). + + + + + OrangeRed color (R:255,G:69,B:0,A:255). + + + + + Orchid color (R:218,G:112,B:214,A:255). + + + + + PaleGoldenrod color (R:238,G:232,B:170,A:255). + + + + + PaleGreen color (R:152,G:251,B:152,A:255). + + + + + PaleTurquoise color (R:175,G:238,B:238,A:255). + + + + + PaleVioletRed color (R:219,G:112,B:147,A:255). + + + + + PapayaWhip color (R:255,G:239,B:213,A:255). + + + + + PeachPuff color (R:255,G:218,B:185,A:255). + + + + + Peru color (R:205,G:133,B:63,A:255). + + + + + Pink color (R:255,G:192,B:203,A:255). + + + + + Plum color (R:221,G:160,B:221,A:255). + + + + + PowderBlue color (R:176,G:224,B:230,A:255). + + + + + Purple color (R:128,G:0,B:128,A:255). + + + + + Red color (R:255,G:0,B:0,A:255). + + + + + RosyBrown color (R:188,G:143,B:143,A:255). + + + + + RoyalBlue color (R:65,G:105,B:225,A:255). + + + + + SaddleBrown color (R:139,G:69,B:19,A:255). + + + + + Salmon color (R:250,G:128,B:114,A:255). + + + + + SandyBrown color (R:244,G:164,B:96,A:255). + + + + + SeaGreen color (R:46,G:139,B:87,A:255). + + + + + SeaShell color (R:255,G:245,B:238,A:255). + + + + + Sienna color (R:160,G:82,B:45,A:255). + + + + + Silver color (R:192,G:192,B:192,A:255). + + + + + SkyBlue color (R:135,G:206,B:235,A:255). + + + + + SlateBlue color (R:106,G:90,B:205,A:255). + + + + + SlateGray color (R:112,G:128,B:144,A:255). + + + + + Snow color (R:255,G:250,B:250,A:255). + + + + + SpringGreen color (R:0,G:255,B:127,A:255). + + + + + SteelBlue color (R:70,G:130,B:180,A:255). + + + + + Tan color (R:210,G:180,B:140,A:255). + + + + + Teal color (R:0,G:128,B:128,A:255). + + + + + Thistle color (R:216,G:191,B:216,A:255). + + + + + Tomato color (R:255,G:99,B:71,A:255). + + + + + Turquoise color (R:64,G:224,B:208,A:255). + + + + + Violet color (R:238,G:130,B:238,A:255). + + + + + Wheat color (R:245,G:222,B:179,A:255). + + + + + White color (R:255,G:255,B:255,A:255). + + + + + WhiteSmoke color (R:245,G:245,B:245,A:255). + + + + + Yellow color (R:255,G:255,B:0,A:255). + + + + + YellowGreen color (R:154,G:205,B:50,A:255). + + + + + Gets or sets packed value of this . + + + + + Defines how the bounding volumes intersects or contain one another. + + + + + Indicates that there is no overlap between two bounding volumes. + + + + + Indicates that one bounding volume completely contains another volume. + + + + + Indicates that bounding volumes partially overlap one another. + + + + + Defines the continuity of keys on a . + + + + + Interpolation can be used between this key and the next. + + + + + Interpolation cannot be used. A position between the two points returns this point. + + + + + Contains a collection of points in 2D space and provides methods for evaluating features of the curve they define. + + + + + Constructs a curve. + + + + + Creates a copy of this curve. + + A copy of this curve. + + + + Evaluate the value at a position of this . + + The position on this . + Value at the position on this . + + + + Computes tangents for all keys in the collection. + + The tangent type for both in and out. + + + + Computes tangents for all keys in the collection. + + The tangent in-type. for more details. + The tangent out-type. for more details. + + + + Computes tangent for the specific key in the collection. + + The index of a key in the collection. + The tangent type for both in and out. + + + + Computes tangent for the specific key in the collection. + + The index of key in the collection. + The tangent in-type. for more details. + The tangent out-type. for more details. + + + + Returns true if this curve is constant (has zero or one points); false otherwise. + + + + + Defines how to handle weighting values that are less than the first control point in the curve. + + + + + Defines how to handle weighting values that are greater than the last control point in the curve. + + + + + The collection of curve keys. + + + + + The collection of the elements and a part of the class. + + + + + Creates a new instance of class. + + + + + Adds a key to this collection. + + New key for the collection. + Throws if is null. + The new key would be added respectively to a position of that key and the position of other keys. + + + + Removes all keys from this collection. + + + + + Creates a copy of this collection. + + A copy of this collection. + + + + Determines whether this collection contains a specific key. + + The key to locate in this collection. + true if the key is found; false otherwise. + + + + Copies the keys of this collection to an array, starting at the array index provided. + + Destination array where elements will be copied. + The zero-based index in the array to start copying from. + + + + Returns an enumerator that iterates through the collection. + + An enumerator for the . + + + + Finds element in the collection and returns its index. + + Element for the search. + Index of the element; or -1 if item is not found. + + + + Removes element at the specified index. + + The index which element will be removed. + + + + Removes specific element. + + The element + true if item is successfully removed; false otherwise. This method also returns false if item was not found. + + + + Indexer. + + The index of key in this collection. + at position. + + + + Returns the count of keys in this collection. + + + + + Returns false because it is not a read-only collection. + + + + + Key point on the . + + + + + Creates a new instance of class with position: 0 and value: 0. + + + + + Creates a new instance of class. + + Position on the curve. + Value of the control point. + + + + Creates a new instance of class. + + Position on the curve. + Value of the control point. + Tangent approaching point from the previous point on the curve. + Tangent leaving point toward next point on the curve. + + + + Creates a new instance of class. + + Position on the curve. + Value of the control point. + Tangent approaching point from the previous point on the curve. + Tangent leaving point toward next point on the curve. + Indicates whether the curve is discrete or continuous. + + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Creates a copy of this key. + + A copy of this key. + + + + Gets or sets the indicator whether the segment between this point and the next point on the curve is discrete or continuous. + + + + + Gets a position of the key on the curve. + + + + + Gets or sets a tangent when approaching this point from the previous point on the curve. + + + + + Gets or sets a tangent when leaving this point to the next point on the curve. + + + + + Gets a value of this point. + + + + + Defines how the value is determined for position before first point or after the end point on the . + + + + + The value of will be evaluated as first point for positions before the beginning and end point for positions after the end. + + + + + The positions will wrap around from the end to beginning of the for determined the value. + + + + + The positions will wrap around from the end to beginning of the . + The value will be offset by the difference between the values of first and end multiplied by the wrap amount. + If the position is before the beginning of the the difference will be subtracted from its value; otherwise the difference will be added. + + + + + The value at the end of the act as an offset from the same side of the toward the opposite side. + + + + + The linear interpolation will be performed for determined the value. + + + + + Defines the different tangent types to be calculated for points in a . + + + + + The tangent which always has a value equal to zero. + + + + + The tangent which contains a difference between current tangent value and the tangent value from the previous . + + + + + The smoouth tangent which contains the inflection between and by taking into account the values of both neighbors of the . + + + + + Defines the orientation of the display. + + + + + The default orientation. + + + + + The display is rotated counterclockwise into a landscape orientation. Width is greater than height. + + + + + The display is rotated clockwise into a landscape orientation. Width is greater than height. + + + + + The display is rotated as portrait, where height is greater than width. + + + + + The display is rotated as inverted portrait, where height is greater than width. + + + + + Unknown display orientation. + + + + + Shuts down the component. + + + + + Shuts down the component. + + + + + Provides helper methods to make it easier + to safely raise events. + + + + + Safely raises an event by storing a copy of the event's delegate + in the parameter and checking it for + null before invoking it. + + + The object raising the event. + to be invoked + The passed to + + + + Safely raises an event by storing a copy of the event's delegate + in the parameter and checking it for + null before invoking it. + + The object raising the event. + to be invoked + The passed to + + + + Helper class for processing internal framework events. + + + If you use class, is called automatically. + Otherwise you must call it as part of your game loop. + + + + + Processes framework events. + + + + + Removes every from this . + Triggers once for each removed. + + + + + Event that is triggered when a is added + to this . + + + + + Event that is triggered when a is removed + from this . + + + + + The maximum amount of time we will frameskip over and only perform Update calls with no Draw calls. + MonoGame extension. + + + + + The SortingFilteringCollection class provides efficient, reusable + sorting and filtering based on a configurable sort comparer, filter + predicate, and associate change events. + + + + + Raises the AsyncRunLoopEnded event. This method must be called by + derived classes when the asynchronous run loop they start has + stopped running. + + + + + Gives derived classes an opportunity to do work before any + components are initialized. Note that the base implementation sets + IsActive to true, so derived classes should either call the base + implementation or set IsActive to true by their own means. + + + + + Gives derived classes an opportunity to do work just before the + run loop is begun. Implementations may also return false to prevent + the run loop from starting. + + + + + + When implemented in a derived, ends the active run loop. + + + + + When implemented in a derived, starts the run loop and blocks + until it has ended. + + + + + When implemented in a derived, starts the run loop and returns + immediately. + + + + + Gives derived classes an opportunity to do work just before Update + is called for all IUpdatable components. Returning false from this + method will result in this round of Update calls being skipped. + + + + + + + Gives derived classes an opportunity to do work just before Draw + is called for all IDrawable components. Returning false from this + method will result in this round of Draw calls being skipped. + + + + + + + When implemented in a derived class, causes the game to enter + full-screen mode. + + + + + When implemented in a derived class, causes the game to exit + full-screen mode. + + + + + Gives derived classes an opportunity to modify + Game.TargetElapsedTime before it is set. + + The proposed new value of TargetElapsedTime. + The new value of TargetElapsedTime that will be set. + + + + Starts a device transition (windowed to full screen or vice versa). + + + Specifies whether the device will be in full-screen mode upon completion of the change. + + + + + Completes a device transition. + + + Screen device name. + + + The new width of the game's client window. + + + The new height of the game's client window. + + + + + Gives derived classes an opportunity to take action after + Game.TargetElapsedTime has been set. + + + + + MSDN: Use this method if your game is recovering from a slow-running state, and ElapsedGameTime is too large to be useful. + Frame timing is generally handled by the Game class, but some platforms still handle it elsewhere. Once all platforms + rely on the Game class's functionality, this method and any overrides should be removed. + + + + + Called by the GraphicsDeviceManager to notify the platform + that the presentation parameters have changed. + + The new presentation parameters. + + + + Performs application-defined tasks associated with freeing, + releasing, or resetting unmanaged resources. + + + + + Log the specified Message. + + + + + + + + When implemented in a derived class, reports the default + GameRunBehavior for this platform. + + + + + Gets the Game instance that owns this GamePlatform instance. + + + + + Defines how should be runned. + + + + + The game loop will be runned asynchronous. + + + + + The game loop will be runned synchronous. + + + + + Gets or sets a bool that enables usage of Alt+F4 for window closing on desktop platforms. Value is true by default. + + + + + The location of this window on the desktop, eg: global coordinate space + which stretches across all screens. + + + + + Gets or sets the title of the game window. + + + For Windows 8 and Windows 10 UWP this has no effect. For these platforms the title should be + set by using the DisplayName property found in the app manifest file. + + + + + Determines whether the border of the window is visible. Currently only supported on the WinDX and WinGL/Linux platforms. + + + Thrown when trying to use this property on a platform other than the WinDX and WinGL/Linux platforms. + + + + + Use this event to retrieve text for objects like textbox's. + This event is not raised by noncharacter keys. + This event also supports key repeat. + For more information this event is based off: + http://msdn.microsoft.com/en-AU/library/system.windows.forms.control.keypress.aspx + + + This event is only supported on the Windows DirectX, Windows OpenGL and Linux platforms. + + + + + Used by the platform code to control the graphics device. + + + + + Called at the start of rendering a frame. + + Returns true if the frame should be rendered. + + + + Called to create the graphics device. + + Does nothing if the graphics device is already created. + + + + Called after rendering to present the frame to the screen. + + + + + Contains commonly used precalculated values and mathematical operations. + + + + + Represents the mathematical constant e(2.71828175). + + + + + Represents the log base ten of e(0.4342945). + + + + + Represents the log base two of e(1.442695). + + + + + Represents the value of pi(3.14159274). + + + + + Represents the value of pi divided by two(1.57079637). + + + + + Represents the value of pi divided by four(0.7853982). + + + + + Represents the value of pi times two(6.28318548). + + + + + Returns the Cartesian coordinate for one axis of a point that is defined by a given triangle and two normalized barycentric (areal) coordinates. + + The coordinate on one axis of vertex 1 of the defining triangle. + The coordinate on the same axis of vertex 2 of the defining triangle. + The coordinate on the same axis of vertex 3 of the defining triangle. + The normalized barycentric (areal) coordinate b2, equal to the weighting factor for vertex 2, the coordinate of which is specified in value2. + The normalized barycentric (areal) coordinate b3, equal to the weighting factor for vertex 3, the coordinate of which is specified in value3. + Cartesian coordinate of the specified point with respect to the axis being used. + + + + Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + A position that is the result of the Catmull-Rom interpolation. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. If value is less than min, min will be returned. + The maximum value. If value is greater than max, max will be returned. + The clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. If value is less than min, min will be returned. + The maximum value. If value is greater than max, max will be returned. + The clamped value. + + + + Calculates the absolute value of the difference of two values. + + Source value. + Source value. + Distance between the two values. + + + + Performs a Hermite spline interpolation. + + Source position. + Source tangent. + Source position. + Source tangent. + Weighting factor. + The result of the Hermite spline interpolation. + + + + Linearly interpolates between two values. + + Source value. + Destination value. + Value between 0 and 1 indicating the weight of value2. + Interpolated value. + This method performs the linear interpolation based on the following formula: + value1 + (value2 - value1) * amount. + Passing amount a value of 0 will cause value1 to be returned, a value of 1 will cause value2 to be returned. + See for a less efficient version with more precision around edge cases. + + + + + Linearly interpolates between two values. + This method is a less efficient, more precise version of . + See remarks for more info. + + Source value. + Destination value. + Value between 0 and 1 indicating the weight of value2. + Interpolated value. + This method performs the linear interpolation based on the following formula: + ((1 - amount) * value1) + (value2 * amount). + Passing amount a value of 0 will cause value1 to be returned, a value of 1 will cause value2 to be returned. + This method does not have the floating point precision issue that has. + i.e. If there is a big gap between value1 and value2 in magnitude (e.g. value1=10000000000000000, value2=1), + right at the edge of the interpolation range (amount=1), will return 0 (whereas it should return 1). + This also holds for value1=10^17, value2=10; value1=10^18,value2=10^2... so on. + For an in depth explanation of the issue, see below references: + Relevant Wikipedia Article: https://en.wikipedia.org/wiki/Linear_interpolation#Programming_language_support + Relevant StackOverflow Answer: http://stackoverflow.com/questions/4353525/floating-point-linear-interpolation#answer-23716956 + + + + + Returns the greater of two values. + + Source value. + Source value. + The greater value. + + + + Returns the greater of two values. + + Source value. + Source value. + The greater value. + + + + Returns the lesser of two values. + + Source value. + Source value. + The lesser value. + + + + Returns the lesser of two values. + + Source value. + Source value. + The lesser value. + + + + Interpolates between two values using a cubic equation. + + Source value. + Source value. + Weighting value. + Interpolated value. + + + + Converts radians to degrees. + + The angle in radians. + The angle in degrees. + + This method uses double precission internally, + though it returns single float + Factor = 180 / pi + + + + + Converts degrees to radians. + + The angle in degrees. + The angle in radians. + + This method uses double precission internally, + though it returns single float + Factor = pi / 180 + + + + + Reduces a given angle to a value between π and -π. + + The angle to reduce, in radians. + The new angle, in radians. + + + + Determines if value is powered by two. + + A value. + true if value is powered by two; otherwise false. + + + + Represents the right-handed 4x4 floating point matrix, which can store translation, scale and rotation information. + + + + + Constructs a matrix. + + A first row and first column value. + A first row and second column value. + A first row and third column value. + A first row and fourth column value. + A second row and first column value. + A second row and second column value. + A second row and third column value. + A second row and fourth column value. + A third row and first column value. + A third row and second column value. + A third row and third column value. + A third row and fourth column value. + A fourth row and first column value. + A fourth row and second column value. + A fourth row and third column value. + A fourth row and fourth column value. + + + + Constructs a matrix. + + A first row of the created matrix. + A second row of the created matrix. + A third row of the created matrix. + A fourth row of the created matrix. + + + + A first row and first column value. + + + + + A first row and second column value. + + + + + A first row and third column value. + + + + + A first row and fourth column value. + + + + + A second row and first column value. + + + + + A second row and second column value. + + + + + A second row and third column value. + + + + + A second row and fourth column value. + + + + + A third row and first column value. + + + + + A third row and second column value. + + + + + A third row and third column value. + + + + + A third row and fourth column value. + + + + + A fourth row and first column value. + + + + + A fourth row and second column value. + + + + + A fourth row and third column value. + + + + + A fourth row and fourth column value. + + + + + Creates a new which contains sum of two matrixes. + + The first matrix to add. + The second matrix to add. + The result of the matrix addition. + + + + Creates a new which contains sum of two matrixes. + + The first matrix to add. + The second matrix to add. + The result of the matrix addition as an output parameter. + + + + Creates a new for spherical billboarding that rotates around specified object position. + + Position of billboard object. It will rotate around that vector. + The camera position. + The camera up vector. + Optional camera forward vector. + The for spherical billboarding. + + + + Creates a new for spherical billboarding that rotates around specified object position. + + Position of billboard object. It will rotate around that vector. + The camera position. + The camera up vector. + Optional camera forward vector. + The for spherical billboarding as an output parameter. + + + + Creates a new for cylindrical billboarding that rotates around specified axis. + + Object position the billboard will rotate around. + Camera position. + Axis of billboard for rotation. + Optional camera forward vector. + Optional object forward vector. + The for cylindrical billboarding. + + + + Creates a new for cylindrical billboarding that rotates around specified axis. + + Object position the billboard will rotate around. + Camera position. + Axis of billboard for rotation. + Optional camera forward vector. + Optional object forward vector. + The for cylindrical billboarding as an output parameter. + + + + Creates a new which contains the rotation moment around specified axis. + + The axis of rotation. + The angle of rotation in radians. + The rotation . + + + + Creates a new which contains the rotation moment around specified axis. + + The axis of rotation. + The angle of rotation in radians. + The rotation as an output parameter. + + + + Creates a new rotation from a . + + of rotation moment. + The rotation . + + + + Creates a new rotation from a . + + of rotation moment. + The rotation as an output parameter. + + + + Creates a new rotation from the specified yaw, pitch and roll values. + + The yaw rotation value in radians. + The pitch rotation value in radians. + The roll rotation value in radians. + The rotation . + For more information about yaw, pitch and roll visit http://en.wikipedia.org/wiki/Euler_angles. + + + + + Creates a new rotation from the specified yaw, pitch and roll values. + + The yaw rotation value in radians. + The pitch rotation value in radians. + The roll rotation value in radians. + The rotation as an output parameter. + For more information about yaw, pitch and roll visit http://en.wikipedia.org/wiki/Euler_angles. + + + + + Creates a new viewing . + + Position of the camera. + Lookup vector of the camera. + The direction of the upper edge of the camera. + The viewing . + + + + Creates a new viewing . + + Position of the camera. + Lookup vector of the camera. + The direction of the upper edge of the camera. + The viewing as an output parameter. + + + + Creates a new projection for orthographic view. + + Width of the viewing volume. + Height of the viewing volume. + Depth of the near plane. + Depth of the far plane. + The new projection for orthographic view. + + + + Creates a new projection for orthographic view. + + Width of the viewing volume. + Height of the viewing volume. + Depth of the near plane. + Depth of the far plane. + The new projection for orthographic view as an output parameter. + + + + Creates a new projection for customized orthographic view. + + Lower x-value at the near plane. + Upper x-value at the near plane. + Lower y-coordinate at the near plane. + Upper y-value at the near plane. + Depth of the near plane. + Depth of the far plane. + The new projection for customized orthographic view. + + + + Creates a new projection for customized orthographic view. + + The viewing volume. + Depth of the near plane. + Depth of the far plane. + The new projection for customized orthographic view. + + + + Creates a new projection for customized orthographic view. + + Lower x-value at the near plane. + Upper x-value at the near plane. + Lower y-coordinate at the near plane. + Upper y-value at the near plane. + Depth of the near plane. + Depth of the far plane. + The new projection for customized orthographic view as an output parameter. + + + + Creates a new projection for perspective view. + + Width of the viewing volume. + Height of the viewing volume. + Distance to the near plane. + Distance to the far plane. + The new projection for perspective view. + + + + Creates a new projection for perspective view. + + Width of the viewing volume. + Height of the viewing volume. + Distance to the near plane. + Distance to the far plane. + The new projection for perspective view as an output parameter. + + + + Creates a new projection for perspective view with field of view. + + Field of view in the y direction in radians. + Width divided by height of the viewing volume. + Distance to the near plane. + Distance to the far plane. + The new projection for perspective view with FOV. + + + + Creates a new projection for perspective view with field of view. + + Field of view in the y direction in radians. + Width divided by height of the viewing volume. + Distance of the near plane. + Distance of the far plane. + The new projection for perspective view with FOV as an output parameter. + + + + Creates a new projection for customized perspective view. + + Lower x-value at the near plane. + Upper x-value at the near plane. + Lower y-coordinate at the near plane. + Upper y-value at the near plane. + Distance to the near plane. + Distance to the far plane. + The new for customized perspective view. + + + + Creates a new projection for customized perspective view. + + The viewing volume. + Distance to the near plane. + Distance to the far plane. + The new for customized perspective view. + + + + Creates a new projection for customized perspective view. + + Lower x-value at the near plane. + Upper x-value at the near plane. + Lower y-coordinate at the near plane. + Upper y-value at the near plane. + Distance to the near plane. + Distance to the far plane. + The new for customized perspective view as an output parameter. + + + + Creates a new rotation around X axis. + + Angle in radians. + The rotation around X axis. + + + + Creates a new rotation around X axis. + + Angle in radians. + The rotation around X axis as an output parameter. + + + + Creates a new rotation around Y axis. + + Angle in radians. + The rotation around Y axis. + + + + Creates a new rotation around Y axis. + + Angle in radians. + The rotation around Y axis as an output parameter. + + + + Creates a new rotation around Z axis. + + Angle in radians. + The rotation around Z axis. + + + + Creates a new rotation around Z axis. + + Angle in radians. + The rotation around Z axis as an output parameter. + + + + Creates a new scaling . + + Scale value for all three axises. + The scaling . + + + + Creates a new scaling . + + Scale value for all three axises. + The scaling as an output parameter. + + + + Creates a new scaling . + + Scale value for X axis. + Scale value for Y axis. + Scale value for Z axis. + The scaling . + + + + Creates a new scaling . + + Scale value for X axis. + Scale value for Y axis. + Scale value for Z axis. + The scaling as an output parameter. + + + + Creates a new scaling . + + representing x,y and z scale values. + The scaling . + + + + Creates a new scaling . + + representing x,y and z scale values. + The scaling as an output parameter. + + + + Creates a new that flattens geometry into a specified as if casting a shadow from a specified light source. + + A vector specifying the direction from which the light that will cast the shadow is coming. + The plane onto which the new matrix should flatten geometry so as to cast a shadow. + A that can be used to flatten geometry onto the specified plane from the specified direction. + + + + Creates a new that flattens geometry into a specified as if casting a shadow from a specified light source. + + A vector specifying the direction from which the light that will cast the shadow is coming. + The plane onto which the new matrix should flatten geometry so as to cast a shadow. + A that can be used to flatten geometry onto the specified plane from the specified direction as an output parameter. + + + + Creates a new translation . + + X coordinate of translation. + Y coordinate of translation. + Z coordinate of translation. + The translation . + + + + Creates a new translation . + + X,Y and Z coordinates of translation. + The translation as an output parameter. + + + + Creates a new translation . + + X,Y and Z coordinates of translation. + The translation . + + + + Creates a new translation . + + X coordinate of translation. + Y coordinate of translation. + Z coordinate of translation. + The translation as an output parameter. + + + + Creates a new reflection . + + The plane that used for reflection calculation. + The reflection . + + + + Creates a new reflection . + + The plane that used for reflection calculation. + The reflection as an output parameter. + + + + Creates a new world . + + The position vector. + The forward direction vector. + The upward direction vector. Usually . + The world . + + + + Creates a new world . + + The position vector. + The forward direction vector. + The upward direction vector. Usually . + The world as an output parameter. + + + + Decomposes this matrix to translation, rotation and scale elements. Returns true if matrix can be decomposed; false otherwise. + + Scale vector as an output parameter. + Rotation quaternion as an output parameter. + Translation vector as an output parameter. + true if matrix can be decomposed; false otherwise. + + + + Returns a determinant of this . + + Determinant of this + See more about determinant here - http://en.wikipedia.org/wiki/Determinant. + + + + + Divides the elements of a by the elements of another matrix. + + Source . + Divisor . + The result of dividing the matrix. + + + + Divides the elements of a by the elements of another matrix. + + Source . + Divisor . + The result of dividing the matrix as an output parameter. + + + + Divides the elements of a by a scalar. + + Source . + Divisor scalar. + The result of dividing a matrix by a scalar. + + + + Divides the elements of a by a scalar. + + Source . + Divisor scalar. + The result of dividing a matrix by a scalar as an output parameter. + + + + Compares whether current instance is equal to specified without any tolerance. + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified without any tolerance. + + The to compare. + true if the instances are equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Creates a new which contains inversion of the specified matrix. + + Source . + The inverted matrix. + + + + Creates a new which contains inversion of the specified matrix. + + Source . + The inverted matrix as output parameter. + + + + Creates a new that contains linear interpolation of the values in specified matrixes. + + The first . + The second . + Weighting value(between 0.0 and 1.0). + >The result of linear interpolation of the specified matrixes. + + + + Creates a new that contains linear interpolation of the values in specified matrixes. + + The first . + The second . + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified matrixes as an output parameter. + + + + Creates a new that contains a multiplication of two matrix. + + Source . + Source . + Result of the matrix multiplication. + + + + Creates a new that contains a multiplication of two matrix. + + Source . + Source . + Result of the matrix multiplication as an output parameter. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + Result of the matrix multiplication with a scalar. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + Result of the matrix multiplication with a scalar as an output parameter. + + + + Copy the values of specified to the float array. + + The source . + The array which matrix values will be stored. + + Required for OpenGL 2.0 projection matrix stuff. + + + + + Returns a matrix with the all values negated. + + Source . + Result of the matrix negation. + + + + Returns a matrix with the all values negated. + + Source . + Result of the matrix negation as an output parameter. + + + + Adds two matrixes. + + Source on the left of the add sign. + Source on the right of the add sign. + Sum of the matrixes. + + + + Divides the elements of a by the elements of another . + + Source on the left of the div sign. + Divisor on the right of the div sign. + The result of dividing the matrixes. + + + + Divides the elements of a by a scalar. + + Source on the left of the div sign. + Divisor scalar on the right of the div sign. + The result of dividing a matrix by a scalar. + + + + Compares whether two instances are equal without any tolerance. + + Source on the left of the equal sign. + Source on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal without any tolerance. + + Source on the left of the not equal sign. + Source on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Multiplies two matrixes. + + Source on the left of the mul sign. + Source on the right of the mul sign. + Result of the matrix multiplication. + + Using matrix multiplication algorithm - see http://en.wikipedia.org/wiki/Matrix_multiplication. + + + + + Multiplies the elements of matrix by a scalar. + + Source on the left of the mul sign. + Scalar value on the right of the mul sign. + Result of the matrix multiplication with a scalar. + + + + Subtracts the values of one from another . + + Source on the left of the sub sign. + Source on the right of the sub sign. + Result of the matrix subtraction. + + + + Inverts values in the specified . + + Source on the right of the sub sign. + Result of the inversion. + + + + Creates a new that contains subtraction of one matrix from another. + + The first . + The second . + The result of the matrix subtraction. + + + + Creates a new that contains subtraction of one matrix from another. + + The first . + The second . + The result of the matrix subtraction as an output parameter. + + + + Returns a representation of this in the format: + {M11:[] M12:[] M13:[] M14:[]} + {M21:[] M12:[] M13:[] M14:[]} + {M31:[] M32:[] M33:[] M34:[]} + {M41:[] M42:[] M43:[] M44:[]} + + A representation of this . + + + + Swap the matrix rows and columns. + + The matrix for transposing operation. + The new which contains the transposing result. + + + + Swap the matrix rows and columns. + + The matrix for transposing operation. + The new which contains the transposing result as an output parameter. + + + + Helper method for using the Laplace expansion theorem using two rows expansions to calculate major and + minor determinants of a 4x4 matrix. This method is used for inverting a matrix. + + + + + The backward vector formed from the third row M31, M32, M33 elements. + + + + + The down vector formed from the second row -M21, -M22, -M23 elements. + + + + + The forward vector formed from the third row -M31, -M32, -M33 elements. + + + + + Returns the identity matrix. + + + + + The left vector formed from the first row -M11, -M12, -M13 elements. + + + + + The right vector formed from the first row M11, M12, M13 elements. + + + + + Position stored in this matrix. + + + + + The upper vector formed from the second row M21, M22, M23 elements. + + + + + Provides functionality to handle input from keyboards, mice, gamepads, etc. + + + + + Support for playing sound effects and XACT audio. + + + + + The runtime support for loading content pipeline content. + + + + + Returns a value indicating what side (positive/negative) of a plane a point is + + The point to check with + The plane to check against + Greater than zero if on the positive side, less than zero if on the negative size, 0 otherwise + + + + Returns the perpendicular distance from a point to a plane + + The point to check + The place to check + The perpendicular distance from the point to the plane + + + + Transforms a normalized plane by a matrix. + + The normalized plane to transform. + The transformation matrix. + The transformed plane. + + + + Transforms a normalized plane by a matrix. + + The normalized plane to transform. + The transformation matrix. + The transformed plane. + + + + Transforms a normalized plane by a quaternion rotation. + + The normalized plane to transform. + The quaternion rotation. + The transformed plane. + + + + Transforms a normalized plane by a quaternion rotation. + + The normalized plane to transform. + The quaternion rotation. + The transformed plane. + + + + Deconstruction method for . + + + + + + + Defines the intersection between a and a bounding volume. + + + + + There is no intersection, the bounding volume is in the negative half space of the plane. + + + + + There is no intersection, the bounding volume is in the positive half space of the plane. + + + + + The plane is intersected. + + + + + Defines the index of player for various MonoGame components. + + + + + The first player index. + + + + + The second player index. + + + + + The third player index. + + + + + The fourth player index. + + + + + Describes a 2D-point. + + + + + The x coordinate of this . + + + + + The y coordinate of this . + + + + + Constructs a point with X and Y from two values. + + The x coordinate in 2d-space. + The y coordinate in 2d-space. + + + + Constructs a point with X and Y set to the same value. + + The x and y coordinates in 2d-space. + + + + Adds two points. + + Source on the left of the add sign. + Source on the right of the add sign. + Sum of the points. + + + + Subtracts a from a . + + Source on the left of the sub sign. + Source on the right of the sub sign. + Result of the subtraction. + + + + Multiplies the components of two points by each other. + + Source on the left of the mul sign. + Source on the right of the mul sign. + Result of the multiplication. + + + + Divides the components of a by the components of another . + + Source on the left of the div sign. + Divisor on the right of the div sign. + The result of dividing the points. + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Returns a representation of this in the format: + {X:[] Y:[]} + + representation of this . + + + + Gets a representation for this object. + + A representation for this object. + + + + Deconstruction method for . + + + + + + + Returns a with coordinates 0, 0. + + + + + The arguments to the event. + + + + + Create a new instance of the event. + + The default settings to be used in device creation. + + + + The default settings that will be used in device creation. + + + + + An efficient mathematical representation for three dimensional rotations. + + + + + The x coordinate of this . + + + + + The y coordinate of this . + + + + + The z coordinate of this . + + + + + The rotation component of this . + + + + + Constructs a quaternion with X, Y, Z and W from four values. + + The x coordinate in 3d-space. + The y coordinate in 3d-space. + The z coordinate in 3d-space. + The rotation component. + + + + Constructs a quaternion with X, Y, Z from and rotation component from a scalar. + + The x, y, z coordinates in 3d-space. + The rotation component. + + + + Constructs a quaternion from . + + The x, y, z coordinates in 3d-space and the rotation component. + + + + Creates a new that contains the sum of two quaternions. + + Source . + Source . + The result of the quaternion addition. + + + + Creates a new that contains the sum of two quaternions. + + Source . + Source . + The result of the quaternion addition as an output parameter. + + + + Creates a new that contains concatenation between two quaternion. + + The first to concatenate. + The second to concatenate. + The result of rotation of followed by rotation. + + + + Creates a new that contains concatenation between two quaternion. + + The first to concatenate. + The second to concatenate. + The result of rotation of followed by rotation as an output parameter. + + + + Transforms this quaternion into its conjugated version. + + + + + Creates a new that contains conjugated version of the specified quaternion. + + The quaternion which values will be used to create the conjugated version. + The conjugate version of the specified quaternion. + + + + Creates a new that contains conjugated version of the specified quaternion. + + The quaternion which values will be used to create the conjugated version. + The conjugated version of the specified quaternion as an output parameter. + + + + Creates a new from the specified axis and angle. + + The axis of rotation. + The angle in radians. + The new quaternion builded from axis and angle. + + + + Creates a new from the specified axis and angle. + + The axis of rotation. + The angle in radians. + The new quaternion builded from axis and angle as an output parameter. + + + + Creates a new from the specified . + + The rotation matrix. + A quaternion composed from the rotation part of the matrix. + + + + Creates a new from the specified . + + The rotation matrix. + A quaternion composed from the rotation part of the matrix as an output parameter. + + + + Creates a new from the specified yaw, pitch and roll angles. + + Yaw around the y axis in radians. + Pitch around the x axis in radians. + Roll around the z axis in radians. + A new quaternion from the concatenated yaw, pitch, and roll angles. + + + + Creates a new from the specified yaw, pitch and roll angles. + + Yaw around the y axis in radians. + Pitch around the x axis in radians. + Roll around the z axis in radians. + A new quaternion from the concatenated yaw, pitch, and roll angles as an output parameter. + + + + Divides a by the other . + + Source . + Divisor . + The result of dividing the quaternions. + + + + Divides a by the other . + + Source . + Divisor . + The result of dividing the quaternions as an output parameter. + + + + Returns a dot product of two quaternions. + + The first quaternion. + The second quaternion. + The dot product of two quaternions. + + + + Returns a dot product of two quaternions. + + The first quaternion. + The second quaternion. + The dot product of two quaternions as an output parameter. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Returns the inverse quaternion which represents the opposite rotation. + + Source . + The inverse quaternion. + + + + Returns the inverse quaternion which represents the opposite rotation. + + Source . + The inverse quaternion as an output parameter. + + + + Returns the magnitude of the quaternion components. + + The magnitude of the quaternion components. + + + + Returns the squared magnitude of the quaternion components. + + The squared magnitude of the quaternion components. + + + + Performs a linear blend between two quaternions. + + Source . + Source . + The blend amount where 0 returns and 1 . + The result of linear blending between two quaternions. + + + + Performs a linear blend between two quaternions. + + Source . + Source . + The blend amount where 0 returns and 1 . + The result of linear blending between two quaternions as an output parameter. + + + + Performs a spherical linear blend between two quaternions. + + Source . + Source . + The blend amount where 0 returns and 1 . + The result of spherical linear blending between two quaternions. + + + + Performs a spherical linear blend between two quaternions. + + Source . + Source . + The blend amount where 0 returns and 1 . + The result of spherical linear blending between two quaternions as an output parameter. + + + + Creates a new that contains subtraction of one from another. + + Source . + Source . + The result of the quaternion subtraction. + + + + Creates a new that contains subtraction of one from another. + + Source . + Source . + The result of the quaternion subtraction as an output parameter. + + + + Creates a new that contains a multiplication of two quaternions. + + Source . + Source . + The result of the quaternion multiplication. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + The result of the quaternion multiplication with a scalar. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + The result of the quaternion multiplication with a scalar as an output parameter. + + + + Creates a new that contains a multiplication of two quaternions. + + Source . + Source . + The result of the quaternion multiplication as an output parameter. + + + + Flips the sign of the all the quaternion components. + + Source . + The result of the quaternion negation. + + + + Flips the sign of the all the quaternion components. + + Source . + The result of the quaternion negation as an output parameter. + + + + Scales the quaternion magnitude to unit length. + + + + + Scales the quaternion magnitude to unit length. + + Source . + The unit length quaternion. + + + + Scales the quaternion magnitude to unit length. + + Source . + The unit length quaternion an output parameter. + + + + Returns a representation of this in the format: + {X:[] Y:[] Z:[] W:[]} + + A representation of this . + + + + Gets a representation for this object. + + A representation for this object. + + + + Adds two quaternions. + + Source on the left of the add sign. + Source on the right of the add sign. + Sum of the vectors. + + + + Divides a by the other . + + Source on the left of the div sign. + Divisor on the right of the div sign. + The result of dividing the quaternions. + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Multiplies two quaternions. + + Source on the left of the mul sign. + Source on the right of the mul sign. + Result of the quaternions multiplication. + + + + Multiplies the components of quaternion by a scalar. + + Source on the left of the mul sign. + Scalar value on the right of the mul sign. + Result of the quaternion multiplication with a scalar. + + + + Subtracts a from a . + + Source on the left of the sub sign. + Source on the right of the sub sign. + Result of the quaternion subtraction. + + + + Flips the sign of the all the quaternion components. + + Source on the right of the sub sign. + The result of the quaternion negation. + + + + Returns a quaternion representing no rotation. + + + + + Deconstruction method for . + + Receives the start position of the ray. + Receives the direction of the ray. + + + + Describes a 2D-rectangle. + + + + + The x coordinate of the top-left corner of this . + + + + + The y coordinate of the top-left corner of this . + + + + + The width of this . + + + + + The height of this . + + + + + Creates a new instance of struct, with the specified + position, width, and height. + + The x coordinate of the top-left corner of the created . + The y coordinate of the top-left corner of the created . + The width of the created . + The height of the created . + + + + Creates a new instance of struct, with the specified + location and size. + + The x and y coordinates of the top-left corner of the created . + The width and height of the created . + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Gets whether or not the provided coordinates lie within the bounds of this . + + The x coordinate of the point to check for containment. + The y coordinate of the point to check for containment. + true if the provided coordinates lie inside this ; false otherwise. + + + + Gets whether or not the provided coordinates lie within the bounds of this . + + The x coordinate of the point to check for containment. + The y coordinate of the point to check for containment. + true if the provided coordinates lie inside this ; false otherwise. + + + + Gets whether or not the provided lies within the bounds of this . + + The coordinates to check for inclusion in this . + true if the provided lies inside this ; false otherwise. + + + + Gets whether or not the provided lies within the bounds of this . + + The coordinates to check for inclusion in this . + true if the provided lies inside this ; false otherwise. As an output parameter. + + + + Gets whether or not the provided lies within the bounds of this . + + The coordinates to check for inclusion in this . + true if the provided lies inside this ; false otherwise. + + + + Gets whether or not the provided lies within the bounds of this . + + The coordinates to check for inclusion in this . + true if the provided lies inside this ; false otherwise. As an output parameter. + + + + Gets whether or not the provided lies within the bounds of this . + + The to check for inclusion in this . + true if the provided 's bounds lie entirely inside this ; false otherwise. + + + + Gets whether or not the provided lies within the bounds of this . + + The to check for inclusion in this . + true if the provided 's bounds lie entirely inside this ; false otherwise. As an output parameter. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Adjusts the edges of this by specified horizontal and vertical amounts. + + Value to adjust the left and right edges. + Value to adjust the top and bottom edges. + + + + Adjusts the edges of this by specified horizontal and vertical amounts. + + Value to adjust the left and right edges. + Value to adjust the top and bottom edges. + + + + Gets whether or not the other intersects with this rectangle. + + The other rectangle for testing. + true if other intersects with this rectangle; false otherwise. + + + + Gets whether or not the other intersects with this rectangle. + + The other rectangle for testing. + true if other intersects with this rectangle; false otherwise. As an output parameter. + + + + Creates a new that contains overlapping region of two other rectangles. + + The first . + The second . + Overlapping region of the two rectangles. + + + + Creates a new that contains overlapping region of two other rectangles. + + The first . + The second . + Overlapping region of the two rectangles as an output parameter. + + + + Changes the of this . + + The x coordinate to add to this . + The y coordinate to add to this . + + + + Changes the of this . + + The x coordinate to add to this . + The y coordinate to add to this . + + + + Changes the of this . + + The x and y components to add to this . + + + + Changes the of this . + + The x and y components to add to this . + + + + Returns a representation of this in the format: + {X:[] Y:[] Width:[] Height:[]} + + representation of this . + + + + Creates a new that completely contains two other rectangles. + + The first . + The second . + The union of the two rectangles. + + + + Creates a new that completely contains two other rectangles. + + The first . + The second . + The union of the two rectangles as an output parameter. + + + + Deconstruction method for . + + + + + + + + + Returns a with X=0, Y=0, Width=0, Height=0. + + + + + Returns the x coordinate of the left edge of this . + + + + + Returns the x coordinate of the right edge of this . + + + + + Returns the y coordinate of the top edge of this . + + + + + Returns the y coordinate of the bottom edge of this . + + + + + Whether or not this has a and + of 0, and a of (0, 0). + + + + + The top-left coordinates of this . + + + + + The width-height coordinates of this . + + + + + A located in the center of this . + + + If or is an odd number, + the center point will be rounded down. + + + + + This class is used for the game window's TextInput event as EventArgs. + + + + + Returns an open stream to an exsiting file in the title storage area. + + The filepath relative to the title storage area. + A open stream or null if the file is not found. + + + + Describes a 2D-vector. + + + + + The x coordinate of this . + + + + + The y coordinate of this . + + + + + Constructs a 2d vector with X and Y from two values. + + The x coordinate in 2d-space. + The y coordinate in 2d-space. + + + + Constructs a 2d vector with X and Y set to the same value. + + The x and y coordinates in 2d-space. + + + + Inverts values in the specified . + + Source on the right of the sub sign. + Result of the inversion. + + + + Adds two vectors. + + Source on the left of the add sign. + Source on the right of the add sign. + Sum of the vectors. + + + + Subtracts a from a . + + Source on the left of the sub sign. + Source on the right of the sub sign. + Result of the vector subtraction. + + + + Multiplies the components of two vectors by each other. + + Source on the left of the mul sign. + Source on the right of the mul sign. + Result of the vector multiplication. + + + + Multiplies the components of vector by a scalar. + + Source on the left of the mul sign. + Scalar value on the right of the mul sign. + Result of the vector multiplication with a scalar. + + + + Multiplies the components of vector by a scalar. + + Scalar value on the left of the mul sign. + Source on the right of the mul sign. + Result of the vector multiplication with a scalar. + + + + Divides the components of a by the components of another . + + Source on the left of the div sign. + Divisor on the right of the div sign. + The result of dividing the vectors. + + + + Divides the components of a by a scalar. + + Source on the left of the div sign. + Divisor scalar on the right of the div sign. + The result of dividing a vector by a scalar. + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Performs vector addition on and . + + The first vector to add. + The second vector to add. + The result of the vector addition. + + + + Performs vector addition on and + , storing the result of the + addition in . + + The first vector to add. + The second vector to add. + The result of the vector addition. + + + + Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 2d-triangle. + + The first vector of 2d-triangle. + The second vector of 2d-triangle. + The third vector of 2d-triangle. + Barycentric scalar b2 which represents a weighting factor towards second vector of 2d-triangle. + Barycentric scalar b3 which represents a weighting factor towards third vector of 2d-triangle. + The cartesian translation of barycentric coordinates. + + + + Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 2d-triangle. + + The first vector of 2d-triangle. + The second vector of 2d-triangle. + The third vector of 2d-triangle. + Barycentric scalar b2 which represents a weighting factor towards second vector of 2d-triangle. + Barycentric scalar b3 which represents a weighting factor towards third vector of 2d-triangle. + The cartesian translation of barycentric coordinates as an output parameter. + + + + Creates a new that contains CatmullRom interpolation of the specified vectors. + + The first vector in interpolation. + The second vector in interpolation. + The third vector in interpolation. + The fourth vector in interpolation. + Weighting factor. + The result of CatmullRom interpolation. + + + + Creates a new that contains CatmullRom interpolation of the specified vectors. + + The first vector in interpolation. + The second vector in interpolation. + The third vector in interpolation. + The fourth vector in interpolation. + Weighting factor. + The result of CatmullRom interpolation as an output parameter. + + + + Clamps the specified value within a range. + + The value to clamp. + The min value. + The max value. + The clamped value. + + + + Clamps the specified value within a range. + + The value to clamp. + The min value. + The max value. + The clamped value as an output parameter. + + + + Returns the distance between two vectors. + + The first vector. + The second vector. + The distance between two vectors. + + + + Returns the distance between two vectors. + + The first vector. + The second vector. + The distance between two vectors as an output parameter. + + + + Returns the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between two vectors. + + + + Returns the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between two vectors as an output parameter. + + + + Divides the components of a by the components of another . + + Source . + Divisor . + The result of dividing the vectors. + + + + Divides the components of a by the components of another . + + Source . + Divisor . + The result of dividing the vectors as an output parameter. + + + + Divides the components of a by a scalar. + + Source . + Divisor scalar. + The result of dividing a vector by a scalar. + + + + Divides the components of a by a scalar. + + Source . + Divisor scalar. + The result of dividing a vector by a scalar as an output parameter. + + + + Returns a dot product of two vectors. + + The first vector. + The second vector. + The dot product of two vectors. + + + + Returns a dot product of two vectors. + + The first vector. + The second vector. + The dot product of two vectors as an output parameter. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Creates a new that contains hermite spline interpolation. + + The first position vector. + The first tangent vector. + The second position vector. + The second tangent vector. + Weighting factor. + The hermite spline interpolation vector. + + + + Creates a new that contains hermite spline interpolation. + + The first position vector. + The first tangent vector. + The second position vector. + The second tangent vector. + Weighting factor. + The hermite spline interpolation vector as an output parameter. + + + + Returns the length of this . + + The length of this . + + + + Returns the squared length of this . + + The squared length of this . + + + + Creates a new that contains linear interpolation of the specified vectors. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors. + + + + Creates a new that contains linear interpolation of the specified vectors. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains linear interpolation of the specified vectors. + Uses on MathHelper for the interpolation. + Less efficient but more precise compared to . + See remarks section of on MathHelper for more info. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors. + + + + Creates a new that contains linear interpolation of the specified vectors. + Uses on MathHelper for the interpolation. + Less efficient but more precise compared to . + See remarks section of on MathHelper for more info. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains a maximal values from the two vectors. + + The first vector. + The second vector. + The with maximal values from the two vectors. + + + + Creates a new that contains a maximal values from the two vectors. + + The first vector. + The second vector. + The with maximal values from the two vectors as an output parameter. + + + + Creates a new that contains a minimal values from the two vectors. + + The first vector. + The second vector. + The with minimal values from the two vectors. + + + + Creates a new that contains a minimal values from the two vectors. + + The first vector. + The second vector. + The with minimal values from the two vectors as an output parameter. + + + + Creates a new that contains a multiplication of two vectors. + + Source . + Source . + The result of the vector multiplication. + + + + Creates a new that contains a multiplication of two vectors. + + Source . + Source . + The result of the vector multiplication as an output parameter. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + The result of the vector multiplication with a scalar. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + The result of the multiplication with a scalar as an output parameter. + + + + Creates a new that contains the specified vector inversion. + + Source . + The result of the vector inversion. + + + + Creates a new that contains the specified vector inversion. + + Source . + The result of the vector inversion as an output parameter. + + + + Turns this to a unit vector with the same direction. + + + + + Creates a new that contains a normalized values from another vector. + + Source . + Unit vector. + + + + Creates a new that contains a normalized values from another vector. + + Source . + Unit vector as an output parameter. + + + + Creates a new that contains reflect vector of the given vector and normal. + + Source . + Reflection normal. + Reflected vector. + + + + Creates a new that contains reflect vector of the given vector and normal. + + Source . + Reflection normal. + Reflected vector as an output parameter. + + + + Creates a new that contains cubic interpolation of the specified vectors. + + Source . + Source . + Weighting value. + Cubic interpolation of the specified vectors. + + + + Creates a new that contains cubic interpolation of the specified vectors. + + Source . + Source . + Weighting value. + Cubic interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains subtraction of on from a another. + + Source . + Source . + The result of the vector subtraction. + + + + Creates a new that contains subtraction of on from a another. + + Source . + Source . + The result of the vector subtraction as an output parameter. + + + + Returns a representation of this in the format: + {X:[] Y:[]} + + A representation of this . + + + + Gets a representation for this object. + + A representation for this object. + + + + Creates a new that contains a transformation of 2d-vector by the specified . + + Source . + The transformation . + Transformed . + + + + Creates a new that contains a transformation of 2d-vector by the specified . + + Source . + The transformation . + Transformed as an output parameter. + + + + Creates a new that contains a transformation of 2d-vector by the specified , representing the rotation. + + Source . + The which contains rotation transformation. + Transformed . + + + + Creates a new that contains a transformation of 2d-vector by the specified , representing the rotation. + + Source . + The which contains rotation transformation. + Transformed as an output parameter. + + + + Apply transformation on vectors within array of by the specified and places the results in an another array. + + Source array. + The starting index of transformation in the source array. + The transformation . + Destination array. + The starting index in the destination array, where the first should be written. + The number of vectors to be transformed. + + + + Apply transformation on vectors within array of by the specified and places the results in an another array. + + Source array. + The starting index of transformation in the source array. + The which contains rotation transformation. + Destination array. + The starting index in the destination array, where the first should be written. + The number of vectors to be transformed. + + + + Apply transformation on all vectors within array of by the specified and places the results in an another array. + + Source array. + The transformation . + Destination array. + + + + Apply transformation on all vectors within array of by the specified and places the results in an another array. + + Source array. + The which contains rotation transformation. + Destination array. + + + + Creates a new that contains a transformation of the specified normal by the specified . + + Source which represents a normal vector. + The transformation . + Transformed normal. + + + + Creates a new that contains a transformation of the specified normal by the specified . + + Source which represents a normal vector. + The transformation . + Transformed normal as an output parameter. + + + + Apply transformation on normals within array of by the specified and places the results in an another array. + + Source array. + The starting index of transformation in the source array. + The transformation . + Destination array. + The starting index in the destination array, where the first should be written. + The number of normals to be transformed. + + + + Apply transformation on all normals within array of by the specified and places the results in an another array. + + Source array. + The transformation . + Destination array. + + + + Deconstruction method for . + + + + + + + Returns a with components 0, 0. + + + + + Returns a with components 1, 1. + + + + + Returns a with components 1, 0. + + + + + Returns a with components 0, 1. + + + + + Describes a 3D-vector. + + + + + The x coordinate of this . + + + + + The y coordinate of this . + + + + + The z coordinate of this . + + + + + Constructs a 3d vector with X, Y and Z from three values. + + The x coordinate in 3d-space. + The y coordinate in 3d-space. + The z coordinate in 3d-space. + + + + Constructs a 3d vector with X, Y and Z set to the same value. + + The x, y and z coordinates in 3d-space. + + + + Constructs a 3d vector with X, Y from and Z from a scalar. + + The x and y coordinates in 3d-space. + The z coordinate in 3d-space. + + + + Performs vector addition on and . + + The first vector to add. + The second vector to add. + The result of the vector addition. + + + + Performs vector addition on and + , storing the result of the + addition in . + + The first vector to add. + The second vector to add. + The result of the vector addition. + + + + Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 3d-triangle. + + The first vector of 3d-triangle. + The second vector of 3d-triangle. + The third vector of 3d-triangle. + Barycentric scalar b2 which represents a weighting factor towards second vector of 3d-triangle. + Barycentric scalar b3 which represents a weighting factor towards third vector of 3d-triangle. + The cartesian translation of barycentric coordinates. + + + + Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 3d-triangle. + + The first vector of 3d-triangle. + The second vector of 3d-triangle. + The third vector of 3d-triangle. + Barycentric scalar b2 which represents a weighting factor towards second vector of 3d-triangle. + Barycentric scalar b3 which represents a weighting factor towards third vector of 3d-triangle. + The cartesian translation of barycentric coordinates as an output parameter. + + + + Creates a new that contains CatmullRom interpolation of the specified vectors. + + The first vector in interpolation. + The second vector in interpolation. + The third vector in interpolation. + The fourth vector in interpolation. + Weighting factor. + The result of CatmullRom interpolation. + + + + Creates a new that contains CatmullRom interpolation of the specified vectors. + + The first vector in interpolation. + The second vector in interpolation. + The third vector in interpolation. + The fourth vector in interpolation. + Weighting factor. + The result of CatmullRom interpolation as an output parameter. + + + + Clamps the specified value within a range. + + The value to clamp. + The min value. + The max value. + The clamped value. + + + + Clamps the specified value within a range. + + The value to clamp. + The min value. + The max value. + The clamped value as an output parameter. + + + + Computes the cross product of two vectors. + + The first vector. + The second vector. + The cross product of two vectors. + + + + Computes the cross product of two vectors. + + The first vector. + The second vector. + The cross product of two vectors as an output parameter. + + + + Returns the distance between two vectors. + + The first vector. + The second vector. + The distance between two vectors. + + + + Returns the distance between two vectors. + + The first vector. + The second vector. + The distance between two vectors as an output parameter. + + + + Returns the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between two vectors. + + + + Returns the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between two vectors as an output parameter. + + + + Divides the components of a by the components of another . + + Source . + Divisor . + The result of dividing the vectors. + + + + Divides the components of a by a scalar. + + Source . + Divisor scalar. + The result of dividing a vector by a scalar. + + + + Divides the components of a by a scalar. + + Source . + Divisor scalar. + The result of dividing a vector by a scalar as an output parameter. + + + + Divides the components of a by the components of another . + + Source . + Divisor . + The result of dividing the vectors as an output parameter. + + + + Returns a dot product of two vectors. + + The first vector. + The second vector. + The dot product of two vectors. + + + + Returns a dot product of two vectors. + + The first vector. + The second vector. + The dot product of two vectors as an output parameter. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Creates a new that contains hermite spline interpolation. + + The first position vector. + The first tangent vector. + The second position vector. + The second tangent vector. + Weighting factor. + The hermite spline interpolation vector. + + + + Creates a new that contains hermite spline interpolation. + + The first position vector. + The first tangent vector. + The second position vector. + The second tangent vector. + Weighting factor. + The hermite spline interpolation vector as an output parameter. + + + + Returns the length of this . + + The length of this . + + + + Returns the squared length of this . + + The squared length of this . + + + + Creates a new that contains linear interpolation of the specified vectors. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors. + + + + Creates a new that contains linear interpolation of the specified vectors. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains linear interpolation of the specified vectors. + Uses on MathHelper for the interpolation. + Less efficient but more precise compared to . + See remarks section of on MathHelper for more info. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors. + + + + Creates a new that contains linear interpolation of the specified vectors. + Uses on MathHelper for the interpolation. + Less efficient but more precise compared to . + See remarks section of on MathHelper for more info. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains a maximal values from the two vectors. + + The first vector. + The second vector. + The with maximal values from the two vectors. + + + + Creates a new that contains a maximal values from the two vectors. + + The first vector. + The second vector. + The with maximal values from the two vectors as an output parameter. + + + + Creates a new that contains a minimal values from the two vectors. + + The first vector. + The second vector. + The with minimal values from the two vectors. + + + + Creates a new that contains a minimal values from the two vectors. + + The first vector. + The second vector. + The with minimal values from the two vectors as an output parameter. + + + + Creates a new that contains a multiplication of two vectors. + + Source . + Source . + The result of the vector multiplication. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + The result of the vector multiplication with a scalar. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + The result of the multiplication with a scalar as an output parameter. + + + + Creates a new that contains a multiplication of two vectors. + + Source . + Source . + The result of the vector multiplication as an output parameter. + + + + Creates a new that contains the specified vector inversion. + + Source . + The result of the vector inversion. + + + + Creates a new that contains the specified vector inversion. + + Source . + The result of the vector inversion as an output parameter. + + + + Turns this to a unit vector with the same direction. + + + + + Creates a new that contains a normalized values from another vector. + + Source . + Unit vector. + + + + Creates a new that contains a normalized values from another vector. + + Source . + Unit vector as an output parameter. + + + + Creates a new that contains reflect vector of the given vector and normal. + + Source . + Reflection normal. + Reflected vector. + + + + Creates a new that contains reflect vector of the given vector and normal. + + Source . + Reflection normal. + Reflected vector as an output parameter. + + + + Creates a new that contains cubic interpolation of the specified vectors. + + Source . + Source . + Weighting value. + Cubic interpolation of the specified vectors. + + + + Creates a new that contains cubic interpolation of the specified vectors. + + Source . + Source . + Weighting value. + Cubic interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains subtraction of on from a another. + + Source . + Source . + The result of the vector subtraction. + + + + Creates a new that contains subtraction of on from a another. + + Source . + Source . + The result of the vector subtraction as an output parameter. + + + + Returns a representation of this in the format: + {X:[] Y:[] Z:[]} + + A representation of this . + + + + Creates a new that contains a transformation of 3d-vector by the specified . + + Source . + The transformation . + Transformed . + + + + Creates a new that contains a transformation of 3d-vector by the specified . + + Source . + The transformation . + Transformed as an output parameter. + + + + Creates a new that contains a transformation of 3d-vector by the specified , representing the rotation. + + Source . + The which contains rotation transformation. + Transformed . + + + + Creates a new that contains a transformation of 3d-vector by the specified , representing the rotation. + + Source . + The which contains rotation transformation. + Transformed as an output parameter. + + + + Apply transformation on vectors within array of by the specified and places the results in an another array. + + Source array. + The starting index of transformation in the source array. + The transformation . + Destination array. + The starting index in the destination array, where the first should be written. + The number of vectors to be transformed. + + + + Apply transformation on vectors within array of by the specified and places the results in an another array. + + Source array. + The starting index of transformation in the source array. + The which contains rotation transformation. + Destination array. + The starting index in the destination array, where the first should be written. + The number of vectors to be transformed. + + + + Apply transformation on all vectors within array of by the specified and places the results in an another array. + + Source array. + The transformation . + Destination array. + + + + Apply transformation on all vectors within array of by the specified and places the results in an another array. + + Source array. + The which contains rotation transformation. + Destination array. + + + + Creates a new that contains a transformation of the specified normal by the specified . + + Source which represents a normal vector. + The transformation . + Transformed normal. + + + + Creates a new that contains a transformation of the specified normal by the specified . + + Source which represents a normal vector. + The transformation . + Transformed normal as an output parameter. + + + + Apply transformation on normals within array of by the specified and places the results in an another array. + + Source array. + The starting index of transformation in the source array. + The transformation . + Destination array. + The starting index in the destination array, where the first should be written. + The number of normals to be transformed. + + + + Apply transformation on all normals within array of by the specified and places the results in an another array. + + Source array. + The transformation . + Destination array. + + + + Deconstruction method for . + + + + + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Adds two vectors. + + Source on the left of the add sign. + Source on the right of the add sign. + Sum of the vectors. + + + + Inverts values in the specified . + + Source on the right of the sub sign. + Result of the inversion. + + + + Subtracts a from a . + + Source on the left of the sub sign. + Source on the right of the sub sign. + Result of the vector subtraction. + + + + Multiplies the components of two vectors by each other. + + Source on the left of the mul sign. + Source on the right of the mul sign. + Result of the vector multiplication. + + + + Multiplies the components of vector by a scalar. + + Source on the left of the mul sign. + Scalar value on the right of the mul sign. + Result of the vector multiplication with a scalar. + + + + Multiplies the components of vector by a scalar. + + Scalar value on the left of the mul sign. + Source on the right of the mul sign. + Result of the vector multiplication with a scalar. + + + + Divides the components of a by the components of another . + + Source on the left of the div sign. + Divisor on the right of the div sign. + The result of dividing the vectors. + + + + Divides the components of a by a scalar. + + Source on the left of the div sign. + Divisor scalar on the right of the div sign. + The result of dividing a vector by a scalar. + + + + Returns a with components 0, 0, 0. + + + + + Returns a with components 1, 1, 1. + + + + + Returns a with components 1, 0, 0. + + + + + Returns a with components 0, 1, 0. + + + + + Returns a with components 0, 0, 1. + + + + + Returns a with components 0, 1, 0. + + + + + Returns a with components 0, -1, 0. + + + + + Returns a with components 1, 0, 0. + + + + + Returns a with components -1, 0, 0. + + + + + Returns a with components 0, 0, -1. + + + + + Returns a with components 0, 0, 1. + + + + + Describes a 4D-vector. + + + + + The x coordinate of this . + + + + + The y coordinate of this . + + + + + The z coordinate of this . + + + + + The w coordinate of this . + + + + + Constructs a 3d vector with X, Y, Z and W from four values. + + The x coordinate in 4d-space. + The y coordinate in 4d-space. + The z coordinate in 4d-space. + The w coordinate in 4d-space. + + + + Constructs a 3d vector with X and Z from and Z and W from the scalars. + + The x and y coordinates in 4d-space. + The z coordinate in 4d-space. + The w coordinate in 4d-space. + + + + Constructs a 3d vector with X, Y, Z from and W from a scalar. + + The x, y and z coordinates in 4d-space. + The w coordinate in 4d-space. + + + + Constructs a 4d vector with X, Y, Z and W set to the same value. + + The x, y, z and w coordinates in 4d-space. + + + + Performs vector addition on and . + + The first vector to add. + The second vector to add. + The result of the vector addition. + + + + Performs vector addition on and + , storing the result of the + addition in . + + The first vector to add. + The second vector to add. + The result of the vector addition. + + + + Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 4d-triangle. + + The first vector of 4d-triangle. + The second vector of 4d-triangle. + The third vector of 4d-triangle. + Barycentric scalar b2 which represents a weighting factor towards second vector of 4d-triangle. + Barycentric scalar b3 which represents a weighting factor towards third vector of 4d-triangle. + The cartesian translation of barycentric coordinates. + + + + Creates a new that contains the cartesian coordinates of a vector specified in barycentric coordinates and relative to 4d-triangle. + + The first vector of 4d-triangle. + The second vector of 4d-triangle. + The third vector of 4d-triangle. + Barycentric scalar b2 which represents a weighting factor towards second vector of 4d-triangle. + Barycentric scalar b3 which represents a weighting factor towards third vector of 4d-triangle. + The cartesian translation of barycentric coordinates as an output parameter. + + + + Creates a new that contains CatmullRom interpolation of the specified vectors. + + The first vector in interpolation. + The second vector in interpolation. + The third vector in interpolation. + The fourth vector in interpolation. + Weighting factor. + The result of CatmullRom interpolation. + + + + Creates a new that contains CatmullRom interpolation of the specified vectors. + + The first vector in interpolation. + The second vector in interpolation. + The third vector in interpolation. + The fourth vector in interpolation. + Weighting factor. + The result of CatmullRom interpolation as an output parameter. + + + + Clamps the specified value within a range. + + The value to clamp. + The min value. + The max value. + The clamped value. + + + + Clamps the specified value within a range. + + The value to clamp. + The min value. + The max value. + The clamped value as an output parameter. + + + + Returns the distance between two vectors. + + The first vector. + The second vector. + The distance between two vectors. + + + + Returns the distance between two vectors. + + The first vector. + The second vector. + The distance between two vectors as an output parameter. + + + + Returns the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between two vectors. + + + + Returns the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between two vectors as an output parameter. + + + + Divides the components of a by the components of another . + + Source . + Divisor . + The result of dividing the vectors. + + + + Divides the components of a by a scalar. + + Source . + Divisor scalar. + The result of dividing a vector by a scalar. + + + + Divides the components of a by a scalar. + + Source . + Divisor scalar. + The result of dividing a vector by a scalar as an output parameter. + + + + Divides the components of a by the components of another . + + Source . + Divisor . + The result of dividing the vectors as an output parameter. + + + + Returns a dot product of two vectors. + + The first vector. + The second vector. + The dot product of two vectors. + + + + Returns a dot product of two vectors. + + The first vector. + The second vector. + The dot product of two vectors as an output parameter. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Compares whether current instance is equal to specified . + + The to compare. + true if the instances are equal; false otherwise. + + + + Gets the hash code of this . + + Hash code of this . + + + + Creates a new that contains hermite spline interpolation. + + The first position vector. + The first tangent vector. + The second position vector. + The second tangent vector. + Weighting factor. + The hermite spline interpolation vector. + + + + Creates a new that contains hermite spline interpolation. + + The first position vector. + The first tangent vector. + The second position vector. + The second tangent vector. + Weighting factor. + The hermite spline interpolation vector as an output parameter. + + + + Returns the length of this . + + The length of this . + + + + Returns the squared length of this . + + The squared length of this . + + + + Creates a new that contains linear interpolation of the specified vectors. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors. + + + + Creates a new that contains linear interpolation of the specified vectors. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains linear interpolation of the specified vectors. + Uses on MathHelper for the interpolation. + Less efficient but more precise compared to . + See remarks section of on MathHelper for more info. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors. + + + + Creates a new that contains linear interpolation of the specified vectors. + Uses on MathHelper for the interpolation. + Less efficient but more precise compared to . + See remarks section of on MathHelper for more info. + + The first vector. + The second vector. + Weighting value(between 0.0 and 1.0). + The result of linear interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains a maximal values from the two vectors. + + The first vector. + The second vector. + The with maximal values from the two vectors. + + + + Creates a new that contains a maximal values from the two vectors. + + The first vector. + The second vector. + The with maximal values from the two vectors as an output parameter. + + + + Creates a new that contains a minimal values from the two vectors. + + The first vector. + The second vector. + The with minimal values from the two vectors. + + + + Creates a new that contains a minimal values from the two vectors. + + The first vector. + The second vector. + The with minimal values from the two vectors as an output parameter. + + + + Creates a new that contains a multiplication of two vectors. + + Source . + Source . + The result of the vector multiplication. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + The result of the vector multiplication with a scalar. + + + + Creates a new that contains a multiplication of and a scalar. + + Source . + Scalar value. + The result of the multiplication with a scalar as an output parameter. + + + + Creates a new that contains a multiplication of two vectors. + + Source . + Source . + The result of the vector multiplication as an output parameter. + + + + Creates a new that contains the specified vector inversion. + + Source . + The result of the vector inversion. + + + + Creates a new that contains the specified vector inversion. + + Source . + The result of the vector inversion as an output parameter. + + + + Turns this to a unit vector with the same direction. + + + + + Creates a new that contains a normalized values from another vector. + + Source . + Unit vector. + + + + Creates a new that contains a normalized values from another vector. + + Source . + Unit vector as an output parameter. + + + + Creates a new that contains cubic interpolation of the specified vectors. + + Source . + Source . + Weighting value. + Cubic interpolation of the specified vectors. + + + + Creates a new that contains cubic interpolation of the specified vectors. + + Source . + Source . + Weighting value. + Cubic interpolation of the specified vectors as an output parameter. + + + + Creates a new that contains subtraction of on from a another. + + Source . + Source . + The result of the vector subtraction. + + + + Creates a new that contains subtraction of on from a another. + + Source . + Source . + The result of the vector subtraction as an output parameter. + + + + Creates a new that contains a transformation of 2d-vector by the specified . + + Source . + The transformation . + Transformed . + + + + Creates a new that contains a transformation of 2d-vector by the specified . + + Source . + The which contains rotation transformation. + Transformed . + + + + Creates a new that contains a transformation of 3d-vector by the specified . + + Source . + The transformation . + Transformed . + + + + Creates a new that contains a transformation of 3d-vector by the specified . + + Source . + The which contains rotation transformation. + Transformed . + + + + Creates a new that contains a transformation of 4d-vector by the specified . + + Source . + The transformation . + Transformed . + + + + Creates a new that contains a transformation of 4d-vector by the specified . + + Source . + The which contains rotation transformation. + Transformed . + + + + Creates a new that contains a transformation of 2d-vector by the specified . + + Source . + The transformation . + Transformed as an output parameter. + + + + Creates a new that contains a transformation of 2d-vector by the specified . + + Source . + The which contains rotation transformation. + Transformed as an output parameter. + + + + Creates a new that contains a transformation of 3d-vector by the specified . + + Source . + The transformation . + Transformed as an output parameter. + + + + Creates a new that contains a transformation of 3d-vector by the specified . + + Source . + The which contains rotation transformation. + Transformed as an output parameter. + + + + Creates a new that contains a transformation of 4d-vector by the specified . + + Source . + The transformation . + Transformed as an output parameter. + + + + Creates a new that contains a transformation of 4d-vector by the specified . + + Source . + The which contains rotation transformation. + Transformed as an output parameter. + + + + Apply transformation on vectors within array of by the specified and places the results in an another array. + + Source array. + The starting index of transformation in the source array. + The transformation . + Destination array. + The starting index in the destination array, where the first should be written. + The number of vectors to be transformed. + + + + Apply transformation on vectors within array of by the specified and places the results in an another array. + + Source array. + The starting index of transformation in the source array. + The which contains rotation transformation. + Destination array. + The starting index in the destination array, where the first should be written. + The number of vectors to be transformed. + + + + Apply transformation on all vectors within array of by the specified and places the results in an another array. + + Source array. + The transformation . + Destination array. + + + + Apply transformation on all vectors within array of by the specified and places the results in an another array. + + Source array. + The which contains rotation transformation. + Destination array. + + + + Returns a representation of this in the format: + {X:[] Y:[] Z:[] W:[]} + + A representation of this . + + + + Deconstruction method for . + + + + + + + + + Inverts values in the specified . + + Source on the right of the sub sign. + Result of the inversion. + + + + Compares whether two instances are equal. + + instance on the left of the equal sign. + instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance on the left of the not equal sign. + instance on the right of the not equal sign. + true if the instances are not equal; false otherwise. + + + + Adds two vectors. + + Source on the left of the add sign. + Source on the right of the add sign. + Sum of the vectors. + + + + Subtracts a from a . + + Source on the left of the sub sign. + Source on the right of the sub sign. + Result of the vector subtraction. + + + + Multiplies the components of two vectors by each other. + + Source on the left of the mul sign. + Source on the right of the mul sign. + Result of the vector multiplication. + + + + Multiplies the components of vector by a scalar. + + Source on the left of the mul sign. + Scalar value on the right of the mul sign. + Result of the vector multiplication with a scalar. + + + + Multiplies the components of vector by a scalar. + + Scalar value on the left of the mul sign. + Source on the right of the mul sign. + Result of the vector multiplication with a scalar. + + + + Divides the components of a by the components of another . + + Source on the left of the div sign. + Divisor on the right of the div sign. + The result of dividing the vectors. + + + + Divides the components of a by a scalar. + + Source on the left of the div sign. + Divisor scalar on the right of the div sign. + The result of dividing a vector by a scalar. + + + + Returns a with components 0, 0, 0, 0. + + + + + Returns a with components 1, 1, 1, 1. + + + + + Returns a with components 1, 0, 0, 0. + + + + + Returns a with components 0, 1, 0, 0. + + + + + Returns a with components 0, 0, 1, 0. + + + + + Returns a with components 0, 0, 0, 1. + + + + + Represents how many channels are used in the audio data. + + + + Single channel. + + + Two channels. + + + + Represents a 3D audio emitter. Used to simulate 3D audio effects. + + + + Initializes a new AudioEmitter instance. + + + Gets or sets a scale applied to the Doppler effect between the AudioEmitter and an AudioListener. + + Defaults to 1.0 + A value of 1.0 leaves the Doppler effect unmodified. + + + + Gets or sets the emitter's forward vector. + + Defaults to Vector3.Forward. (new Vector3(0, 0, -1)) + Used with AudioListener.Velocity to calculate Doppler values. + The Forward and Up values must be orthonormal. + + + + Gets or sets the position of this emitter. + + + Gets or sets the emitter's Up vector. + + Defaults to Vector3.Up. (new Vector3(0, -1, 1)). + The Up and Forward vectors must be orthonormal. + + + + Gets or sets the emitter's velocity vector. + + Defaults to Vector3.Zero. + This value is only used when calculating Doppler values. + + + + + Represents a 3D audio listener. Used when simulating 3D Audio. + + + + Gets or sets the listener's forward vector. + + Defaults to Vector3.Forward. (new Vector3(0, 0, -1)) + Used with AudioListener.Velocity and AudioEmitter.Velocity to calculate Doppler values. + The Forward and Up vectors must be orthonormal. + + + + Gets or sets the listener's position. + + Defaults to Vector3.Zero. + + + + + Gets or sets the listener's up vector.. + + + Defaults to Vector3.Up (New Vector3(0, -1, 0)). + Used with AudioListener.Velocity and AudioEmitter.Velocity to calculate Doppler values. + The values of the Forward and Up vectors must be orthonormal. + + + + Gets or sets the listener's velocity vector. + + Defaults to Vector3.Zero. + Scaled by DopplerScale to calculate the Doppler effect value applied to a Cue. + This value is only used to calculate Doppler values. + + + + + A for which the audio buffer is provided by the game at run time. + + + + Represents a single instance of a playing, paused, or stopped sound. + + SoundEffectInstances are created through SoundEffect.CreateInstance() and used internally by SoundEffect.Play() + + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + Applies 3D positioning to the SoundEffectInstance using a single listener. + Data about the listener. + Data about the source of emission. + + + Applies 3D positioning to the SoundEffectInstance using multiple listeners. + Data about each listener. + Data about the source of emission. + + + Pauses playback of a SoundEffectInstance. + Paused instances can be resumed with SoundEffectInstance.Play() or SoundEffectInstance.Resume(). + + + Plays or resumes a SoundEffectInstance. + Throws an exception if more sounds are playing than the platform allows. + + + Resumes playback for a SoundEffectInstance. + Only has effect on a SoundEffectInstance in a paused state. + + + Immediately stops playing a SoundEffectInstance. + + + Stops playing a SoundEffectInstance, either immediately or as authored. + Determined whether the sound stops immediately, or after playing its release phase and/or transitions. + Stopping a sound with the immediate argument set to false will allow it to play any release phases, such as fade, before coming to a stop. + + + Releases the resources held by this . + + + + Releases the resources held by this . + + If set to true, Dispose was called explicitly. + If the disposing parameter is true, the Dispose method was called explicitly. This + means that managed objects referenced by this instance should be disposed or released as + required. If the disposing parameter is false, Dispose was called by the finalizer and + no managed objects should be touched because we do not know if they are still valid or + not at that time. Unmanaged resources should always be released. + + + Enables or Disables whether the SoundEffectInstance should repeat after playback. + This value has no effect on an already playing sound. + + + Gets or sets the pan, or speaker balance.. + Pan value ranging from -1.0 (left speaker) to 0.0 (centered), 1.0 (right speaker). Values outside of this range will throw an exception. + + + Gets or sets the pitch adjustment. + Pitch adjustment, ranging from -1.0 (down an octave) to 0.0 (no change) to 1.0 (up an octave). Values outside of this range will throw an Exception. + + + Gets or sets the volume of the SoundEffectInstance. + Volume, ranging from 0.0 (silence) to 1.0 (full volume). Volume during playback is scaled by SoundEffect.MasterVolume. + + This is the volume relative to SoundEffect.MasterVolume. Before playback, this Volume property is multiplied by SoundEffect.MasterVolume when determining the final mix volume. + + + + Gets the SoundEffectInstance's current playback state. + + + Indicates whether the object is disposed. + + + Sample rate, in Hertz (Hz). + Number of channels (mono or stereo). + + + + Returns the duration of an audio buffer of the specified size, based on the settings of this instance. + + Size of the buffer, in bytes. + The playback length of the buffer. + + + + Returns the size, in bytes, of a buffer of the specified duration, based on the settings of this instance. + + The playback length of the buffer. + The data size of the buffer, in bytes. + + + + Plays or resumes the DynamicSoundEffectInstance. + + + + + Pauses playback of the DynamicSoundEffectInstance. + + + + + Resumes playback of the DynamicSoundEffectInstance. + + + + + Immediately stops playing the DynamicSoundEffectInstance. + + + Calling this also releases all queued buffers. + + + + + Stops playing the DynamicSoundEffectInstance. + If the parameter is false, this call has no effect. + + + Calling this also releases all queued buffers. + + When set to false, this call has no effect. + + + + Queues an audio buffer for playback. + + + The buffer length must conform to alignment requirements for the audio format. + + The buffer containing PCM audio data. + + + + Queues an audio buffer for playback. + + + The buffer length must conform to alignment requirements for the audio format. + + The buffer containing PCM audio data. + The starting position of audio data. + The amount of bytes to use. + + + + This value has no effect on DynamicSoundEffectInstance. + It may not be set. + + + + + Returns the number of audio buffers queued for playback. + + + + + The event that occurs when the number of queued audio buffers is less than or equal to 2. + + + This event may occur when is called or during playback when a buffer is completed. + + + + + Handles the buffer events of all DynamicSoundEffectInstance instances. + + + + + Updates buffer queues of the currently playing instances. + + + XNA posts events always on the main thread. + + + + + The exception thrown when the system attempts to play more SoundEffectInstances than allotted. + + + Most platforms have a hard limit on how many sounds can be played simultaneously. This exception is thrown when that limit is exceeded. + + + + + The exception thrown when no audio hardware is present, or driver issues are detected. + + + + A message describing the error. + + + A message describing the error. + The exception that is the underlying cause of the current exception. If not null, the current exception is raised in a try/catch block that handled the innerException. + + + Represents a loaded sound resource. + + A SoundEffect represents the buffer used to hold audio data and metadata. SoundEffectInstances are used to play from SoundEffects. Multiple SoundEffectInstance objects can be created and played from the same SoundEffect object. + The only limit on the number of loaded SoundEffects is restricted by available memory. When a SoundEffect is disposed, all SoundEffectInstances created from it will become invalid. + SoundEffect.Play() can be used for 'fire and forget' sounds. If advanced playback controls like volume or pitch is required, use SoundEffect.CreateInstance(). + + + + + Create a sound effect. + + The buffer with the sound data. + The sound data sample rate in hertz. + The number of channels in the sound data. + This only supports uncompressed 16bit PCM wav data. + + + + Create a sound effect. + + The buffer with the sound data. + The offset to the start of the sound data in bytes. + The length of the sound data in bytes. + The sound data sample rate in hertz. + The number of channels in the sound data. + The position where the sound should begin looping in samples. + The duration of the sound data loop in samples. + This only supports uncompressed 16bit PCM wav data. + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Creates a new SoundEffectInstance for this SoundEffect. + + A new SoundEffectInstance for this SoundEffect. + Creating a SoundEffectInstance before calling SoundEffectInstance.Play() allows you to access advanced playback features, such as volume, pitch, and 3D positioning. + + + + Creates a new SoundEffect object based on the specified data stream. + + A stream containing the wave data. + A new SoundEffect object. + The stream must point to the head of a valid wave file in the RIFF bitstream format. The formats supported are: + + + 8-bit unsigned PCM + 16-bit signed PCM + 24-bit signed PCM + 32-bit IEEE float PCM + MS-ADPCM 4-bit compressed + IMA/ADPCM (IMA4) 4-bit compressed + + + + + + + Returns the duration for 16-bit PCM audio. + + The length of the audio data in bytes. + Sample rate, in Hertz (Hz). Must be between 8000 Hz and 48000 Hz + Number of channels in the audio data. + The duration of the audio data. + + + + Returns the data size in bytes for 16bit PCM audio. + + The total duration of the audio data. + Sample rate, in Hertz (Hz), of audio data. Must be between 8,000 and 48,000 Hz. + Number of channels in the audio data. + The size in bytes of a single sample of audio data. + + + Gets an internal SoundEffectInstance and plays it. + True if a SoundEffectInstance was successfully played, false if not. + + Play returns false if more SoundEffectInstances are currently playing then the platform allows. + To loop a sound or apply 3D effects, call SoundEffect.CreateInstance() and SoundEffectInstance.Play() instead. + SoundEffectInstances used by SoundEffect.Play() are pooled internally. + + + + Gets an internal SoundEffectInstance and plays it with the specified volume, pitch, and panning. + True if a SoundEffectInstance was successfully created and played, false if not. + Volume, ranging from 0.0 (silence) to 1.0 (full volume). Volume during playback is scaled by SoundEffect.MasterVolume. + Pitch adjustment, ranging from -1.0 (down an octave) to 0.0 (no change) to 1.0 (up an octave). + Panning, ranging from -1.0 (left speaker) to 0.0 (centered), 1.0 (right speaker). + + Play returns false if more SoundEffectInstances are currently playing then the platform allows. + To apply looping or simulate 3D audio, call SoundEffect.CreateInstance() and SoundEffectInstance.Play() instead. + SoundEffectInstances used by SoundEffect.Play() are pooled internally. + + + + + Returns a sound effect instance from the pool or null if none are available. + + + + Releases the resources held by this . + + + + Releases the resources held by this . + + If set to true, Dispose was called explicitly. + If the disposing parameter is true, the Dispose method was called explicitly. This + means that managed objects referenced by this instance should be disposed or released as + required. If the disposing parameter is false, Dispose was called by the finalizer and + no managed objects should be touched because we do not know if they are still valid or + not at that time. Unmanaged resources should always be released. + + + + Initializes XAudio. + + + + Gets the duration of the SoundEffect. + + + Gets or sets the asset name of the SoundEffect. + + + + Gets or sets the master volume scale applied to all SoundEffectInstances. + + + Each SoundEffectInstance has its own Volume property that is independent to SoundEffect.MasterVolume. During playback SoundEffectInstance.Volume is multiplied by SoundEffect.MasterVolume. + This property is used to adjust the volume on all current and newly created SoundEffectInstances. The volume of an individual SoundEffectInstance can be adjusted on its own. + + + + + Gets or sets the scale of distance calculations. + + + DistanceScale defaults to 1.0 and must be greater than 0.0. + Higher values reduce the rate of falloff between the sound and listener. + + + + + Gets or sets the scale of Doppler calculations applied to sounds. + + + DopplerScale defaults to 1.0 and must be greater or equal to 0.0 + Affects the relative velocity of emitters and listeners. + Higher values more dramatically shift the pitch for the given relative velocity of the emitter and listener. + + + + Returns the speed of sound used when calculating the Doppler effect.. + + Defaults to 343.5. Value is measured in meters per second. + Has no effect on distance attenuation. + + + + Indicates whether the object is disposed. + + + + Add the specified instance to the pool if it is a pooled instance and removes it from the + list of playing instances. + + The SoundEffectInstance + + + + Adds the SoundEffectInstance to the list of playing instances. + + The SoundEffectInstance to add to the playing list. + + + + Returns a pooled SoundEffectInstance if one is available, or allocates a new + SoundEffectInstance if the pool is empty. + + The SoundEffectInstance. + + + + Iterates the list of playing instances, returning them to the pool if they + have stopped playing. + + + + + Iterates the list of playing instances, stop them and return them to the pool if they are instances of the given SoundEffect. + + The SoundEffect + + + + Gets a value indicating whether the platform has capacity for more sounds to be played at this time. + + true if more sounds can be played; otherwise, false. + + + Described the playback state of a SoundEffectInstance. + + + The SoundEffectInstance is currently playing. + + + The SoundEffectInstance is currently paused. + + + The SoundEffectInstance is currently stopped. + + + + Microphone state. + + + + + Provides microphones capture features. + + + Provides microphones capture features. + + + + + Returns the friendly name of the microphone. + + + + + Returns the duration based on the size of the buffer (assuming 16-bit PCM data). + + Size, in bytes + TimeSpan of the duration. + + + + Returns the size, in bytes, of the array required to hold the specified duration of 16-bit PCM data. + + TimeSpan of the duration of the sample. + Size, in bytes, of the buffer. + + + + Starts microphone capture. + + + + + Stops microphone capture. + + + + + Gets the latest available data from the microphone. + + Buffer, in bytes, of the captured data (16-bit PCM). + The buffer size, in bytes, of the captured data. + + + + Gets the latest available data from the microphone. + + Buffer, in bytes, of the captured data (16-bit PCM). + Byte offset. + Amount, in bytes. + The buffer size, in bytes, of the captured data. + + + + Gets or sets the capture buffer duration. This value must be greater than 100 milliseconds, lower than 1000 milliseconds, and must be 10 milliseconds aligned (BufferDuration % 10 == 10). + + + + + Determines if the microphone is a wired headset. + Note: XNA could know if a headset microphone was plugged in an Xbox 360 controller but MonoGame can't. + Hence, this is always true on mobile platforms, and always false otherwise. + + + + + Returns the sample rate of the captured audio. + Note: default value is 44100hz + + + + + Returns the state of the Microphone. + + + + + Returns all compatible microphones. + + + + + Returns the default microphone. + + + + + Event fired when the audio data are available. + + + + + The exception thrown when no audio hardware is present, or driver issues are detected. + + + + A message describing the error. + + + A message describing the error. + The exception that is the underlying cause of the current exception. If not null, the current exception is raised in a try/catch block that handled the innerException. + + + + Provides functionality for manipulating multiple sounds at a time. + + + + + Pauses all associated sounds. + + + + + Resumes all associated paused sounds. + + + + + Stops all associated sounds. + + + + + Determines whether two AudioCategory instances are equal. + + First AudioCategory instance to compare. + Second AudioCategory instance to compare. + true if the objects are equal or false if they aren't. + + + + Determines whether two AudioCategory instances are not equal. + + First AudioCategory instance to compare. + Second AudioCategory instance to compare. + true if the objects are not equal or false if they are. + + + + Determines whether two AudioCategory instances are equal. + + AudioCategory to compare with this instance. + true if the objects are equal or false if they aren't + + + + Determines whether two AudioCategory instances are equal. + + Object to compare with this instance. + true if the objects are equal or false if they aren't. + + + + Gets the hash code for this instance. + + Hash code for this object. + + + + Returns the name of this AudioCategory + + Friendly name of the AudioCategory + + + + Gets the category's friendly name. + + + + + Class used to create and manipulate code audio objects. + + + + + The current content version. + + + + Path to a XACT settings file. + + + Path to a XACT settings file. + Determines how many milliseconds the engine will look ahead when determing when to transition to another sound. + A string that specifies the audio renderer to use. + For the best results, use a lookAheadTime of 250 milliseconds or greater. + + + + Performs periodic work required by the audio engine. + + Must be called at least once per frame. + + + Returns an audio category by name. + Friendly name of the category to get. + The AudioCategory with a matching name. Throws an exception if not found. + + + Gets the value of a global variable. + Friendly name of the variable. + float value of the queried variable. + A global variable has global scope. It can be accessed by all code within a project. + + + Sets the value of a global variable. + Friendly name of the variable. + Value of the global variable. + + + + Disposes the AudioEngine. + + + + + This event is triggered when the AudioEngine is disposed. + + + + + Is true if the AudioEngine has been disposed. + + + + Controls how Cue objects should cease playback when told to stop. + + + Stop normally, playing any pending release phases or transitions. + + + Immediately stops the cue, ignoring any pending release phases or transitions. + + + Manages the playback of a sound or set of sounds. + + Cues are comprised of one or more sounds. + Cues also define specific properties such as pitch or volume. + Cues are referenced through SoundBank objects. + + + + Pauses playback. + + + Requests playback of a prepared or preparing Cue. + Calling Play when the Cue already is playing can result in an InvalidOperationException. + + + Resumes playback of a paused Cue. + + + Stops playback of a Cue. + Specifies if the sound should play any pending release phases or transitions before stopping. + + + + Sets the value of a cue-instance variable based on its friendly name. + + Friendly name of the variable to set. + Value to assign to the variable. + The friendly name is a value set from the designer. + + + Gets a cue-instance variable value based on its friendly name. + Friendly name of the variable. + Value of the variable. + + Cue-instance variables are useful when multiple instantiations of a single cue (and its associated sounds) are required (for example, a "car" cue where there may be more than one car at any given time). While a global variable allows multiple audio elements to be controlled in unison, a cue instance variable grants discrete control of each instance of a cue, even for each copy of the same cue. + The friendly name is a value set from the designer. + + + + Updates the simulated 3D Audio settings calculated between an AudioEmitter and AudioListener. + The listener to calculate. + The emitter to calculate. + + This must be called before Play(). + Calling this method automatically converts the sound to monoaural and sets the speaker mix for any sound played by this cue to a value calculated with the listener's and emitter's positions. Any stereo information in the sound will be discarded. + + + + + Disposes the Cue. + + + + Indicates whether or not the cue is currently paused. + IsPlaying and IsPaused both return true if a cue is paused while playing. + + + Indicates whether or not the cue is currently playing. + IsPlaying and IsPaused both return true if a cue is paused while playing. + + + Indicates whether or not the cue is currently stopped. + + + Gets the friendly name of the cue. + The friendly name is a value set from the designer. + + + + This event is triggered when the Cue is disposed. + + + + + Is true if the Cue has been disposed. + + + + Represents a collection of Cues. + + + AudioEngine that will be associated with this sound bank. + Path to a .xsb SoundBank file. + + + + Returns a pooled Cue object. + + Friendly name of the cue to get. + a unique Cue object from a pool. + + Cue instances are unique, even when sharing the same name. This allows multiple instances to simultaneously play. + + + + + Plays a cue. + + Name of the cue to play. + + + + Plays a cue with static 3D positional information. + + + Commonly used for short lived effects. To dynamically change the 3D + positional information on a cue over time use and . + The name of the cue to play. + The listener state. + The cue emitter state. + + + + Disposes the SoundBank. + + + + + Is true if the SoundBank has any live Cues in use. + + + + + This event is triggered when the SoundBank is disposed. + + + + + Is true if the SoundBank has been disposed. + + + + Represents a collection of wave files. + + + Instance of the AudioEngine to associate this wave bank with. + Path to the .xwb file to load. + This constructor immediately loads all wave data into memory at once. + + + Instance of the AudioEngine to associate this wave bank with. + Path to the .xwb to stream from. + DVD sector-aligned offset within the wave bank data file. + Stream packet size, in sectors, to use for each stream. The minimum value is 2. + + This constructor streams wave data as needed. + Note that packetsize is in sectors, which is 2048 bytes. + AudioEngine.Update() must be called at least once before using data from a streaming wave bank. + + + + + Disposes the WaveBank. + + + + + + + + + + + + + This event is triggered when the WaveBank is disposed. + + + + + Is true if the WaveBank has been disposed. + + + + + Set the combined volume scale from the parent objects. + + The volume scale. + + + + Set the volume for the clip. + + The volume level. + + + + Virtual property to allow a derived ContentManager to have it's assets reloaded + + + + + External reference reader, provided for compatibility with XNA Framework built content + + + + + Creates an instance of the attribute. + + + + + Returns the overriden XML element name or the default "Item". + + + + + Returns true if the default CollectionItemName value was overridden. + + + + + This is used to specify the XML element name to use for each item in a collection. + + + + + Creates an instance of the attribute. + + The XML element name to use for each item in the collection. + + + + The XML element name to use for each item in the collection. + + + + + This is used to specify the type to use when deserializing this object at runtime. + + + + + Creates an instance of the attribute. + + The name of the type to use at runtime. + + + + The name of the type to use at runtime. + + + + + This is used to specify the version when deserializing this object at runtime. + + + + + Creates an instance of the attribute. + + The version passed to the type at runtime. + + + + The version passed to the type at runtime. + + + + + Removes Version, Culture and PublicKeyToken from a type string. + + + Supports multiple generic types (e.g. Dictionary<TKey,TValue>) and nested generic types (e.g. List<List<int>>). + + + A + + + A + + + + + Adds the type creator. + + + Type string. + + + Create function. + + + + + Defines the buffers for clearing when calling operation. + + + + + Color buffer. + + + + + Depth buffer. + + + + + Stencil buffer. + + + + + Defines the color channels for render target blending operations. + + + + + No channels selected. + + + + + Red channel selected. + + + + + Green channel selected. + + + + + Blue channel selected. + + + + + Alpha channel selected. + + + + + All channels selected. + + + + + Defines the faces in a cube map for the class. + + + + + Positive X face in the cube map. + + + + + Negative X face in the cube map. + + + + + Positive Y face in the cube map. + + + + + Negative Y face in the cube map. + + + + + Positive Z face in the cube map. + + + + + Negative Z face in the cube map. + + + + + The settings used in creation of the graphics device. + See . + + + + + The graphics adapter on which the graphics device will be created. + + + This is only valid on desktop systems where multiple graphics + adapters are possible. Defaults to . + + + + + The requested graphics device feature set. + + + + + The settings that define how graphics will be presented to the display. + + + + + Used to initialize and control the presentation of the graphics device. + + + + + The default back buffer width. + + + + + The default back buffer height. + + + + + Associates this graphics device manager to a game instances. + + The game instance to attach. + + + + This populates a GraphicsDeviceInformation instance and invokes PreparingDeviceSettings to + allow users to change the settings. Then returns that GraphicsDeviceInformation. + Throws NullReferenceException if users set GraphicsDeviceInformation.PresentationParameters to null. + + + + + Applies any pending property changes to the graphics device. + + + + + Toggles between windowed and fullscreen modes. + + + Note that on platforms that do not support windowed modes this has no affect. + + + + + The profile which determines the graphics feature level. + + + + + Returns the graphics device for this manager. + + + + + Indicates the desire to switch into fullscreen mode. + + + When called at startup this will automatically set fullscreen mode during initialization. If + set after startup you must call ApplyChanges() for the fullscreen mode to be changed. + Note that for some platforms that do not support windowed modes this property has no affect. + + + + + Gets or sets the boolean which defines how window switches from windowed to fullscreen state. + "Hard" mode(true) is slow to switch, but more effecient for performance, while "soft" mode(false) is vice versa. + The default value is true. + + + + + Indicates the desire for a multisampled back buffer. + + + When called at startup this will automatically set the MSAA mode during initialization. If + set after startup you must call ApplyChanges() for the MSAA mode to be changed. + + + + + Indicates the desired back buffer color format. + + + When called at startup this will automatically set the format during initialization. If + set after startup you must call ApplyChanges() for the format to be changed. + + + + + Indicates the desired back buffer height in pixels. + + + When called at startup this will automatically set the height during initialization. If + set after startup you must call ApplyChanges() for the height to be changed. + + + + + Indicates the desired back buffer width in pixels. + + + When called at startup this will automatically set the width during initialization. If + set after startup you must call ApplyChanges() for the width to be changed. + + + + + Indicates the desired depth-stencil buffer format. + + + The depth-stencil buffer format defines the scene depth precision and stencil bits available for effects during rendering. + When called at startup this will automatically set the format during initialization. If + set after startup you must call ApplyChanges() for the format to be changed. + + + + + Indicates the desire for vsync when presenting the back buffer. + + + Vsync limits the frame rate of the game to the monitor referesh rate to prevent screen tearing. + When called at startup this will automatically set the vsync mode during initialization. If + set after startup you must call ApplyChanges() for the vsync mode to be changed. + + + + + Indicates the desired allowable display orientations when the device is rotated. + + + This property only applies to mobile platforms with automatic display rotation. + When called at startup this will automatically apply the supported orientations during initialization. If + set after startup you must call ApplyChanges() for the supported orientations to be changed. + + + + + A snapshot of rendering statistics from to be used for runtime debugging and profiling. + + + + + Returns the difference between two sets of metrics. + + Source on the left of the sub sign. + Source on the right of the sub sign. + Difference between two sets of metrics. + + + + Returns the combination of two sets of metrics. + + Source on the left of the add sign. + Source on the right of the add sign. + Combination of two sets of metrics. + + + + Number of times Clear was called. + + + + + Number of times Draw was called. + + + + + Number of times the pixel shader was changed on the GPU. + + + + + Number of rendered primitives. + + + + + Number of sprites and text characters rendered via . + + + + + Number of times a target was changed on the GPU. + + + + + Number of times a texture was changed on the GPU. + + + + + Number of times the vertex shader was changed on the GPU. + + + + + Built-in effect that supports alpha testing. + + + + + Called before the device is reset. Allows graphics resources to + invalidate their state so they can be recreated after the device reset. + Warning: This may be called after a call to Dispose() up until + the resource is garbage collected. + + + + + The method that derived classes should override to implement disposing of managed and native resources. + + True if managed objects should be disposed. + Native resources should always be released regardless of the value of the disposing parameter. + + + + Clone the source into this existing object. + + + Note this is not overloaded in derived classes on purpose. This is + only a reason this exists is for caching effects. + + The source effect to clone from. + + + + Returns a deep copy of the effect where immutable types + are shared and mutable data is duplicated. + + + See "Cloning an Effect" in MSDN: + http://msdn.microsoft.com/en-us/library/windows/desktop/ff476138(v=vs.85).aspx + + The cloned effect. + + + + The current MonoGame Effect file format versions + used to detect old packaged content. + + + We should avoid supporting old versions for very long if at all + as users should be rebuilding content when packaging their game. + + + + + The MonoGame Effect file format header identifier ("MGFX"). + + + + + The common effect fog rendering parameters. + + + + + The floating point fog color. + + + + + Used to toggle the rendering of fog. + + + + + The world space distance from the camera at which fogging is fully applied. + + + FogEnd should be greater than FogStart. If FogEnd and FogStart + are the same value everything is fully fogged. + + + + + The world space distance from the camera at which fogging begins. + + + FogStart should be less than FogEnd. If FogEnd and FogStart are the + same value everything is fully fogged. + + + + + Creates a new AlphaTestEffect with default parameter settings. + + + + + Creates a new AlphaTestEffect by cloning parameter settings from an existing instance. + + + + + Creates a clone of the current AlphaTestEffect instance. + + + + + Looks up shortcut references to our effect parameters. + + + + + Lazily computes derived parameter values immediately before applying the effect. + + + + + Gets or sets the world matrix. + + + + + Gets or sets the view matrix. + + + + + Gets or sets the projection matrix. + + + + + Gets or sets the material diffuse color (range 0 to 1). + + + + + Gets or sets the material alpha. + + + + + Gets or sets the fog enable flag. + + + + + Gets or sets the fog start distance. + + + + + Gets or sets the fog end distance. + + + + + Gets or sets the fog color. + + + + + Gets or sets the current texture. + + + + + Gets or sets whether vertex color is enabled. + + + + + Gets or sets the alpha compare function (default Greater). + + + + + Gets or sets the reference alpha value (default 0). + + + + + Built-in effect that supports optional texturing, vertex coloring, fog, and lighting. + + + + + The common effect light rendering parameters. + + + + + Initializes the lights to the standard key/fill/back lighting rig. + + + + + The floating point ambient light color. + + + + + Returns the first directional light. + + + + + Returns the second directional light. + + + + + Returns the third directional light. + + + + + Toggles the rendering of lighting. + + + + + Creates a new BasicEffect with default parameter settings. + + + + + Creates a new BasicEffect by cloning parameter settings from an existing instance. + + + + + Creates a clone of the current BasicEffect instance. + + + + + + + + Looks up shortcut references to our effect parameters. + + + + + Lazily computes derived parameter values immediately before applying the effect. + + + + + Gets or sets the world matrix. + + + + + Gets or sets the view matrix. + + + + + Gets or sets the projection matrix. + + + + + Gets or sets the material diffuse color (range 0 to 1). + + + + + Gets or sets the material emissive color (range 0 to 1). + + + + + Gets or sets the material specular color (range 0 to 1). + + + + + Gets or sets the material specular power. + + + + + Gets or sets the material alpha. + + + + + + + + Gets or sets the per-pixel lighting prefer flag. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets or sets whether texturing is enabled. + + + + + Gets or sets the current texture. + + + + + Gets or sets whether vertex color is enabled. + + + + + Built-in effect that supports two-layer multitexturing. + + + + + Creates a new DualTextureEffect with default parameter settings. + + + + + Creates a new DualTextureEffect by cloning parameter settings from an existing instance. + + + + + Creates a clone of the current DualTextureEffect instance. + + + + + Looks up shortcut references to our effect parameters. + + + + + Lazily computes derived parameter values immediately before applying the effect. + + + + + Gets or sets the world matrix. + + + + + Gets or sets the view matrix. + + + + + Gets or sets the projection matrix. + + + + + Gets or sets the material diffuse color (range 0 to 1). + + + + + Gets or sets the material alpha. + + + + + Gets or sets the fog enable flag. + + + + + Gets or sets the fog start distance. + + + + + Gets or sets the fog end distance. + + + + + Gets or sets the fog color. + + + + + Gets or sets the current base texture. + + + + + Gets or sets the current overlay texture. + + + + + Gets or sets whether vertex color is enabled. + + + + + Track which effect parameters need to be recomputed during the next OnApply. + + + + + Helper code shared between the various built-in effects. + + + + + Sets up the standard key/fill/back lighting rig. + + + + + Lazily recomputes the world+view+projection matrix and + fog vector based on the current effect parameter settings. + + + + + Sets a vector which can be dotted with the object space vertex position to compute fog amount. + + + + + Lazily recomputes the world inverse transpose matrix and + eye position based on the current effect parameter settings. + + + + + Sets the diffuse/emissive/alpha material color parameters. + + + + + Defines classes for effect parameters and shader constants. + + + + + Scalar class type. + + + + + Vector class type. + + + + + Matrix class type. + + + + + Class type for textures, shaders or strings. + + + + + Structure class type. + + + + + The next state key used when an effect parameter + is updated by any of the 'set' methods. + + + + + The current state key which is used to detect + if the parameter value has been changed. + + + + + Property referenced by the DebuggerDisplayAttribute. + + + + + Defines types for effect parameters and shader constants. + + + + + Pointer to void type. + + + + + Boolean type. Any non-zero will be true; false otherwise. + + + + + 32-bit integer type. + + + + + Float type. + + + + + String type. + + + + + Any texture type. + + + + + 1D-texture type. + + + + + 2D-texture type. + + + + + 3D-texture type. + + + + + Cubic texture type. + + + + + Internal helper for accessing the bytecode for stock effects. + + + + + Built-in effect that supports environment mapping. + + + + + Creates a new EnvironmentMapEffect with default parameter settings. + + + + + Creates a new EnvironmentMapEffect by cloning parameter settings from an existing instance. + + + + + Creates a clone of the current EnvironmentMapEffect instance. + + + + + Sets up the standard key/fill/back lighting rig. + + + + + Looks up shortcut references to our effect parameters. + + + + + Lazily computes derived parameter values immediately before applying the effect. + + + + + Gets or sets the world matrix. + + + + + Gets or sets the view matrix. + + + + + Gets or sets the projection matrix. + + + + + Gets or sets the material diffuse color (range 0 to 1). + + + + + Gets or sets the material emissive color (range 0 to 1). + + + + + Gets or sets the material alpha. + + + + + Gets or sets the ambient light color (range 0 to 1). + + + + + Gets the first directional light. + + + + + Gets the second directional light. + + + + + Gets the third directional light. + + + + + Gets or sets the fog enable flag. + + + + + Gets or sets the fog start distance. + + + + + Gets or sets the fog end distance. + + + + + Gets or sets the fog color. + + + + + Gets or sets the current texture. + + + + + Gets or sets the current environment map texture. + + + + + Gets or sets the amount of the environment map RGB that will be blended over + the base texture. Range 0 to 1, default 1. If set to zero, the RGB channels + of the environment map will completely ignored (but the environment map alpha + may still be visible if EnvironmentMapSpecular is greater than zero). + + + + + Gets or sets the amount of the environment map alpha channel that will + be added to the base texture. Range 0 to 1, default 0. This can be used + to implement cheap specular lighting, by encoding one or more specular + highlight patterns into the environment map alpha channel, then setting + EnvironmentMapSpecular to the desired specular light color. + + + + + Gets or sets the Fresnel factor used for the environment map blending. + Higher values make the environment map only visible around the silhouette + edges of the object, while lower values make it visible everywhere. + Setting this property to 0 disables Fresnel entirely, making the + environment map equally visible regardless of view angle. The default is + 1. Fresnel only affects the environment map RGB (the intensity of which is + controlled by EnvironmentMapAmount). The alpha contribution (controlled by + EnvironmentMapSpecular) is not affected by the Fresnel setting. + + + + + This effect requires lighting, so we explicitly implement + IEffectLights.LightingEnabled, and do not allow turning it off. + + + + + Built-in effect for rendering skinned character models. + + + + + Sets an array of skinning bone transform matrices. + + + + + Gets a copy of the current skinning bone transform matrices. + + + + + Creates a new SkinnedEffect with default parameter settings. + + + + + Creates a new SkinnedEffect by cloning parameter settings from an existing instance. + + + + + Creates a clone of the current SkinnedEffect instance. + + + + + Sets up the standard key/fill/back lighting rig. + + + + + Looks up shortcut references to our effect parameters. + + + + + Lazily computes derived parameter values immediately before applying the effect. + + + + + Gets or sets the world matrix. + + + + + Gets or sets the view matrix. + + + + + Gets or sets the projection matrix. + + + + + Gets or sets the material diffuse color (range 0 to 1). + + + + + Gets or sets the material emissive color (range 0 to 1). + + + + + Gets or sets the material specular color (range 0 to 1). + + + + + Gets or sets the material specular power. + + + + + Gets or sets the material alpha. + + + + + Gets or sets the per-pixel lighting prefer flag. + + + + + Gets or sets the ambient light color (range 0 to 1). + + + + + Gets the first directional light. + + + + + Gets the second directional light. + + + + + Gets the third directional light. + + + + + Gets or sets the fog enable flag. + + + + + Gets or sets the fog start distance. + + + + + Gets or sets the fog end distance. + + + + + Gets or sets the fog color. + + + + + Gets or sets the current texture. + + + + + Gets or sets the number of skinning weights to evaluate for each vertex (1, 2, or 4). + + + + + This effect requires lighting, so we explicitly implement + IEffectLights.LightingEnabled, and do not allow turning it off. + + + + + The default effect used by SpriteBatch. + + + + + Creates a new SpriteEffect. + + + + + Creates a new SpriteEffect by cloning parameter settings from an existing instance. + + + + + Creates a clone of the current SpriteEffect instance. + + + + + Looks up shortcut references to our effect parameters. + + + + + Lazily computes derived parameter values immediately before applying the effect. + + + + + Queries for support of the requested render target format on the adaptor. + + The graphics profile. + The requested surface format. + The requested depth stencil format. + The requested multisample count. + Set to the best format supported by the adaptor for the requested surface format. + Set to the best format supported by the adaptor for the requested depth stencil format. + Set to the best count supported by the adaptor for the requested multisample count. + True if the requested format is supported by the adaptor. False if one or more of the values was changed. + + + + Used to request creation of the reference graphics device, + or the default hardware accelerated device (when set to false). + + + This only works on DirectX platforms where a reference graphics + device is available and must be defined before the graphics device + is created. It defaults to false. + + + + + Used to request creation of a specific kind of driver. + + + These values only work on DirectX platforms and must be defined before the graphics device + is created. by default. + + + + + Used to request the graphics device should be created with debugging + features enabled. + + + + + Returns true if the is widescreen. + + + Common widescreen modes include 16:9, 16:10 and 2:1. + + + + + Defines the driver type for graphics adapter. Usable only on DirectX platforms for now. + + + + + Hardware device been used for rendering. Maximum speed and performance. + + + + + Emulates the hardware device on CPU. Slowly, only for testing. + + + + + Useful when acceleration does not work. + + + + + Provides information about the capabilities of the + current graphics device. A very useful thread for investigating GL extenion names + http://stackoverflow.com/questions/3881197/opengl-es-2-0-extensions-on-android-devices + + + + + Whether the device fully supports non power-of-two textures, including + mip maps and wrap modes other than CLAMP_TO_EDGE + + + + + Whether the device supports anisotropic texture filtering + + + + + Gets the support for DXT1 + + + + + Gets the support for S3TC (DXT1, DXT3, DXT5) + + + + + Gets the support for PVRTC + + + + + Gets the support for ETC1 + + + + + Gets the support for ATITC + + + + + True, if sRGB is supported. On Direct3D platforms, this is always true. + On OpenGL platforms, it is true if both framebuffer sRGB + and texture sRGB are supported. + + + + + True, if the underlying platform supports floating point textures. + For Direct3D platforms this is always true. + For OpenGL Desktop platforms it is always true. + For OpenGL Mobile platforms it requires `GL_EXT_color_buffer_float`. + If the requested format is not supported an NotSupportedException + will be thrown. + + + + + True, if the underlying platform supports half floating point textures. + For Direct3D platforms this is always true. + For OpenGL Desktop platforms it is always true. + For OpenGL Mobile platforms it requires `GL_EXT_color_buffer_half_float`. + If the requested format is not supported an NotSupportedException + will be thrown. + + + + + Gets the max texture anisotropy. This value typically lies + between 0 and 16, where 0 means anisotropic filtering is not + supported. + + + + + Attempt to dequeue a debugging message from the graphics subsystem. + + + When running on a graphics device with debugging enabled, this allows you to retrieve + subsystem-specific (e.g. DirectX, OpenGL, etc.) debugging messages including information + about improper usage of shaders and APIs. + + The graphics debugging message if retrieved, null otherwise. + True if a graphics debugging message was retrieved, false otherwise. + + + + The active vertex shader. + + + + + The active pixel shader. + + + + + The cache of effects from unique byte streams. + + + + + Initializes a new instance of the class. + + The graphics adapter. + The graphics profile. + The presentation options. + + is . + + + + + Trigger the DeviceResetting event + Currently internal to allow the various platforms to send the event at the appropriate time. + + + + + Trigger the DeviceReset event to allow games to be notified of a device reset. + Currently internal to allow the various platforms to send the event at the appropriate time. + + + + + Draw geometry by indexing into the vertex buffer. + + The type of primitives in the index buffer. + Used to offset the vertex range indexed from the vertex buffer. + This is unused and remains here only for XNA API compatibility. + This is unused and remains here only for XNA API compatibility. + The index within the index buffer to start drawing from. + The number of primitives to render from the index buffer. + Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored. + + + + Draw geometry by indexing into the vertex buffer. + + The type of primitives in the index buffer. + Used to offset the vertex range indexed from the vertex buffer. + The index within the index buffer to start drawing from. + The number of primitives to render from the index buffer. + + + + Draw primitives of the specified type from the data in an array of vertices without indexing. + + The type of the vertices. + The type of primitives to draw with the vertices. + An array of vertices to draw. + The index in the array of the first vertex that should be rendered. + The number of primitives to draw. + The will be found by getting + from an instance of and cached for subsequent calls. + + + + Draw primitives of the specified type from the data in the given array of vertices without indexing. + + The type of the vertices. + The type of primitives to draw with the vertices. + An array of vertices to draw. + The index in the array of the first vertex that should be rendered. + The number of primitives to draw. + The layout of the vertices. + + + + Draw primitives of the specified type from the currently bound vertexbuffers without indexing. + + The type of primitives to draw. + Index of the vertex to start at. + The number of primitives to draw. + + + + Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices. + + The type of the vertices. + The type of primitives to draw with the vertices. + An array of vertices to draw. + The index in the array of the first vertex to draw. + The index in the array of indices of the first index to use + The number of primitives to draw. + The number of vertices to draw. + The index data. + The will be found by getting + from an instance of and cached for subsequent calls. + All indices in the vertex buffer are interpreted relative to the specified . + For example a value of zero in the array of indices points to the vertex at index + in the array of vertices. + + + + Draw primitives of the specified type by indexing into the given array of vertices with 16-bit indices. + + The type of the vertices. + The type of primitives to draw with the vertices. + An array of vertices to draw. + The index in the array of the first vertex to draw. + The index in the array of indices of the first index to use + The number of primitives to draw. + The number of vertices to draw. + The index data. + The layout of the vertices. + All indices in the vertex buffer are interpreted relative to the specified . + For example a value of zero in the array of indices points to the vertex at index + in the array of vertices. + + + + Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices. + + The type of the vertices. + The type of primitives to draw with the vertices. + An array of vertices to draw. + The index in the array of the first vertex to draw. + The index in the array of indices of the first index to use + The number of primitives to draw. + The number of vertices to draw. + The index data. + The will be found by getting + from an instance of and cached for subsequent calls. + All indices in the vertex buffer are interpreted relative to the specified . + For example a value of zero in the array of indices points to the vertex at index + in the array of vertices. + + + + Draw primitives of the specified type by indexing into the given array of vertices with 32-bit indices. + + The type of the vertices. + The type of primitives to draw with the vertices. + An array of vertices to draw. + The index in the array of the first vertex to draw. + The index in the array of indices of the first index to use + The number of primitives to draw. + The number of vertices to draw. + The index data. + The layout of the vertices. + All indices in the vertex buffer are interpreted relative to the specified . + For example value of zero in the array of indices points to the vertex at index + in the array of vertices. + + + + Draw instanced geometry from the bound vertex buffers and index buffer. + + The type of primitives in the index buffer. + Used to offset the vertex range indexed from the vertex buffer. + This is unused and remains here only for XNA API compatibility. + This is unused and remains here only for XNA API compatibility. + The index within the index buffer to start drawing from. + The number of primitives in a single instance. + The number of instances to render. + Note that minVertexIndex and numVertices are unused in MonoGame and will be ignored. + + + + Draw instanced geometry from the bound vertex buffers and index buffer. + + The type of primitives in the index buffer. + Used to offset the vertex range indexed from the vertex buffer. + The index within the index buffer to start drawing from. + The number of primitives in a single instance. + The number of instances to render. + Draw geometry with data from multiple bound vertex streams at different frequencies. + + + + Gets the Pixel data of what is currently drawn on screen. + The format is whatever the current format of the backbuffer is. + + A byte[] of size (ViewPort.Width * ViewPort.Height * 4) + + + + Create graphics device specific resources. + + + + + Get highest multisample quality level for specified format and multisample count. + Returns 0 if multisampling is not supported for input parameters. + + The texture format. + The number of samples during multisampling. + + Higher than zero if multiSampleCount is supported. + Zero if multiSampleCount is not supported. + + + + + Sends queued-up commands in the command buffer to the graphics processing unit (GPU). + + + + + The rendering information for debugging and profiling. + The metrics are reset every frame after draw within . + + + + + Access debugging APIs for the graphics subsystem. + + + + + The color used as blend factor when alpha blending. + + + When only changing BlendFactor, use this rather than to + only update BlendFactor so the whole BlendState does not have to be updated. + + + + + Returns a handle to internal device object. Valid only on DirectX platforms. + For usage, convert this to SharpDX.Direct3D11.Device. + + + + + Describes the status of the . + + + + + The device is normal. + + + + + The device has been lost. + + + + + The device has not been reset. + + + + + Defines a set of graphic capabilities. + + + + + Use a limited set of graphic features and capabilities, allowing the game to support the widest variety of devices. + + + + + Use the largest available set of graphic features and capabilities to target devices, that have more enhanced graphic capabilities. + + + + + Represents a render target. + + + + + Gets the for the specified array slice. + + The array slice. + The . + + For texture cubes: The array slice is the index of the cube map face. + + + + + Gets the . + + The . Can be . + + + + Gets the width of the render target in pixels + + The width of the render target in pixels. + + + + Gets the height of the render target in pixels + + The height of the render target in pixels. + + + + Gets the usage mode of the render target. + + The usage mode of the render target. + + + + Represents a set of bones associated with a model. + + + + + Finds a bone with a given name if it exists in the collection. + + The name of the bone to find. + The bone named boneName, if found. + true if the bone was found + + + + Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection. + + + + + + Retrieves a ModelBone from the collection, given the name of the bone. + + The name of the bone to retrieve. + + + + Provides the ability to iterate through the bones in an ModelMeshCollection. + + + + + Advances the enumerator to the next element of the ModelMeshCollection. + + + + + Immediately releases the unmanaged resources used by this object. + + + + + Gets the current element in the ModelMeshCollection. + + + + + Transform of this node from the root of the model not from the parent + + + + + A basic 3D model with per mesh parent bones. + + + + + Constructs a model. + + A valid reference to . + The collection of bones. + The collection of meshes. + + is null. + + + is null. + + + is null. + + + + + Draws the model meshes. + + The world transform. + The view transform. + The projection transform. + + + + Copies bone transforms relative to all parent bones of the each bone from this model to a given array. + + The array receiving the transformed bones. + + + + Copies bone transforms relative to bone from a given array to this model. + + The array of prepared bone transform data. + + is null. + + + is invalid. + + + + + Copies bone transforms relative to bone from this model to a given array. + + The array receiving the transformed bones. + + is null. + + + is invalid. + + + + + A collection of objects which describe how each mesh in the + mesh collection for this model relates to its parent mesh. + + + + + A collection of objects which compose the model. Each + in a model may be moved independently and may be composed of multiple materials + identified as objects. + + + + + Root bone for this model. + + + + + Custom attached object. + + Skinning data is example of attached object for model. + + + + + + Represents a collection of ModelMesh objects. + + + + + Finds a mesh with a given name if it exists in the collection. + + The name of the mesh to find. + The mesh named meshName, if found. + true if a mesh was found + + + + Returns a ModelMeshCollection.Enumerator that can iterate through a ModelMeshCollection. + + + + + + Retrieves a ModelMesh from the collection, given the name of the mesh. + + The name of the mesh to retrieve. + + + + Provides the ability to iterate through the bones in an ModelMeshCollection. + + + + + Advances the enumerator to the next element of the ModelMeshCollection. + + + + + Immediately releases the unmanaged resources used by this object. + + + + + Gets the current element in the ModelMeshCollection. + + + + + Initializes a new instance of the class. + + The graphics device. + + is . + + + The current graphics profile does not support occlusion queries. + + + + + Begins the occlusion query. + + + is called again before calling . + + + + + Ends the occlusion query. + + + is called before calling . + + + + + Gets a value indicating whether the occlusion query has completed. + + + if the occlusion query has completed; otherwise, + . + + + + + Gets the number of visible pixels. + + The number of visible pixels. + + The occlusion query has not yet completed. Check before reading + the result! + + + + + Packed vector type containing a single 8 bit normalized W values that is ranging from 0 to 1. + + + + + Creates a new instance of Alpha8. + + The alpha component + + + + Gets the packed vector in float format. + + The packed vector in Vector3 format + + + + Sets the packed vector from a Vector4. + + Vector containing the components. + + + + Gets the packed vector in Vector4 format. + + The packed vector in Vector4 format + + + + Compares an object with the packed vector. + + The object to compare. + True if the object is equal to the packed vector. + + + + Compares another Alpha8 packed vector with the packed vector. + + The Alpha8 packed vector to compare. + True if the packed vectors are equal. + + + + Gets a string representation of the packed vector. + + A string representation of the packed vector. + + + + Gets a hash code of the packed vector. + + The hash code for the packed vector. + + + + Gets and sets the packed value. + + + + + Packed vector type containing unsigned normalized values ranging from 0 to 1. The x and z components use 5 bits, and the y component uses 6 bits. + + + + + Creates a new instance of Bgr565. + + The x component + The y component + The z component + + + + Creates a new instance of Bgr565. + + Vector containing the components for the packed vector. + + + + Gets the packed vector in Vector3 format. + + The packed vector in Vector3 format + + + + Sets the packed vector from a Vector4. + + Vector containing the components. + + + + Gets the packed vector in Vector4 format. + + The packed vector in Vector4 format + + + + Compares an object with the packed vector. + + The object to compare. + true if the object is equal to the packed vector. + + + + Compares another Bgr565 packed vector with the packed vector. + + The Bgr565 packed vector to compare. + true if the packed vectors are equal. + + + + Gets a string representation of the packed vector. + + A string representation of the packed vector. + + + + Gets a hash code of the packed vector. + + The hash code for the packed vector. + + + + Gets and sets the packed value. + + + + + Packed vector type containing unsigned normalized values, ranging from 0 to 1, using 4 bits each for x, y, z, and w. + + + + + Creates a new instance of Bgra4444. + + The x component + The y component + The z component + The w component + + + + Creates a new instance of Bgra4444. + + Vector containing the components for the packed vector. + + + + Gets the packed vector in Vector4 format. + + The packed vector in Vector4 format + + + + Sets the packed vector from a Vector4. + + Vector containing the components. + + + + Compares an object with the packed vector. + + The object to compare. + true if the object is equal to the packed vector. + + + + Compares another Bgra4444 packed vector with the packed vector. + + The Bgra4444 packed vector to compare. + true if the packed vectors are equal. + + + + Gets a string representation of the packed vector. + + A string representation of the packed vector. + + + + Gets a hash code of the packed vector. + + The hash code for the packed vector. + + + + Gets and sets the packed value. + + + + + Packed vector type containing unsigned normalized values ranging from 0 to 1. + The x , y and z components use 5 bits, and the w component uses 1 bit. + + + + + Creates a new instance of Bgra5551. + + The x component + The y component + The z component + The w component + + + + Creates a new instance of Bgra5551. + + + Vector containing the components for the packed vector. + + + + + Gets the packed vector in Vector4 format. + + The packed vector in Vector4 format + + + + Sets the packed vector from a Vector4. + + Vector containing the components. + + + + Compares an object with the packed vector. + + The object to compare. + True if the object is equal to the packed vector. + + + + Compares another Bgra5551 packed vector with the packed vector. + + The Bgra5551 packed vector to compare. + True if the packed vectors are equal. + + + + Gets a string representation of the packed vector. + + A string representation of the packed vector. + + + + Gets a hash code of the packed vector. + + The hash code for the packed vector. + + + + Gets and sets the packed value. + + + + + Packed vector type containing four 8-bit unsigned integer values, ranging from 0 to 255. + + + + + Initializes a new instance of the Byte4 class. + + A vector containing the initial values for the components of the Byte4 structure. + + + + Initializes a new instance of the Byte4 class. + + Initial value for the x component. + Initial value for the y component. + Initial value for the z component. + Initial value for the w component. + + + + Compares the current instance of a class to another instance to determine whether they are different. + + The object to the left of the equality operator. + The object to the right of the equality operator. + true if the objects are different; false otherwise. + + + + Compares the current instance of a class to another instance to determine whether they are the same. + + The object to the left of the equality operator. + The object to the right of the equality operator. + true if the objects are the same; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + The object with which to make the comparison. + true if the current instance is equal to the specified object; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + The object with which to make the comparison. + true if the current instance is equal to the specified object; false otherwise. + + + + Gets the hash code for the current instance. + + Hash code for the instance. + + + + Returns a string representation of the current instance. + + String that represents the object. + + + + Packs a vector into a uint. + + The vector containing the values to pack. + The ulong containing the packed values. + + + + Sets the packed representation from a Vector4. + + The vector to create the packed representation from. + + + + Expands the packed representation into a Vector4. + + The expanded vector. + + + + Directly gets or sets the packed representation of the value. + + The packed representation of the value. + + + + Packed vector type containing four 16-bit floating-point values. + + + + + Initializes a new instance of the HalfVector4 structure. + + Initial value for the x component. + Initial value for the y component. + Initial value for the z component. + Initial value for the q component. + + + + Initializes a new instance of the HalfVector4 structure. + + A vector containing the initial values for the components of the HalfVector4 structure. + + + + Sets the packed representation from a Vector4. + + The vector to create the packed representation from. + + + + Packs a vector into a ulong. + + The vector containing the values to pack. + The ulong containing the packed values. + + + + Expands the packed representation into a Vector4. + + The expanded vector. + + + + Returns a string representation of the current instance. + + String that represents the object. + + + + Gets the hash code for the current instance. + + Hash code for the instance. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + The object with which to make the comparison. + true if the current instance is equal to the specified object; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + The object with which to make the comparison. + true if the current instance is equal to the specified object; false otherwise. + + + + Compares the current instance of a class to another instance to determine whether they are the same. + + The object to the left of the equality operator. + The object to the right of the equality operator. + true if the objects are the same; false otherwise. + + + + Compares the current instance of a class to another instance to determine whether they are different. + + The object to the left of the equality operator. + The object to the right of the equality operator. + true if the objects are different; false otherwise. + + + + Directly gets or sets the packed representation of the value. + + The packed representation of the value. + + + + Packed vector type containing two 16-bit unsigned normalized values ranging from 0 to 1. + + + + + Creates a new instance of Rg32. + + The x component + The y component + + + + Creates a new instance of Rg32. + + + Vector containing the components for the packed vector. + + + + + Gets the packed vector in Vector2 format. + + The packed vector in Vector2 format + + + + Sets the packed vector from a Vector4. + + Vector containing the components. + + + + Gets the packed vector in Vector4 format. + + The packed vector in Vector4 format + + + + Compares an object with the packed vector. + + The object to compare. + True if the object is equal to the packed vector. + + + + Compares another Rg32 packed vector with the packed vector. + + The Rg32 packed vector to compare. + True if the packed vectors are equal. + + + + Gets a string representation of the packed vector. + + A string representation of the packed vector. + + + + Gets a hash code of the packed vector. + + The hash code for the packed vector. + + + + Gets and sets the packed value. + + + + + Packed vector type containing four 16-bit unsigned normalized values ranging from 0 to 1. + + + + + Creates a new instance of Rgba64. + + The x component + The y component + The z component + The w component + + + + Creates a new instance of Rgba64. + + + Vector containing the components for the packed vector. + + + + + Gets the packed vector in Vector4 format. + + The packed vector in Vector4 format + + + + Sets the packed vector from a Vector4. + + Vector containing the components. + + + + Compares an object with the packed vector. + + The object to compare. + True if the object is equal to the packed vector. + + + + Compares another Rgba64 packed vector with the packed vector. + + The Rgba64 packed vector to compare. + True if the packed vectors are equal. + + + + Gets a string representation of the packed vector. + + A string representation of the packed vector. + + + + Gets a hash code of the packed vector. + + The hash code for the packed vector. + + + + Gets and sets the packed value. + + + + + Packed vector type containing unsigned normalized values ranging from 0 to 1. + The x, y and z components use 10 bits, and the w component uses 2 bits. + + + + + Creates a new instance of Rgba1010102. + + The x component + The y component + The z component + The w component + + + + Creates a new instance of Rgba1010102. + + + Vector containing the components for the packed vector. + + + + + Gets the packed vector in Vector4 format. + + The packed vector in Vector4 format + + + + Sets the packed vector from a Vector4. + + Vector containing the components. + + + + Compares an object with the packed vector. + + The object to compare. + True if the object is equal to the packed vector. + + + + Compares another Rgba1010102 packed vector with the packed vector. + + The Rgba1010102 packed vector to compare. + True if the packed vectors are equal. + + + + Gets a string representation of the packed vector. + + A string representation of the packed vector. + + + + Gets a hash code of the packed vector. + + The hash code for the packed vector. + + + + Gets and sets the packed value. + + + + + Packed vector type containing four 16-bit signed integer values. + + + + + Initializes a new instance of the Short4 class. + + A vector containing the initial values for the components of the Short4 structure. + + + + Initializes a new instance of the Short4 class. + + Initial value for the x component. + Initial value for the y component. + Initial value for the z component. + Initial value for the w component. + + + + Compares the current instance of a class to another instance to determine whether they are different. + + The object to the left of the equality operator. + The object to the right of the equality operator. + true if the objects are different; false otherwise. + + + + Compares the current instance of a class to another instance to determine whether they are the same. + + The object to the left of the equality operator. + The object to the right of the equality operator. + true if the objects are the same; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + The object with which to make the comparison. + true if the current instance is equal to the specified object; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + The object with which to make the comparison. + true if the current instance is equal to the specified object; false otherwise. + + + + Gets the hash code for the current instance. + + Hash code for the instance. + + + + Returns a string representation of the current instance. + + String that represents the object. + + + + Packs a vector into a ulong. + + The vector containing the values to pack. + The ulong containing the packed values. + + + + Sets the packed representation from a Vector4. + + The vector to create the packed representation from. + + + + Expands the packed representation into a Vector4. + + The expanded vector. + + + + Directly gets or sets the packed representation of the value. + + The packed representation of the value. + + + + Create a instance with default values for all properties. + + + + + Reset all properties to their default values. + + + + + Create a copy of this instance. + + + + + + Get or set the format of the back buffer. + + + + + Get or set the height of the back buffer. + + + + + Get or set the width of the back buffer. + + + + + Get the bounds of the back buffer. + + + + + Get or set the handle of the window that will present the back buffer. + + + + + Get or set the depth stencil format for the back buffer. + + + + + Get or set a value indicating if we are in full screen mode. + + + + + If true the will do a mode switch + when going to full screen mode. If false it will instead do a + soft full screen by maximizing the window and making it borderless. + + + + + Get or set the multisample count for the back buffer. + + + + + Get or set the presentation interval. + + + + + Get or set the display orientation. + + + + + Get or set the RenderTargetUsage for the back buffer. + Determines if the back buffer is cleared when it is set as the + render target by the . + target. + + + + + Defines how updates the game window. + + + + + Equivalent to . + + + + + The driver waits for the vertical retrace period, before updating window client area. Present operations are not affected more frequently than the screen refresh rate. + + + + + The driver waits for the vertical retrace period, before updating window client area. Present operations are not affected more frequently than every second screen refresh. + + + + + The driver updates the window client area immediately. Present operations might be affected immediately. There is no limit for framerate. + + + + + Gets the handle to a shared resource. + + + The handle of the shared resource, or if the texture was not + created as a shared resource. + + + + + Gets a unique identifier of this texture for sorting purposes. + + + For example, this value is used by when drawing with . + The value is an implementation detail and may change between application launches or MonoGame versions. + It is only guaranteed to stay consistent during application lifetime. + + + + + Creates a new texture of the given size + + + + + + + + Creates a new texture of a given size with a surface format and optional mipmaps + + + + + + + + + + Creates a new texture array of a given size with a surface format and optional mipmaps. + Throws ArgumentException if the current GraphicsDevice can't work with texture arrays + + + + + + + + + + + Creates a new texture of a given size with a surface format and optional mipmaps. + + + + + + + + + + + Changes the pixels of the texture + Throws ArgumentNullException if data is null + Throws ArgumentException if arraySlice is greater than 0, and the GraphicsDevice does not support texture arrays + + + Layer of the texture to modify + Index inside the texture array + Area to modify + New data for the texture + Start position of data + + + + + Changes the pixels of the texture + + + Layer of the texture to modify + Area to modify + New data for the texture + Start position of data + + + + + Changes the texture's pixels + + + New data for the texture + Start position of data + + + + + Changes the texture's pixels + + New data for the texture + + + + + Retrieves the contents of the texture + Throws ArgumentException if data is null, data.length is too short or + if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays + + + Layer of the texture + Index inside the texture array + Area of the texture to retrieve + Destination array for the data + Starting index of data where to write the pixel data + Number of pixels to read + + + + Retrieves the contents of the texture + Throws ArgumentException if data is null, data.length is too short or + if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays + + + Layer of the texture + Area of the texture + Destination array for the texture data + First position in data where to write the pixel data + Number of pixels to read + + + + Retrieves the contents of the texture + Throws ArgumentException if data is null, data.length is too short or + if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays + + + Destination array for the texture data + First position in data where to write the pixel data + Number of pixels to read + + + + Retrieves the contents of the texture + Throws ArgumentException if data is null, data.length is too short or + if arraySlice is greater than 0 and the GraphicsDevice doesn't support texture arrays + + + Destination array for the texture data + + + + Creates a Texture2D from a stream, supported formats bmp, gif, jpg, png, tif and dds (only for simple textures). + May work with other formats, but will not work with tga files. + + The graphics device where the texture will be created. + The stream from which to read the image data. + The texture created from the image stream. + Note that different image decoders may generate slight differences between platforms, but perceptually + the images should be identical. This call does not premultiply the image alpha, but areas of zero alpha will + result in black color data. + + + + + Converts the texture to a JPG image + + Destination for the image + + + + + + Converts the texture to a PNG image + + Destination for the image + + + + + + Gets the dimensions of the texture + + + + + Gets the width of the texture in pixels. + + + + + Gets the height of the texture in pixels. + + + + + Allows child class to specify the surface type, eg: a swap chain. + + + + + Gets a copy of 3D texture data, specifying a mipmap level, source box, start index, and number of elements. + + The type of the elements in the array. + Mipmap level. + Position of the left side of the box on the x-axis. + Position of the top of the box on the y-axis. + Position of the right side of the box on the x-axis. + Position of the bottom of the box on the y-axis. + Position of the front of the box on the z-axis. + Position of the back of the box on the z-axis. + Array of data. + Index of the first element to get. + Number of elements to get. + + + + Gets a copy of 3D texture data, specifying a start index and number of elements. + + The type of the elements in the array. + Array of data. + Index of the first element to get. + Number of elements to get. + + + + Gets a copy of 3D texture data. + + The type of the elements in the array. + Array of data. + + + + Represents a texture cube that can be used as a render target. + + + + + Gets a copy of cube texture data specifying a cubemap face. + + + The cube map face. + The data. + + + + Gets the width and height of the cube map face in pixels. + + The width and height of a cube map face in pixels. + + + + Initializes a new instance of the class. + + The graphics device. + The width and height of a texture cube face in pixels. + to generate a full mipmap chain; otherwise . + The preferred format of the surface. + The preferred format of the depth-stencil buffer. + + + + Initializes a new instance of the class. + + The graphics device. + The width and height of a texture cube face in pixels. + to generate a full mipmap chain; otherwise . + The preferred format of the surface. + The preferred format of the depth-stencil buffer. + The preferred number of multisample locations. + The usage mode of the render target. + + + + + + + + + + Gets the depth-stencil buffer format of this render target. + + The format of the depth-stencil buffer. + + + + Gets the number of multisample locations. + + The number of multisample locations. + + + + Gets the usage mode of this render target. + + The usage mode of the render target. + + + + + + + + + + Defines if the previous content in a render target is preserved when it set on the graphics device. + + + + + The render target content will not be preserved. + + + + + The render target content will be preserved even if it is slow or requires extra memory. + + + + + The render target content might be preserved if the platform can do so without a penalty in performance or memory usage. + + + + + The newly created resource object. + + + + + The name of the destroyed resource. + + + + + The resource manager tag of the destroyed resource. + + + + + Mark all the sampler slots as dirty. + + + + + Defines how vertex or index buffer data will be flushed during a SetData operation. + + + + + The SetData can overwrite the portions of existing data. + + + + + The SetData will discard the entire buffer. A pointer to a new memory area is returned and rendering from the previous area do not stall. + + + + + The SetData operation will not overwrite existing data. This allows the driver to return immediately from a SetData operation and continue rendering. + + + + + Returns the platform specific shader profile identifier. + + + + + A hash value which can be used to compare shaders. + + + + + Helper class for drawing text strings and sprites in one or more optimized batches. + + + + + Constructs a . + + The , which will be used for sprite rendering. + Thrown when is null. + + + + Begins a new sprite and text batch with the specified render state. + + The drawing order for sprite and text drawing. by default. + State of the blending. Uses if null. + State of the sampler. Uses if null. + State of the depth-stencil buffer. Uses if null. + State of the rasterization. Uses if null. + A custom to override the default sprite effect. Uses default sprite effect if null. + An optional matrix used to transform the sprite geometry. Uses if null. + Thrown if is called next time without previous . + This method uses optional parameters. + The Begin should be called before drawing commands, and you cannot call it again before subsequent . + + + + Flushes all batched text and sprites to the screen. + + This command should be called after and drawing commands. + + + + Submit a sprite for drawing in the current batch. + + A texture. + The drawing location on screen or null if is used. + The drawing bounds on screen or null if is used. + An optional region on the texture which will be rendered. If null - draws full texture. + An optional center of rotation. Uses if null. + An optional rotation of this sprite. 0 by default. + An optional scale vector. Uses if null. + An optional color mask. Uses if null. + The optional drawing modificators. by default. + An optional depth of the layer of this sprite. 0 by default. + Throwns if both and been used. + This overload uses optional parameters. This overload requires only one of and been used. + + + + Submit a sprite for drawing in the current batch. + + A texture. + The drawing location on screen. + An optional region on the texture which will be rendered. If null - draws full texture. + A color mask. + A rotation of this sprite. + Center of the rotation. 0,0 by default. + A scaling of this sprite. + Modificators for drawing. Can be combined. + A depth of the layer of this sprite. + + + + Submit a sprite for drawing in the current batch. + + A texture. + The drawing location on screen. + An optional region on the texture which will be rendered. If null - draws full texture. + A color mask. + A rotation of this sprite. + Center of the rotation. 0,0 by default. + A scaling of this sprite. + Modificators for drawing. Can be combined. + A depth of the layer of this sprite. + + + + Submit a sprite for drawing in the current batch. + + A texture. + The drawing bounds on screen. + An optional region on the texture which will be rendered. If null - draws full texture. + A color mask. + A rotation of this sprite. + Center of the rotation. 0,0 by default. + Modificators for drawing. Can be combined. + A depth of the layer of this sprite. + + + + Submit a sprite for drawing in the current batch. + + A texture. + The drawing location on screen. + An optional region on the texture which will be rendered. If null - draws full texture. + A color mask. + + + + Submit a sprite for drawing in the current batch. + + A texture. + The drawing bounds on screen. + An optional region on the texture which will be rendered. If null - draws full texture. + A color mask. + + + + Submit a sprite for drawing in the current batch. + + A texture. + The drawing location on screen. + A color mask. + + + + Submit a sprite for drawing in the current batch. + + A texture. + The drawing bounds on screen. + A color mask. + + + + Submit a text string of sprites for drawing in the current batch. + + A font. + The text which will be drawn. + The drawing location on screen. + A color mask. + + + + Submit a text string of sprites for drawing in the current batch. + + A font. + The text which will be drawn. + The drawing location on screen. + A color mask. + A rotation of this string. + Center of the rotation. 0,0 by default. + A scaling of this string. + Modificators for drawing. Can be combined. + A depth of the layer of this string. + + + + Submit a text string of sprites for drawing in the current batch. + + A font. + The text which will be drawn. + The drawing location on screen. + A color mask. + A rotation of this string. + Center of the rotation. 0,0 by default. + A scaling of this string. + Modificators for drawing. Can be combined. + A depth of the layer of this string. + + + + Submit a text string of sprites for drawing in the current batch. + + A font. + The text which will be drawn. + The drawing location on screen. + A color mask. + + + + Submit a text string of sprites for drawing in the current batch. + + A font. + The text which will be drawn. + The drawing location on screen. + A color mask. + A rotation of this string. + Center of the rotation. 0,0 by default. + A scaling of this string. + Modificators for drawing. Can be combined. + A depth of the layer of this string. + + + + Submit a text string of sprites for drawing in the current batch. + + A font. + The text which will be drawn. + The drawing location on screen. + A color mask. + A rotation of this string. + Center of the rotation. 0,0 by default. + A scaling of this string. + Modificators for drawing. Can be combined. + A depth of the layer of this string. + + + + Immediately releases the unmanaged resources used by this object. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + This class handles the queueing of batch items into the GPU by creating the triangle tesselations + that are used to draw the sprite textures. This class supports int.MaxValue number of sprites to be + batched and will process them into short.MaxValue groups (strided by 6 for the number of vertices + sent to the GPU). + + + + + Initialization size for the batch item list and queue. + + + + + The maximum number of batch items that can be processed per iteration + + + + + Initialization size for the vertex array, in batch units. + + + + + The list of batch items to process. + + + + + Index pointer to the next available SpriteBatchItem in _batchItemList. + + + + + The target graphics device. + + + + + Vertex index array. The values in this array never change. + + + + + Reuse a previously allocated SpriteBatchItem from the item pool. + if there is none available grow the pool and initialize new items. + + + + + + Resize and recreate the missing indices for the index and vertex position color buffers. + + + + + + Sorts the batch items and then groups batch drawing into maximal allowed batch sets that do not + overflow the 16 bit array indices for vertices. + + The type of depth sorting desired for the rendering. + The custom effect to apply to the drawn geometry + + + + Sends the triangle list to the graphics device. Here is where the actual drawing starts. + + Start index of vertices to draw. Not used except to compute the count of vertices to draw. + End index of vertices to draw. Not used except to compute the count of vertices to draw. + The custom effect to apply to the geometry + The texture to draw. + + + + Defines sprite visual options for mirroring. + + + + + No options specified. + + + + + Render the sprite reversed along the X axis. + + + + + Render the sprite reversed along the Y axis. + + + + + Initializes a new instance of the class. + + The font texture. + The rectangles in the font texture containing letters. + The cropping rectangles, which are applied to the corresponding glyphBounds to calculate the bounds of the actual character. + The characters. + The line spacing (the distance from baseline to baseline) of the font. + The spacing (tracking) between characters in the font. + The letters kernings(X - left side bearing, Y - width and Z - right side bearing). + The character that will be substituted when a given character is not included in the font. + + + + Returns a copy of the dictionary containing the glyphs in this SpriteFont. + + A new Dictionary containing all of the glyphs inthis SpriteFont + Can be used to calculate character bounds when implementing custom SpriteFont rendering. + + + + Returns the size of a string when rendered in this font. + + The text to measure. + The size, in pixels, of 'text' when rendered in + this font. + + + + Returns the size of the contents of a StringBuilder when + rendered in this font. + + The text to measure. + The size, in pixels, of 'text' when rendered in + this font. + + + + All the glyphs in this SpriteFont. + + + + + Gets the texture that this SpriteFont draws from. + + Can be used to implement custom rendering of a SpriteFont + + + + Gets a collection of the characters in the font. + + + + + Gets or sets the character that will be substituted when a + given character is not included in the font. + + + + + Gets or sets the line spacing (the distance from baseline + to baseline) of the font. + + + + + Gets or sets the spacing (tracking) between characters in + the font. + + + + + Struct that defines the spacing, Kerning, and bounds of a character. + + Provides the data necessary to implement custom SpriteFont rendering. + + + + The char associated with this glyph. + + + + + Rectangle in the font texture where this letter exists. + + + + + Cropping applied to the BoundsInTexture to calculate the bounds of the actual character. + + + + + The amount of space between the left side ofthe character and its first pixel in the X dimention. + + + + + The amount of space between the right side of the character and its last pixel in the X dimention. + + + + + Width of the character before kerning is applied. + + + + + Width of the character before kerning is applied. + + + + + Defines sprite sort rendering options. + + + + + All sprites are drawing when invokes, in order of draw call sequence. Depth is ignored. + + + + + Each sprite is drawing at individual draw call, instead of . Depth is ignored. + + + + + Same as , except sprites are sorted by texture prior to drawing. Depth is ignored. + + + + + Same as , except sprites are sorted by depth in back-to-front order prior to drawing. + + + + + Same as , except sprites are sorted by depth in front-to-back order prior to drawing. + + + + + Defines a blend mode. + + + + + Each component of the color is multiplied by {1, 1, 1, 1}. + + + + + Each component of the color is multiplied by {0, 0, 0, 0}. + + + + + Each component of the color is multiplied by the source color. + {Rs, Gs, Bs, As}, where Rs, Gs, Bs, As are color source values. + + + + + Each component of the color is multiplied by the inverse of the source color. + {1 − Rs, 1 − Gs, 1 − Bs, 1 − As}, where Rs, Gs, Bs, As are color source values. + + + + + Each component of the color is multiplied by the alpha value of the source. + {As, As, As, As}, where As is the source alpha value. + + + + + Each component of the color is multiplied by the inverse of the alpha value of the source. + {1 − As, 1 − As, 1 − As, 1 − As}, where As is the source alpha value. + + + + + Each component color is multiplied by the destination color. + {Rd, Gd, Bd, Ad}, where Rd, Gd, Bd, Ad are color destination values. + + + + + Each component of the color is multiplied by the inversed destination color. + {1 − Rd, 1 − Gd, 1 − Bd, 1 − Ad}, where Rd, Gd, Bd, Ad are color destination values. + + + + + Each component of the color is multiplied by the alpha value of the destination. + {Ad, Ad, Ad, Ad}, where Ad is the destination alpha value. + + + + + Each component of the color is multiplied by the inversed alpha value of the destination. + {1 − Ad, 1 − Ad, 1 − Ad, 1 − Ad}, where Ad is the destination alpha value. + + + + + Each component of the color is multiplied by a constant in the . + + + + + Each component of the color is multiplied by a inversed constant in the . + + + + + Each component of the color is multiplied by either the alpha of the source color, or the inverse of the alpha of the source color, whichever is greater. + {f, f, f, 1}, where f = min(As, 1 − As), where As is the source alpha value. + + + + + Defines a function for color blending. + + + + + The function will adds destination to the source. (srcColor * srcBlend) + (destColor * destBlend) + + + + + The function will subtracts destination from source. (srcColor * srcBlend) − (destColor * destBlend) + + + + + The function will subtracts source from destination. (destColor * destBlend) - (srcColor * srcBlend) + + + + + The function will extracts minimum of the source and destination. min((srcColor * srcBlend),(destColor * destBlend)) + + + + + The function will extracts maximum of the source and destination. max((srcColor * srcBlend),(destColor * destBlend)) + + + + + Returns the target specific blend state. + + The 0 to 3 target blend state index. + A target blend state. + + + + The color used as blend factor when alpha blending. + + + is set to this value when this + is bound to a GraphicsDevice. + + + + + Enables use of the per-target blend states. + + + + + The comparison function used for depth, stencil, and alpha tests. + + + + + Always passes the test. + + + + + Never passes the test. + + + + + Passes the test when the new pixel value is less than current pixel value. + + + + + Passes the test when the new pixel value is less than or equal to current pixel value. + + + + + Passes the test when the new pixel value is equal to current pixel value. + + + + + Passes the test when the new pixel value is greater than or equal to current pixel value. + + + + + Passes the test when the new pixel value is greater than current pixel value. + + + + + Passes the test when the new pixel value does not equal to current pixel value. + + + + + Defines a culling mode for faces in rasterization process. + + + + + Do not cull faces. + + + + + Cull faces with clockwise order. + + + + + Cull faces with counter clockwise order. + + + + + Defines formats for depth-stencil buffer. + + + + + Depth-stencil buffer will not be created. + + + + + 16-bit depth buffer. + + + + + 24-bit depth buffer. Equivalent of for DirectX platforms. + + + + + 32-bit depth-stencil buffer. Where 24-bit depth and 8-bit for stencil used. + + + + + Defines options for filling the primitive. + + + + + Draw solid faces for each primitive. + + + + + Draw lines for each primitive. + + + + + When using comparison sampling, also set to . + + + + + Defines stencil buffer operations. + + + + + Does not update the stencil buffer entry. + + + + + Sets the stencil buffer entry to 0. + + + + + Replaces the stencil buffer entry with a reference value. + + + + + Increments the stencil buffer entry, wrapping to 0 if the new value exceeds the maximum value. + + + + + Decrements the stencil buffer entry, wrapping to the maximum value if the new value is less than 0. + + + + + Increments the stencil buffer entry, clamping to the maximum value. + + + + + Decrements the stencil buffer entry, clamping to 0. + + + + + Inverts the bits in the stencil buffer entry. + + + + + Defines modes for addressing texels using texture coordinates that are outside of the range of 0.0 to 1.0. + + + + + Texels outside range will form the tile at every integer junction. + + + + + Texels outside range will be set to color of 0.0 or 1.0 texel. + + + + + Same as but tiles will also flipped at every integer junction. + + + + + Texels outside range will be set to the border color. + + + + + Defines filtering types for texture sampler. + + + + + Use linear filtering. + + + + + Use point filtering. + + + + + Use anisotropic filtering. + + + + + Use linear filtering to shrink or expand, and point filtering between mipmap levels (mip). + + + + + Use point filtering to shrink (minify) or expand (magnify), and linear filtering between mipmap levels. + + + + + Use linear filtering to shrink, point filtering to expand, and linear filtering between mipmap levels. + + + + + Use linear filtering to shrink, point filtering to expand, and point filtering between mipmap levels. + + + + + Use point filtering to shrink, linear filtering to expand, and linear filtering between mipmap levels. + + + + + Use point filtering to shrink, linear filtering to expand, and point filtering between mipmap levels. + + + + + Filtering modes for texture samplers. + + + + + Defines types of surface formats. + + + + + Unsigned 32-bit ARGB pixel format for store 8 bits per channel. + + + + + Unsigned 16-bit BGR pixel format for store 5 bits for blue, 6 bits for green, and 5 bits for red. + + + + + Unsigned 16-bit BGRA pixel format where 5 bits reserved for each color and last bit is reserved for alpha. + + + + + Unsigned 16-bit BGRA pixel format for store 4 bits per channel. + + + + + DXT1. Texture format with compression. Surface dimensions must be a multiple 4. + + + + + DXT3. Texture format with compression. Surface dimensions must be a multiple 4. + + + + + DXT5. Texture format with compression. Surface dimensions must be a multiple 4. + + + + + Signed 16-bit bump-map format for store 8 bits for u and v data. + + + + + Signed 32-bit bump-map format for store 8 bits per channel. + + + + + Unsigned 32-bit RGBA pixel format for store 10 bits for each color and 2 bits for alpha. + + + + + Unsigned 32-bit RG pixel format using 16 bits per channel. + + + + + Unsigned 64-bit RGBA pixel format using 16 bits per channel. + + + + + Unsigned A 8-bit format for store 8 bits to alpha channel. + + + + + IEEE 32-bit R float format for store 32 bits to red channel. + + + + + IEEE 64-bit RG float format for store 32 bits per channel. + + + + + IEEE 128-bit RGBA float format for store 32 bits per channel. + + + + + Float 16-bit R format for store 16 bits to red channel. + + + + + Float 32-bit RG format for store 16 bits per channel. + + + + + Float 64-bit ARGB format for store 16 bits per channel. + + + + + Float pixel format for high dynamic range data. + + + + + For compatibility with WPF D3DImage. + + + + + For compatibility with WPF D3DImage. + + + + + Unsigned 32-bit RGBA sRGB pixel format that supports 8 bits per channel. + + + + + Unsigned 32-bit sRGB pixel format that supports 8 bits per channel. 8 bits are unused. + + + + + Unsigned 32-bit sRGB pixel format that supports 8 bits per channel. + + + + + DXT1. sRGB texture format with compression. Surface dimensions must be a multiple of 4. + + + + + DXT3. sRGB texture format with compression. Surface dimensions must be a multiple of 4. + + + + + DXT5. sRGB texture format with compression. Surface dimensions must be a multiple of 4. + + + + + PowerVR texture compression format (iOS and Android). + + + + + PowerVR texture compression format (iOS and Android). + + + + + PowerVR texture compression format (iOS and Android). + + + + + PowerVR texture compression format (iOS and Android). + + + + + Ericcson Texture Compression (Android) + + + + + DXT1 version where 1-bit alpha is used. + + + + + ATC/ATITC compression (Android) + + + + + ATC/ATITC compression (Android) + + + + + A swap chain used for rendering to a secondary GameWindow. + + + This is an extension and not part of stock XNA. + It is currently implemented for Windows and DirectX only. + + + + + Displays the contents of the active back buffer to the screen. + + + + + Marks all texture slots as dirty. + + + + + A usage hint for optimizing memory placement of graphics buffers. + + + + + No special usage. + + + + + The buffer will not be readable and will be optimized for rendering and writing. + + + + + Gets the relevant IndexElementSize enum value for the given type. + + The graphics device. + The type to use for the index buffer + The IndexElementSize enum value that matches the type + + + + The GraphicsDevice is resetting, so GPU resources must be recreated. + + + + + Special offset used internally by GraphicsDevice.DrawUserXXX() methods. + + + + + The GraphicsDevice is resetting, so GPU resources must be recreated. + + + + + Get the vertex data froom this VertexBuffer. + + The struct you want to fill. + The offset to the first element in the vertex buffer in bytes. + An array of T's to be filled. + The index to start filling the data array. + The number of T's to get. + The size of how a vertex buffer element should be interpreted. + + + Note that this pulls data from VRAM into main memory and because of that is a very expensive operation. + It is often a better idea to keep a copy of the data in main memory. + + + +

Using this operation it is easy to get certain vertex elements from a VertexBuffer.

+

+ For example to get the texture coordinates from a VertexBuffer of you can call + GetData(4 * 3, data, elementCount, 20). 'data'should be an array of in this example. + The offsetInBytes is the number of bytes taken up by the of the vertex. + For vertexStride we pass the size of a . +

+
+
+ + + Sets the vertex buffer data, specifying the index at which to start copying from the source data array, + the number of elements to copy from the source data array, + and how far apart elements from the source data array should be when they are copied into the vertex buffer. + + Type of elements in the data array. + Offset in bytes from the beginning of the vertex buffer to the start of the copied data. + Data array. + Index at which to start copying from . + Must be within the array bounds. + Number of elements to copy from . + The combination of and + must be within the array bounds. + Specifies how far apart, in bytes, elements from should be when + they are copied into the vertex buffer. + In almost all cases this should be sizeof(T), to create a tightly-packed vertex buffer. + If you specify sizeof(T), elements from will be copied into the + vertex buffer with no padding between each element. + If you specify a value greater than sizeof(T), elements from will be copied + into the vertex buffer with padding between each element. + If you specify 0 for this parameter, it will be treated as if you had specified sizeof(T). + With the exception of 0, you must specify a value greater than or equal to sizeof(T). + + If T is VertexPositionTexture, but you want to set only the position component of the vertex data, + you would call this method as follows: + + Vector3[] positions = new Vector3[numVertices]; + vertexBuffer.SetData(0, positions, 0, numVertices, vertexBuffer.VertexDeclaration.VertexStride); + + + Continuing from the previous example, if you want to set only the texture coordinate component of the vertex data, + you would call this method as follows (note the use of : + + Vector2[] texCoords = new Vector2[numVertices]; + vertexBuffer.SetData(12, texCoords, 0, numVertices, vertexBuffer.VertexDeclaration.VertexStride); + + + + If you provide a byte[] in the parameter, then you should almost certainly + set to 1, to avoid leaving any padding between the byte values + when they are copied into the vertex buffer. + + + + + Sets the vertex buffer data, specifying the index at which to start copying from the source data array, + and the number of elements to copy from the source data array. This is the same as calling + with offsetInBytes equal to 0, + and vertexStride equal to sizeof(T). + + Type of elements in the data array. + Data array. + Index at which to start copying from . + Must be within the array bounds. + Number of elements to copy from . + The combination of and + must be within the array bounds. + + + + Sets the vertex buffer data. This is the same as calling + with offsetInBytes and startIndex equal to 0, elementCount equal to data.Length, + and vertexStride equal to sizeof(T). + + Type of elements in the data array. + Data array. + + + + Special offset used internally by GraphicsDevice.DrawUserXXX() methods. + + + + + Immutable version of . Can be used as a key in the + . + + + + + Stores the vertex layout (input elements) for the input assembler stage. + + + In the DirectX version the input layouts are cached in a dictionary. The + is used as the key in the dictionary and therefore needs to + implement . Two instance are + considered equal if the vertex layouts are structurally identical. + + + + + Initializes a new instance of the class. + + The maximum number of vertex buffer slots. + + + + Initializes a new instance of the class. + + The array for storing vertex declarations. + The array for storing instance frequencies. + The number of used slots. + + + + Determines whether the specified is equal to this instance. + + The object to compare with the current object. + + if the specified is equal to this instance; + otherwise, . + + + + + Determines whether the specified is equal to this + instance. + + The object to compare with the current object. + + if the specified is equal to this + instance; otherwise, . + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data + structures like a hash table. + + + + + Compares two instances to determine whether they are the + same. + + The first instance. + The second instance. + + if the and are + the same; otherwise, . + + + + + Compares two instances to determine whether they are + different. + + The first instance. + The second instance. + + if the and are + the different; otherwise, . + + + + + Gets or sets the number of used input slots. + + The number of used input slots. + + + + Initializes a new instance of the class. + + The vertex declarations per resource slot. + The instance frequencies per resource slot. + + The specified arrays are stored internally - the arrays are not copied. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data + structures like a hash table. + + + + + Defines size for index in and . + + + + + 16-bit short/ushort value been used. + + + + + 32-bit int/uint value been used. + + + + + Caches DirectX input layouts for the input assembler stage. + + + + + Initializes a new instance of the class. + + The graphics device. + The byte code of the vertex shader. + + + + Releases all resources used by an instance of the class. + + + This method calls the virtual method, passing in + , and then suppresses finalization of the instance. + + + + + Releases the unmanaged resources used by an instance of the + class and optionally releases the managed resources. + + + to release both managed and unmanaged resources; + to release only unmanaged resources. + + + + + Gets or create the DirectX input layout for the specified vertex buffers. + + The vertex buffers. + The DirectX input layout. + + + + Gets a more helpful message for the SharpDX invalid arg error. + + The input elements. + The exception message. + + + + Defines how vertex data is ordered. + + + + + Renders the specified vertices as a sequence of isolated triangles. Each group of three vertices defines a separate triangle. Back-face culling is affected by the current winding-order render state. + + + + + Renders the vertices as a triangle strip. The back-face culling flag is flipped automatically on even-numbered triangles. + + + + + Renders the vertices as a list of isolated straight line segments; the count may be any positive integer. + + + + + Renders the vertices as a single polyline; the count may be any positive integer. + + + + + Defines how a vertex buffer is bound to the graphics device for rendering. + + + + + Creates an instance of . + + The vertex buffer to bind. + + + + Creates an instance of . + + The vertex buffer to bind. + + The index of the first vertex in the vertex buffer to use. + + + + + Creates an instance of VertexBufferBinding. + + The vertex buffer to bind. + + The index of the first vertex in the vertex buffer to use. + + + The number of instances to draw using the same per-instance data before advancing in the + buffer by one element. This value must be 0 for an element that contains per-vertex data + and greater than 0 for per-instance data. + + + is . + + + or is invalid. + + + + + Gets the vertex buffer. + + The vertex buffer. + + + + Gets the index of the first vertex in the vertex buffer to use. + + The index of the first vertex in the vertex buffer to use. + + + + Gets the number of instances to draw using the same per-instance data before advancing + in the buffer by one element. + + + The number of instances to draw using the same per-instance data before advancing in the + buffer by one element. This value must be 0 for an element that contains per-vertex + data and greater than 0 for per-instance data. + + + + + Stores the vertex buffers to be bound to the input assembler stage. + + + + + Initializes a new instance of the class. + + The maximum number of vertex buffer slots. + + + + Clears the vertex buffer slots. + + + if the input layout was changed; otherwise, + . + + + + + Binds the specified vertex buffer to the first input slot. + + The vertex buffer. + + The offset (in vertices) from the beginning of the vertex buffer to the first vertex to + use. + + + if the input layout was changed; otherwise, + . + + + + + Binds the the specified vertex buffers to the input slots. + + The vertex buffer bindings. + + if the input layout was changed; otherwise, + . + + + + + Gets vertex buffer bound to the specified input slots. + + The vertex buffer binding. + + + + Gets vertex buffers bound to the input slots. + + The vertex buffer bindings. + + + + Creates an that can be used as a key in the + . + + The . + + + + Helper class which ensures we only lookup a vertex + declaration for a particular type once. + + A vertex structure which implements IVertexType. + + + + Defines per-vertex data of a vertex buffer. + + + implements and can be used as + a key in a dictionary. Two vertex declarations are considered equal if the vertices are + structurally equivalent, i.e. the vertex elements and the vertex stride are identical. (The + properties and are + ignored in and !) + + + + + Initializes a new instance of the class. + + The vertex elements. + + is or empty. + + + + + Initializes a new instance of the class. + + The size of a vertex (including padding) in bytes. + The vertex elements. + + is or empty. + + + + + Returns the VertexDeclaration for Type. + + A value type which implements the IVertexType interface. + The VertexDeclaration. + + Prefer to use VertexDeclarationCache when the declaration lookup + can be performed with a templated type. + + + + + Gets a copy of the vertex elements. + + A copy of the vertex elements. + + + + Determines whether the specified is equal to this instance. + + The object to compare with the current object. + + if the specified is equal to this instance; + otherwise, . + + + + + Determines whether the specified is equal to this + instance. + + The object to compare with the current object. + + if the specified is equal to this + instance; otherwise, . + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data + structures like a hash table. + + + + + Compares two instances to determine whether they are the + same. + + The first instance. + The second instance. + + if the and are + the same; otherwise, . + + + + + Compares two instances to determine whether they are + different. + + The first instance. + The second instance. + + if the and are + the different; otherwise, . + + + + + Gets the internal vertex elements array. + + The internal vertex elements array. + + + + Gets the size of a vertex (including padding) in bytes. + + The size of a vertex (including padding) in bytes. + + + + Defines a single element in a vertex. + + + + + Initializes a new instance of the struct. + + The offset in bytes from the beginning of the stream to the vertex element. + The element format. + The HLSL semantic of the element in the vertex shader input-signature. + The semantic index, which is required if the semantic is used for more than one vertex element. + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data + structures like a hash table. + + + + + Returns a that represents this instance. + + A that represents this instance. + + + + Determines whether the specified is equal to this instance. + + The object to compare with the current object. + + if the specified is equal to this instance; + otherwise, . + + + + + Determines whether the specified is equal to this + instance. + + The object to compare with the current object. + + if the specified is equal to this + instance; otherwise, . + + + + + Compares two instances to determine whether they are the + same. + + The first instance. + The second instance. + + if the and are + the same; otherwise, . + + + + + Compares two instances to determine whether they are + different. + + The first instance. + The second instance. + + if the and are + the different; otherwise, . + + + + + Gets the DirectX . + + The input resource slot. + + The number of instances to draw using the same per-instance data before advancing in the + buffer by one element. This value must be 0 for an element that contains per-vertex + data. + + . + + Unknown vertex element format or usage! + + + + + Gets or sets the offset in bytes from the beginning of the stream to the vertex element. + + The offset in bytes. + + + + Gets or sets the data format. + + The data format. + + + + Gets or sets the HLSL semantic of the element in the vertex shader input. + + The HLSL semantic of the element in the vertex shader input. + + + + Gets or sets the semantic index. + + + The semantic index, which is required if the semantic is used for more than one vertex + element. + + + Usage indices in a vertex declaration usually start with 0. When multiple vertex buffers + are bound to the input assembler stage (see ), + MonoGame internally adjusts the usage indices based on the order in which the vertex + buffers are bound. + + + + + Defines vertex element formats. + + + + + Single 32-bit floating point number. + + + + + Two component 32-bit floating point number. + + + + + Three component 32-bit floating point number. + + + + + Four component 32-bit floating point number. + + + + + Four component, packed unsigned byte, mapped to 0 to 1 range. + + + + + Four component unsigned byte. + + + + + Two component signed 16-bit integer. + + + + + Four component signed 16-bit integer. + + + + + Normalized, two component signed 16-bit integer. + + + + + Normalized, four component signed 16-bit integer. + + + + + Two component 16-bit floating point number. + + + + + Four component 16-bit floating point number. + + + + + Defines usage for vertex elements. + + + + + Position data. + + + + + Color data. + + + + + Texture coordinate data or can be used for user-defined data. + + + + + Normal data. + + + + + Binormal data. + + + + + Tangent data. + + + + + Blending indices data. + + + + + Blending weight data. + + + + + Depth data. + + + + + Fog data. + + + + + Point size data. Usable for drawing point sprites. + + + + + Sampler data for specifies the displacement value to look up. + + + + + Single, positive float value, specifies a tessellation factor used in the tessellation unit to control the rate of tessellation. + + + + + Describes the view bounds for render-target surface. + + + + + Constructs a viewport from the given values. The will be 0.0 and will be 1.0. + + The x coordinate of the upper-left corner of the view bounds in pixels. + The y coordinate of the upper-left corner of the view bounds in pixels. + The width of the view bounds in pixels. + The height of the view bounds in pixels. + + + + Constructs a viewport from the given values. + + The x coordinate of the upper-left corner of the view bounds in pixels. + The y coordinate of the upper-left corner of the view bounds in pixels. + The width of the view bounds in pixels. + The height of the view bounds in pixels. + The lower limit of depth. + The upper limit of depth. + + + + Creates a new instance of struct. + + A that defines the location and size of the in a render target. + + + + Projects a from world space into screen space. + + The to project. + The projection . + The view . + The world . + + + + + Unprojects a from screen space into world space. + Note source.Z must be less than or equal to MaxDepth. + + The to unproject. + The projection . + The view . + The world . + + + + + Returns a representation of this in the format: + {X:[] Y:[] Width:[] Height:[] MinDepth:[] MaxDepth:[]} + + A representation of this . + + + + The height of the bounds in pixels. + + + + + The upper limit of depth of this viewport. + + + + + The lower limit of depth of this viewport. + + + + + The width of the bounds in pixels. + + + + + The y coordinate of the beginning of this viewport. + + + + + The x coordinate of the beginning of this viewport. + + + + + Gets the aspect ratio of this , which is width / height. + + + + + Gets or sets a boundary of this . + + + + + Returns the subset of the viewport that is guaranteed to be visible on a lower quality display. + + + + + Defines the buttons on gamepad. + + + + + Directional pad up. + + + + + Directional pad down. + + + + + Directional pad left. + + + + + Directional pad right. + + + + + START button. + + + + + BACK button. + + + + + Left stick button (pressing the left stick). + + + + + Right stick button (pressing the right stick). + + + + + Left bumper (shoulder) button. + + + + + Right bumper (shoulder) button. + + + + + Big button. + + + + + A button. + + + + + B button. + + + + + X button. + + + + + Y button. + + + + + Left stick is towards the left. + + + + + Right trigger. + + + + + Left trigger. + + + + + Right stick is towards up. + + + + + Right stick is towards down. + + + + + Right stick is towards the right. + + + + + Right stick is towards the left. + + + + + Left stick is towards up. + + + + + Left stick is towards down. + + + + + Left stick is towards the right. + + + + + Defines a button state for buttons of mouse, gamepad or joystick. + + + + + The button is released. + + + + + The button is pressed. + + + + + Supports querying the game controllers and setting the vibration motors. + + + + + Returns the capabilites of the connected controller. + + Player index for the controller you want to query. + The capabilites of the controller. + + + + Returns the capabilites of the connected controller. + + Index for the controller you want to query. + The capabilites of the controller. + + + + Gets the current state of a game pad controller with an independent axes dead zone. + + Player index for the controller you want to query. + The state of the controller. + + + + Gets the current state of a game pad controller with an independent axes dead zone. + + Index for the controller you want to query. + The state of the controller. + + + + Gets the current state of a game pad controller, using a specified dead zone + on analog stick positions. + + Player index for the controller you want to query. + Enumerated value that specifies what dead zone type to use. + The state of the controller. + + + + Gets the current state of a game pad controller, using a specified dead zone + on analog stick positions. + + Index for the controller you want to query. + Enumerated value that specifies what dead zone type to use. + The state of the controller. + + + + Gets the current state of a game pad controller, using a specified dead zone + on analog stick positions. + + Player index for the controller you want to query. + Enumerated value that specifies what dead zone type to use for the left stick. + Enumerated value that specifies what dead zone type to use for the right stick. + The state of the controller. + + + + Gets the current state of a game pad controller, using a specified dead zone + on analog stick positions. + + Index for the controller you want to query. + Enumerated value that specifies what dead zone type to use for the left stick. + Enumerated value that specifies what dead zone type to use for the right stick. + The state of the controller. + + + + Sets the vibration motor speeds on the controller device if supported. + + Player index that identifies the controller to set. + The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. + The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. + Returns true if the vibration motors were set. + + + + Sets the vibration motor speeds on the controller device if supported. + + Index for the controller you want to query. + The speed of the left motor, between 0.0 and 1.0. This motor is a low-frequency motor. + The speed of the right motor, between 0.0 and 1.0. This motor is a high-frequency motor. + Returns true if the vibration motors were set. + + + + The maximum number of game pads supported on this system. Attempting to + access a gamepad index higher than this number will result in an + being thrown by the API. + + + + + A struct that represents the current button states for the controller. + + + + + Determines whether two specified instances of are equal. + + The first object to compare. + The second object to compare. + true if and are equal; otherwise, false. + + + + Determines whether two specified instances of are not equal. + + The first object to compare. + The second object to compare. + true if and are not equal; otherwise, false. + + + + Returns a value indicating whether this instance is equal to a specified object. + + An object to compare to this instance. + true if is a and has the same value as this instance; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current . + + A that represents the current . + + + + Gets a value indicating if the button A is pressed. + + if the button A is pressed; otherwise, . + + + + Gets a value indicating if the button B is pressed. + + if the button B is pressed; otherwise, . + + + + Gets a value indicating if the button Back is pressed. + + if the button Back is pressed; otherwise, . + + + + Gets a value indicating if the button X is pressed. + + if the button X is pressed; otherwise, . + + + + Gets a value indicating if the button Y is pressed. + + if the button Y is pressed; otherwise, . + + + + Gets a value indicating if the button Start is pressed. + + if the button Start is pressed; otherwise, . + + + + Gets a value indicating if the left shoulder button is pressed. + + if the left shoulder button is pressed; otherwise, . + + + + Gets a value indicating if the left stick button is pressed. + + if the left stick button is pressed; otherwise, . + + + + Gets a value indicating if the right shoulder button is pressed. + + if the right shoulder button is pressed; otherwise, . + + + + Gets a value indicating if the right stick button is pressed. + + if the right stick button is pressed; otherwise, . + + + + Gets a value indicating if the guide button is pressed. + + if the guide button is pressed; otherwise, . + + + + A stuct that represents the controller capabilities. + + + + + Determines whether a specified instance of + is equal to another specified . + + The first to compare. + The second to compare. + true if left and right are equal; otherwise, false. + + + + Determines whether a specified instance of + is not equal to another specified . + + The first to compare. + The second to compare. + true if left and right are not equal; otherwise, false. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current . + + A that represents the current . + + + + Gets a value indicating if the controller is connected. + + true if it is connected; otherwise, false. + + + + Gets the gamepad display name. + + This property is not available in XNA. + + String representing the display name of the gamepad. + + + + Gets the unique identifier of the gamepad. + + This property is not available in XNA. + + String representing the unique identifier of the gamepad. + + + + Gets a value indicating whether the controller has the button A. + + true if it has the button A; otherwise, false. + + + + Gets a value indicating whether the controller has the button Back. + + true if it has the button Back; otherwise, false. + + + + Gets a value indicating whether the controller has the button B. + + true if it has the button B; otherwise, false. + + + + Gets a value indicating whether the controller has the directional pad down button. + + true if it has the directional pad down button; otherwise, false. + + + + Gets a value indicating whether the controller has the directional pad left button. + + true if it has the directional pad left button; otherwise, false. + + + + Gets a value indicating whether the controller has the directional pad right button. + + true if it has the directional pad right button; otherwise, false. + + + + Gets a value indicating whether the controller has the directional pad up button. + + true if it has the directional pad up button; otherwise, false. + + + + Gets a value indicating whether the controller has the left shoulder button. + + true if it has the left shoulder button; otherwise, false. + + + + Gets a value indicating whether the controller has the left stick button. + + true if it has the left stick button; otherwise, false. + + + + Gets a value indicating whether the controller has the right shoulder button. + + true if it has the right shoulder button; otherwise, false. + + + + Gets a value indicating whether the controller has the right stick button. + + true if it has the right stick button; otherwise, false. + + + + Gets a value indicating whether the controller has the button Start. + + true if it has the button Start; otherwise, false. + + + + Gets a value indicating whether the controller has the button X. + + true if it has the button X; otherwise, false. + + + + Gets a value indicating whether the controller has the button Y. + + true if it has the button Y; otherwise, false. + + + + Gets a value indicating whether the controller has the guide button. + + true if it has the guide button; otherwise, false. + + + + Gets a value indicating whether the controller has X axis for the left stick (thumbstick) button. + + true if it has X axis for the left stick (thumbstick) button; otherwise, false. + + + + Gets a value indicating whether the controller has Y axis for the left stick (thumbstick) button. + + true if it has Y axis for the left stick (thumbstick) button; otherwise, false. + + + + Gets a value indicating whether the controller has X axis for the right stick (thumbstick) button. + + true if it has X axis for the right stick (thumbstick) button; otherwise, false. + + + + Gets a value indicating whether the controller has Y axis for the right stick (thumbstick) button. + + true if it has Y axis for the right stick (thumbstick) button; otherwise, false. + + + + Gets a value indicating whether the controller has the left trigger button. + + true if it has the left trigger button; otherwise, false. + + + + Gets a value indicating whether the controller has the right trigger button. + + true if it has the right trigger button; otherwise, false. + + + + Gets a value indicating whether the controller has the left vibration motor. + + true if it has the left vibration motor; otherwise, false. + + + + Gets a value indicating whether the controller has the right vibration motor. + + true if it has the right vibration motor; otherwise, false. + + + + Gets a value indicating whether the controller has a microphone. + + true if it has a microphone; otherwise, false. + + + + Gets the type of the controller. + + A representing the controller type.. + + + + Specifies a type of dead zone processing to apply to Xbox 360 Controller + analog sticks when calling GetState. + + + + + The values of each stick are not processed and are returned by GetState as + "raw" values. This is best if you intend to implement your own dead zone + processing. + + + + + The X and Y positions of each stick are compared against the dead zone independently. + This setting is the default when calling GetState. + + + + + The combined X and Y position of each stick is compared to the dead zone. + This provides better control than IndependentAxes when the stick is used + as a two-dimensional control surface, such as when controlling a character's + view in a first-person game. + + + + + Initializes a new instance of the struct. + + Current state of directional pad up. + Current state of directional pad down. + Current state of directional pad left. + Current state of directional pad right. + + + + Determines whether two specified instances of are equal. + + The first object to compare. + The second object to compare. + true if and are equal; otherwise, false. + + + + Determines whether two specified instances of are not equal. + + The first object to compare. + The second object to compare. + true if and are not equal; otherwise, false. + + + + Returns a value indicating whether this instance is equal to a specified object. + + An object to compare to this instance. + true if is a and has the same value as this instance; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current + in a format of 0000 where each number represents a boolean value of each respecting object property: Left, Up, Right, Down. + + A that represents the current . + + + + Gets a value indicating wethever down is pressed on the directional pad. + + if the down button is pressed; otherwise, . + + + + Gets a value indicating wethever left is pressed on the directional pad. + + if the left button is pressed; otherwise, . + + + + Gets a value indicating wethever right is pressed on the directional pad. + + if the right button is pressed; otherwise, . + + + + Gets a value indicating wethever up is pressed on the directional pad. + + if the up button is pressed; otherwise, . + + + + Represents specific information about the state of the controller, + including the current state of buttons and sticks. + + This is implemented as a partial struct to allow for individual platforms + to offer additional data without separate state queries to GamePad. + + + + + The default initialized gamepad state. + + + + + Initializes a new instance of the struct + using the specified GamePadThumbSticks, GamePadTriggers, GamePadButtons, and GamePadDPad. + + Initial thumbstick state. + Initial trigger state.. + Initial button state. + Initial directional pad state. + + + + Initializes a new instance of the struct + using the specified stick, trigger, and button values. + + Left stick value. Each axis is clamped between −1.0 and 1.0. + Right stick value. Each axis is clamped between −1.0 and 1.0. + Left trigger value. This value is clamped between 0.0 and 1.0. + Right trigger value. This value is clamped between 0.0 and 1.0. + Button(s) to initialize as pressed. + + + + Initializes a new instance of the struct + using the specified stick, trigger, and button values. + + Left stick value. Each axis is clamped between −1.0 and 1.0. + Right stick value. Each axis is clamped between −1.0 and 1.0. + Left trigger value. This value is clamped between 0.0 and 1.0. + Right trigger value. This value is clamped between 0.0 and 1.0. + Array of Buttons to initialize as pressed. + + + + Gets the button mask along with 'virtual buttons' like LeftThumbstickLeft. + + + + + Determines whether specified input device buttons are pressed in this GamePadState. + + true, if button was pressed, false otherwise. + Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation. + + + + Determines whether specified input device buttons are released (not pressed) in this GamePadState. + + true, if button was released (not pressed), false otherwise. + Buttons to query. Specify a single button, or combine multiple buttons using a bitwise OR operation. + + + + Determines whether a specified instance of is equal + to another specified . + + The first to compare. + The second to compare. + true if left and right are equal; otherwise, false. + + + + Determines whether a specified instance of is not + equal to another specified . + + The first to compare. + The second to compare. + true if left and right are not equal; otherwise, false. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current . + + A that represents the current . + + + + Gets a value indicating if the controller is connected. + + true if it is connected; otherwise, false. + + + + Gets the packet number associated with this state. + + The packet number. + + + + Gets a structure that identifies what buttons on the controller are pressed. + + The buttons structure. + + + + Gets a structure that identifies what directions of the directional pad on the controller are pressed. + + The directional pad structure. + + + + Gets a structure that indicates the position of the controller sticks (thumbsticks). + + The thumbsticks position. + + + + Gets a structure that identifies the position of triggers on the controller. + + Positions of the triggers. + + + + A struct that represents the current stick (thumbstick) states for the controller. + + + + + Determines whether two specified instances of are equal. + + The first object to compare. + The second object to compare. + true if and are equal; otherwise, false. + + + + Determines whether two specified instances of are not equal. + + The first object to compare. + The second object to compare. + true if and are not equal; otherwise, false. + + + + Returns a value indicating whether this instance is equal to a specified object. + + An object to compare to this instance. + true if is a and has the same value as this instance; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current . + + A that represents the current . + + + + Gets a value indicating the position of the left stick (thumbstick). + + A indicating the current position of the left stick (thumbstick). + + + + Gets a value indicating the position of the right stick (thumbstick). + + A indicating the current position of the right stick (thumbstick). + + + + A struct that countains information on the left and the right trigger buttons. + + + + + Initializes a new instance of the struct. + + The position of the left trigger, the value will get clamped between 0.0f and 1.0f. + The position of the right trigger, the value will get clamped between 0.0f and 1.0f. + + + + Determines whether two specified instances of are equal. + + The first object to compare. + The second object to compare. + true if and are equal; otherwise, false. + + + + Determines whether two specified instances of are not equal. + + The first object to compare. + The second object to compare. + true if and are not equal; otherwise, false. + + + + Returns a value indicating whether this instance is equal to a specified object. + + An object to compare to this instance. + true if is a and has the same value as this instance; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current . + + A that represents the current . + + + + Gets the position of the left trigger. + + A value from 0.0f to 1.0f representing left trigger. + + + + Gets the position of the right trigger. + + A value from 0.0f to 1.0f representing right trigger. + + + + Defines a type of gamepad. + + + + + Unknown. + + + + + GamePad is the XBOX controller. + + + + + GamePad is a wheel. + + + + + GamePad is an arcade stick. + + + + + GamePad is a flight stick. + + + + + GamePad is a dance pad. + + + + + GamePad is a guitar. + + + + + GamePad is an alternate guitar. + + + + + GamePad is a drum kit. + + + + + GamePad is a big button pad. + + + + + Allows interaction with joysticks. Unlike the number of Buttons/Axes/DPads is not limited. + + + + + Gets the capabilites of the joystick. + + Index of the joystick you want to access. + The capabilites of the joystick. + + + + Gets the current state of the joystick. + + Index of the joystick you want to access. + The state of the joystick. + + + + Gets a value indicating whether the current platform supports reading raw joystick data. + + true if the current platform supports reading raw joystick data; otherwise, false. + + + + Describes joystick capabilities. + + + + + Determines whether a specified instance of + is equal to another specified . + + The first to compare. + The second to compare. + true if left and right are equal; otherwise, false. + + + + Determines whether a specified instance of + is not equal to another specified . + + The first to compare. + The second to compare. + true if left and right are not equal; otherwise, false. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current . + + A that represents the current . + + + + Gets a value indicating whether the joystick is connected. + + true if the joystick is connected; otherwise, false. + + + + Gets the unique identifier of the joystick. + + String representing the unique identifier of the joystick. + + + + Gets a value indicating if the joystick is a gamepad. + + true if the joystick is a gamepad; otherwise, false. + + + + Gets the axis count. + + The number of axes that the joystick possesses. + + + + Gets the button count. + + The number of buttons that the joystick possesses. + + + + Gets the hat count. + + The number of hats/dpads that the joystick possesses. + + + + Describes joystick hat state. + + + + + Determines whether a specified instance of is equal + to another specified . + + The first to compare. + The second to compare. + true if left and right are equal; otherwise, false. + + + + Determines whether a specified instance of is not + equal to another specified . + + The first to compare. + The second to compare. + true if left and right are not equal; otherwise, false. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current in a format of 0000 where each number represents a boolean value of each respecting object property: Left, Up, Right, Down. + + A that represents the current . + + + + Gets if joysticks hat "down" is pressed. + + if the button is pressed otherwise, . + + + + Gets if joysticks hat "left" is pressed. + + if the button is pressed otherwise, . + + + + Gets if joysticks hat "right" is pressed. + + if the button is pressed otherwise, . + + + + Gets if joysticks hat "up" is pressed. + + if the button is pressed otherwise, . + + + + Describes current joystick state. + + + + + Determines whether a specified instance of is + equal to another specified . + + The first to compare. + The second to compare. + true if left and right are equal; otherwise, false. + + + + Determines whether a specified instance of is not + equal to another specified . + + The first to compare. + The second to compare. + true if left and right are not equal; otherwise, false. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + true if the specified is equal to the current + ; otherwise, false. + + + + Serves as a hash function for a object. + + A hash code for this instance that is suitable for use in hashing algorithms and data structures such as a + hash table. + + + + Returns a that represents the current . + + A that represents the current . + + + + Gets a value indicating whether the joystick is connected. + + true if the joystick is connected; otherwise, false. + + + + Gets the joystick axis values. + + An array list of ints that indicate axis values. + + + + Gets the joystick button values. + + An array list of ButtonState that indicate button values. + + + + Gets the joystick hat values. + + An array list of that indicate hat values. + + + + Allows getting keystrokes from keyboard. + + + + + Returns the current keyboard state. + + Current keyboard state. + + + + Returns the current keyboard state for a given player. + + Player index of the keyboard. + Current keyboard state. + + + + Displays the keyboard input interface asynchronously. + + Title of the dialog box. + Description of the dialog box. + Default text displayed in the input area. + If password mode is enabled, the characters entered are not displayed. + Text entered by the player. Null if back was used. + Thrown when the message box is already visible + + + var name = await KeyboardInput.Show("Name", "What's your name?", "Player"); + + + + + + Hides the keyboard input interface and returns the parameter as the result of + + Result to return + Thrown when the keyboard input is not visible + + + var nameTask = KeyboardInput.Show("Name", "What's your name?", "Player"); + KeyboardInput.Cancel("John Doe"); + var name = await nameTask; + + + + + + Holds the state of keystrokes by a keyboard. + + + + + Initializes a new instance of the class. + + List of keys to be flagged as pressed on initialization. + Caps Lock state. + Num Lock state. + + + + Initializes a new instance of the class. + + List of keys to be flagged as pressed on initialization. + + + + Gets whether given key is currently being pressed. + + The key to query. + true if the key is pressed; false otherwise. + + + + Gets whether given key is currently being not pressed. + + The key to query. + true if the key is not pressed; false otherwise. + + + + Returns an array of values holding keys that are currently being pressed. + + The keys that are currently being pressed. + + + + Gets the hash code for instance. + + Hash code of the object. + + + + Compares whether two instances are equal. + + instance to the left of the equality operator. + instance to the right of the equality operator. + true if the instances are equal; false otherwise. + + + + Compares whether two instances are not equal. + + instance to the left of the inequality operator. + instance to the right of the inequality operator. + true if the instances are different; false otherwise. + + + + Compares whether current instance is equal to specified object. + + The to compare. + true if the provided instance is same with current; false otherwise. + + + + Gets the current state of the Caps Lock key. + + + + + Gets the current state of the Num Lock key. + + + + + Returns the state of a specified key. + + The key to query. + The state of the key. + + + + Defines the keys on a keyboard. + + + + + Reserved. + + + + + BACKSPACE key. + + + + + TAB key. + + + + + ENTER key. + + + + + CAPS LOCK key. + + + + + ESC key. + + + + + SPACEBAR key. + + + + + PAGE UP key. + + + + + PAGE DOWN key. + + + + + END key. + + + + + HOME key. + + + + + LEFT ARROW key. + + + + + UP ARROW key. + + + + + RIGHT ARROW key. + + + + + DOWN ARROW key. + + + + + SELECT key. + + + + + PRINT key. + + + + + EXECUTE key. + + + + + PRINT SCREEN key. + + + + + INS key. + + + + + DEL key. + + + + + HELP key. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + A key. + + + + + B key. + + + + + C key. + + + + + D key. + + + + + E key. + + + + + F key. + + + + + G key. + + + + + H key. + + + + + I key. + + + + + J key. + + + + + K key. + + + + + L key. + + + + + M key. + + + + + N key. + + + + + O key. + + + + + P key. + + + + + Q key. + + + + + R key. + + + + + S key. + + + + + T key. + + + + + U key. + + + + + V key. + + + + + W key. + + + + + X key. + + + + + Y key. + + + + + Z key. + + + + + Left Windows key. + + + + + Right Windows key. + + + + + Applications key. + + + + + Computer Sleep key. + + + + + Numeric keypad 0 key. + + + + + Numeric keypad 1 key. + + + + + Numeric keypad 2 key. + + + + + Numeric keypad 3 key. + + + + + Numeric keypad 4 key. + + + + + Numeric keypad 5 key. + + + + + Numeric keypad 6 key. + + + + + Numeric keypad 7 key. + + + + + Numeric keypad 8 key. + + + + + Numeric keypad 9 key. + + + + + Multiply key. + + + + + Add key. + + + + + Separator key. + + + + + Subtract key. + + + + + Decimal key. + + + + + Divide key. + + + + + F1 key. + + + + + F2 key. + + + + + F3 key. + + + + + F4 key. + + + + + F5 key. + + + + + F6 key. + + + + + F7 key. + + + + + F8 key. + + + + + F9 key. + + + + + F10 key. + + + + + F11 key. + + + + + F12 key. + + + + + F13 key. + + + + + F14 key. + + + + + F15 key. + + + + + F16 key. + + + + + F17 key. + + + + + F18 key. + + + + + F19 key. + + + + + F20 key. + + + + + F21 key. + + + + + F22 key. + + + + + F23 key. + + + + + F24 key. + + + + + NUM LOCK key. + + + + + SCROLL LOCK key. + + + + + Left SHIFT key. + + + + + Right SHIFT key. + + + + + Left CONTROL key. + + + + + Right CONTROL key. + + + + + Left ALT key. + + + + + Right ALT key. + + + + + Browser Back key. + + + + + Browser Forward key. + + + + + Browser Refresh key. + + + + + Browser Stop key. + + + + + Browser Search key. + + + + + Browser Favorites key. + + + + + Browser Start and Home key. + + + + + Volume Mute key. + + + + + Volume Down key. + + + + + Volume Up key. + + + + + Next Track key. + + + + + Previous Track key. + + + + + Stop Media key. + + + + + Play/Pause Media key. + + + + + Start Mail key. + + + + + Select Media key. + + + + + Start Application 1 key. + + + + + Start Application 2 key. + + + + + The OEM Semicolon key on a US standard keyboard. + + + + + For any country/region, the '+' key. + + + + + For any country/region, the ',' key. + + + + + For any country/region, the '-' key. + + + + + For any country/region, the '.' key. + + + + + The OEM question mark key on a US standard keyboard. + + + + + The OEM tilde key on a US standard keyboard. + + + + + The OEM open bracket key on a US standard keyboard. + + + + + The OEM pipe key on a US standard keyboard. + + + + + The OEM close bracket key on a US standard keyboard. + + + + + The OEM singled/double quote key on a US standard keyboard. + + + + + Used for miscellaneous characters; it can vary by keyboard. + + + + + The OEM angle bracket or backslash key on the RT 102 key keyboard. + + + + + IME PROCESS key. + + + + + Attn key. + + + + + CrSel key. + + + + + ExSel key. + + + + + Erase EOF key. + + + + + Play key. + + + + + Zoom key. + + + + + PA1 key. + + + + + CLEAR key. + + + + + Green ChatPad key. + + + + + Orange ChatPad key. + + + + + PAUSE key. + + + + + IME Convert key. + + + + + IME NoConvert key. + + + + + Kana key on Japanese keyboards. + + + + + Kanji key on Japanese keyboards. + + + + + OEM Auto key. + + + + + OEM Copy key. + + + + + OEM Enlarge Window key. + + + + + Identifies the state of a keyboard key. + + + + + Key is released. + + + + + Key is pressed. + + + + + Displays the message box interface asynchronously. + + Title of the message box. + Description of the message box. + Captions of the message box buttons. Up to three supported. + Index of button selected by the player. Null if back was used. + Thrown when the message box is already visible + + + var color = await MessageBox.Show("Color", "What's your favorite color?", new[] { "Red", "Green", "Blue" }); + + + + + + Hides the message box interface and returns the parameter as the result of + + Result to return + Thrown when the message box is not visible + + + var colorTask = MessageBox.Show("Color", "What's your favorite color?", new[] { "Red", "Green", "Blue" }); + MessageBox.Cancel(0); + var color = await colorTask; + + + + + + Allows reading position and button click information from mouse. + + + + + This API is an extension to XNA. + Gets mouse state information that includes position and button + presses for the provided window + + Current state of the mouse. + + + + Gets mouse state information that includes position and button presses + for the primary window + + Current state of the mouse. + + + + Sets mouse cursor's relative position to game-window. + + Relative horizontal position of the cursor. + Relative vertical position of the cursor. + + + + Sets the cursor image to the specified MouseCursor. + + Mouse cursor to use for the cursor image. + + + + Gets or sets the window handle for current mouse processing. + + + + + Describes a mouse cursor. + + + + + Creates a mouse cursor from the specified texture. + + Texture to use as the cursor image. + X cordinate of the image that will be used for mouse position. + Y cordinate of the image that will be used for mouse position. + + + + Gets the default arrow cursor. + + + + + Gets the cursor that appears when the mouse is over text editing regions. + + + + + Gets the waiting cursor that appears while the application/system is busy. + + + + + Gets the crosshair ("+") cursor. + + + + + Gets the cross between Arrow and Wait cursors. + + + + + Gets the northwest/southeast ("\") cursor. + + + + + Gets the northeast/southwest ("/") cursor. + + + + + Gets the horizontal west/east ("-") cursor. + + + + + Gets the vertical north/south ("|") cursor. + + + + + Gets the size all cursor which points in all directions. + + + + + Gets the cursor that points that something is invalid, usually a cross. + + + + + Gets the hand cursor, usually used for web links. + + + + + Represents a mouse state with cursor position and button press information. + + + + + Initializes a new instance of the MouseState. + + Horizontal position of the mouse in relation to the window. + Vertical position of the mouse in relation to the window. + Mouse scroll wheel's value. + Left mouse button's state. + Middle mouse button's state. + Right mouse button's state. + XBUTTON1's state. + XBUTTON2's state. + Normally should be used to get mouse current state. The constructor is provided for simulating mouse input. + + + + Initializes a new instance of the MouseState. + + Horizontal position of the mouse in relation to the window. + Vertical position of the mouse in relation to the window. + Mouse scroll wheel's value. + Left mouse button's state. + Middle mouse button's state. + Right mouse button's state. + XBUTTON1's state. + XBUTTON2's state. + Mouse horizontal scroll wheel's value. + Normally should be used to get mouse current state. The constructor is provided for simulating mouse input. + + + + Compares whether two MouseState instances are equal. + + MouseState instance on the left of the equal sign. + MouseState instance on the right of the equal sign. + true if the instances are equal; false otherwise. + + + + Compares whether two MouseState instances are not equal. + + MouseState instance on the left of the equal sign. + MouseState instance on the right of the equal sign. + true if the objects are not equal; false otherwise. + + + + Compares whether current instance is equal to specified object. + + The MouseState to compare. + + + + + Gets the hash code for MouseState instance. + + Hash code of the object. + + + + Gets horizontal position of the cursor in relation to the window. + + + + + Gets vertical position of the cursor in relation to the window. + + + + + Gets cursor position. + + + + + Gets state of the left mouse button. + + + + + Gets state of the middle mouse button. + + + + + Gets state of the right mouse button. + + + + + Returns cumulative scroll wheel value since the game start. + + + + + Returns the cumulative horizontal scroll wheel value since the game start + + + + + Gets state of the XButton1. + + + + + Gets state of the XButton2. + + + + + Represents data from a multi-touch gesture over a span of time. + + + + + Initializes a new . + + + + + + + + + + + Gets the type of the gesture. + + + + + Gets the starting time for this multi-touch gesture sample. + + + + + Gets the position of the first touch-point in the gesture sample. + + + + + Gets the position of the second touch-point in the gesture sample. + + + + + Gets the delta information for the first touch-point in the gesture sample. + + + + + Gets the delta information for the second touch-point in the gesture sample. + + + + + Enumuration of values that represent different gestures that can be processed by . + + + + + No gestures. + + + + + The user touched a single point. + + + + + States completion of a drag gesture(VerticalDrag, HorizontalDrag, or FreeDrag). + + No position or delta information is available for this sample. + + + + States that a touch was combined with a quick swipe. + + Flicks does not contain position information. The velocity of it can be read from + + + + The use touched a point and then performed a free-form drag. + + + + + The use touched a single point for approximately one second. + + As this is a single event, it will not be contionusly fired while the user is holding the touch-point. + + + + The user touched the screen and performed either left to right or right to left drag gesture. + + + + + The user either converged or diverged two touch-points on the screen which is like a two-finger drag. + + When this gesture-type is enabled and two fingers are down, it takes precedence over drag gestures. + + + + An in-progress pinch operation was completed. + + No position or delta information is available for this sample. + + + + The user tapped the device twice which is always preceded by a Tap gesture. + + If the time between two touchs are long enough, insted two seperate single Tap gestures will be generated. + + + + The user touched the screen and performed either top to bottom or bottom to top drag gesture. + + + + + Provides state information for a touch screen enabled device. + + + + + Initializes a new instance of the with a pre-determined set of touch locations. + + Array of items to initialize with. + + + + Returns specified by ID. + + + + + + + + Returns the index of the first occurrence of specified item in the collection. + + to query. + + + + + Inserts a item into the indicated position. + + The position to insert into. + The item to insert. + + + + Removes the item at specified index. + + Index of the item that will be removed from collection. + + + + Adds a to the collection. + + The item to be added. + + + + Clears all the items in collection. + + + + + Returns true if specified item exists in the collection, false otherwise./> + + The item to query for. + Returns true if queried item is found, false otherwise. + + + + Copies the collection to specified array starting from the given index. + + The array to copy items. + The starting index of the copy operation. + + + + Removes the specified item from the collection. + + The item to remove. + + + + + Returns an enumerator for the . + + Enumerable list of objects. + + + + Returns an enumerator for the . + + Enumerable list of objects. + + + + Returns an enumerator for the . + + Enumerable list of objects. + + + + States if a touch screen is available. + + + + + States if touch collection is read only. + + + + + Gets or sets the item at the specified index of the collection. + + Position of the item. + + + + + Returns the number of items that exist in the collection. + + + + + Provides the ability to iterate through the TouchLocations in an TouchCollection. + + + + + Advances the enumerator to the next element of the TouchCollection. + + + + + Immediately releases the unmanaged resources used by this object. + + + + + Gets the current element in the TouchCollection. + + + + + Attributes + + + + + True if this touch was pressed and released on the same frame. + In this case we will keep it around for the user to get by GetState that frame. + However if they do not call GetState that frame, this touch will be forgotten. + + + + + Helper for assigning an invalid touch location. + + + + + Returns a copy of the touch with the state changed to moved. + + The new touch location. + + + + Updates the touch location using the new event. + + The next event for this touch location. + + + + Holds the possible state information for a touch location.. + + + + + This touch location position is invalid. + + Typically, you will encounter this state when a new touch location attempts to get the previous state of itself. + + + + This touch location position was updated or pressed at the same position. + + + + + This touch location position is new. + + + + + This touch location position was released. + + + + + Allows retrieval of information from Touch Panel device. + + + + + Gets the current state of the touch panel. + + + + + + Returns the next available gesture on touch panel device. + + + + + + The window handle of the touch panel. Purely for Xna compatibility. + + + + + Gets or sets the display height of the touch panel. + + + + + Gets or sets the display orientation of the touch panel. + + + + + Gets or sets the display width of the touch panel. + + + + + Gets or sets enabled gestures. + + + + + Returns true if a touch gesture is available. + + + + + Allows retrieval of capabilities information from touch panel device. + + + + + Returns true if a device is available for use. + + + + + Returns the maximum number of touch locations tracked by the touch panel device. + + + + + The reserved touchId for all mouse touch points. + + + + + Maximum distance a touch location can wiggle and + not be considered to have moved. + + + + + The current touch state. + + + + + The current gesture state. + + + + + The positional scale to apply to touch input. + + + + + The current size of the display. + + + + + The next touch location identifier. + The value 1 is reserved for the mouse touch point. + + + + + The mapping between platform specific touch ids + and the touch ids we assign to touch locations. + + + + + Returns capabilities of touch panel device. + + + + + + Age all the touches, so any that were Pressed become Moved, and any that were Released are removed + + + + + Apply the given new touch to the state. If it is a Pressed it will be added as a new touch, otherwise we update the existing touch it matches + + + + + This will release all touch locations. It should only be + called on platforms where touch state is reset all at once. + + + + + Returns the next available gesture on touch panel device. + + + + + + The pinch touch locations. + + + + + If true the pinch touch locations are valid and + a pinch gesture has begun. + + + + + Used to disable emitting of tap gestures. + + + + + Used to disable emitting of hold gestures. + + + + + The current timestamp that we use for setting the timestamp of new TouchLocations + + + + + The window handle of the touch panel. Purely for Xna compatibility. + + + + + Gets or sets the display height of the touch panel. + + + + + Gets or sets the display orientation of the touch panel. + + + + + Gets or sets the display width of the touch panel. + + + + + Gets or sets enabled gestures. + + + + + Returns true if a touch gesture is available. + + + + + Immediately releases the unmanaged resources used by this object. + + + + + Returns the stream that contains the album art image data. + + + + + Returns the stream that contains the album thumbnail image data. + + + + + Returns a String representation of this Album. + + + + + Gets the hash code for this instance. + + + + + Gets the duration of the Album. + + + + + Gets the Genre of the Album. + + + + + Gets a value indicating whether the Album has associated album art. + + + + + Gets a value indicating whether the object is disposed. + + + + + Gets the name of the Album. + + + + + Gets a SongCollection that contains the songs on the album. + + + + + Immediately releases the unmanaged resources used by this object. + + + + + Gets the number of Album objects in the AlbumCollection. + + + + + Gets a value indicating whether the object is disposed. + + + + + Gets the Album at the specified index in the AlbumCollection. + + Index of the Album to get. + + + + Immediately releases the unmanaged resources used by this object. + + + + + Returns a String representation of the Artist. + + + + + Gets the hash code for this instance. + + + + + Gets the AlbumCollection for the Artist. + + + + + Gets a value indicating whether the object is disposed. + + + + + Gets the name of the Artist. + + + + + Gets the SongCollection for the Artist. + + + + + Immediately releases the unmanaged resources used by this object. + + + + + Returns a String representation of the Genre. + + + + + Gets the hash code for this instance. + + + + + Gets the AlbumCollection for the Genre. + + + + + Gets a value indicating whether the object is disposed. + + + + + Gets the name of the Genre. + + + + + Gets the SongCollection for the Genre. + + + + + Load the contents of MediaLibrary. This blocking call might take up to a few minutes depending on the platform and the size of the user's music library. + + Callback that reports back the progress of the music library loading in percents (0-100). + + + + This class provides a way for the MediaManager to be initialised exactly once, + regardless of how many different places need it, and which is called first. + + + + + Ensures that the MediaManager has been initialised. Must be called from UI thread. + + + + + Ensures that the MediaManager has been shutdown. Must be called from UI thread. + + + + + Play clears the current playback queue, and then queues up the specified song for playback. + Playback starts immediately at the beginning of the song. + + + + + Play clears the current playback queue, and then queues up the specified song for playback. + Playback starts immediately at the given position of the song. + + + + + Returns a song that can be played via . + + The name for the song. See . + The path to the song file. + + + + + Gets the Album on which the Song appears. + + + + + Gets the Artist of the Song. + + + + + Gets the Genre of the Song. + + + + + Type of sounds in a video + + + + + This video contains only music. + + + + + This video contains only dialog. + + + + + This video contains music and dialog. + + + + + Represents a video. + + + + + I actually think this is a file PATH... + + + + + Gets the duration of the Video. + + + + + Gets the frame rate of this video. + + + + + Gets the height of this video, in pixels. + + + + + Gets the VideoSoundtrackType for this video. + + + + + Gets the width of this video, in pixels. + + + + + Retrieves a Texture2D containing the current frame of video being played. + + The current frame of video. + Thrown if no video is set on the player + Thrown if the platform was unable to get a texture in a reasonable amount of time. Often the platform specific media code is running + in a different thread or process. Note: This may be a change from XNA behaviour + + + + Pauses the currently playing video. + + + + + Plays a Video. + + Video to play. + + + + Resumes a paused video. + + + + + Stops playing a video. + + + + + Immediately releases the unmanaged resources used by this object. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Gets a value that indicates whether the player is playing video in a loop. + + + + + Gets or sets the muted setting for the video player. + + + + + Gets the play position within the currently playing video. + + + + + Gets the media playback state, MediaState. + + + + + Gets the Video that is currently playing. + + + + + Video player volume, from 0.0f (silence) to 1.0f (full volume relative to the current device volume). + + + + + Compute a hash from a byte array. + + + Modified FNV Hash in C# + http://stackoverflow.com/a/468084 + + + + + Compute a hash from the content of a stream and restore the position. + + + Modified FNV Hash in C# + http://stackoverflow.com/a/468084 + + + + + Combines the filePath and relativeFile based on relativeFile being a file in the same location as filePath. + Relative directory operators (..) are also resolved + + "A\B\C.txt","D.txt" becomes "A\B\D.txt" + "A\B\C.txt","..\D.txt" becomes "A\D.txt" + Path to the file we are starting from + Relative location of another file to resolve the path to + + + + Returns the Assembly of a Type + + + + + Returns true if the given type represents a non-object type that is not abstract. + + + + + Returns true if the get method of the given property exist and are public. + Note that we allow a getter-only property to be serialized (and deserialized), + *if* CanDeserializeIntoExistingObject is true for the property type. + + + + + Returns true if the given type can be assigned the given value + + + + + Returns true if the given type can be assigned a value with the given object type + + + + + Fallback handler for Marshal.SizeOf(type) + + + + + Generics handler for Marshal.SizeOf + + + + + Returns the current timer resolution in milliseconds + + + + + Sleeps as long as possible without exceeding the specified period + + + + + Represents a Zlib stream for compression or decompression. + + + + + The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any + stream. + + + Using this stream, applications can compress or decompress data via + stream Read() and Write() operations. Either compression or + decompression can occur through either reading or writing. The compression + format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed + Data Format Specification version 3.3". This implementation of ZLIB always uses + DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.") + + + The ZLIB format allows for varying compression methods, window sizes, and dictionaries. + This implementation always uses the DEFLATE compression method, a preset dictionary, + and 15 window bits by default. + + + + This class is similar to DeflateStream, except that it adds the + RFC1950 header and trailer bytes to a compressed stream when compressing, or expects + the RFC1950 header and trailer bytes when decompressing. It is also similar to the + . + + + + + + + Create a ZlibStream using the specified CompressionMode. + + + + + When mode is CompressionMode.Compress, the ZlibStream + will use the default compression level. The "captive" stream will be + closed when the ZlibStream is closed. + + + + + + This example uses a ZlibStream to compress a file, and writes the + compressed data to another file. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".zlib") + Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + The stream which will be read or written. + Indicates whether the ZlibStream will compress or decompress. + + + + Create a ZlibStream using the specified CompressionMode and + the specified CompressionLevel. + + + + + + When mode is CompressionMode.Decompress, the level parameter is ignored. + The "captive" stream will be closed when the ZlibStream is closed. + + + + + + This example uses a ZlibStream to compress data from a file, and writes the + compressed data to another file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (Stream compressor = new ZlibStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".zlib") + Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + The stream to be read or written while deflating or inflating. + Indicates whether the ZlibStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a ZlibStream using the specified CompressionMode, and + explicitly specify whether the captive stream should be left open after + Deflation or Inflation. + + + + + + When mode is CompressionMode.Compress, the ZlibStream will use + the default compression level. + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + that will be re-read after + compression. Specify true for the parameter to leave the stream + open. + + + + See the other overloads of this constructor for example code. + + + + + The stream which will be read or written. This is called the + "captive" stream in other places in this documentation. + Indicates whether the ZlibStream will compress or decompress. + true if the application would like the stream to remain + open after inflation/deflation. + + + + Create a ZlibStream using the specified CompressionMode + and the specified CompressionLevel, and explicitly specify + whether the stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive + stream remain open after the deflation or inflation occurs. By + default, after Close() is called on the stream, the captive + stream is also closed. In some cases this is not desired, for example + if the stream is a that will be + re-read after compression. Specify true for the parameter to leave the stream open. + + + + When mode is CompressionMode.Decompress, the level parameter is + ignored. + + + + + + + This example shows how to use a ZlibStream to compress the data from a file, + and store the result into another file. The filestream remains open to allow + additional data to be written to it. + + + using (var output = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + // can write additional data to the output stream here + } + + + Using output As FileStream = File.Create(fileToCompress & ".zlib") + Using input As Stream = File.OpenRead(fileToCompress) + Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + ' can write additional data to the output stream here. + End Using + + + + The stream which will be read or written. + + Indicates whether the ZlibStream will compress or decompress. + + + true if the application would like the stream to remain open after + inflation/deflation. + + + + A tuning knob to trade speed for effectiveness. This parameter is + effective only when mode is CompressionMode.Compress. + + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + This method may be invoked in two distinct scenarios. If disposing + == true, the method has been called directly or indirectly by a + user's code, for example via the public Dispose() method. In this + case, both managed and unmanaged resources can be referenced and + disposed. If disposing == false, the method has been called by the + runtime from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources must + be referenced or disposed. + + + + indicates whether the Dispose method was invoked by user code. + + + + + Flush the stream. + + + + + Read data from the stream. + + + + + + If you wish to use the ZlibStream to compress data while reading, + you can create a ZlibStream with CompressionMode.Compress, + providing an uncompressed data stream. Then call Read() on that + ZlibStream, and the data read will be compressed. If you wish to + use the ZlibStream to decompress data while reading, you can create + a ZlibStream with CompressionMode.Decompress, providing a + readable compressed data stream. Then call Read() on that + ZlibStream, and the data will be decompressed as it is read. + + + + A ZlibStream can be used for Read() or Write(), but + not both. + + + + + + The buffer into which the read data should be placed. + + + the offset within that data array to put the first byte read. + + the number of bytes to read. + + the number of bytes read + + + + Calling this method always throws a . + + + The offset to seek to.... + IF THIS METHOD ACTUALLY DID ANYTHING. + + + The reference specifying how to apply the offset.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + nothing. This method always throws. + + + + Calling this method always throws a . + + + The new value for the stream length.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + + + Write data to the stream. + + + + + + If you wish to use the ZlibStream to compress data while writing, + you can create a ZlibStream with CompressionMode.Compress, + and a writable output stream. Then call Write() on that + ZlibStream, providing uncompressed data as input. The data sent to + the output stream will be the compressed form of the data written. If you + wish to use the ZlibStream to decompress data while writing, you + can create a ZlibStream with CompressionMode.Decompress, and a + writable output stream. Then call Write() on that stream, + providing previously compressed data. The data sent to the output stream + will be the decompressed form of the data written. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using ZLIB. + + + + Uncompress it with . + + + + + + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using ZLIB. + + + + Uncompress it with . + + + + + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a ZLIB-compressed byte array into a single string. + + + + + + + A buffer containing ZLIB-compressed data. + + + The uncompressed string + + + + Uncompress a ZLIB-compressed byte array into a byte array. + + + + + + + A buffer containing ZLIB-compressed data. + + + The data in uncompressed form + + + + This property sets the flush behavior on the stream. + Sorry, though, not sure exactly how to describe all the various settings. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + A bunch of constants used in the Zlib interface. + + + + + The maximum number of window bits for the Deflate algorithm. + + + + + The default number of window bits for the Deflate algorithm. + + + + + indicates everything is A-OK + + + + + Indicates that the last operation reached the end of the stream. + + + + + The operation ended in need of a dictionary. + + + + + There was an error with the stream - not enough data, not open and readable, etc. + + + + + There was an error with the data - not enough data, bad data, etc. + + + + + There was an error with the working buffer. + + + + + The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. + + + + + The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. + + + + + Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + + + + This class compresses and decompresses data according to the Deflate algorithm + and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + + + + + The buffer from which data is taken. + + + + + An index into the InputBuffer array, indicating where to start reading. + + + + + The number of bytes available in the InputBuffer, starting at NextIn. + + + Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes read so far, through all calls to Inflate()/Deflate(). + + + + + Buffer to store output data. + + + + + An index into the OutputBuffer array, indicating where to start writing. + + + + + The number of bytes available in the OutputBuffer, starting at NextOut. + + + Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + + + + + used for diagnostics, when something goes wrong! + + + + + The compression level to use in this codec. Useful only in compression mode. + + + + + The number of Window Bits to use. + + + This gauges the size of the sliding window, and hence the + compression effectiveness as well as memory consumption. It's best to just leave this + setting alone if you don't know what it is. The maximum value is 15 bits, which implies + a 32k window. + + + + + The compression strategy to use. + + + This is only effective in compression. The theory offered by ZLIB is that different + strategies could potentially produce significant differences in compression behavior + for different data sets. Unfortunately I don't have any good recommendations for how + to set it differently. When I tested changing the strategy I got minimally different + compression performance. It's best to leave this property alone if you don't have a + good feel for it. Or, you may want to produce a test harness that runs through the + different strategy options and evaluates them on different file types. If you do that, + let me know your results. + + + + + Create a ZlibCodec. + + + If you use this default constructor, you will later have to explicitly call + InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress + or decompress. + + + + + Create a ZlibCodec that either compresses or decompresses. + + + Indicates whether the codec should compress (deflate) or decompress (inflate). + + + + + Initialize the inflation state. + + + It is not necessary to call this before using the ZlibCodec to inflate data; + It is implicitly called when you call the constructor. + + Z_OK if everything goes well. + + + + Initialize the inflation state with an explicit flag to + govern the handling of RFC1950 header bytes. + + + + By default, the ZLIB header defined in RFC 1950 is expected. If + you want to read a zlib stream you should specify true for + expectRfc1950Header. If you have a deflate stream, you will want to specify + false. It is only necessary to invoke this initializer explicitly if you + want to specify false. + + + whether to expect an RFC1950 header byte + pair when reading the stream of data to be inflated. + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for inflation, with the specified number of window bits. + + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if all goes well. + + + + Initialize the inflation state with an explicit flag to govern the handling of + RFC1950 header bytes. + + + + If you want to read a zlib stream you should specify true for + expectRfc1950Header. In this case, the library will expect to find a ZLIB + header, as defined in RFC + 1950, in the compressed stream. If you will be reading a DEFLATE or + GZIP stream, which does not have such a header, you will want to specify + false. + + + whether to expect an RFC1950 header byte pair when reading + the stream of data to be inflated. + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if everything goes well. + + + + Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + + + You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + AvailableBytesOut before calling this method. + + + + private void InflateBuffer() + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec decompressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + MemoryStream ms = new MemoryStream(DecompressedBytes); + + int rc = decompressor.InitializeInflate(); + + decompressor.InputBuffer = CompressedBytes; + decompressor.NextIn = 0; + decompressor.AvailableBytesIn = CompressedBytes.Length; + + decompressor.OutputBuffer = buffer; + + // pass 1: inflate + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(FlushType.None); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("inflating: " + decompressor.Message); + + ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("inflating: " + decompressor.Message); + + if (buffer.Length - decompressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + decompressor.EndInflate(); + } + + + + The flush to use when inflating. + Z_OK if everything goes well. + + + + Ends an inflation session. + + + Call this after successively calling Inflate(). This will cause all buffers to be flushed. + After calling this you cannot call Inflate() without a intervening call to one of the + InitializeInflate() overloads. + + Z_OK if everything goes well. + + + + I don't know what this does! + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for deflation operation. + + + The codec will use the MAX window bits and the default level of compression. + + + + int bufferSize = 40000; + byte[] CompressedBytes = new byte[bufferSize]; + byte[] DecompressedBytes = new byte[bufferSize]; + + ZlibCodec compressor = new ZlibCodec(); + + compressor.InitializeDeflate(CompressionLevel.Default); + + compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); + compressor.NextIn = 0; + compressor.AvailableBytesIn = compressor.InputBuffer.Length; + + compressor.OutputBuffer = CompressedBytes; + compressor.NextOut = 0; + compressor.AvailableBytesOut = CompressedBytes.Length; + + while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) + { + compressor.Deflate(FlushType.None); + } + + while (true) + { + int rc= compressor.Deflate(FlushType.Finish); + if (rc == ZlibConstants.Z_STREAM_END) break; + } + + compressor.EndDeflate(); + + + + Z_OK if all goes well. You generally don't need to check the return code. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. + + + The codec will use the maximum window bits (15) and the specified + CompressionLevel. It will emit a ZLIB stream as it compresses. + + The compression level for the codec. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + and the explicit flag governing whether to emit an RFC1950 header byte pair. + + + The codec will use the maximum window bits (15) and the specified CompressionLevel. + If you want to generate a zlib stream, you should specify true for + wantRfc1950Header. In this case, the library will emit a ZLIB + header, as defined in RFC + 1950, in the compressed stream. + + The compression level for the codec. + whether to emit an initial RFC1950 byte pair in the compressed stream. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + and the specified number of window bits. + + + The codec will use the specified number of window bits and the specified CompressionLevel. + + The compression level for the codec. + the number of window bits to use. If you don't know what this means, don't use this method. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified + CompressionLevel, the specified number of window bits, and the explicit flag + governing whether to emit an RFC1950 header byte pair. + + + The compression level for the codec. + whether to emit an initial RFC1950 byte pair in the compressed stream. + the number of window bits to use. If you don't know what this means, don't use this method. + Z_OK if all goes well. + + + + Deflate one batch of data. + + + You must have set InputBuffer and OutputBuffer before calling this method. + + + + private void DeflateBuffer(CompressionLevel level) + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec compressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); + MemoryStream ms = new MemoryStream(); + + int rc = compressor.InitializeDeflate(level); + + compressor.InputBuffer = UncompressedBytes; + compressor.NextIn = 0; + compressor.AvailableBytesIn = UncompressedBytes.Length; + + compressor.OutputBuffer = buffer; + + // pass 1: deflate + do + { + compressor.NextOut = 0; + compressor.AvailableBytesOut = buffer.Length; + rc = compressor.Deflate(FlushType.None); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("deflating: " + compressor.Message); + + ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); + } + while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + compressor.NextOut = 0; + compressor.AvailableBytesOut = buffer.Length; + rc = compressor.Deflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("deflating: " + compressor.Message); + + if (buffer.Length - compressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); + } + while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + + compressor.EndDeflate(); + + ms.Seek(0, SeekOrigin.Begin); + CompressedBytes = new byte[compressor.TotalBytesOut]; + ms.Read(CompressedBytes, 0, CompressedBytes.Length); + } + + + whether to flush all data as you deflate. Generally you will want to + use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to + flush everything. + + Z_OK if all goes well. + + + + End a deflation session. + + + Call this after making a series of one or more calls to Deflate(). All buffers are flushed. + + Z_OK if all goes well. + + + + Reset a codec for another deflation session. + + + Call this to reset the deflation state. For example if a thread is deflating + non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first + block and before the next Deflate(None) of the second block. + + Z_OK if all goes well. + + + + Set the CompressionStrategy and CompressionLevel for a deflation session. + + the level of compression to use. + the strategy to use for compression. + Z_OK if all goes well. + + + + Set the dictionary to be used for either Inflation or Deflation. + + The dictionary bytes to use. + Z_OK if all goes well. + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + Describes how to flush the current deflate operation. + + + The different FlushType values are useful when using a Deflate in a streaming application. + + + + No flush at all. + + + Closes the current block, but doesn't flush it to + the output. Used internally only in hypothetical + scenarios. This was supposed to be removed by Zlib, but it is + still in use in some edge cases. + + + + + Use this during compression to specify that all pending output should be + flushed to the output buffer and the output should be aligned on a byte + boundary. You might use this in a streaming communication scenario, so that + the decompressor can get all input data available so far. When using this + with a ZlibCodec, AvailableBytesIn will be zero after the call if + enough output space has been provided before the call. Flushing will + degrade compression and so it should be used only when necessary. + + + + + Use this during compression to specify that all output should be flushed, as + with FlushType.Sync, but also, the compression state should be reset + so that decompression can restart from this point if previous compressed + data has been damaged or if random access is desired. Using + FlushType.Full too often can significantly degrade the compression. + + + + Signals the end of the compression/decompression stream. + + + + The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. + + + + + None means that the data will be simply stored, with no change at all. + If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None + cannot be opened with the default zip reader. Use a different CompressionLevel. + + + + + Same as None. + + + + + The fastest but least effective compression. + + + + + A synonym for BestSpeed. + + + + + A little slower, but better, than level 1. + + + + + A little slower, but better, than level 2. + + + + + A little slower, but better, than level 3. + + + + + A little slower than level 4, but with better compression. + + + + + The default compression level, with a good balance of speed and compression efficiency. + + + + + A synonym for Default. + + + + + Pretty good compression! + + + + + Better compression than Level7! + + + + + The "best" compression, where best means greatest reduction in size of the input data stream. + This is also the slowest compression. + + + + + A synonym for BestCompression. + + + + + Describes options for how the compression algorithm is executed. Different strategies + work better on different sorts of data. The strategy parameter can affect the compression + ratio and the speed of compression but not the correctness of the compresssion. + + + + + The default strategy is probably the best for normal data. + + + + + The Filtered strategy is intended to be used most effectively with data produced by a + filter or predictor. By this definition, filtered data consists mostly of small + values with a somewhat random distribution. In this case, the compression algorithm + is tuned to compress them better. The effect of Filtered is to force more Huffman + coding and less string matching; it is a half-step between Default and HuffmanOnly. + + + + + Using HuffmanOnly will force the compressor to do Huffman encoding only, with no + string matching. + + + + + An enum to specify the direction of transcoding - whether to compress or decompress. + + + + + Used to specify that the stream should compress the data. + + + + + Used to specify that the stream should decompress the data. + + + + + A general purpose exception class for exceptions in the Zlib library. + + + + + The ZlibException class captures exception information generated + by the Zlib library. + + + + + This ctor collects a message attached to the exception. + + the message for the exception. + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Reads a number of characters from the current source TextReader and writes + the data to the target array at the specified index. + + + The source TextReader to read from + Contains the array of characteres read from the source TextReader. + The starting index of the target array. + The maximum number of characters to read from the source TextReader. + + + The number of characters read. The number will be less than or equal to + count depending on the data available in the source TextReader. Returns -1 + if the end of the stream is reached. + + + + + Computes an Adler-32 checksum. + + + The Adler checksum is similar to a CRC checksum, but faster to compute, though less + reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + is a required part of the "ZLIB" standard. Applications will almost never need to + use this class directly. + + + + + + + Calculates the Adler32 checksum. + + + + This is used within ZLIB. You probably don't need to use this directly. + + + + To compute an Adler32 checksum on a byte array: + + var adler = Adler.Adler32(0, null, 0, 0); + adler = Adler.Adler32(adler, buffer, index, length); + + + + + + Map from a distance to a distance code. + + + No side effects. _dist_code[256] and _dist_code[257] are never used. + + + + + A class for compressing and decompressing GZIP streams. + + + + + The GZipStream is a Decorator on a + . It adds GZIP compression or decompression to any + stream. + + + + Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the + Ionic.Zlib.GZipStream can compress while writing, or decompress while + reading, but not vice versa. The compression method used is GZIP, which is + documented in IETF RFC + 1952, "GZIP file format specification version 4.3". + + + A GZipStream can be used to decompress data (through Read()) or + to compress data (through Write()), but not both. + + + + If you wish to use the GZipStream to compress data, you must wrap it + around a write-able stream. As you call Write() on the GZipStream, the + data will be compressed into the GZIP format. If you want to decompress data, + you must wrap the GZipStream around a readable stream that contains an + IETF RFC 1952-compliant stream. The data will be decompressed as you call + Read() on the GZipStream. + + + + Though the GZIP format allows data from multiple files to be concatenated + together, this stream handles only a single segment of GZIP format, typically + representing a single file. + + + + + + + + The last modified time for the GZIP stream. + + + + GZIP allows the storage of a last modified time with each GZIP entry. + When compressing data, you can set this before the first call to + Write(). When decompressing, you can retrieve this value any time + after the first call to Read(). + + + + + Create a GZipStream using the specified CompressionMode. + + + + + When mode is CompressionMode.Compress, the GZipStream will use the + default compression level. + + + + As noted in the class documentation, the CompressionMode (Compress + or Decompress) also establishes the "direction" of the stream. A + GZipStream with CompressionMode.Compress works only through + Write(). A GZipStream with + CompressionMode.Decompress works only through Read(). + + + + + + This example shows how to use a GZipStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + + This example shows how to use a GZipStream to uncompress a file. + + private void GunZipFile(string filename) + { + if (!filename.EndsWith(".gz)) + throw new ArgumentException("filename"); + var DecompressedFile = filename.Substring(0,filename.Length-3); + byte[] working = new byte[WORKING_BUFFER_SIZE]; + int n= 1; + using (System.IO.Stream input = System.IO.File.OpenRead(filename)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(DecompressedFile)) + { + while (n !=0) + { + n= decompressor.Read(working, 0, working.Length); + if (n > 0) + { + output.Write(working, 0, n); + } + } + } + } + } + } + + + + Private Sub GunZipFile(ByVal filename as String) + If Not (filename.EndsWith(".gz)) Then + Throw New ArgumentException("filename") + End If + Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) + Dim working(WORKING_BUFFER_SIZE) as Byte + Dim n As Integer = 1 + Using input As Stream = File.OpenRead(filename) + Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) + Using output As Stream = File.Create(UncompressedFile) + Do + n= decompressor.Read(working, 0, working.Length) + If n > 0 Then + output.Write(working, 0, n) + End IF + Loop While (n > 0) + End Using + End Using + End Using + End Sub + + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + + + + Create a GZipStream using the specified CompressionMode and + the specified CompressionLevel. + + + + + The CompressionMode (Compress or Decompress) also establishes the + "direction" of the stream. A GZipStream with + CompressionMode.Compress works only through Write(). A + GZipStream with CompressionMode.Decompress works only + through Read(). + + + + + + + This example shows how to use a GZipStream to compress a file into a .gz file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".gz")) + { + using (Stream compressor = new GZipStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".gz") + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to be read or written while deflating or inflating. + Indicates whether the GZipStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a GZipStream using the specified CompressionMode, and + explicitly specify whether the stream should be left open after Deflation + or Inflation. + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compressed data has been written + to it. Specify true for the parameter to leave + the stream open. + + + + The (Compress or Decompress) also + establishes the "direction" of the stream. A GZipStream with + CompressionMode.Compress works only through Write(). A GZipStream + with CompressionMode.Decompress works only through Read(). + + + + The GZipStream will use the default compression level. If you want + to specify the compression level, see . + + + + See the other overloads of this constructor for example code. + + + + + + The stream which will be read or written. This is called the "captive" + stream in other places in this documentation. + + + Indicates whether the GZipStream will compress or decompress. + + + + true if the application would like the base stream to remain open after + inflation/deflation. + + + + + Create a GZipStream using the specified CompressionMode and the + specified CompressionLevel, and explicitly specify whether the + stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compressed data has been written + to it. Specify true for the parameter to + leave the stream open. + + + + As noted in the class documentation, the CompressionMode (Compress + or Decompress) also establishes the "direction" of the stream. A + GZipStream with CompressionMode.Compress works only through + Write(). A GZipStream with CompressionMode.Decompress works only + through Read(). + + + + + + This example shows how to use a GZipStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + This method may be invoked in two distinct scenarios. If disposing + == true, the method has been called directly or indirectly by a + user's code, for example via the internal Dispose() method. In this + case, both managed and unmanaged resources can be referenced and + disposed. If disposing == false, the method has been called by the + runtime from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources must + be referenced or disposed. + + + + indicates whether the Dispose method was invoked by user code. + + + + + Flush the stream. + + + + + Read and decompress data from the source stream. + + + + With a GZipStream, decompression is done through reading. + + + + + byte[] working = new byte[WORKING_BUFFER_SIZE]; + using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(_DecompressedFile)) + { + int n; + while ((n= decompressor.Read(working, 0, working.Length)) !=0) + { + output.Write(working, 0, n); + } + } + } + } + + + The buffer into which the decompressed data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + irrelevant; it will always throw! + irrelevant; it will always throw! + irrelevant! + + + + Calling this method always throws a . + + irrelevant; this method will always throw! + + + + Write data to the stream. + + + + + If you wish to use the GZipStream to compress data while writing, + you can create a GZipStream with CompressionMode.Compress, and a + writable output stream. Then call Write() on that GZipStream, + providing uncompressed data as input. The data sent to the output stream + will be the compressed form of the data written. + + + + A GZipStream can be used for Read() or Write(), but not + both. Writing implies compression. Reading implies decompression. + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using GZip. + + + + Uncompress it with . + + + + + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using GZip. + + + + Uncompress it with . + + + + + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a GZip'ed byte array into a single string. + + + + + + + A buffer containing GZIP-compressed data. + + + The uncompressed string + + + + Uncompress a GZip'ed byte array into a byte array. + + + + + + + A buffer containing data that has been compressed with GZip. + + + The data in uncompressed form + + + + The comment on the GZIP stream. + + + + + The GZIP format allows for each file to optionally have an associated + comment stored with the file. The comment is encoded with the ISO-8859-1 + code page. To include a comment in a GZIP stream you create, set this + property before calling Write() for the first time on the + GZipStream. + + + + When using GZipStream to decompress, you can retrieve this property + after the first call to Read(). If no comment has been set in the + GZIP bytestream, the Comment property will return null + (Nothing in VB). + + + + + + The FileName for the GZIP stream. + + + + + + The GZIP format optionally allows each file to have an associated + filename. When compressing data (through Write()), set this + FileName before calling Write() the first time on the GZipStream. + The actual filename is encoded into the GZIP bytestream with the + ISO-8859-1 code page, according to RFC 1952. It is the application's + responsibility to insure that the FileName can be encoded and decoded + correctly with this code page. + + + + When decompressing (through Read()), you can retrieve this value + any time after the first Read(). In the case where there was no filename + encoded into the GZIP bytestream, the property will return null (Nothing + in VB). + + + + + + The CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + This property sets the flush behavior on the stream. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + Computes a CRC-32. The CRC-32 algorithm is parameterized - you + can set the polynomial and enable or disable bit + reversal. This can be used for GZIP, BZip2, or ZIP. + + + This type is used internally by DotNetZip; it is generally not used + directly by applications wishing to create, read, or manipulate zip + archive files. + + + + + Returns the CRC32 for the specified stream. + + The stream over which to calculate the CRC32 + the CRC32 calculation + + + + Returns the CRC32 for the specified stream, and writes the input into the + output stream. + + The stream over which to calculate the CRC32 + The stream into which to deflate the input + the CRC32 calculation + + + + Get the CRC32 for the given (word,byte) combo. This is a + computation defined by PKzip for PKZIP 2.0 (weak) encryption. + + The word to start with. + The byte to combine it with. + The CRC-ized result. + + + + Update the value for the running CRC32 using the given block of bytes. + This is useful when using the CRC32() class in a Stream. + + block of bytes to slurp + starting point in the block + how many bytes within the block to slurp + + + + Process one byte in the CRC. + + the byte to include into the CRC . + + + + Process a run of N identical bytes into the CRC. + + + + This method serves as an optimization for updating the CRC when a + run of identical bytes is found. Rather than passing in a buffer of + length n, containing all identical bytes b, this method accepts the + byte value and the length of the (virtual) buffer - the length of + the run. + + + the byte to include into the CRC. + the number of times that byte should be repeated. + + + + Combines the given CRC32 value with the current running total. + + + This is useful when using a divide-and-conquer approach to + calculating a CRC. Multiple threads can each calculate a + CRC32 on a segment of the data, and then combine the + individual CRC32 values at the end. + + the crc value to be combined with this one + the length of data the CRC value was calculated on + + + + Create an instance of the CRC32 class using the default settings: no + bit reversal, and a polynomial of 0xEDB88320. + + + + + Create an instance of the CRC32 class, specifying whether to reverse + data bits or not. + + + specify true if the instance should reverse data bits. + + + + In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + want a CRC32 with compatibility with BZip2, you should pass true + here. In the CRC-32 used by GZIP and PKZIP, the bits are not + reversed; Therefore if you want a CRC32 with compatibility with + those, you should pass false. + + + + + + Create an instance of the CRC32 class, specifying the polynomial and + whether to reverse data bits or not. + + + The polynomial to use for the CRC, expressed in the reversed (LSB) + format: the highest ordered bit in the polynomial value is the + coefficient of the 0th power; the second-highest order bit is the + coefficient of the 1 power, and so on. Expressed this way, the + polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. + + + specify true if the instance should reverse data bits. + + + + + In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + want a CRC32 with compatibility with BZip2, you should pass true + here for the reverseBits parameter. In the CRC-32 used by + GZIP and PKZIP, the bits are not reversed; Therefore if you want a + CRC32 with compatibility with those, you should pass false for the + reverseBits parameter. + + + + + + Reset the CRC-32 class - clear the CRC "remainder register." + + + + Use this when employing a single instance of this class to compute + multiple, distinct CRCs on multiple, distinct data blocks. + + + + + + Indicates the total number of bytes applied to the CRC. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + A Stream that calculates a CRC32 (a checksum) on all bytes read, + or on all bytes written. + + + + + This class can be used to verify the CRC of a ZipEntry when + reading from a stream, or to calculate a CRC when writing to a + stream. The stream should be used to either read, or write, but + not both. If you intermix reads and writes, the results are not + defined. + + + + This class is intended primarily for use internally by the + DotNetZip library. + + + + + + The default constructor. + + + + Instances returned from this constructor will leave the underlying + stream open upon Close(). The stream uses the default CRC32 + algorithm, which implies a polynomial of 0xEDB88320. + + + The underlying stream + + + + The constructor allows the caller to specify how to handle the + underlying stream at close. + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + The underlying stream + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + + + + A constructor allowing the specification of the length of the stream + to read. + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + Instances returned from this constructor will leave the underlying + stream open upon Close(). + + + The underlying stream + The length of the stream to slurp + + + + A constructor allowing the specification of the length of the stream + to read, as well as whether to keep the underlying stream open upon + Close(). + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + + + + A constructor allowing the specification of the length of the stream + to read, as well as whether to keep the underlying stream open upon + Close(), and the CRC32 instance to use. + + + + The stream uses the specified CRC32 instance, which allows the + application to specify how the CRC gets calculated. + + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + the CRC32 instance to use to calculate the CRC32 + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Flush the stream. + + + + + Seeking is not supported on this stream. This method always throws + + + N/A + N/A + N/A + + + + This method always throws + + + N/A + + + + Gets the total number of bytes run through the CRC32 calculator. + + + + This is either the total number of bytes read, or the total number of + bytes written, depending on the direction of this stream. + + + + + Provides the current CRC for all blocks slurped in. + + + + The running total of the CRC is kept as data is written or read + through the stream. read this property after all reads or writes to + get an accurate CRC for the entire stream. + + + + + + Indicates whether the underlying stream will be left open when the + CrcCalculatorStream is Closed. + + + + Set this at any point before calling . + + + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + Always returns false. + + + + + + Indicates whether the stream supports writing. + + + + + Returns the length of the underlying stream. + + + + + The getter for this property returns the total bytes read. + If you use the setter, it will throw + . + + + + + A custom encoding class that provides encoding capabilities for the + 'Western European (ISO)' encoding under Silverlight.
+ This class was generated by a tool. For more information, visit + http://www.hardcodet.net/2010/03/silverlight-text-encoding-class-generator +
+
+ + + Encodes a set of characters from the specified character array into the specified byte array. + + + The actual number of bytes written into . + + The character array containing the set of characters to encode. + The index of the first character to encode. + The number of characters to encode. + The byte array to contain the resulting sequence of bytes. + The index at which to start writing the resulting sequence of bytes. + + + + + Decodes a sequence of bytes from the specified byte array into the specified character array. + + + The actual number of characters written into . + + The byte array containing the sequence of bytes to decode. + The index of the first byte to decode. + The number of bytes to decode. + The character array to contain the resulting set of characters. + The index at which to start writing the resulting set of characters. + + + + + Calculates the number of bytes produced by encoding a set of characters + from the specified character array. + + + The number of bytes produced by encoding the specified characters. This class + always returns the value of . + + + + + Calculates the number of characters produced by decoding a sequence + of bytes from the specified byte array. + + + The number of characters produced by decoding the specified sequence of bytes. This class + always returns the value of . + + + + + Calculates the maximum number of bytes produced by encoding the specified number of characters. + + + The maximum number of bytes produced by encoding the specified number of characters. This + class always returns the value of . + + The number of characters to encode. + + + + + Calculates the maximum number of characters produced by decoding the specified number of bytes. + + + The maximum number of characters produced by decoding the specified number of bytes. This class + always returns the value of . + + The number of bytes to decode. + + + + This table contains characters in an array. The index within the + array corresponds to the encoding's mapping of bytes to characters + (e.g. if a byte value of 5 is used to encode the character 'x', this + character will be stored at the array index 5. + + + + + This dictionary is used to resolve byte values for a given character. + + + + + Gets the name registered with the + Internet Assigned Numbers Authority (IANA) for the current encoding. + + + The IANA name for the current . + + + + + A character that can be set in order to make the encoding class + more fault tolerant. If this property is set, the encoding class will + use this property instead of throwing an exception if an unsupported + byte value is being passed for decoding. + + + + + A byte value that corresponds to the . + It is used in encoding scenarios in case an unsupported character is + being passed for encoding. + + + + + Gets the number of characters that are supported by this encoding. + This property returns a maximum value of 256, as the encoding class + only supports single byte encodings (1 byte == 256 possible values). + + + + + Length of Data field + + + + + CRC of both Type and Data fields, but not Length field + + + + + Build CRC lookup table for performance (once-off) + + + + + Applies all PNG filters to the given scanline and returns the filtered scanline that is deemed + to be most compressible, using lowest total variation as proxy for compressibility. + + + + + + + + + Calculates the total variation of given byte array. Total variation is the sum of the absolute values of + neighbour differences. + + + + + + + Get a buffer that is at least as big as size. + + + + + Return the given buffer to the pool. + + + + + + This code had been borrowed from here: https://github.com/MachineCognitis/C.math.NET + + + + + +
+
diff --git a/References/RecrownedAthenaeum/Newtonsoft.Json.dll b/References/RecrownedAthenaeum/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..d0aaed9c60aceb7f84579e7072481e0ab28577a9 GIT binary patch literal 675240 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 z%0D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
    svtUd&hbL`>jj+ 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[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

    R6qb}T^guQJ(7$&7w88_K) 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

    |Rc;+W_*I#ja zi!)o^J~Y2g-tnuwo!jnyI^p`{_Mab|njD`tAb9qck1C9xmhD+}u($JAyCJ65GnQo9 zN9GOcwAfL%d|dM8u1k(pwmTRZ|3LNov4cyWta$JCg|{!*e%q|Gx%MR+PG5V+3#TR* zG@rlM@WfL|6+2ct7Ivt!zgD$k!IaD%4cpPrc7p=XEmEyLFhTY2d8gSU>e zc#R{m2sD(_SK(!BhtmUEfqT#L_}6RQjhU=S+0p z=rQp551v}~kGA^^`{VmOHR+KPWv`8oe7f_2+=olPNqX)IwR-?`W0WO9y;Q}HN^pEX z!}7t?RxL^Vc5U$H!Obqadi#ObUk~IcZ7#d`_@aIXhXu{-v!v?D2dpbbdnex>KjZX` z2Mf}=e0a$0*gC@P4jyzezL$6T9mliMZ;fwp-R=LH_gtH~CtCF$v*YggPLT(nyWEzu z^6UE3yS9GY<@3)r5BhOj;ZN_ojy*B_yRk>_>-<$*VVJ4w!_7*^O>1x1)UM=*%+=R? zH?7^DMF*aUn3}femE~9TxZ&kRPY?O>ydsAb@!+;L;Tjd zUvm>|J?u-A@}<{3dE^7*FOQxrJh`!GN_*RicWhd0VJ9NtPYw~}1wq1|fs^(j2SJw8ue&YC7R#Z*8=drBotDkQ6#Ea(t E19%S + + + Newtonsoft.Json + + + +

    + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a F# discriminated union type to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an Entity Framework to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets the naming strategy used to resolve how enum text is written. + + The naming strategy used to resolve how enum text is written. + + + + Gets or sets a value indicating whether integer values are allowed when serializing and deserializing. + The default value is true. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Initializes a new instance of the class. + + The naming strategy used to resolve how enum text is written. + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + + Initializes a new instance of the class. + + The of the used to write enum text. + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + true if integers are allowed when serializing and deserializing; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Gets or sets a value indicating whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + true if special characters are encoded; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + The default JSON name table implementation. + + + + + Initializes a new instance of the class. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Adds the specified string into name table. + + The string to add. + This method is not thread-safe. + The resolved string. + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by , + writes a Json.NET array attribute for collections, and encodes special characters. + + The JSON string. + The name of the root element to append when deserializing. + + A value to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + + A value to indicate whether to encode special characters when converting JSON to XML. + If true, special characters like ':', '@', '?', '#' and '$' in JSON property names aren't used to specify + XML namespaces, attributes or processing directives. Instead special characters are encoded and written + as part of the XML element name. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Base class for a table of atomized string objects. + + + + + Gets a string containing the same characters as the specified range of characters in the given array. + + The character array containing the name to find. + The zero-based index into the array specifying the first character of the name. + The number of characters in the name. + A string containing the same characters as the specified range of characters in the given array. + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the type used when serializing the property's collection items. + + The collection's items type. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is null. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to read values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets the used by the serializer when resolving references. + + The reference resolver. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when writing trace messages. + + The trace writer. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets the used by the serializer when invoking serialization callback methods. + + The context. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is null. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's property name table. + + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Specifies how duplicate property names are handled when loading JSON. + + + + + Replace the existing value when there is a duplicate property. The value of the last property in the JSON object will be used. + + + + + Ignore the new value when there is a duplicate property. The value of the first property in the JSON object will be used. + + + + + Throw a when a duplicate property is encountered. + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a with the specified name. + + The property name. + A with the specified name or null. + + + + Gets the with the specified name. + The exact name will be searched for first and if no matching property is found then + the will be used to match a property. + + The property name. + One of the enumeration values that specifies how the strings will be compared. + A matched with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + The default value is . + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + The default value is . + + The JSON line info handling. + + + + Gets or sets how duplicate property names in JSON objects are handled when loading JSON. + The default value is . + + The JSON duplicate property name handling. + + + + Specifies the settings used when merging JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Gets or sets the comparison used to match property names while merging. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + The comparison used to match property names while merging. + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A , or null. + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + The parameter is null. + The class name is null or is zero (0). + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See https://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer that writes to the application's instances. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Represents a trace writer. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + The that will be used to filter the trace messages passed to the writer. + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Handles serialization callback events. + + The object that raised the callback event. + The streaming context. + + + + Handles serialization error callback events. + + The object that raised the callback event. + The streaming context. + The error context. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets or sets all methods called immediately after deserialization of the object. + + The methods called immediately after deserialization of the object. + + + + Gets or sets all methods called during deserialization of the object. + + The methods called during deserialization of the object. + + + + Gets or sets all methods called after serialization of the object graph. + + The methods called after serialization of the object graph. + + + + Gets or sets all methods called before serialization of the object. + + The methods called before serialization of the object. + + + + Gets or sets all method called when an error is thrown during the serialization of the object. + + The methods called when an error is thrown during the serialization of the object. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object constructor. + + The object constructor. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + Represents a trace writer that writes to memory. When the trace message limit is + reached then old trace messages will be removed as new messages are added. + + + + + Gets the that will be used to filter the trace messages passed to the writer. + For example a filter level of will exclude messages and include , + and messages. + + + The that will be used to filter the trace messages passed to the writer. + + + + + Initializes a new instance of the class. + + + + + Writes the specified trace level, message and optional exception. + + The at which to write this trace. + The trace message. + The trace exception. This parameter is optional. + + + + Returns an enumeration of the most recent trace messages. + + An enumeration of the most recent trace messages. + + + + Returns a of the most recent trace messages. + + + A of the most recent trace messages. + + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + diff --git a/References/RecrownedAthenaeum/RecrownedAthenaeum.dll b/References/RecrownedAthenaeum/RecrownedAthenaeum.dll new file mode 100644 index 0000000000000000000000000000000000000000..b1e1079be264058bffb9b3261a8ea23f7efb6025 GIT binary patch literal 40448 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 + + + RecrownedAthenaeum + + + + + A virtual 2D camera. + + + + + Current zoom level. + + + + + Current position in the world. + + + + + The matrix representing the zoom and position. + + + + + Constructs 2D camera. + + The graphics device to use. + + + + Applies any changes made to the properties of this camera and updates to new dimensions of viewport specified by the graphics device. + + + + + Lerps to the given position. + + The multiplier for difference in distance. + The target position to lerp to. + Time between this frame and the previous frame. + + + + Wrapper for the content manager that helps with controlling it by adding automated multithreaded content loading. + + + + + Path modifiers to change the path in which the content manager looks to load a file. Used for better organizing things while not needing to type entire path. + + + + + Whether or not the queue is empty and all content is loaded. + + + + + The progress of the loading. 1 is complete while 0 is incomplete. + + + + + Wraps the . + + The manager to wrap. + + + + Gets the requested asset. + + The type of the asset for an alternative way to cast. + The name of the asset. + The asset casted to the type given with T. + + + + Queues an asset to be loaded. + + The type of the asset to be queued. + Name of asset to look for. + Whether or not to use the path modifiers. + + + + Called whenever a batch of assets should be loaded from the queue. Safe to call once every frame. + + + + + Removes the asset from the list of assets in the system. + Cannot remove from queue. + + the string name used to load the asset + + + + Clears the queue. + + + + + Unloads everything from both queue and loaded list while properly disposing of the assets loaded. + + + + + Modifies the given path based on a name. Used to simplify long paths for the + + + + + Returns the complete path with the content folder as root. + + Is the asset's name + + + + + A wrapper that makes sure anything implementing can be drawn with options. + + + + + Should draw whatever implements this. + + The batch to be used. + The location and dimensions to draw to. + The color tint to draw with. + The rotation to be used. + The origin for the rotation. + + + + An object that represents a ninepatch. + + + + + color of 9patch. + + + + + Dimensions in ninepatch. May also represent position in texture atlas. + + + + + A nine patch object. + + Texture used for the nine patch. Dimensions must be greater than their sum border counter parts. If used as part of texture atlas, the texture should be the texture of the entire atlas. + Left side. + Right side. + Bottom side. + Top side. + + + + Draws the ninepatch. + + Batch to use. + Where to the patch. + + + + Draw with more options. + + Spritebatch to use. + The destination to draw the patch. + The tint for each patch. + Not considered for 9patches. + Not considered for 9patches. + + + + Holds a width and height while allowing for easier comparison between other s. + + + + + Dimensions of resolution. + + + + + Dimensions of resolution. + + + + + Constructs resolution given the dimensions. + + Width of resolution. + Height of resolution. + + + + Compares area of this resolution to another. + + The other resolution to compare to. + A value less than 0 for this being the smaller resolution, 0 for the two being the same in area, and larger for this being the larger in area. + + + + Gets a string representation of this resolution. + + "WidthxHeight" + + + + Calculates area of resolution. + + Area of resolution. + + + + Holds information about an image file that contains various textures in various regions in the file. + + + + + Given a name, can return a . + + Name of to obtain. + based off name. + + + + Creates a texture atlas with given main texture as well as an array of to represent locations of which textures reside within the atlas. Region names will be used to refer to the regions within the dictionary. + + The texture representing the overall atlas. + The sub regions that represent the individual textures. + + + + Creates a texture region given a dictionary of regions keyed to strings that can be used to refer to them. + + The texture representing the overall atlas. + + + + + Draw the region given by a string in the atlas onto a destination rectangle. + + Name of region to draw. + SpriteBatch to be used. + The location to draw this region. + Color to use. + Rotation of texture drawn. + Origin used by rotation. + + + + Creates or obtains a previously created texture of a region. + + Name of region. + graphics device to be used. + The texture from the region. + + + + Disposes unmanaged resources for the texture atlas. + + + + + Overridable disposal method. + + Only true if user calls + + + + Destructor. + + + + + A region of a . + + + + + The name of the region. Mostly used to be refered to within the context of a . + + + + + The location and dimensions of where the original texture resides on the texture representing the atlas. + + + + + A specified region in a texture atlas. + + Name of region. + The location of the region on the atlas. + A definition for the region. + The texture that holds the image data for the atlas. + + + + Draws the region. If ninepatch, rotation and origin are ignored. + + The batch to use. Should be began. + The destination rectangle to draw to. + The color to use. + Rotation of the final drawing. Ignored if is a 9patch. + The origin of the drawing. Ignored if is a 9patch. + + + + Create or obtains a previously created texture of this region. + + The graphics device to use to create the texture. + The texture of the region. + + + + Compares this region to another in terms of name. + + The other region to compare to in terms of name. + Less than one if precedes, greater than one if after, 0 if same. + + + + Call this to dispose. + + + + + Overridable dispose. + + Whether or not this was a user made call. + + + + Destructor. + + + + + Input listener for . + + + + + Called when the state of the keyboard has changed. + + The new state. + True to continue calling other listeners. + + + + Called when the state of the mouse has changed. + + The new state. + True to continue calling other listeners. + + + + Utilities to better manage input for the game. + + + + + Listeners for changes in input. + + + + + Updates inputs. + Should be called once every game update to be up to date with new states of inputs. + + + + + Poll used to check if mouse was clicked. + + True if clicked. + + + + Checks whether mouse is within boundaries. + + Boundaries to check. + + + + + Manages a bundle of preferences. + + + + + Constructs the preference manager. + + The path of the directory in which the preferences should be saved. + The preferences to be serialized and unserialized in XML format. + + + + Returns the preference by type. + + The preference needed. + The preference needed. + + + + Loads preferences. + + + + + Saves preferences. + + + + + Represents a data structure for 9patches. + + + + + Name of texture associated with patch. May be null in the case of being apart of a + + + + + the boundaries of the patch. + + + + + the boundaries of the patch. + + + + + the boundaries of the patch. + + + + + the boundaries of the patch. + + + + + Constructs patch. + + Name of the texture. May be null. + Left bound. + Right bound. + Bottom bound. + Top bound. + + + + Data transfer object for a texture atlas. + + + + + Contains the regions of the texture atlas. + + + + + The name of the file. + + + + + Creates the atlas given the regions and the file name of the texture file to be used. + + + + + + + Data object that contains information about the region ninepatch situation of a given region in an atlas. + + + + + Name of the region for referencial purposes. + + + + + The location of the patch is designated by this rectangle. + + + + + The ninepatch information. + + + + + Sets position in atlas for convenience. + + X coordinate of the position in the patch. + Y coordinate of the position in the patch. + + + + Sets the dimensions of the region on the atlas for convenience. + + Width of the region. + Height of the region. + + + + Sets both the coordinates and dimensions of the region on the atlas for convenience. + + X coordinate of the position in the patch. + Y coordinate of the position in the patch. + Width of the region. + Height of the region. + + + + Data transfer object for game skins. + + + + + The name of the atlas with solution of ".tatlas". + + + + + The color data containing the name of the color, and red, green, and blue values for the color. + + + + + The font data containing the name of the font and name of the file for the font. + + + + + The skin definitions containing a name for the definition, and the definition itself. + + + + + Color data for data transfer. + + + + + Name of color to be referenced by. + + + + + RGB data of this color. + + + + + RGB data of this color. + + + + + RGB data of this color. + + + + + Font data for data transfer. + + + + + Name of font to be referenced by. + + + + + Name of the file that contains the font. Shouldn't have extension. + + + + + Definition data for data transfer. + + + + + Name of definition to be referenced by. + + + + + The skin definition data. + + + + + Renders rectangles using the . + + + + + The used. + + + + + Creates a rectangle renderer with the given . + + + + + + Creates a rectangle renderer. + + The graphics device used to create the + The camera containing the matrix to be used for the transformations. + + + + Begins the render batch. + + Whether or not to fill the rectangle. + + + + Ends the batch. + + + + + Draws a basic rectangle given bottom left and top right. + + X coordinate of bottom left. + Y coordinate of bottom left. + Width of rectangle. + Height of rectangle. + Color of all vertices of this rectangle. + Rotation of rectangle. Default is 0 radians. + + + + Attempts to dispose of this object. + + + + + An overridable of disposable. + + Only true when called by user code dispose. Destructor calling this results in false. + + + + Destructor. + + + + + A batch used to draw primitive shapes by batching together vertices. + + + + + The maximum vertices expected. The further off this expectancy is from the true value, the less efficient. + + + + + Creates a batch used to draw primitives. + + The current graphics device being used. + The current camera being used. + The amount of vertices every batch can hold before flushing. Default is 450. Should be changed to be the most optimal number if possible to prevent unnecessary resizing. Especially if using strip primitive types. + + + + Starts the batch. Batch cannot be started twice. + + The type of primitive this batch would be drawing. + + + + Ends the batch. Begin needs to be called before end. + + + + + Adds a vertex position for the primitive being drawn. The batch needs to have beens started before this. + + The vector that represents the vertex. + The color of that vertex. + + + + Flushes the batch. Automatically called if required if using or . Otherwise, manual flushing is required. + + + + + Disposes this. + + + + + Overridable dispose. + + True for when user called for this to be disposed. False otherwise. + + + + Destructor. + + + + + Contracts a transition that the can use. + + + + + Called once when the transition is needed. + The dimensions of the screen. + + + + + Called every frame if the state of the screen this transition is placed upon is in the enter transition phase. + + The time passed in seconds since the last frame. + Whether or not this transition is waiting on something. Usually the . + If this returns true, then it is considered that this transition is complete. + + + + Called every frame if the state of the screen this transition is placed upon is in the exit phase. + + The time passed in seconds since the last frame. + Whether or not this transition is waiting on something. Usually the . + If this returns true, then it is considered that this transition is complete. + + + + Called once every frame while transition is active. Meant to draw transition. + + + + + + Updates if the previous screen uses a render target for exit transition. + + The frame of the previous screen. + + + + A screen specifically meant to fill in loading times. + + + + + Constructs a loading screen. + + The game itself to adjust mouse settings and such. + + + + + + + + + + + + + Sets things to correct values for start of transition. + + The window dimensions. + + + + Draws the transition. + + Batch to use. + + + + Updates the entering transition. + + Time passed between frames. + Whether or not this transition should be waiting. + Whether or not transition is complete. + + + + Updates the exiting transition. + + Time passed between frames. + Whether or not this transition should be waiting. + Whether or not transition is complete. + + + + Represents one of the poosible states a screen can be in. + + + + + Screen is transitioning in. + + + + + Screen is transitioning out. + + + + + Screen is currently displayed normally without transition. + + + + + A screen represents a virtual system of management that controls an system of items to be displayed. + + + + + Transitions to apply. + + + + + Whether or not to continue rendering this screen onto a buffer for the benifit of the next screen to use as a transition. + + + + + The background color to be used to clear the screen. + + + + + The next screen to be displayed after exit transition finishes. May be null, leading to transition to previous screen or loading screen. + + + + + The current window size. + + + + + Whether or not screen have been initiated. + + + + + The 2D camera to be used for the screen. + + + + + Current state of the screen. + + + + + Creates a new screen. + + True to start in entering transition state. + + + + Called only once after initialization to give required parameters. + + + + + Called to update the screen. + + Game time information. + + + + Called to draw this screen. + + SpriteBatch to use. + + + + Updates the transition based on the current state of the screen. + + Time passed since last frame in seconds. + If the this transition should wait. + Only returns true if exit transition is complete. Returns false otherwise. + + + + Called when the screen is shown. + + + + + Called when this screen is no longer the displayed screen. + + + + + Called whenever the status of assets changes from being loaded to unloaded or unloaded to loaded. + + True for loaded, false for unloaded. + + + + Call this to begin exit transition. + + Whether or not to use a render target for the next screen to use. + + + + Called everytime the previous screen frame buffer updates. Used for transition purposes. + + The previous screen's render buffer. + + + + Called when the first screen is being shown. + + The screen to show after the loading screen. + + + + A manager for screens. Helps with transitions and updating screens as well as resizes. + + + + + Called when the first loading screen is done, and needs to show the landing screen. + + + + + Currently displayed screen. + + + + + Creates a screen manager that helps manage multiple screens and their transitions. + + The graphics device manager to be used. + The camera to be used to perform the correct translations and transformations. + + + + Updates the screens. Should be called once every frame. + + Contains the time that has passed from the last frame. + Whether or not there is something a transition should be waiting for. Usually used to wait for assets to complete loading. + + + + Renders screen into window. + + Uses this batch to render. + + + + Should be called when resize is occurring to change to a loading screen. + This will notify the screen of the status of the assets, change the screen to a loading screen, and dispose of the previous screen buffer. + + The loading screen to change to. + + + + Notifies all screen that assets have completed being loaded after a resize. + + + + + Disposes this. + + + + + An overridable dispose. + + True of user invoked dispose called. + + + + Destructor. + + + + + Contains the pages. + + + + + Should be called whenever a valid camera and dimensions for the book exist. + Initializes book with given parameters. + + Camera game is currently using. + Dimensions of the book and the dimensions the pages will use. + + + + Draws the pages. + + Batch used to draw. + + + + Updates the book. + + Snapshot of information of the game time. + + + + Adds the page(s). + + The page(s) to add. + + + + Removes the page. + + Page to remove. + + + + Removes the page. + + Name of page to remove. + + + + Perform a step of linear interpolation to the given page. + + The page to lerp to. + + + + Goes to page instantly. + + Page to go to. + + + + A page a part of a . + + + + + Whether or not this book needs to be refreshed with new dimensions. + + + + + Constructs a page. + + The X position in the book. + The Y position in the book. + + + + Called when this page is flagged as needing a size update. + + New width. + New Height + + + + Represents a texture with more information. + + + + + The rotation of the image. + + + + + The texture to be rendered. + + + + + Scale of of the X axis. + + + + + Scale of the Y axis. + + + + + Overall scale. + + + + + Constructs an image given a texture. + + Texture to use. + + + + Draws the image with default values. + + The batch to use. + + + + Draws the image with more options. + + Batch used. + Where to draw texture to. + The color tint to use. + Rotation of image. + Origin for the rotation. + + + + Function to be called when button is clicked. + + + + + A very primitive button containing all the basic functions. + + + + + Click event listeners. + + + + + Whether or not this button should be currently disabled. + + + + + Whether or not this button is currently being hovered on. + + + + + Constructs this button using s for the different states it could be in. + + Button being pressed. + Button not being pressed. + Disabled button. + Button being highlighted. + + + + Constructs this button using the skin system. + + The skin containing the information of the textures and design to follow. + The name of the definition in the skin. Can be null to select the default. + + + + Draws the button. + + Batch used to draw the button. + + + + Called when the mouse changes state. + + The new state. + Whether or not to continue calling the next mouse change listener. + + + + Called when the state of the keyboard changes. + + The new state. + Whether or not the next keyboard change listener should be called. + + + + Button that holds a string. + + + + + The color the font should be rendered in. + + + + + Constructs text button with the positions represented by + + The string representing the text to be displayed. + The font to be used to display the text. + What to draw as button is pushed down. + What to draw as button is not pushed. + What to draw as button is disabled. + What to draw as button is selected. + + + + Constructs a text button using a skin and definition. + + The text to display. + The skin to use. + Name of the definition for this type in the skin given. + + + + Updates the text button. + + Snapshot of information about time for game. + + + + Called whenever game wants to render this button. + + Batch to use. Batch should already be started. + + + + Represents text for the UI. + + + + + Whether or not to try and wrap text automatically. Meaning will check and attempt to wrap every update. + + + + + Whether or not to automatically scale the text every update. Happens after auto wrap if enabled. + + + + + Should this use ellipses? Will perform this operation before auto wrapping or auto scalling. + + + + + The text to use for the ellipsis. + + + + + The string to be displayed. + + + + + Creates a UI text object. + + The font to use. + The string for the text. + + + + Creates a UI text object + + + + + + + + Updates the positioning and attempts to perform any operations that were marked automatic. + + The game time. + + + + Draws the text. + + Batch to use. + + + + Attempts to apply ellipsis. Checks of nessecary. + + + + + Attempts to scale the font. Checks if nessecary. + + + + + Removes line breaks. + + + + + Resets to original text. + + + + + Attempts to wrap text. Checks if nessecary. + + If true, will first unwrap text, and the wrap again. This occurs before nessecity check. + + + + Module for UI layout. + + + + + Bounds of this module. + + + + + Origin of this module. + + + + + The parent of this module. May be null. + + + + + Name of this module. For organizational/referencial purposes mostly. + + + + + The color tint of this module. + + + + + Called every frame to update this module. Calculations and movement should go here. + + Game time information. + + + + Called every frame to draw this module. Anything that needs to be drawn should go here. + + Batch used to draw. + + + + Converts the given rectangle to the coordinates of the parent. + + Rectangle to convert. + + + + + Removes this module from the parent. + + + + + Called whenever the keyboard state is changed. + + The current keyboard state. + Returning whether or not to continue to call the next listener. + + + + Called whenever the state of the mouse changes. This includes movement. + + The current state of the mouse. + Returning whether or not to continue to call the next listener. + + + + Contains a group of modules and has its own relative coordinate system. + + + + + Camera used by the module for cropping. + + + + + Creates a module group. + + Whether or not to crop out of bounds. Default is false. + What camera to use for cropping. Default is null. + + + + Draws this group of modules. + + Batch used to draw the group. + + + + Updates the group of modules. + + Game time used. + + + + Adds module(s) to this group. + + The module(s) to add. + + + + Removes given module from group. + + module to remove. + + + + Updates the keyboard state of the modules in this group. + + The new state. + Whether or not to continue updating the other listeners. + + + + Updates the moues state of the modules in this group. + + The new state. + Whether or not to continue updating other listeners. + + + + Definition for a button. + + + + + Names for the regions in the texture atlas respectively. + + + + + Names for the regions in the texture atlas respectively. + + + + + Names for the regions in the texture atlas respectively. + + + + + Names for the regions in the texture atlas respectively. + + + + + + + + Constructs the definition with minimum requirements. + + Name of region specifying the texture shown for when the button is pressed down. + Name of region specifying the texture shown for when the button is not pressed. + + + + A definition containing the data for the skin system. Should be in data transfer object model. + + + + + The module type this definition is definining. + + + + + Definition for a text button for a skin theme. + + + + + Name of font from the skin to use. + + + + + Name of color from the skin to use for the font. + + + + + The type of module that will be using this definition. + + + + + Creates this definition with the most minimal requirements. + + Texture region from skin that represents when the button is pressed down. + The texture region that represents when the button is not pressed. + + + + A skin is used to group a theme which can then be applied to the UI via the use of modules. + + + + + Texture atlas containing the skins textures. + + + + + Colors stored in this skin. + + + + + Fonts stored in this skin. + + + + + Creates a basic unfilled skin. + + The texture atlas to use for this skin. + + + + Draws a region from the texture atlas. + + Region to draw. + The color to tint the region. + The batch to use. + The destination to draw to. + The rotation to use in radians. + The origin for the rotation. + + + + Returns an of the given name and type. + + Name of definition of the + The UIModule the definition defines. + The interface for the definition. + + + + Returns the default of the given parameters. + + The type of definition the default should be coming from. + The default definition for the given type. + + + + Returns the proper definition for the given parameters or throws exception in the case the requested definition does not exist. + + Convenience to cast to the needed definition type. + The name of the definition. + UIModule type the definition defines. + The definition cast to T. + + + + Returns the default definition. + + Convenience to cast to T. + The type of the UIModule to retrieve the default from. + The default definition for the given type. + + + + Adds the definition. + + The name of the definition. + The definition itself. + + + + Removes the definition. + + The name of the definition. + The type of the definition. + + + diff --git a/RhythmBullet/ContentResolvers/ResolutionContentResolver.cs b/RhythmBullet/ContentResolvers/ResolutionContentResolver.cs index bb68d1e..317ef11 100644 --- a/RhythmBullet/ContentResolvers/ResolutionContentResolver.cs +++ b/RhythmBullet/ContentResolvers/ResolutionContentResolver.cs @@ -1,5 +1,5 @@ using RecrownedAthenaeum.ContentSystem; -using RecrownedAthenaeum.DataTypes; +using RecrownedAthenaeum.SpecialTypes; namespace RecrownedAthenaeum.ContentResolvers { diff --git a/RhythmBullet/Preferences/General.cs b/RhythmBullet/Preferences/General.cs index e617301..b6f0c69 100644 --- a/RhythmBullet/Preferences/General.cs +++ b/RhythmBullet/Preferences/General.cs @@ -1,5 +1,5 @@ using System; -using RecrownedAthenaeum.DataTypes; +using RecrownedAthenaeum.SpecialTypes; namespace RecrownedAthenaeum.Preferences { diff --git a/RhythmBullet/RhythmBullet.csproj b/RhythmBullet/RhythmBullet.csproj index fe3e008..de1cee8 100644 --- a/RhythmBullet/RhythmBullet.csproj +++ b/RhythmBullet/RhythmBullet.csproj @@ -79,7 +79,7 @@ False - ..\..\RecrownedAthenaeum\RecrownedAthenaeum\bin\Release\RecrownedAthenaeum.dll + ..\References\RecrownedAthenaeum\RecrownedAthenaeum.dll diff --git a/RhythmBullet/RhythmBulletGame.cs b/RhythmBullet/RhythmBulletGame.cs index 2fd29e9..28c2368 100644 --- a/RhythmBullet/RhythmBulletGame.cs +++ b/RhythmBullet/RhythmBulletGame.cs @@ -7,12 +7,13 @@ using RecrownedAthenaeum.Preferences; using RecrownedAthenaeum.Screens.MainMenu; using RecrownedAthenaeum.Camera; using RecrownedAthenaeum.ContentSystem; -using RecrownedAthenaeum.DataTypes; +using RecrownedAthenaeum.SpecialTypes; using RecrownedAthenaeum.Input; using RecrownedAthenaeum.Persistence; using RecrownedAthenaeum.ScreenSystem; using System; using System.Diagnostics; +using RecrownedAthenaeum.UI.Skin; namespace RecrownedAthenaeum { @@ -37,6 +38,7 @@ namespace RecrownedAthenaeum private MainScreen mainScreen; private Texture2D currentCursorTexture; internal readonly MusicController musicController; + private Skin skin; public RhythmBulletGame() { @@ -169,6 +171,7 @@ namespace RecrownedAthenaeum assets.Queue("title"); assets.Queue("default_cover", false); assets.Queue("backgrounds/mainBG"); + assets.Queue("UI"); } private void SetUpCursor()