Example #1
0
        public static object GetValueForProperty(string fileName, string objectName, string propertyName)
        {
            string extension = FileManager.GetExtension(fileName);

            switch (extension)
            {
                #region case Scene (scnx)
            case "scnx":

                SpriteEditorScene ses = SpriteEditorScene.FromFile(fileName);

                string oldRelative = FileManager.RelativeDirectory;
                FileManager.RelativeDirectory = FileManager.GetDirectory(fileName);

                object returnValue = GetValueForPropertyInScene(ses, objectName, propertyName);

                FileManager.RelativeDirectory = oldRelative;

                return(returnValue);

                //break;
                #endregion

                #region case ShapeCollection (shcx)

            case "shcx":
                ShapeCollectionSave scs = ShapeCollectionSave.FromFile(fileName);
                return(GetValueForPropertyInShapeCollection(scs, objectName, propertyName));

                //break;

                #endregion
            }
            return(null);
        }
        public static MapDrawableBatch FromScnx(string sceneFileName, string contentManagerName, bool verifySameTexturePerLayer)
        {
            // TODO: This line crashes when the path is already absolute!
            string absoluteFileName = FileManager.MakeAbsolute(sceneFileName);

            // TODO: The exception doesn't make sense when the file type is wrong.
            SpriteEditorScene saveInstance = SpriteEditorScene.FromFile(absoluteFileName);

            int startingIndex = 0;

            string oldRelativeDirectory = FileManager.RelativeDirectory;

            FileManager.RelativeDirectory = FileManager.GetDirectory(absoluteFileName);

            // get the list of sprites from our map file
            List <SpriteSave> spriteSaveList = saveInstance.SpriteList;

            // we use the sprites as defined in the scnx file to create and draw the map.
            MapDrawableBatch mMapBatch = FromSpriteSaves(spriteSaveList, startingIndex, spriteSaveList.Count, contentManagerName, verifySameTexturePerLayer);

            FileManager.RelativeDirectory = oldRelativeDirectory;
            // temp
            //mMapBatch = new MapDrawableBatch(32, 32, 32f, 64, @"content/tiles");
            return(mMapBatch);
        }
        public static LayeredTileMap FromScene(string fileName, string contentManagerName, bool verifySameTexturePerLayer)
        {
            Section.GetAndStartContextAndTime("Initial FromScene");
            LayeredTileMap toReturn = new LayeredTileMap();

            string absoluteFileName = FileManager.MakeAbsolute(fileName);

            Section.EndContextAndTime();
            Section.GetAndStartContextAndTime("FromFile");
            SpriteEditorScene ses = SpriteEditorScene.FromFile(absoluteFileName);

            Section.EndContextAndTime();
            Section.GetAndStartContextAndTime("BreaksNStuff");

            string oldRelativeDirectory = FileManager.RelativeDirectory;

            FileManager.RelativeDirectory = FileManager.GetDirectory(absoluteFileName);

            var breaks = GetZBreaks(ses.SpriteList);

            int valueBefore = 0;

            MapDrawableBatch mdb;
            int valueAfter;

            float zValue = 0;

            Section.EndContextAndTime();
            Section.GetAndStartContextAndTime("Create MDBs");

            for (int i = 0; i < breaks.Count; i++)
            {
                valueAfter = breaks[i];

                int count = valueAfter - valueBefore;

                mdb = MapDrawableBatch.FromSpriteSaves(ses.SpriteList, valueBefore, count, contentManagerName, verifySameTexturePerLayer);
                mdb.AttachTo(toReturn, false);
                mdb.RelativeZ = zValue;
                toReturn.mMapLists.Add(mdb);
                zValue     += toReturn.mZSplit;
                valueBefore = valueAfter;
            }

            valueAfter = ses.SpriteList.Count;
            if (valueBefore != valueAfter)
            {
                int count = valueAfter - valueBefore;

                mdb = MapDrawableBatch.FromSpriteSaves(ses.SpriteList, valueBefore, count, contentManagerName, verifySameTexturePerLayer);
                mdb.AttachTo(toReturn, false);
                mdb.RelativeZ = zValue;

                toReturn.mMapLists.Add(mdb);
            }
            Section.EndContextAndTime();
            FileManager.RelativeDirectory = oldRelativeDirectory;
            return(toReturn);
        }
Example #4
0
        void SaveSceneOk(Window callingWindow)
        {
            string fileName = ((FileWindow)callingWindow).Results[0];

            SpriteEditorScene ses = SpriteEditorScene.FromScene(EditorData.Scene);

            ses.Save(fileName);
        }
Example #5
0
        public static void SaveActiveScene(string fileName)
        {
            SpriteEditorScene sceneSave = SpriteEditorScene.FromScene(mBlockingScene);

            sceneSave.Save(fileName);

            mBlockingScene.Name = fileName;
        }
Example #6
0
        public static SceneSave FromLayer(Layer layer)
        {
            FlatRedBall.Scene scene = new FlatRedBall.Scene();
            scene.Sprites.AddRange(layer.Sprites);
            scene.Texts.AddRange(layer.Texts);
            scene.Sprites.AddRange(layer.ZBufferedSprites);

            SceneSave toReturn = new SceneSave();

            SpriteEditorScene.SetFromScene(scene, toReturn);

            return(toReturn);
        }
Example #7
0
        public static void SaveScene(string fileName)
        {
            if (mScene == null)
            {
                GuiManager.ShowMessageBox("There's no scene to save.", "Error Saving");
            }
            else
            {
                SpriteEditorScene spriteEditorScene = SpriteEditorScene.FromScene(mScene);

                spriteEditorScene.Save(fileName);
            }
        }
Example #8
0
        public static void LoadScene(string fileName)
        {
            if (mScene != null)
            {
                mScene.RemoveFromManagers();
                mScene.Clear();
            }

            SpriteEditorScene ses = SpriteEditorScene.FromFile(fileName);

            mScene = ses.ToScene(AppState.Self.PermanentContentManager);

            mScene.AddToManagers();

            FileMenuWindow.AttemptEmitterAttachment(fileName);
        }
Example #9
0
        void CustomInitialize()
        {
            SpriteManager.Camera.UsePixelCoordinates();
            SpriteManager.Camera.X = 129;
            SpriteManager.Camera.Y = -216;

            FlatRedBallServices.GraphicsOptions.TextureFilter = Microsoft.Xna.Framework.Graphics.TextureFilter.Point;

            SpriteEditorScene ses = SceneSave.FromFile("Content/Screens/TmxScreen/FinalFantasyScene.scnx".ToLowerInvariant());

            scene = new Scene();
            ses.SetScene <Sprite>(ContentManagerName, scene, SceneSettingOptions.ConvertZSeparatedSpritesIntoSpriteGrids);
            scene.Shift(new Vector3(0, 0, 0));
            scene.AddToManagers();

            TestLevel2.X -= 530;

            if (string.IsNullOrEmpty(TilbTest.MapLayers[0].Name))
            {
                throw new Exception("Map layers names are not coming through");
            }


            // Layer 0 should be called "LayerWithStuff"
            if (TmxWithEmptyLayers.MapLayers[0].Name != "LayerWithStuff")
            {
                throw new Exception("Having empty layers can screw up Layer names.  " +
                                    "This layer should be named \"LayerWithStuff\" but it is instead named " + TmxWithEmptyLayers.MapLayers[0].Name);
            }

            TestRotatedTiles();

            TestTileSizeOnMapWithObjects();

            TestEntitiesInFolders();

            TestCollisionLayerByType();

            // Make the shapes visible, to make sure that they get removed when the screen is destroyed:
            foreach (var shapeCollection in TmxWithShapes.ShapeCollections)
            {
                shapeCollection.Visible = true;
                shapeCollection.AddToManagers();
            }
        }
Example #10
0
        static bool SaveScene(string name, bool assetsRelativeToScene)
        {
            string oldRelativeDirectory = FileManager.RelativeDirectory;

            assetsRelativeToScene = true;

            if (assetsRelativeToScene)
            {
                FileManager.RelativeDirectory = FileManager.GetDirectory(name);
            }

            SpriteEditorScene ses = SpriteEditorScene.FromScene(SceneSaving);

            ses.AssetsRelativeToSceneFile = assetsRelativeToScene;

            ses.Save(name);

            FileManager.RelativeDirectory = oldRelativeDirectory;
            return(true);
        }
        private AnimationChainListSave GetAnimationChainListFromScnxReference(NamedObjectSave referencedNos)
        {
            string sourceFileName = ContentDirectory + referencedNos.SourceFile;

            string sourceFileDirectory = FlatRedBall.IO.FileManager.GetDirectory(sourceFileName);

            AnimationChainListSave acls = null;

            SpriteEditorScene ses;

            if (System.IO.File.Exists(sourceFileName))
            {
                ses = SpriteEditorScene.FromFile(sourceFileName);
                string truncatedName = referencedNos.SourceName.Substring(0, referencedNos.SourceName.LastIndexOf('(') - 1);



                SpriteSave spriteSave = ses.FindSpriteByName(truncatedName);

                if (spriteSave != null && !string.IsNullOrEmpty(spriteSave.AnimationChainsFile))
                {
                    acls = AnimationChainListSave.FromFile(
                        sourceFileDirectory + spriteSave.AnimationChainsFile);
                }

                if (acls == null)
                {
                    SpriteFrameSave sfs = ses.FindSpriteFrameSaveByName(truncatedName);

                    if (sfs != null)
                    {
                        acls = AnimationChainListSave.FromFile(
                            sourceFileDirectory + sfs.ParentSprite.AnimationChainsFile);
                    }
                }
            }



            return(acls);
        }
        public static void AutoSearchScn(Window callingWindow)
        {
            callingWindow.Parent.CloseWindow();
            List <string> allFiles = FileManager.GetAllFilesInDirectory(System.IO.Directory.GetCurrentDirectory());

            for (int i = allFiles.Count - 1; i > -1; i--)
            {
                if (FlatRedBall.IO.FileManager.GetExtension(allFiles[i]) != "scnx")
                {
                    allFiles.RemoveAt(i);
                }
            }


            //throw new NotImplementedException("Feature not implemented.  Complain on FlatRedBall forums");



            foreach (string scnFile in allFiles)
            {
                SpriteEditorScene ses = SpriteEditorScene.FromFile(scnFile);

                foreach (SpriteSave ss in ses.SpriteList)
                {
                    for (int i = EditorData.lastLoadedFile.emitters.Count - 1; i > -1; i--)
                    {
                        if (EditorData.lastLoadedFile.emitters[i].ParentSpriteName != null)
                        {
                            if (ss.Name == EditorData.lastLoadedFile.emitters[i].ParentSpriteName)
                            {
                                EditorData.LoadScene(scnFile);

                                return;
                            }
                        }
                    }
                }
            }
        }
        private static void AddResetVariablesForSpriteOrSpriteFrame(NamedObjectSave nos, List <string> variables)
        {
            // todo - support resetting animation chains on Sprites that aren't using a .scnx
            if (nos.SourceType == SourceType.File && !string.IsNullOrEmpty(nos.SourceFile))
            {
                string            fullFile = ProjectManager.MakeAbsolute(nos.SourceFile);
                SpriteEditorScene ses      = SpriteEditorScene.FromFile(fullFile);

                int endingIndex = nos.SourceName.LastIndexOf('(');

                string     nameWithoutType = nos.SourceName.Substring(0, endingIndex - 1);
                SpriteSave ss = ses.FindSpriteByName(nameWithoutType);

                string animationChainFileName = "";
                if (ss != null)
                {
                    animationChainFileName = ss.AnimationChainsFile;
                }
                else
                {
                    SpriteFrameSave sfs = ses.FindSpriteFrameSaveByName(nameWithoutType);
                    if (sfs != null)
                    {
                        animationChainFileName = sfs.ParentSprite.AnimationChainsFile;
                    }
                }

                if (!string.IsNullOrEmpty(animationChainFileName))
                {
                    variables.Add("CurrentChainName");
                    variables.Add("CurrentFrameIndex");
                }
            }

            variables.Add("Alpha");
            variables.Add("AlphaRate");
        }
Example #14
0
        static object GetValueForPropertyInScene(SpriteEditorScene scene, string objectName, string property)
        {
            for (int i = 0; i < scene.SpriteFrameSaveList.Count; i++)
            {
                if (scene.SpriteFrameSaveList[i].ParentSprite.Name == objectName)
                {
                    return(GetValueForPropertyOnObject(scene.SpriteFrameSaveList[i], property));
                }
            }

            for (int i = 0; i < scene.SpriteGridList.Count; i++)
            {
                if (scene.SpriteGridList[i].Name == objectName)
                {
                    return(GetValueForPropertyOnObject(scene.SpriteGridList[i], property));
                }
            }

            for (int i = 0; i < scene.SpriteList.Count; i++)
            {
                if (scene.SpriteList[i].Name == objectName)
                {
                    return(GetValueForPropertyOnObject(scene.SpriteList[i], property));
                }
            }

            for (int i = 0; i < scene.TextSaveList.Count; i++)
            {
                if (scene.TextSaveList[i].Name == objectName)
                {
                    return(GetValueForPropertyOnObject(scene.TextSaveList[i], property));
                }
            }

            return(null);
        }
Example #15
0
        internal static SpriteGridSave FromXElement(System.Xml.Linq.XElement element)
        {
            SpriteGridSave sgs = new SpriteGridSave();

            foreach (var subElement in element.Elements())
            {
                switch (subElement.Name.LocalName)
                {
                case "AnimationChainGridSave":
                    sgs.AnimationChainGridSave = AnimationChainGridSave.FromXElement(subElement);
                    break;

                case "Axis":
                    sgs.Axis = SpriteEditorScene.AsChar(subElement);
                    break;

                case "Blueprint":
                    sgs.Blueprint = SpriteSave.FromXElement(subElement);
                    break;

                case "BaseTexture":
                    sgs.BaseTexture = (string)subElement.Value;
                    break;

                case "CreatesAutomaticallyUpdatedSprites":
                    sgs.CreatesAutomaticallyUpdatedSprites = SpriteEditorScene.AsBool(subElement);
                    break;

                case "CreatesParticleSprites":
                    sgs.CreatesParticleSprites = SpriteEditorScene.AsBool(subElement);
                    break;

                case "DisplayRegionGridSave":
                    sgs.DisplayRegionGridSave = DisplayRegionGridSave.FromXElement(subElement);
                    break;

                case "DrawableBatch":
                    sgs.DrawableBatch = SpriteEditorScene.AsBool(subElement);
                    break;

                case "DrawDefaultTile":
                    sgs.DrawDefaultTile = SpriteEditorScene.AsBool(subElement);
                    break;

                case "FirstPaintedX":
                    sgs.FirstPaintedX = SpriteEditorScene.AsFloatList(subElement);
                    break;

                case "FirstPaintedY":
                    sgs.FirstPaintedY = SceneSave.AsFloat(subElement);
                    break;

                case "GridSpacing":
                    sgs.GridSpacing = SceneSave.AsFloat(subElement);
                    break;

                case "GridTexturesArray":
                    sgs.GridTexturesArray = SpriteEditorScene.AsStringArrayArray(subElement);
                    break;

                case "Name":
                    sgs.Name = subElement.Value;
                    break;

                case "OrderingMode":
                    sgs.OrderingMode = (Graphics.OrderingMode)Enum.Parse(typeof(Graphics.OrderingMode), subElement.Value, true);
                    break;

                case "XLeftBound":
                    sgs.XLeftBound = SceneSave.AsFloat(subElement);
                    break;

                case "XRightBound":
                    sgs.XRightBound = SceneSave.AsFloat(subElement);
                    break;

                case "YBottomBound":
                    sgs.YBottomBound = SceneSave.AsFloat(subElement);
                    break;

                case "YTopBound":
                    sgs.YTopBound = SceneSave.AsFloat(subElement);
                    break;

                case "ZCloseBound":
                    sgs.ZCloseBound = SceneSave.AsFloat(subElement);
                    break;

                case "ZFarBound":
                    sgs.ZFarBound = SceneSave.AsFloat(subElement);
                    break;

                default:
                    throw new NotImplementedException("Node not understood: " + subElement.Name.LocalName);
                }
            }


            return(sgs);
        }
Example #16
0
        public static List <SourceReferencingFile> GetSourceReferencingFilesReferencedByAsset(string fileName, TopLevelOrRecursive topLevelOrRecursive, ErrorBehavior errorBehavior, ref string error, ref string verboseError)
        {
            string fileExtension = FileManager.GetExtension(fileName);

            List <SourceReferencingFile> referencedFiles = null;

            switch (fileExtension)
            {
            case "scnx":
                try
                {
                    SpriteEditorScene ses = SpriteEditorScene.FromFile(fileName);

                    referencedFiles = ses.GetSourceReferencingReferencedFiles(RelativeType.Absolute);
                }
                catch (Exception e)
                {
                    error           = "Error loading file " + fileName + ": " + e.Message;
                    referencedFiles = new List <SourceReferencingFile>();
                    verboseError    = e.ToString();
                }
                break;

            default:
                referencedFiles = new List <SourceReferencingFile>();
                break;
            }
/**/
            if (topLevelOrRecursive == TopLevelOrRecursive.Recursive)
            {
                //First we need to get a list of all referenced files
                List <string> filesToSearch = new List <string>();

                try
                {
                    // GetFilesReferencedByAsset can throw an error if the file doesn't
                    // exist.  But we don't really care if it's missing if it can't reference
                    // others.  I mean, sure we care, but it's not relevant here.  Other systems
                    // can check for that.
                    if (CanFileReferenceOtherFiles(fileName))
                    {
                        GetFilesReferencedByAsset(fileName, topLevelOrRecursive, filesToSearch);
                    }
                }
                catch (Exception e)
                {
                    if (errorBehavior == ErrorBehavior.ThrowException)
                    {
                        throw e;
                    }
                    else
                    {
                        error += e.Message + "\n";
                    }
                }



                if (filesToSearch != null)
                {
                    for (int i = filesToSearch.Count - 1; i > -1; i--)
                    {
                        string errorForThisFile        = "";
                        string verboseErrorForThisFile = "";
                        List <SourceReferencingFile> subReferencedFiles = GetSourceReferencingFilesReferencedByAsset(filesToSearch[i], topLevelOrRecursive,
                                                                                                                     errorBehavior, ref errorForThisFile, ref verboseErrorForThisFile);
                        // error may have already been set.  If it has already been set, we don't want to dump more errors (which may just be duplicates anyway)
                        if (string.IsNullOrEmpty(error))
                        {
                            error += errorForThisFile;
                        }

                        if (subReferencedFiles != null)
                        {
                            referencedFiles.AddRange(subReferencedFiles);
                        }
                    }
                }
            }
/**/
            return(referencedFiles);
        }
Example #17
0
        public static List <string> GetFilesReferencedByAsset(string file, bool readRecursively)
        {
            string fileExtension = FileManager.GetExtension(file);

            List <string> referencedFiles = null;           // = new List<string>();

            switch (fileExtension)
            {
                #region Scene (.scnx)

            case "scnx":

                SpriteEditorScene ses = SpriteEditorScene.FromFile(file);
                referencedFiles = ses.GetReferencedFiles(RelativeType.Absolute);
                break;

                #endregion

                #region Emitter List (.emix)

            case "emix":
                EmitterSaveList esl = EmitterSaveList.FromFile(file);
                referencedFiles = esl.GetReferencedFiles(RelativeType.Absolute);
                break;

                #endregion

                #region SpriteRig (.srgx)

            case "srgx":
                SpriteRigSave srs = SpriteRigSave.FromFile(file);
                referencedFiles = srs.GetReferencedFiles(RelativeType.Absolute);
                break;

                #endregion

                #region AnimationChain List

            case "achx":
                AnimationChainListSave acls = AnimationChainListSave.FromFile(file);
                referencedFiles = acls.GetReferencedFiles(RelativeType.Absolute);
                break;

                #endregion

                #region Bitmap Font Generator Config File (.bmfc)

            case "bmfc":

                referencedFiles = new List <string>();

                // These are only referenced IF they actually exist
                string referencedFileToAdd = FileManager.RemoveExtension(file) + ".png";
                if (FileManager.FileExists(referencedFileToAdd))
                {
                    referencedFiles.Add(referencedFileToAdd);
                }

                referencedFileToAdd = FileManager.RemoveExtension(file) + ".fnt";
                if (FileManager.FileExists(referencedFileToAdd))
                {
                    referencedFiles.Add(referencedFileToAdd);
                }
                break;

                #endregion

                #region X File (.x)

            case "x":
                referencedFiles = GetTextureReferencesInX(file);
                break;

                #endregion

                #region WME File (.wme)
            case "wme":
                referencedFiles = new List <string>();
                WMELoader.GetReferencedFiles(file, referencedFiles, RelativeType.Absolute);

                break;

                #endregion

                #region Spline List (.slpx) - falls to default

            case "splx":

                #endregion
            default:
                referencedFiles = new List <string>();
                break;
            }

            if (readRecursively)
            {
                for (int i = referencedFiles.Count - 1; i > -1; i--)
                {
                    referencedFiles.AddRange(GetFilesReferencedByAsset(referencedFiles[i], true));
                }
            }

            // Files may include "../", so let's get rid of that stuff
            for (int i = 0; i < referencedFiles.Count; i++)
            {
                referencedFiles[i] = FileManager.Standardize(referencedFiles[i], "", false);
            }


            return(referencedFiles);
        }
Example #18
0
        public void PerformLoadScn(string fileName, bool replace)
        {
            // This method is public because this method is called if the user drags a
            // .scnx onto the SpriteEditor

            #region Mark how many objects before loading in case there is an insertion.
            // If there is an insertion, only the newly-added objects should have post load
            // logic performed on them

            int numSpritesBefore         = GameData.Scene.Sprites.Count;
            int numOfSGsBefore           = GameData.Scene.SpriteGrids.Count;
            int numOfSpriteFramesBefore  = GameData.Scene.SpriteFrames.Count;
            int numberOfPositionedModels = GameData.Scene.PositionedModels.Count;

            #endregion

            SpriteEditorScene tempSES = SpriteEditorScene.FromFile(fileName);

            #region See if there are any Models that reference files that aren't on disk

            string sceneDirectory = FileManager.GetDirectory(fileName);
            for (int i = 0; i < tempSES.PositionedModelSaveList.Count; i++)
            {
                PositionedModelSave modelSave = tempSES.PositionedModelSaveList[i];

                if (!FileManager.FileExists(modelSave.ModelFileName))
                {
                    // See if there's a .x with that name

                    if (FileManager.FileExists(sceneDirectory + modelSave.ModelFileName + ".x"))
                    {
                        modelSave.ModelFileName = modelSave.ModelFileName + ".x";
                    }
                }
            }
            #endregion

            #region Now, see if there are any other files that haven't been found and create the error window

            List <string> texturesNotFound = tempSES.GetMissingFiles();
            if (texturesNotFound.Count != 0)
            {
                OkListWindow okListWindow = new OkListWindow(
                    "There are files that the .scnx references which cannot be located.",
                    "Error loading .scnx");

                foreach (string file in texturesNotFound)
                {
                    okListWindow.AddItem(file);
                }

                return;
            }
            #endregion

            #region if replacing, clear the old scene out
            if (replace)
            {
                SpriteManager.RemoveScene(GameData.Scene, true);
                FlatRedBallServices.Unload(GameData.SceneContentManager);

                tempSES.SetCamera(GameData.Camera);

#if FRB_MDX
                if (tempSES.CoordinateSystem == FlatRedBall.Math.CoordinateSystem.RightHanded)
                {
                    GameData.Camera.Z *= -1;
                }
#endif

                GameData.EditorProperties.PixelSize = tempSES.PixelSize;

                GuiData.EditorPropertiesGrid.Refresh();

                // 4/16/2011:  The following line of code
                // was causing errors when saving the .scnx
                // file through CTRL+S.  Taking it out because
                // I don't see why we need this anyway.
                // GameData.FileName = FileManager.RemoveExtension(fileName);
                GameData.FileName = fileName;
                FlatRedBallServices.Owner.Text = "SpriteEditor - Currently editing " + GameData.FileName;

                GuiData.MenuStrip.LastFileTypeLoaded = FileManager.GetExtension(fileName);
            }
            #endregion


            Scene newlyLoadedScene = tempSES.ToScene <EditorSprite>(GameData.SceneContentManager);

            GameData.Scene.AddToThis(newlyLoadedScene);
            // This caused
            // a double-add.
            // Not sure why we're
            // adding GameData.Scene.
            //GameData.Scene.AddToManagers();
            newlyLoadedScene.AddToManagers();

            GuiData.ListWindow.RefreshListsShown();

            #region Add the used Textures to the texture ListBox

            for (int i = numSpritesBefore; i < GameData.Scene.Sprites.Count; i++)
            {
                GuiData.ListWindow.Add(GameData.Scene.Sprites[i].Texture);
                GuiData.ListWindow.Add(GameData.Scene.Sprites[i].AnimationChains);
            }

            for (int i = numOfSpriteFramesBefore; i < GameData.Scene.SpriteFrames.Count; i++)
            {
                GuiData.ListWindow.Add(GameData.Scene.SpriteFrames[i].Texture);
                GuiData.ListWindow.Add(GameData.Scene.SpriteFrames[i].AnimationChains);
            }

            for (int i = numOfSGsBefore; i < GameData.Scene.SpriteGrids.Count; i++)
            {
                SpriteGrid sg = GameData.Scene.SpriteGrids[i];
                sg.PopulateGrid(GameData.Camera.X, GameData.Camera.Y, 0f);

                sg.RefreshPaint();
                List <Texture2D> texturesToAdd = sg.GetUsedTextures();
                foreach (Texture2D tex in texturesToAdd)
                {
                    GuiData.ListWindow.Add(tex);
                }
            }
            #endregion

            CheckForExtraFiles(FileManager.RemoveExtension(fileName));
            GameData.Scene.Sprites.SortZInsertionDescending();


            if (tempSES.AssetsRelativeToSceneFile)
            {
                FileManager.ResetRelativeToCurrentDirectory();
            }
        }
Example #19
0
        public bool SaveScene(string name, bool areAssetsRelativeToScene)
        {
            string oldRelativeDirectory = FileManager.RelativeDirectory;

            if (areAssetsRelativeToScene)
            {
                FileManager.RelativeDirectory = FileManager.GetDirectory(name);
            }

            // This will reduce the file size if we use a lot of SpriteGrids
            for (int i = 0; i < GameData.Scene.SpriteGrids.Count; i++)
            {
                GameData.Scene.SpriteGrids[i].TrimGrid();
            }

            SpriteEditorScene ses = SpriteEditorScene.FromScene(GameData.Scene);

            ses.AssetsRelativeToSceneFile = areAssetsRelativeToScene;



            ses.Save(name);

            // TODO:  Need to check if file saving worked properly.
            bool wasSceneSaved = true;

            if (wasSceneSaved)
            {
                #region create the SpriteEditorSceneProperties

                GameData.SpriteEditorSceneProperties.SetFromRuntime(
                    GameData.Camera,
                    GameData.BoundsCamera,
                    GameData.EditorProperties.PixelSize,
                    GuiData.CameraBoundsPropertyGrid.Visible
                    );


                GameData.SpriteEditorSceneProperties.WorldAxesVisible = GameData.EditorProperties.WorldAxesDisplayVisible;

                GameData.SpriteEditorSceneProperties.TextureDisplayRegionsList.Clear();

                for (int k = 0; k < GuiData.ListWindow.TextureListBox.Count; k++)
                {
                    TextureDisplayRegionsSave tdrs = new TextureDisplayRegionsSave();

                    CollapseItem item = GuiData.ListWindow.TextureListBox[k];

                    // The FileManager's relative directory has been set, so we just have to call MakeRelative and it should work fine
                    tdrs.TextureName =
                        FileManager.MakeRelative(((Texture2D)item.ReferenceObject).SourceFile());

                    tdrs.DisplayRegions = GuiData.ListWindow.CreateTextureReferences(item);

                    GameData.SpriteEditorSceneProperties.TextureDisplayRegionsList.Add(tdrs);
                }


                GameData.SpriteEditorSceneProperties.Save(FileManager.RemoveExtension(name) + ".sep");

                #endregion

                FlatRedBallServices.Owner.Text = "SpriteEditor - Currently editing " + name;
                // As mentioned in the othe area where GameData.Filename is set, I'm not
                // sure why we were removing the extension.  I've commented out the extension
                // removal since it causes problems with CTRL+S
                // name = FileManager.RemoveExtension(name);
                GameData.FileName = name;
                if (SavedSuccess != null)
                {
                    SavedSuccess(this, null);
                }
            }

            FileManager.RelativeDirectory = oldRelativeDirectory;
            if (!wasSceneSaved)
            {
                GuiManager.ShowMessageBox("Could not save " + GameData.FileName + ".  Is the file readonly?", "Error Saving");
            }
            return(wasSceneSaved);
        }
Example #20
0
        public static List <string> GetNamedObjectsIn(string fileName)
        {
            string        extension    = FileManager.GetExtension(fileName);
            List <string> listToReturn = new List <string>();

            switch (extension)
            {
                #region case Scene (scnx)
            case "scnx":

                SpriteEditorScene ses = SpriteEditorScene.FromFile(fileName);

                for (int i = 0; i < ses.PositionedModelSaveList.Count; i++)
                {
                    listToReturn.Add(ses.PositionedModelSaveList[i].Name + " (PositionedModel)");
                }

                for (int i = 0; i < ses.SpriteFrameSaveList.Count; i++)
                {
                    listToReturn.Add(ses.SpriteFrameSaveList[i].ParentSprite.Name + " (SpriteFrame)");
                }

                for (int i = 0; i < ses.SpriteGridList.Count; i++)
                {
                    listToReturn.Add(ses.SpriteGridList[i].Name + " (SpriteGrid)");
                }

                for (int i = 0; i < ses.SpriteList.Count; i++)
                {
                    listToReturn.Add(ses.SpriteList[i].Name + " (Sprite)");
                }

                for (int i = 0; i < ses.TextSaveList.Count; i++)
                {
                    listToReturn.Add(ses.TextSaveList[i].Name + " (Text)");
                }
                break;
                #endregion

                #region case ShapeCollection (shcx)

            case "shcx":
                ShapeCollectionSave scs = ShapeCollectionSave.FromFile(fileName);

                for (int i = 0; i < scs.AxisAlignedCubeSaves.Count; i++)
                {
                    listToReturn.Add(scs.AxisAlignedCubeSaves[i].Name + " (AxisAlignedCube)");
                }
                for (int i = 0; i < scs.AxisAlignedRectangleSaves.Count; i++)
                {
                    listToReturn.Add(scs.AxisAlignedRectangleSaves[i].Name + " (AxisAlignedRectangle)");
                }
                for (int i = 0; i < scs.CircleSaves.Count; i++)
                {
                    listToReturn.Add(scs.CircleSaves[i].Name + " (Circle)");
                }
                for (int i = 0; i < scs.PolygonSaves.Count; i++)
                {
                    listToReturn.Add(scs.PolygonSaves[i].Name + " (Polygon)");
                }
                for (int i = 0; i < scs.SphereSaves.Count; i++)
                {
                    listToReturn.Add(scs.SphereSaves[i].Name + " (Sphere)");
                }
                break;

                #endregion

                #region NodeNetwork (nntx)
            case "nntx":
                NodeNetworkSave nns = NodeNetworkSave.FromFile(fileName);

                for (int i = 0; i < nns.PositionedNodes.Count; i++)
                {
                    listToReturn.Add(nns.PositionedNodes[i].Name + " (PositionedNode)");
                }

                break;
                #endregion

                #region EmitterList (emix)
            case "emix":
                EmitterSaveList esl = EmitterSaveList.FromFile(fileName);

                for (int i = 0; i < esl.emitters.Count; i++)
                {
                    listToReturn.Add(esl.emitters[i].Name + " (Emitter)");
                }

                break;

                #endregion

                #region Case AnimationChainList (achx)

            case "achx":
                AnimationChainListSave acls = AnimationChainListSave.FromFile(fileName);

                for (int i = 0; i < acls.AnimationChains.Count; i++)
                {
                    listToReturn.Add(acls.AnimationChains[i].Name + " (AnimationChain)");
                }
                break;
                #endregion

                #region Case SplineList (splx)
            case "splx":
                SplineSaveList ssl = SplineSaveList.FromFile(fileName);

                for (int i = 0; i < ssl.Splines.Count; i++)
                {
                    listToReturn.Add(ssl.Splines[i].Name + " (Spline)");
                }

                break;

                #endregion
            }

            return(listToReturn);
        }
 public void TestLoading()
 {
     SpriteEditorScene.ManualDeserialization = true;
     SpriteEditorScene.FromFile("Content/BorwnClayout.scnx");
 }