Пример #1
0
        private void TestParseAllTrees()
        {
            //Arrange
            Script tester = new Script();

            foreach (string file in Directory.EnumerateFiles("national_focus", "*.txt"))
            {
                string contents = File.ReadAllText(file);
                //Act
                FocusGridModel           model     = FocusTreeParser.CreateTreeFromScript(file, contents);
                FociGridContainer        container = new FociGridContainer(model);
                List <FociGridContainer> list      = new List <FociGridContainer> {
                    container
                };
                Dictionary <string, string> files = FocusTreeParser.ParseAllTrees(list);
                string filecontent = files.FirstOrDefault().Value;
                string fileName    = files.FirstOrDefault().Key;
                //Assert
                Assert.IsNotNull(model);
                Assert.IsTrue(model.FociList.Any());
                Assert.IsNotNull(fileName);
                Assert.IsNotNull(filecontent);
                tester.Analyse(filecontent);
                Assert.IsFalse(tester.Logger.hasErrors());
            }
        }
Пример #2
0
        public static string ParseTreeForCompare(FocusGridModel model)
        {
            FociGridContainer container   = new FociGridContainer(model);
            string            focusTreeId = container.ContainerID.Replace(" ", "_");

            return(Parse(container.FociList.ToList(), focusTreeId,
                         container.TAG, container.AdditionnalMods));
        }
 private void NotificationMessageReceived(NotificationMessage msg)
 {
     if (msg.Target != null && msg.Target != this)
     {
         //Message not itended for here
         return;
     }
     if (msg.Notification == "OpenFocusTree")
     {
         FociGridContainer container = msg.Sender as FociGridContainer;
         if (TabsModelList.Where((t) => t is FocusGridModel &&
                                 ((FocusGridModel)t).UniqueID == container.IdentifierID).Any())
         {
             return;
         }
         FocusGridModel newModel = new FocusGridModel(container.IdentifierID);
         TabsModelList.Add(newModel);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "OpenLocalisation")
     {
         LocalisationContainer container = msg.Sender as LocalisationContainer;
         if (TabsModelList.Where((t) => t is LocalisationModel &&
                                 ((LocalisationModel)t).UniqueID == container.IdentifierID).Any())
         {
             return;
         }
         LocalisationModel newModel = new LocalisationModel(container.IdentifierID);
         TabsModelList.Add(newModel);
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "SaveProject")
     {
         saveProject();
     }
     if (msg.Notification == "RefreshProjectViewer")
     {
         TabsModelList.Clear();
         RaisePropertyChanged("TabsModelList");
     }
     if (msg.Notification == "SendDeleteItemSignal")
     {
         ObservableObject Model = null;
         if (msg.Sender is FociGridContainer)
         {
             Model = TabsModelList.FirstOrDefault((m) => m is FocusGridModel &&
                                                  ((FocusGridModel)m).UniqueID == ((FociGridContainer)msg.Sender).IdentifierID);
         }
         else if (msg.Sender is LocalisationContainer)
         {
             Model = TabsModelList.FirstOrDefault((m) => m is LocalisationModel &&
                                                  ((LocalisationModel)m).UniqueID == ((LocalisationContainer)msg.Sender).IdentifierID);
         }
         TabsModelList.Remove(Model);
         RaisePropertyChanged("TabsModelList");
     }
 }
Пример #4
0
        private void TestTreeToScript(FocusGridModel model)
        {
            //Arrange
            FociGridContainer        container = new FociGridContainer(model);
            List <FociGridContainer> list      = new List <FociGridContainer> {
                container
            };
            Script tester = new Script();
            //Act
            Dictionary <string, string> files = FocusTreeParser.ParseAllTrees(list);
            string filecontent = files.FirstOrDefault().Value;
            string fileName    = files.FirstOrDefault().Key;

            //Assert
            Assert.IsNotNull(filecontent);
            Assert.IsNotNull(fileName);
            Assert.AreEqual(fileName, "usa_focus");
            //Test if we can process the script
            tester.Analyse(filecontent);
            Assert.IsFalse(tester.Logger.hasErrors());
            Assert.IsNotNull(tester.FindAssignation("tag"));
        }
 public FocusGridModel(FociGridContainer container)
 {
     SetupCommons();
     //Transfer data
     UniqueID        = container.IdentifierID;
     visibleName     = container.ContainerID;
     tag             = container.TAG;
     additionnalMods = container.AdditionnalMods;
     foreach (Focus focus in container.FociList)
     {
         FociList.Add(new FocusModel(focus));
     }
     //Rerun to create sets
     foreach (FocusModel model in FociList)
     {
         model.RepairSets(
             container.FociList.FirstOrDefault(f => f.UniqueName == model.UniqueName),
             FociList.ToList());
     }
     //Create the remaining stuff
     FociList.CollectionChanged += FociList_CollectionChanged;
     //Min Row & column Count
     EditGridDefinition();
 }
        public static FociGridContainer CreateTreeFromScript(string fileName, Script script)
        {
            Dictionary <string, PrerequisitesSet> waitingList = new Dictionary <string, PrerequisitesSet>();
            FociGridContainer container = new FociGridContainer(Path.GetFileNameWithoutExtension(fileName));

            container.TAG = script.FindValue("tag") != null?script.FindValue("tag").Parse() : "";

            foreach (CodeBlock block in script.FindAllValuesOfType <CodeBlock>("focus"))
            {
                Focus newFocus = new Focus();
                newFocus.UniqueName = block.FindValue("id").Parse();
                newFocus.Image      = block.FindValue("icon").Parse().Replace("GFX_", "");
                newFocus.X          = int.Parse(block.FindValue("x").Parse());
                newFocus.Y          = int.Parse(block.FindValue("y").Parse());
                newFocus.Cost       = int.Parse(block.FindValue("cost").Parse());
                foreach (ICodeStruct exclusives in block.FindAllValuesOfType <ICodeStruct>("mutually_exclusive"))
                {
                    foreach (ICodeStruct focuses in exclusives.FindAllValuesOfType <ICodeStruct>("focus"))
                    {
                        //Check if focus exists in list
                        Focus found = container.FociList.FirstOrDefault((f) =>
                                                                        f.UniqueName == focuses.Parse());
                        if (found != null)
                        {
                            MutuallyExclusiveSet set = new MutuallyExclusiveSet(newFocus, found);
                            newFocus.MutualyExclusive.Add(set);
                            found.MutualyExclusive.Add(set);
                        }
                    }
                }
                foreach (ICodeStruct prerequistes in block.FindAllValuesOfType <ICodeStruct>("prerequisite"))
                {
                    if (!prerequistes.FindAllValuesOfType <ICodeStruct>("focus").Any())
                    {
                        break;
                    }
                    PrerequisitesSet set = new PrerequisitesSet(newFocus);
                    foreach (ICodeStruct focuses in prerequistes.FindAllValuesOfType <ICodeStruct>("focus"))
                    {
                        //Add the focus as a prerequisites in the current existing focuses
                        //or put into wait
                        Focus search = container.FociList.FirstOrDefault((f) =>
                                                                         f.UniqueName == focuses.Parse());
                        if (search != null)
                        {
                            set.FociList.Add(search);
                        }
                        else
                        {
                            waitingList[focuses.Parse()] = set;
                        }
                    }
                    //If any prerequisite was added (Poland has empty prerequisite blocks...)
                    if (set.FociList.Any())
                    {
                        newFocus.Prerequisite.Add(set);
                    }
                }
                //Get all core scripting elements
                Script InternalFocusScript = new Script();
                for (int i = 0; i < CORE_FOCUS_SCRIPTS_ELEMENTS.Length; i++)
                {
                    ICodeStruct found = block.FindAssignation(CORE_FOCUS_SCRIPTS_ELEMENTS[i]);
                    if (found != null)
                    {
                        InternalFocusScript.Code.Add(found);
                    }
                }
                newFocus.InternalScript = InternalFocusScript;
                container.FociList.Add(newFocus);
            }
            //Repair lost sets, shouldn't happen, but in case
            foreach (KeyValuePair <string, PrerequisitesSet> item in waitingList)
            {
                Focus search = container.FociList.FirstOrDefault((f) =>
                                                                 f.UniqueName == item.Key);
                if (search != null)
                {
                    item.Value.FociList.Add(search);
                }
            }
            return(container);
        }
Пример #7
0
        public FociGridContainer getSpecificFociList(Guid containerID)
        {
            FociGridContainer container = fociContainerList.SingleOrDefault((c) => c.IdentifierID == containerID);

            return(container);
        }
Пример #8
0
        private void OpenFocusTree(Guid param)
        {
            FociGridContainer SelectedFile = fociContainerList.SingleOrDefault((f) => f.IdentifierID == param);

            Messenger.Default.Send(new NotificationMessage(SelectedFile, (new ViewModelLocator()).Main, "OpenFocusTree"));
        }