Пример #1
0
        private static void LoadLocalization()
        {
            if (GlueProjectSave.UsesTranslation)
            {
                List <ReferencedFileSave> allRfses = GlueProjectSave.GetAllReferencedFiles();

                foreach (ReferencedFileSave rfs in allRfses)
                {
                    if (rfs.IsDatabaseForLocalizing)
                    {
                        string fullFileName = ElementRuntime.ContentDirectory + rfs.Name;
                        try
                        {
                            LocalizationManager.AddDatabase(
                                fullFileName, rfs.CsvDelimiter.ToChar());
                        }
                        catch (Exception e)
                        {
                            MessageBox.Show("Error loading localization database:\n\n" + fullFileName + "\n\n" + e.Message);
                        }
                        break;
                    }
                }
            }
        }
Пример #2
0
        public GumProjectSave ToGumProjectSave(GlueProjectSave glueProject)
        {
            GumProjectSave gumProject = new GumProjectSave();

            foreach (var entitySave in glueProject.Entities)
            {
                var component = ToComponent(entitySave);
                gumProject.Components.Add(component);

                var componentReference = ToComponentReference(entitySave);
                gumProject.ComponentReferences.Add(componentReference);
            }

            foreach (var screen in glueProject.Screens)
            {
                var gumScreen = ToScreen(screen);
                gumProject.Screens.Add(gumScreen);

                var screenReference = ToScreenReference(screen);
                gumProject.ScreenReferences.Add(screenReference);
            }

            gumProject.AddNewStandardElementTypes();
            gumProject.FixStandardVariables();

            // set the finder before we do this because we'll need it to get objects:
            ObjectFinder.Self.GumProjectSave = gumProject;

            AdjustStandardsToMatchFrb(gumProject);

            GumCommands.Self.GuiCommands.PrintOutput($"Created Gum project from Glue project");

            return(gumProject);
        }
Пример #3
0
        internal void GenerateGlux(bool save = true)
        {
            ArrowProjectToGlueProjectConverter converter = new ArrowProjectToGlueProjectConverter();
            GlueProjectSave glueProjectSave = converter.ToGlueProjectSave(ArrowState.Self.CurrentArrowProject);

            if (glueProjectSave != null)
            {
                foreach (var screen in glueProjectSave.Screens)
                {
                    foreach (var nos in screen.AllNamedObjects)
                    {
                        nos.UpdateCustomProperties();
                    }
                }
                foreach (var entity in glueProjectSave.Entities)
                {
                    foreach (var nos in entity.AllNamedObjects)
                    {
                        nos.UpdateCustomProperties();
                    }
                }
            }

            ArrowState.Self.CurrentGlueProjectSave = glueProjectSave;

            if (save)
            {
                SaveGlux();
            }
        }
Пример #4
0
 internal static void GenerateAllCustomClasses(GlueProjectSave glueProject)
 {
     foreach (var customClass in glueProject.CustomClasses)
     {
         GenerateCustomClass(customClass);
     }
 }
Пример #5
0
        private static IElement GetElementFromObjectString(string element, GlueProjectSave glueProjectSave, out int index)
        {
            Regex regex = new Regex(@"(Screens)\[[0-9]+\]");

            Match match = regex.Match(element);

            if (match != Match.Empty && match.Groups.Count > 1 && match.Groups[1].Value == "Screens")
            {
                string matchRegex = @"Screens\[([0-9]+)\]";

                string indexAsString = Regex.Match(element, matchRegex).Groups[1].Value;
                index = int.Parse(indexAsString);

                return(glueProjectSave.Screens[index]);
            }
            //string screenOrEntity =

            regex = new Regex(@"(Entities)\[[0-9]+\]");
            match = regex.Match(element);
            if (match != Match.Empty && match.Groups.Count > 1 && match.Groups[1].Value == "Entities")
            {
                string matchRegex = @"Entities\[([0-9]+)\]";

                string indexAsString = Regex.Match(element, matchRegex).Groups[1].Value;
                index = int.Parse(indexAsString);

                return(glueProjectSave.Entities[index]);
            }
            index = -1;

            return(null);
        }
Пример #6
0
        public static void CreateGlueProjectSettingsFor(GlueProjectSave project)
        {
            DisplaySettings settings = new DisplaySettings();


            settings.AllowWindowResizing = false;
            settings.AspectRatioHeight   = 9;
            settings.AspectRatioWidth    = 16;

            settings.Is2D = project.In2D;

            settings.ResizeBehavior    = ResizeBehavior.StretchVisibleArea;
            settings.ResizeBehaviorGum = ResizeBehavior.StretchVisibleArea;

            settings.ResolutionWidth  = project.ResolutionWidth;
            settings.ResolutionHeight = project.ResolutionHeight;

            settings.RunInFullScreen  = false;
            settings.Scale            = 100;
            settings.ScaleGum         = 100;
            settings.SupportLandscape = true;
            settings.SupportPortrait  = false;

            project.DisplaySettings = settings;
        }
        /// <summary>
        /// Removes all ReferencedFileSaves which are marked as excluded from the argument ideProject.
        /// </summary>
        /// <remarks>
        /// <param name="ideProject">The project to check for exclusions.</param>
        /// <param name="glueProject">The current Glue project.</param>
        /// <returns>Whether any removals were made.</returns>
        public bool RemoveAllExcludedFiles(ProjectBase ideProject, GlueProjectSave glueProject)
        {
            bool wasAnythingRemoved = false;

            // gets files which have any exclusions
            foreach (var rfs in glueProject.GetAllReferencedFiles().Where(item => item.ProjectsToExcludeFrom.Count != 0))
            {
                if (rfs.ProjectsToExcludeFrom.Contains(ideProject.Name))
                {
                    wasAnythingRemoved |= TryRemoveFromProject(rfs, ideProject);
                }
            }

            return(wasAnythingRemoved);
        }
Пример #8
0
        public void LoadProject(string fileName)
        {
            string extension = FileManager.GetExtension(fileName);

            // better be a .arox
            ArrowProjectSave arrowProject = FileManager.XmlDeserialize <ArrowProjectSave>(fileName);

            ArrowState.Self.CurrentArrowProject = arrowProject;

            ArrowProjectToGlueProjectConverter converter = new ArrowProjectToGlueProjectConverter();
            GlueProjectSave glueProjectSave = converter.ToGlueProjectSave(ArrowState.Self.CurrentArrowProject);

            ArrowState.Self.CurrentGlueProjectSave  = glueProjectSave;
            ArrowState.Self.CurrentGluxFileLocation = fileName;
        }
Пример #9
0
        public GlueProjectSave ToGlueProjectSave(GumProjectSave gumProjectSave, string gluxFolder)
        {
            mGluxFolder     = gluxFolder;
            mGumProjectSave = gumProjectSave;
            mInstanceToNos.GumProjectSave = mGumProjectSave;

            GlueProjectSave toReturn = new GlueProjectSave();

            mGlueProjectSave = toReturn;

            var copiedFiles = CopyExternalFilesToProjects();

            AddScreensAndEntities(copiedFiles);

            return(toReturn);
        }
Пример #10
0
        private void AddResolutionButton_Click(object sender, EventArgs e)
        {
            TextInputWindow tiw = new TextInputWindow();

            tiw.DisplayText = "Enter name for the new resolution preset";
            if (tiw.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string whyIsntValid = WhyIsntResolutionPresetNameValid(tiw.Result);

                if (!string.IsNullOrEmpty(whyIsntValid))
                {
                    MessageBox.Show(whyIsntValid);
                }
                else
                {
                    GlueProjectSave glueProject = ObjectFinder.Self.GlueProject;

                    int width = 0;
                    if (int.TryParse(this.tbResWidth.Text, out width) == false)
                    {
                        width = 0;
                    }

                    int height = 0;

                    if (int.TryParse(this.tbResHeight.Text, out height) == false)
                    {
                        height = 0;
                    }

                    ResolutionValues resolutionValues = new ResolutionValues();
                    resolutionValues.Width  = width;
                    resolutionValues.Height = height;
                    resolutionValues.Name   = tiw.Result;

                    glueProject.ResolutionPresets.Add(resolutionValues);

                    GluxCommands.Self.SaveGlux();
                    RefreshPresetTreeView();
                }
            }
        }
Пример #11
0
        public void RefreshCamera()
        {
            SpriteManager.Camera.Position = new Microsoft.Xna.Framework.Vector3(0, 0, 40);
            object selectedItem = CameraConfigurationComboBox.SelectedItem;

            float yResolution = 600;

            if (selectedItem is CameraConfiguration)
            {
                ApplySettingsFromCameraConfigurationEnum(ref yResolution);
            }
            else if (selectedItem is string)
            {
                if ((string)selectedItem == GlueCameraSettings)
                {
                    GlueProjectSave glueProject = GlueViewState.Self.CurrentGlueProject;

                    if (glueProject != null)
                    {
                        if (glueProject.DisplaySettings != null)
                        {
                            yResolution = SetCameraFromDisplaySettings(yResolution, glueProject.DisplaySettings);
                        }
                        else
                        {
                            yResolution = SetCameraFromOldValues(yResolution, glueProject);
                        }
                    }
                }
            }



            GuiManager.OverridingFieldOfView = MathFunctions.GetAspectRatioForSameSizeAtResolution(yResolution);
            this.propertyGrid1.Refresh();

            PluginManager.ReactToResolutionChange();
        }
Пример #12
0
        private float SetCameraFromOldValues(float yResolution, GlueProjectSave glueProject)
        {
            SpriteManager.Camera.Orthogonal = glueProject.In2D;

            if (glueProject.SetResolution)
            {
                SetResolution(glueProject.ResolutionWidth, glueProject.ResolutionHeight);
                yResolution = glueProject.ResolutionHeight;
            }
            if (glueProject.SetOrthogonalResolution)
            {
                SpriteManager.Camera.OrthogonalWidth  = glueProject.OrthogonalWidth;
                SpriteManager.Camera.OrthogonalHeight = glueProject.OrthogonalHeight;
            }
            else
            {
                // If we don't set it explicitly then default to the resolution:
                SpriteManager.Camera.OrthogonalWidth  = glueProject.ResolutionWidth;
                SpriteManager.Camera.OrthogonalHeight = glueProject.ResolutionHeight;
            }

            return(yResolution);
        }
        public GlueProjectSave ToGlueProjectSave(ArrowProjectSave arrowProject)
        {
            GlueProjectSave toReturn = new GlueProjectSave();

            ArrowElementToGlueConverter elementToElementConverter = new ArrowElementToGlueConverter();

            foreach (var element in arrowProject.Elements)
            {
                IElement glueElement = elementToElementConverter.ToGlueIElement(element);

                if (glueElement is ScreenSave)
                {
                    toReturn.Screens.Add(glueElement as ScreenSave);
                }
                else
                {
                    toReturn.Entities.Add(glueElement as EntitySave);
                }
            }



            return(toReturn);
        }
Пример #14
0
        static void FillSearchBoxWithOptions(string text)
        {
            GlueProjectSave glueProjectSave = ProjectManager.GlueProjectSave;

            if (glueProjectSave == null)
            {
                return;
            }

            // Order it like this:
            // 1:  Screens
            // 2:  Entities
            // 3:  Objects (instances)
            // 4:  Files
            // 5:  States
            // 6:  State Categories
            // 7:  Variables

            text = text.ToLower();

            MainGlueWindow.Self.SearchListBox.Items.Clear();


            bool showScreens;
            bool showEntities;
            bool showObjects;
            bool showFiles;
            bool showStates;
            bool showVariables;
            bool showEvents;
            bool showCategories;

            text = DetermineWhatIsShown(text,
                                        out showScreens, out showEntities,
                                        out showObjects, out showFiles,
                                        out showStates, out showVariables,
                                        out showEvents, out showCategories);

            List <object> toAdd = new List <object>();


            #region Add Screens
            if (showScreens)
            {
                List <object> tempList = new List <object>();

                foreach (ScreenSave screen in glueProjectSave.Screens)
                {
                    string name = screen.Name.ToLower();
                    name = name.Substring("screens\\".Length);

                    if (name.Contains(text))
                    {
                        tempList.Add(screen);
                    }
                }

                tempList = tempList.OrderBy(item => item.ToString()).ToList();
                toAdd.AddRange(tempList);
            }
            #endregion

            #region Add Entities
            if (showEntities)
            {
                List <object> tempList = new List <object>();

                foreach (EntitySave entity in glueProjectSave.Entities)
                {
                    string name = entity.Name.ToLower();
                    name = name.Substring("entities\\".Length);
                    if (name.Contains(text))
                    {
                        tempList.Add(entity);
                    }
                }

                tempList = tempList.OrderBy(item => item.ToString()).ToList();
                toAdd.AddRange(tempList);
            }
            #endregion

            #region Add Objects (instances)
            if (showObjects)
            {
                List <object> tempList = new List <object>();

                foreach (ScreenSave screen in glueProjectSave.Screens)
                {
                    List <NamedObjectSave> namedObjectList = screen.NamedObjects;

                    FillSearchListBoxWithMatchingNos(text, namedObjectList, tempList);
                }

                foreach (EntitySave entity in glueProjectSave.Entities)
                {
                    List <NamedObjectSave> namedObjectList = entity.NamedObjects;

                    FillSearchListBoxWithMatchingNos(text, namedObjectList, tempList);
                }
                tempList = tempList.OrderBy(item => item.ToString()).ToList();
                toAdd.AddRange(tempList);
            }

            #endregion

            #region Add Files

            if (showFiles)
            {
                List <object> tempList = new List <object>();

                foreach (ScreenSave screen in glueProjectSave.Screens)
                {
                    foreach (ReferencedFileSave rfs in screen.ReferencedFiles)
                    {
                        if (rfs.Name.ToLower().Contains(text))
                        {
                            tempList.Add(rfs);
                        }
                    }
                }

                foreach (EntitySave entity in glueProjectSave.Entities)
                {
                    foreach (ReferencedFileSave rfs in entity.ReferencedFiles)
                    {
                        if (rfs.Name.ToLower().Contains(text))
                        {
                            tempList.Add(rfs);
                        }
                    }
                }

                foreach (ReferencedFileSave rfs in glueProjectSave.GlobalFiles)
                {
                    if (rfs.Name.ToLower().Contains(text))
                    {
                        tempList.Add(rfs);
                    }
                }
                tempList = tempList.OrderBy(item => item.ToString()).ToList();
                toAdd.AddRange(tempList);
            }


            #endregion

            #region Add States

            if (showStates)
            {
                List <object> tempList = new List <object>();

                foreach (ScreenSave screen in glueProjectSave.Screens)
                {
                    foreach (StateSave state in screen.AllStates)
                    {
                        if (state.Name.ToLower().Contains(text))
                        {
                            tempList.Add(state);
                        }
                    }
                }

                foreach (EntitySave entity in glueProjectSave.Entities)
                {
                    foreach (StateSave state in entity.AllStates)
                    {
                        if (state.Name.ToLower().Contains(text))
                        {
                            tempList.Add(state);
                        }
                    }
                }
                tempList = tempList.OrderBy(item => item.ToString()).ToList();
                toAdd.AddRange(tempList);
            }

            #endregion


            #region Add State Categories

            if (showCategories)
            {
                List <object> tempList = new List <object>();

                foreach (ScreenSave screen in glueProjectSave.Screens)
                {
                    foreach (StateSaveCategory category in screen.StateCategoryList)
                    {
                        if (category.Name.ToLower().Contains(text))
                        {
                            tempList.Add(category);
                        }
                    }
                }

                foreach (EntitySave entity in glueProjectSave.Entities)
                {
                    foreach (StateSaveCategory category in entity.StateCategoryList)
                    {
                        if (category.Name.ToLower().Contains(text))
                        {
                            tempList.Add(category);
                        }
                    }
                }
                tempList = tempList.OrderBy(item => item.ToString()).ToList();
                toAdd.AddRange(tempList);
            }

            #endregion



            #region Add Variables

            if (showVariables)
            {
                List <object> tempList = new List <object>();

                foreach (ScreenSave screen in glueProjectSave.Screens)
                {
                    foreach (CustomVariable variable in screen.CustomVariables)
                    {
                        if (variable.Name.ToLower().Contains(text))
                        {
                            tempList.Add(variable);
                        }
                    }
                }

                foreach (EntitySave entity in glueProjectSave.Entities)
                {
                    foreach (CustomVariable variable in entity.CustomVariables)
                    {
                        if (variable.Name.ToLower().Contains(text))
                        {
                            tempList.Add(variable);
                        }
                    }
                }
                tempList = tempList.OrderBy(item => item.ToString()).ToList();
                toAdd.AddRange(tempList);
            }

            #endregion

            #region Add Events

            if (showEvents)
            {
                List <object> tempList = new List <object>();

                foreach (ScreenSave screen in glueProjectSave.Screens)
                {
                    foreach (EventResponseSave eventResponse in screen.Events)
                    {
                        if (eventResponse.EventName.ToLower().Contains(text))
                        {
                            tempList.Add(eventResponse);
                        }
                    }
                }

                foreach (EntitySave entity in glueProjectSave.Entities)
                {
                    foreach (EventResponseSave eventResponse in entity.Events)
                    {
                        if (eventResponse.EventName.ToLower().Contains(text))
                        {
                            tempList.Add(eventResponse);
                        }
                    }
                }
                tempList = tempList.OrderBy(item => item.ToString()).ToList();
                toAdd.AddRange(tempList);
            }
            #endregion


            MainGlueWindow.Self.SearchListBox.Items.AddRange(toAdd.ToArray());
        }
Пример #15
0
        /// <summary>
        ///  Compares the previous GlueProjectSave with the current one.
        /// </summary>
        /// <returns>True if the GlueProjectSaves are the same</returns>
        private static bool CompareGlueProjectSaves()
        {
            if (!string.IsNullOrEmpty(mCurrentGlueFile))
            {
                int       numberOfTries    = 0;
                const int maxNumberOfTries = 5;
                bool      succeeded        = false;

                GlueProjectSave newGlueProjectSave = null;
                Exception       lastException      = null;
                //ObjectFinder.GlueProject = null;
                while (numberOfTries < maxNumberOfTries)
                {
                    try
                    {
                        newGlueProjectSave = FileManager.XmlDeserialize <GlueProjectSave>(mCurrentGlueFile);
                        succeeded          = true;
                        break;
                    }
                    catch (Exception e)
                    {
                        System.Threading.Thread.Sleep(25);
                        numberOfTries++;
                        lastException = e;
                    }
                }

                if (!succeeded)
                {
                    MessageBox.Show("Error loading GLUX:\n\n" + lastException.ToString());
                }

                if (GlueProjectSave == null && newGlueProjectSave != null)
                {
                    // This method gets called on the primary
                    // thread so it's okay to call UnloadGluxActivity
                    // which is synchronous:


                    // October 23, 2012
                    // I don't understand
                    // why we call UnloadGluxActivity.
                    // If the GlueProjectSave is null then
                    // there is no need to unload it is there?
                    // Unloading wipes out mNextElement, which we
                    // don't want to do if we're loading a .glux for
                    // the first time.
                    //mShouldUnloadGlux = true;
                    //UnloadGluxActivity();
                    GlueProjectSave = newGlueProjectSave;

                    return(false);
                }

                CompareObjects compareObjects = new CompareObjects();

                compareObjects.ElementsToIgnore.Add("ContainerType");
                compareObjects.ElementsToIgnore.Add("ImageWidth");
                compareObjects.ElementsToIgnore.Add("ImageHeight");
                compareObjects.ElementsToIgnore.Add("EquilibriumParticleCount");
                compareObjects.ElementsToIgnore.Add("BurstParticleCount");
                compareObjects.ElementsToIgnore.Add("RuntimeType");
                compareObjects.ElementsToIgnore.Add("EventSave");
                compareObjects.ElementsToIgnore.Add("SharedCodeFullFileName");


                // This method gets called on the primary
                // thread so it's okay to call UnloadGluxActivity
                // which is synchronous:
                mShouldUnloadGlux = true;
                UnloadGluxActivity();

                GlueProjectSave = newGlueProjectSave;
            }
            return(false);
        }
Пример #16
0
        private static void internalLoadGlux(string filename)
        {
            if (!string.IsNullOrEmpty(filename))
            {
                //int numberOfTries = 0;
                //const int maxNumberOfTries = 5;
                //bool succeeded = false;

                //Exception lastException = null;
                //ObjectFinder.GlueProject = null;
                //while (numberOfTries < maxNumberOfTries)
                //{
                //    try
                //    {
                //        GlueProjectSave = FileManager.XmlDeserialize<GlueProjectSave>(filename);
                //        succeeded = true;
                //        break;
                //    }
                //    catch (Exception e)
                //    {
                //        System.Threading.Thread.Sleep(25);
                //        numberOfTries++;
                //        lastException = e;
                //    }
                //}

                //if (!succeeded)
                //{
                //    MessageBox.Show("Error loading GLUX:\n\n" + lastException.ToString());
                //}


                ObjectFinder.GlueProject = GlueProjectSave;



                foreach (var screenSave in GlueProjectSave.Screens)
                {
                    screenSave.UpdateCustomProperties();
                }

                foreach (var entitySave in GlueProjectSave.Entities)
                {
                    entitySave.UpdateCustomProperties();
                }


                LocalizationManager.ClearDatabase();
                GlueProjectSave.UpdateIfTranslationIsUsed();



                // Need to find directory before doing the translation loading
                FileManager.RelativeDirectory = FileManager.GetDirectory(filename);



                mCurrentGlueFile = filename;

                Microsoft.Build.BuildEngine.Project vsProj = new Microsoft.Build.BuildEngine.Project();
                string csProjFileName = FileManager.RemoveExtension(mCurrentGlueFile) + ".csproj";
                vsProj.Load(csProjFileName, Microsoft.Build.BuildEngine.ProjectLoadSettings.IgnoreMissingImports);


                FindContentDirectory(vsProj);


                var vsProjectState = new VsProjectState();
                vsProjectState.DefaultNamespace = null;
                EditorObjects.IoC.Container.Set <IVsProjectState>(vsProjectState);

                foreach (BuildPropertyGroup bpg in vsProj.PropertyGroups)
                {
                    foreach (BuildProperty bp in bpg)
                    {
                        if (bp.Name == "RootNamespace")
                        {
                            vsProjectState.DefaultNamespace = bp.Value;
                            break;
                        }
                    }
                }

                LoadLocalization();

                FlatRedBallServices.Game.Window.Title = filename;

                if (GluxLoaded != null)
                {
                    GluxLoaded();
                }
            }
        }
Пример #17
0
 public void ReactToGluxLoad(GlueProjectSave newGlux, string fileName)
 {
     //MessageBox.Show("Loaded " + fileName + " and it has this many Entities " + newGlux.Entities.Count);
 }
Пример #18
0
        public void TestConversion()
        {
            ArrowProjectSave project = new ArrowProjectSave();

            SpriteSave spriteSave = new SpriteSave();

            spriteSave.X       = 3;
            spriteSave.Y       = 4;
            spriteSave.Name    = "SpriteInstance";
            spriteSave.Texture = "Entities/FirstElement/redball.BMP";


            ArrowElementSave element = new ArrowElementSave();

            element.Name = "FirstElement";
            element.Sprites.Add(spriteSave);
            project.Elements.Add(element);


            element      = new ArrowElementSave();
            element.Name = "ContainerOfFirstElement";
            element.Sprites.Add(spriteSave);
            project.Elements.Add(element);

            ArrowElementInstance instance = new ArrowElementInstance();

            instance.Name = "FirstElementInstance";
            instance.Type = "FirstElement";
            instance.SetVariable("X", 4);
            instance.SetVariable("Y", 5);
            element.ElementInstances.Add(instance);



            ArrowProjectToGlueProjectConverter converter = new ArrowProjectToGlueProjectConverter();

            GlueProjectSave gps = converter.ToGlueProjectSave(project);

            EntitySave firstElementEntity      = gps.Entities.FirstOrDefault(item => item.Name == "Entities/FirstElement");
            EntitySave containerOfFirstElement = gps.Entities.FirstOrDefault(item => item.Name == "Entities/ContainerOfFirstElement");

            if (firstElementEntity.Name.StartsWith("Entities/") == false)
            {
                throw new Exception("Entity names must start with \"Entities/\"");
            }

            if (firstElementEntity.ReferencedFiles.Count == 0)
            {
                throw new Exception("The Entity should automatically contain a ReferencedFile for the redball file");
            }

            if (containerOfFirstElement.NamedObjects.FirstOrDefault(item => item.InstanceName == "FirstElementInstance") == null)
            {
                throw new Exception("The entity should contain a NOS for another element, but it doesn't");
            }

            string gluxString;

            FileManager.XmlSerialize(gps, out gluxString);

            string aroxString;

            FileManager.XmlSerialize(project, out aroxString);
        }