Esempio n. 1
0
        private void LoadLogic(string logicString)
        {
            logicString = Migrator.ApplyMigrations(logicString);
            var logic = LogicFile.FromJson(logicString);

            try
            {
                var itemsById = logic.Logic.ToDictionary(item => item.Id);

                VerifyLogic(logic, itemsById);

                _logic     = logic;
                _itemsById = itemsById;

                _singleItemSelectorForm.SetLogicFile(_logic);
                _multiItemSelectorForm.SetLogicFile(_logic);

                nItem.Maximum = _logic.Logic.Count - 1;
                SetIndex((int)nItem.Value);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Esempio n. 2
0
 public ToggleTricksForm(LogicMode logicMode, string userLogicFilename, IEnumerable <string> tricksEnabled)
 {
     InitializeComponent();
     Result    = tricksEnabled.ToHashSet();
     LogicFile = LogicUtils.ReadRulesetFromResources(logicMode, userLogicFilename);
     Write_Tricks();
 }
Esempio n. 3
0
        public static LogicFile ReadRulesetFromResources(LogicMode mode, string userLogicFileName)
        {
            if (mode == LogicMode.Casual)
            {
                return(LogicFile.FromJson(Properties.Resources.REQ_CASUAL));
            }
            else if (mode == LogicMode.Glitched)
            {
                return(LogicFile.FromJson(Properties.Resources.REQ_GLITCH));
            }
            else if (mode == LogicMode.UserLogic)
            {
                using (StreamReader Req = new StreamReader(File.OpenRead(userLogicFileName)))
                {
                    var logic = Req.ReadToEnd();

                    var logicConfiguration = Configuration.FromJson(logic);
                    if (logicConfiguration.GameplaySettings != null)
                    {
                        logic = logicConfiguration.GameplaySettings.Logic;
                    }

                    return(LogicFile.FromJson(logic));
                }
            }

            return(null);
        }
 public LogicItemSelectorForm(LogicFile logic, bool checkboxes)
 {
     _logic = logic;
     InitializeComponent();
     SetHighlightedItems(null);
     SetSelectedItems(null);
     UpdateItems();
     this.ActiveControl = textBoxFilter;
     lItems.CheckBoxes  = checkboxes;
 }
Esempio n. 5
0
 private void Reset()
 {
     _logic = new LogicFile
     {
         Logic = Enum.GetValues <Item>().Where(item => item >= 0).Select(item => new JsonFormatLogicItem
         {
             Id               = item.ToString(),
             RequiredItems    = new List <string>(),
             ConditionalItems = new List <List <string> >(),
             TimeAvailable    = TimeOfDay.None,
             TimeNeeded       = TimeOfDay.None,
             IsTrick          = false,
             TrickTooltip     = string.Empty,
         }).ToList(),
     };
     _singleItemSelectorForm?.SetLogicFile(_logic);
     _multiItemSelectorForm?.SetLogicFile(_logic);
     _itemsById = _logic.Logic.ToDictionary(item => item.Id);
 }
Esempio n. 6
0
        /// <summary>
        /// Populates the item list using the lines from a logic file, processes them 4 lines per item.
        /// </summary>
        /// <param name="data">The lines from a logic file</param>
        public static ItemList PopulateItemListFromLogicData(LogicFile logicFile)
        {
            var itemList = new ItemList();

            if (logicFile.Version != Migrator.CurrentVersion)
            {
                throw new Exception("Logic file is out of date or invalid. Open it in the Logic Editor to bring it up to date.");
            }

            var logic = logicFile.Logic;

            for (var i = 0; i < logic.Count; i++)
            {
                var logicItem = logic[i];
                itemList.Add(new ItemObject
                {
                    ID             = i,
                    Name           = logicItem.Id,
                    TimeNeeded     = (int)logicItem.TimeNeeded,
                    TimeAvailable  = logicItem.TimeAvailable > 0 ? (int)logicItem.TimeAvailable : 63,
                    TimeSetup      = (int)logicItem.TimeSetup,
                    IsTrick        = logicItem.IsTrick,
                    TrickTooltip   = logicItem.TrickTooltip,
                    DependsOnItems = logicItem.RequiredItems.Select(item => (Item)logic.FindIndex(li => li.Id == item)).ToList(),
                    Conditionals   = logicItem.ConditionalItems.Select(c => c.Select(item => (Item)logic.FindIndex(li => li.Id == item)).ToList()).ToList(),
                    TrickCategory  = logicItem.TrickCategory
                });
            }

            foreach (var io in itemList)
            {
                if (io.DependsOnItems.Any(item => itemList[item].IsTrick))
                {
                    throw new Exception($"Dependencies of {io.Name} are not valid. Cannot have tricks as Dependencies.");
                }
                if (io.Conditionals.Any() && io.Conditionals.All(c => c.Any(item => itemList[item].IsTrick)))
                {
                    throw new Exception($"Conditionals of {io.Name} are not valid. Must have at least one conditional that isn't a trick.");
                }
            }

            return(itemList);
        }
Esempio n. 7
0
        private void VerifyLogic(LogicFile logic, Dictionary <string, JsonFormatLogicItem> itemsById)
        {
            foreach (var item in _logic.Logic)
            {
                foreach (var requiredItem in item.RequiredItems)
                {
                    if (!_itemsById.ContainsKey(requiredItem))
                    {
                        throw new Exception($"Item '{requiredItem}' not found.");
                    }
                }

                foreach (var conditionals in item.ConditionalItems)
                {
                    foreach (var conditionalItem in conditionals)
                    {
                        if (!_itemsById.ContainsKey(conditionalItem))
                        {
                            throw new Exception($"Item '{conditionalItem}' not found.");
                        }
                    }
                }
            }
        }
Esempio n. 8
0
        public static LogicFile ReadRulesetFromResources(LogicMode mode, string userLogicFileName)
        {
            if (mode == LogicMode.Casual)
            {
                return(LogicFile.FromJson(Properties.Resources.REQ_CASUAL));
            }
            else if (mode == LogicMode.Glitched)
            {
                return(LogicFile.FromJson(Properties.Resources.REQ_GLITCH));
            }
            else if (mode == LogicMode.UserLogic)
            {
                using (StreamReader Req = new StreamReader(File.OpenRead(userLogicFileName)))
                {
                    var logic = Req.ReadToEnd();

                    return(LogicFile.FromJson(logic));

                    // TODO handle logic within settings file
                }
            }

            return(null);
        }
 public void SetLogicFile(LogicFile logic)
 {
     _logic = logic;
 }