public override void DeserializeSettings ( GraphSerializationContext ctx ) {

			base.DeserializeSettings (ctx);

			characterRadius = ctx.reader.ReadSingle ();
			contourMaxError = ctx.reader.ReadSingle ();
			cellSize = ctx.reader.ReadSingle ();
			cellHeight = ctx.reader.ReadSingle ();
			walkableHeight = ctx.reader.ReadSingle ();
			maxSlope = ctx.reader.ReadSingle ();
			maxEdgeLength = ctx.reader.ReadSingle ();
			editorTileSize = ctx.reader.ReadInt32 ();
			tileSizeX = ctx.reader.ReadInt32 ();
			nearestSearchOnlyXZ = ctx.reader.ReadBoolean ();
			useTiles = ctx.reader.ReadBoolean ();
			relevantGraphSurfaceMode = (RelevantGraphSurfaceMode)ctx.reader.ReadInt32 ();
			rasterizeColliders = ctx.reader.ReadBoolean ();
			rasterizeMeshes = ctx.reader.ReadBoolean ();
			rasterizeTerrain = ctx.reader.ReadBoolean ();
			rasterizeTrees = ctx.reader.ReadBoolean ();
			colliderRasterizeDetail = ctx.reader.ReadSingle ();
			forcedBoundsCenter = ctx.DeserializeVector3 ();
			forcedBoundsSize = ctx.DeserializeVector3 ();
			mask = ctx.reader.ReadInt32 ();

			int count = ctx.reader.ReadInt32 ();
			tagMask = new List<string> (count);
			for (int i = 0; i < count; i++) {
				tagMask.Enqueue (ctx.reader.ReadString());
			}

			showMeshOutline = ctx.reader.ReadBoolean ();
			showNodeConnections = ctx.reader.ReadBoolean ();
			terrainSampleSize = ctx.reader.ReadInt32 ();

			// These were originally forgotten but added in an upgrade
			// To keep backwards compatibility, they are only deserialized
			// If they exist in the streamed data
			walkableClimb = ctx.DeserializeFloat (walkableClimb);
			minRegionSize = ctx.DeserializeFloat (minRegionSize);

			// Make the world square if this value is not in the stream
			tileSizeZ = ctx.DeserializeInt (tileSizeX);
		}
		public override void DeserializeSettings ( GraphSerializationContext ctx ) {

			base.DeserializeSettings (ctx);

			aspectRatio = ctx.reader.ReadSingle();
			rotation = ctx.DeserializeVector3();
			center = ctx.DeserializeVector3();
			unclampedSize = (Vector2)ctx.DeserializeVector3();
			nodeSize = ctx.reader.ReadSingle();
			collision.DeserializeSettings(ctx);
			maxClimb = ctx.reader.ReadSingle();
			maxClimbAxis = ctx.reader.ReadInt32();
			maxSlope = ctx.reader.ReadSingle();
			erodeIterations = ctx.reader.ReadInt32();
			erosionUseTags = ctx.reader.ReadBoolean();
			erosionFirstTag = ctx.reader.ReadInt32();
			autoLinkGrids = ctx.reader.ReadBoolean();
			neighbours = (NumNeighbours)ctx.reader.ReadInt32();
			cutCorners = ctx.reader.ReadBoolean();
			penaltyPosition = ctx.reader.ReadBoolean();
			penaltyPositionFactor = ctx.reader.ReadSingle();
			penaltyAngle = ctx.reader.ReadBoolean();
			penaltyAngleFactor = ctx.reader.ReadSingle();
			penaltyAnglePower = ctx.reader.ReadSingle();
			isometricAngle = ctx.reader.ReadSingle();
			uniformEdgeCosts = ctx.reader.ReadBoolean();
			useJumpPointSearch = ctx.reader.ReadBoolean();
		}
		public override void DeserializeSettings ( GraphSerializationContext ctx ) {
			base.DeserializeSettings (ctx);

			sourceMesh = ctx.DeserializeUnityObject () as Mesh;

			offset = ctx.DeserializeVector3 ();
			rotation = ctx.DeserializeVector3 ();
			scale = ctx.reader.ReadSingle();
			accurateNearestNode = ctx.reader.ReadBoolean();
		}