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()); } }
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"); } }
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); }
public FociGridContainer getSpecificFociList(Guid containerID) { FociGridContainer container = fociContainerList.SingleOrDefault((c) => c.IdentifierID == containerID); return(container); }
private void OpenFocusTree(Guid param) { FociGridContainer SelectedFile = fociContainerList.SingleOrDefault((f) => f.IdentifierID == param); Messenger.Default.Send(new NotificationMessage(SelectedFile, (new ViewModelLocator()).Main, "OpenFocusTree")); }