Exemple #1
0
        public void Update(Status status, IIsaacReader reader)
        {
            if (MainWindow.IsShuttingDown)
            {
                return;
            }
            Dispatcher.Invoke(() => {
                if (!status.Ready)
                {
                    Clear();
                    return;
                }

                var abpReader = reader as AfterbirthPlusIsaacReader;
                if (abpReader == null)
                {
                    Clear();
                    return;
                }

                List <Item> trinkets;
                if (CreationMode.On)
                {
                    trinkets = Trinkets.AllTrinkets.Select(pair => pair.Value).ToList();
                    trinkets.Sort((a, b) => string.CompareOrdinal(a.I18N, b.I18N));
                }
                else
                {
                    trinkets = abpReader.GetSmeltedTrinkets();
                }

                if (_addedTrinkets.Count > trinkets.Count)
                {
                    Clear();
                }

                var toAdd = new Dictionary <int, Item>();
                for (var i = 0; i < trinkets.Count; i++)
                {
                    var trinket = trinkets[i];
                    if (!_addedTrinkets.Contains(trinket))
                    {
                        toAdd.Add(i, trinket);
                    }
                }

                toAdd.ToList().ForEach(pair => {
                    var trinket      = pair.Value;
                    var resource     = ResourcesUtil.TrinketResource(trinket);
                    var imageModel   = new GeneralImageModel(resource, trinket.I18N, 0, 0, 2, Visibility.Visible, Cursors.Hand, 64, 64);
                    var trinketImage = new GeneralImage(imageModel, BitmapScalingMode.NearestNeighbor, MouseLeftButtonDownOnTrinketImage);
                    MainPanel.Children.Insert(pair.Key, trinketImage);
                    _addedTrinkets.Add(pair.Value);
                });
            });
        }
        public void Update(Status status, IIsaacReader reader)
        {
            if (MainWindow.IsShuttingDown)
            {
                return;
            }
            Dispatcher.Invoke(() => {
                if (!status.Ready)
                {
                    MainPanel.Children.Clear();
                    return;
                }

                var abpREader = reader as AfterbirthPlusIsaacReader;
                if (abpREader == null)
                {
                    MainPanel.Children.Clear();
                    return;
                }

                var voidedItems = abpREader.GetVoidedItems();

                if (MainPanel.Children.Count > voidedItems.Count)
                {
                    MainPanel.Children.Clear();
                }

                for (var i = MainPanel.Children.Count; i < voidedItems.Count; i++)
                {
                    var voidedItem = voidedItems[i];
                    GeneralImageModel imageModel;
                    if (voidedItem == null)
                    {
                        imageModel = new GeneralImageModel(null, "Unknown", 0, 0, 2, Visibility.Visible, Cursors.Arrow, 64, 64);
                    }
                    else
                    {
                        imageModel = new GeneralImageModel(ResourcesUtil.ItemResource(voidedItem), voidedItem.I18N, 0, 0, 2, Visibility.Visible, Cursors.Arrow, 64, 64);
                    }
                    MainPanel.Children.Add(new GeneralImage(imageModel));
                }
            });
        }
        public void Update(Status status, IIsaacReader reader)
        {
            if (!status.Ready)
            {
                SoundFunPlayer.ResetTouchedItems();
                _firstCheck = true;
                return;
            }

            var numberOfPlayers = MemoryReader.GetNumberOfPlayers();

            if (numberOfPlayers == 0)
            {
                SoundFunPlayer.ResetTouchedItems();
                _firstCheck = true;
                return;
            }

            var timerCounter = reader.GetTimeCounter();
            var reseted      = timerCounter < 2;

            // resets on hold "r"
            if (reseted)
            {
                SoundFunPlayer.ResetTouchedItems();
            }

            if (reader.IsGamePaused())
            {
                SoundFunPlayer.Pause(false);
                return;
            }

            // tries to resume
            SoundFunPlayer.Resume(false);

            var startCheck = reseted || _firstCheck;

            _firstCheck = false;

            SoundFunPlayer.CheckPlaySound(reader.GetItemsTouchedList(), startCheck);
        }
        public static void Update(Status status, IIsaacReader reader)
        {
            if (!status.Ready || IsaacVersion.AfterbirthPlus != MemoryReader.GetVersion())
            {
                Clear();
                return;
            }

            var abpReader = reader as AfterbirthPlusIsaacReader;

            if (abpReader == null)
            {
                Clear();
                return;
            }

            var numberOfPlayers = GetNumberOfPlayers();

            if (numberOfPlayers == 0)
            {
                Clear();
                return;
            }

            if (_loaded)
            {
                return;
            }

            _loaded = true;
            ModdedItems.Clear();
            ModdedItems.AddRange(LoadModdedItems());
            ModdedTrinkets.Clear();
            ModdedTrinkets.AddRange(LoadModdedTrinkets());
            ModdedPills.Clear();
            ModdedPills.AddRange(LoadModdedPills());
        }
        public void Update(Status status, IIsaacReader reader)
        {
            if (MainWindow.IsShuttingDown)
            {
                return;
            }
            Dispatcher.Invoke(() => {
                if (!status.Ready)
                {
                    Reset();
                    return;
                }

                var pool = reader.GetPillPool();
                if (!pool.Any())
                {
                    Reset();
                    return;
                }

                var seed = reader.GetSeed();
                if (seed == 0)
                {
                    Reset();
                    return;
                }

                var pillKnowledge = reader.GetPillKnowledge();
                var hasPhd        = reader.HasItem(new Item(75));

                var considerCache = pillKnowledge.Any(known => known); // any pill known
                if (considerCache)
                {
                    if (!_pillKnowledgeCache.ContainsKey(seed))
                    {
                        _pillKnowledgeCache[seed] = new List <bool>()
                        {
                            false, false, false, false, false, false, false, false, false, false, false, false, false
                        };
                    }
                    var cache = _pillKnowledgeCache[seed];

                    if (hasPhd)
                    {
                        var isPill    = reader.IsPillOrCard() == Consumable.Pill;
                        var pillIndex = reader.GetPillCardId();
                        if (isPill && pillIndex > 0 && pillIndex <= 13)
                        {
                            cache[pillIndex - 1] = true;
                        }
                        pillKnowledge = cache;
                    }
                    else
                    {
                        for (var i = 0; i < 13; i++)
                        {
                            cache[i] = pillKnowledge[i];
                        }
                    }
                }


                var toGoodPills = hasPhd || reader.HasItem(new Item(303));
                if (PillPanel.Children.Count != pool.Count)
                {
                    InitPills(pool, pillKnowledge, toGoodPills);
                }
                else
                {
                    UpdatePills(pool, pillKnowledge, toGoodPills);
                }

                var lastPillIndex = reader.IndexOfLastPillTaken();
                if (lastPillIndex == 0 || pool.Count < lastPillIndex)
                {
                    Model.LastPillVisibility = Visibility.Hidden;
                }
                else
                {
                    Item lastPill = null;
                    if (lastPillIndex > 0 && lastPillIndex <= 13)
                    {
                        lastPill = pool[lastPillIndex - 1];
                    }
                    SetPill(LastPill.Model, lastPill, lastPillIndex, true, toGoodPills);
                    Model.LastPillVisibility = Visibility.Visible;
                }
            });
        }