public static MatrixData SaveMatrix(MetaTileMap MetaTileMap, bool SingleSave = true,
                                            Vector3?Localboundarie1 = null, Vector3?Localboundarie2 = null, bool UseInstance = false)
        {
            if (SingleSave)
            {
                UnserialisedObjectReferences.Clear();
                MonoToID.Clear();
                FieldsToRefresh.Clear();
                IDStatic       = 0;
                IDmatrixStatic = 0;
            }

            MatrixData matrixData = new MatrixData();

            matrixData.ObjectMapData = SaveObjects(MetaTileMap, Localboundarie1, Localboundarie2, UseInstance);
            matrixData.TileMapData   = SaveTileMap(MetaTileMap, Localboundarie1, Localboundarie2);
            matrixData.MatrixName    = MetaTileMap.matrix.NetworkedMatrix.gameObject.name;
            matrixData.MatrixID      = IDmatrixStatic;
            matrixData.Location      = Math.Round(MetaTileMap.matrix.NetworkedMatrix.transform.localPosition.x, 2) + "┼" +
                                       Math.Round(MetaTileMap.matrix.NetworkedMatrix.transform.localPosition.y, 2) + "┼" +
                                       Math.Round(MetaTileMap.matrix.NetworkedMatrix.transform.localPosition.z, 2) + "┼";


            var Angles = MetaTileMap.matrix.NetworkedMatrix.transform.eulerAngles;

            matrixData.Location = matrixData.Location +
                                  Math.Round(Angles.x, 2) + "ø" +
                                  Math.Round(Angles.y, 2) + "ø" +
                                  Math.Round(Angles.z, 2) + "ø";


            IDmatrixStatic++;

            if (SingleSave)
            {
                foreach (var MFD in UnserialisedObjectReferences)
                {
                    if (MonoToID.ContainsKey(MFD.Item1))
                    {
                        MFD.Item2.AddID(MonoToID[MFD.Item1]);
                    }
                    else
                    {
                        Logger.LogError("Missing money behaviour in MonoToID");
                    }
                }

                UnserialisedObjectReferences.Clear();
                MonoToID.Clear();

                foreach (var FD in FieldsToRefresh)
                {
                    FD.Serialise();
                }

                FieldsToRefresh.Clear();
            }

            return(matrixData);
        }
        public static MapData SaveMap(List <MetaTileMap> MetaTileMaps,
                                      string MapName = "Unknown map name your maps dam it")
        {
            var OutMapData = new MapData();

            UnserialisedObjectReferences.Clear();
            MonoToID.Clear();
            FieldsToRefresh.Clear();
            IDStatic       = 0;
            IDmatrixStatic = 0;

            OutMapData.MapName = MapName;
            foreach (var MetaTileMap in MetaTileMaps)
            {
                OutMapData.ContainedMatrices.Add(SaveMatrix(MetaTileMap, false));
            }

            //move outside if multiple  matrices
            foreach (var MFD in UnserialisedObjectReferences)
            {
                if (MonoToID.ContainsKey(MFD.Item1))
                {
                    MFD.Item2.AddID(MonoToID[MFD.Item1]);
                    MFD.Item2.RemoveRuntimeReference(MFD.Item1);
                }
                else
                {
                    Logger.LogError("Missing money behaviour in MonoToID");
                }
            }

            UnserialisedObjectReferences.Clear();
            MonoToID.Clear();

            foreach (var FD in FieldsToRefresh)
            {
                FD.Serialise();
            }

            FieldsToRefresh.Clear();

            return(OutMapData);
        }