예제 #1
0
        public static SceneSave FromFile(string fileName)
        {
            SceneSave tempScene = null;

#if !FRB_MDX
            if (ManualDeserialization)
            {
                tempScene = DeserializeManually(fileName);
            }
            else
#endif
            {
                tempScene = FileManager.XmlDeserialize <SceneSave>(fileName);
            }

            tempScene.mFileName = fileName;
            if (FileManager.IsRelative(fileName))
            {
                tempScene.mSceneDirectory = FileManager.GetDirectory(FileManager.RelativeDirectory + fileName);
            }
            else
            {
                tempScene.mSceneDirectory = FileManager.GetDirectory(fileName);
            }


            return(tempScene);
        }
예제 #2
0
        public AnimationChainList ToAnimationChainList(string contentManagerName, bool throwError)
        {
            mToRuntimeErrors.Clear();

            AnimationChainList list = new AnimationChainList();

            list.FileRelativeTextures = FileRelativeTextures;
            list.TimeMeasurementUnit  = TimeMeasurementUnit;
            list.Name = mFileName;

            string oldRelativeDirectory = FileManager.RelativeDirectory;

            try
            {
                if (this.FileRelativeTextures)
                {
                    FileManager.RelativeDirectory = FileManager.GetDirectory(mFileName);
                }

                foreach (AnimationChainSave animationChain in this.AnimationChains)
                {
                    try
                    {
                        FlatRedBall.Graphics.Animation.AnimationChain newChain = null;

                        newChain = animationChain.ToAnimationChain(contentManagerName, this.TimeMeasurementUnit, this.CoordinateType);

                        newChain.mIndexInLoadedAchx = list.Count;

                        newChain.ParentAchxFileName = mFileName;

                        list.Add(newChain);
                    }
                    catch (Exception e)
                    {
                        mToRuntimeErrors.Add(e.ToString());
                        if (throwError)
                        {
                            throw new Exception("Error loading AnimationChain", e);
                        }
                    }
                }
            }
            finally
            {
                FileManager.RelativeDirectory = oldRelativeDirectory;
            }

            return(list);
        }
예제 #3
0
        //AnimationChainList ToAnimationChainList(string contentManagerName, TextureAtlas textureAtlas, bool throwError)
        //{
        //    mToRuntimeErrors.Clear();

        //    AnimationChainList list = new AnimationChainList();

        //    list.FileRelativeTextures = FileRelativeTextures;
        //    list.TimeMeasurementUnit = TimeMeasurementUnit;
        //    list.Name = mFileName;

        //    string oldRelativeDirectory = FileManager.RelativeDirectory;

        //    try
        //    {
        //        if (this.FileRelativeTextures)
        //        {
        //            FileManager.RelativeDirectory = FileManager.GetDirectory(mFileName);
        //        }

        //        foreach (AnimationChainSave animationChain in this.AnimationChains)
        //        {
        //            try
        //            {
        //                FlatRedBall.Graphics.Animation.AnimationChain newChain = null;

        //                if (textureAtlas == null)
        //                {
        //                    newChain = animationChain.ToAnimationChain(contentManagerName, this.TimeMeasurementUnit, this.CoordinateType);
        //                }
        //                else
        //                {
        //                    newChain = animationChain.ToAnimationChain(textureAtlas, this.TimeMeasurementUnit);
        //                }
        //                newChain.mIndexInLoadedAchx = list.Count;

        //                newChain.ParentAchxFileName = mFileName;

        //                list.Add(newChain);

        //            }
        //            catch (Exception e)
        //            {
        //                mToRuntimeErrors.Add(e.ToString());
        //                if (throwError)
        //                {
        //                    throw new Exception("Error loading AnimationChain", e);
        //                }
        //            }
        //        }
        //    }
        //    finally
        //    {
        //        FileManager.RelativeDirectory = oldRelativeDirectory;
        //    }

        //    return list;


        //}


        //public AnimationChainList ToAnimationChainList(Graphics.Texture.TextureAtlas textureAtlas)
        //{
        //    return ToAnimationChainList(null, textureAtlas, true);
        //}


        private void MakeRelative(string fileName)
        {
            string oldRelativeDirectory = FileManager.RelativeDirectory;

            string newRelativeDirectory = FileManager.GetDirectory(fileName);

            FileManager.RelativeDirectory = newRelativeDirectory;

            foreach (AnimationChainSave acs in AnimationChains)
            {
                acs.MakeRelative();
            }

            FileManager.RelativeDirectory = oldRelativeDirectory;
        }
예제 #4
0
 public void SetSceneDirectory()
 {
     if (string.IsNullOrEmpty(mFileName))
     {
         return;
     }
     if (FileManager.IsRelative(mFileName))
     {
         mSceneDirectory = FileManager.GetDirectory(FileManager.RelativeDirectory + mFileName);
     }
     else
     {
         mSceneDirectory = FileManager.GetDirectory(mFileName);
     }
 }
예제 #5
0
        public List <string> GetReferencedFiles(RelativeType relativeType)
        {
            List <string> referencedFiles = new List <string>();

            foreach (AnimationChainSave acs in this.AnimationChains)
            {
                //if(acs.ParentFile
                if (acs.ParentFile != null && acs.ParentFile.EndsWith(".gif"))
                {
                    referencedFiles.Add(acs.ParentFile);
                }
                else
                {
                    foreach (AnimationFrameSave afs in acs.Frames)
                    {
                        string texture = FileManager.Standardize(afs.TextureName, null, false);

                        if (FileManager.GetExtension(texture).StartsWith("gif"))
                        {
                            texture = FileManager.RemoveExtension(texture) + ".gif";
                        }

                        if (!string.IsNullOrEmpty(texture) && !referencedFiles.Contains(texture))
                        {
                            referencedFiles.Add(texture);
                        }
                    }
                }
            }


            if (relativeType == RelativeType.Absolute)
            {
                string directory = FileManager.GetDirectory(FileName);

                for (int i = 0; i < referencedFiles.Count; i++)
                {
                    referencedFiles[i] = directory + referencedFiles[i];
                }
            }

            return(referencedFiles);
        }
예제 #6
0
        public T LoadFromProject <T>(string assetName)
        {
            string oldRelativePath = FileManager.RelativeDirectory;

            FlatRedBall.IO.FileManager.RelativeDirectory = FileManager.GetDirectory(assetName);



        #if DEBUG
            bool shouldCheckForXnb = true;

                #if ANDROID
            if (typeof(T) == typeof(Song))
            {
                shouldCheckForXnb = false;
            }
                #endif


            string fileToCheckFor = assetName + ".xnb";


            if (shouldCheckForXnb && !FileManager.FileExists(fileToCheckFor))
            {
                string errorString = "Could not find the file " + fileToCheckFor + "\n";

        #if !WINDOWS_8
                List <string> filesInDirectory = FileManager.GetAllFilesInDirectory(FileManager.GetDirectory(assetName), null, 0);

                errorString += "Found the following files:\n\n";

                foreach (string s in filesInDirectory)
                {
                    errorString += FileManager.RemovePath(s) + "\n";
                }
        #endif
                throw new FileNotFoundException(errorString);
            }
        #endif

        #if XNA4 && !MONOGAME
            if (!FileManager.IsRelative(assetName))
            {
                assetName = FileManager.MakeRelative(
                    assetName, System.Windows.Forms.Application.StartupPath + "/");
            }
        #endif

        #if USES_DOT_SLASH_ABOLUTE_FILES
            T asset;

            if (assetName.StartsWith(@".\") || assetName.StartsWith(@"./"))
            {
                asset = base.Load <T>(assetName.Substring(2));
            }
            else
            {
                asset = base.Load <T>(assetName);
            }
        #else
            T asset = base.Load <T>(assetName);
        #endif
            if (!mAssets.ContainsKey(assetName))
            {
                mAssets.Add(assetName, asset);
            }

            FileManager.RelativeDirectory = oldRelativePath;

            return(AdjustNewAsset(asset, assetName));
        }
예제 #7
0
        private void MakeAssetsRelative(string fileName)
        {
            string oldRelativeDirectory = FileManager.RelativeDirectory;

            if (FileManager.IsRelative(fileName))
            {
                fileName = FileManager.MakeAbsolute(fileName);
            }
            FileManager.RelativeDirectory = FileManager.GetDirectory(fileName);


            #region SpriteSave - Make textures relative
            foreach (SpriteSave ss in SpriteList)
            {
                ss.MakeRelative();
            }
            #endregion


            #region SpriteFrameSave - Make the textures relative

            foreach (SpriteFrameSave sfs in SpriteFrameSaveList)
            {
                sfs.ParentSprite.Texture = FileManager.MakeRelative(sfs.ParentSprite.Texture);

                if (string.IsNullOrEmpty(sfs.ParentSprite.AnimationChainsFile) == false)
                {
                    sfs.ParentSprite.AnimationChainsFile =
                        FileManager.MakeRelative(sfs.ParentSprite.AnimationChainsFile);
                }
            }

            #endregion


            #region SpriteGridSave - Make textures realtive
            foreach (SpriteGridSave sgs in SpriteGridList)
            {
                sgs.BaseTexture       = FileManager.MakeRelative(sgs.BaseTexture);
                sgs.Blueprint.Texture = FileManager.MakeRelative(sgs.Blueprint.Texture);
                foreach (string[] row in sgs.GridTexturesArray)
                {
                    for (int i = 0; i < row.Length; i++)
                    {
                        row[i] = FileManager.MakeRelative(row[i]);
                    }
                }

                if (sgs.AnimationChainGridSave != null)
                {
                    sgs.AnimationChainGridSave.MakeRelative();
                }
            }
            #endregion

            #region TextSaves - Make textures and .fnt files relative

            foreach (TextSave textSave in TextSaveList)
            {
                textSave.FontTexture = FileManager.MakeRelative(textSave.FontTexture);
                textSave.FontFile    = FileManager.MakeRelative(textSave.FontFile);
            }

            #endregion

            FileManager.RelativeDirectory = oldRelativeDirectory;
        }
예제 #8
0
        public List <string> GetReferencedFiles(RelativeType relativeType)
        {
            List <string> referencedFiles = new List <string>();

            foreach (SpriteSave spriteSave in SpriteList)
            {
                spriteSave.GetReferencedFiles(referencedFiles);
            }

            foreach (SpriteGridSave spriteGridSave in SpriteGridList)
            {
                if (!string.IsNullOrEmpty(spriteGridSave.BaseTexture) && !referencedFiles.Contains(spriteGridSave.BaseTexture))
                {
                    referencedFiles.Add(spriteGridSave.BaseTexture);
                }

                foreach (string[] stringArray in spriteGridSave.GridTexturesArray)
                {
                    foreach (string texture in stringArray)
                    {
                        if (!string.IsNullOrEmpty(texture) && !referencedFiles.Contains(texture))
                        {
                            referencedFiles.Add(texture);
                        }
                    }
                }
            }

            foreach (SpriteFrameSave spriteFrameSave in SpriteFrameSaveList)
            {
                if (!string.IsNullOrEmpty(spriteFrameSave.ParentSprite.Texture) &&
                    !referencedFiles.Contains(spriteFrameSave.ParentSprite.Texture))
                {
                    referencedFiles.Add(spriteFrameSave.ParentSprite.Texture);
                }

                if (!string.IsNullOrEmpty(spriteFrameSave.ParentSprite.AnimationChainsFile) &&
                    !referencedFiles.Contains(spriteFrameSave.ParentSprite.AnimationChainsFile))
                {
                    referencedFiles.Add(spriteFrameSave.ParentSprite.AnimationChainsFile);
                }
            }

            foreach (TextSave textSave in TextSaveList)
            {
                string fontFile         = textSave.FontFile;
                bool   isThereAFontFile = !string.IsNullOrEmpty(fontFile);
                if (isThereAFontFile &&
                    !referencedFiles.Contains(fontFile))
                {
                    referencedFiles.Add(fontFile);
                }


                string textureFile = textSave.FontTexture;
                if (!string.IsNullOrEmpty(textureFile))
                {
                    if (!referencedFiles.Contains(textureFile))
                    {
                        referencedFiles.Add(textureFile);
                    }
                }
                else if (isThereAFontFile)
                {
                    // This may be a multi-texture font, so let's check for that
                    string absoluteFontDirectory = this.mSceneDirectory + fontFile;

                    if (FileManager.FileExists(absoluteFontDirectory))
                    {
                        string fontDirectory = FileManager.GetDirectory(fontFile, FlatRedBall.IO.RelativeType.Relative);

                        string contents = FileManager.FromFileText(absoluteFontDirectory);

                        string[] textures = BitmapFont.GetSourceTextures(contents);

                        for (int i = 0; i < textures.Length; i++)
                        {
                            string textureWithFontFileDirectory = textures[i];

                            //make the texture hae the font file's directory
                            textureWithFontFileDirectory = fontDirectory + textureWithFontFileDirectory;


                            if (!referencedFiles.Contains(textureWithFontFileDirectory))
                            {
                                referencedFiles.Add(textureWithFontFileDirectory);
                            }
                        }
                    }
                }
            }

            if (relativeType == RelativeType.Absolute)
            {
                string directory = this.ScenePath;

                for (int i = 0; i < referencedFiles.Count; i++)
                {
                    if (FileManager.IsRelative(referencedFiles[i]))
                    {
                        referencedFiles[i] = directory + referencedFiles[i];
                    }
                }
            }

            return(referencedFiles);
        }