public static void WebUpdateMonsterData(List <Monster> monsterData)
        {
            int monsterCount = monsterData.Count();

            for (int i = 0; i < monsterCount; i++)
            {
                Monster monster = monsterData.ElementAt(i);
                if (monster.Name == "Kono Dio da!" || monster.Health.Max > 1999999)
                {
                    continue;
                }
                monsterNames[i] = monster.Name;
                monsterSizes[i] = monster.Crown.ToString() + " Crown, Size: " + monster.Size;

                if (monster.Health.Current < 1)
                {
                    monsterCurrentHealths[i] = "0";
                }
                else
                {
                    monsterCurrentHealths[i] = monster.Health.Current.ToString();
                }
                if (monster.Health.Max < 1)
                {
                    monsterMaxHealths[i] = "0";
                }
                else
                {
                    monsterMaxHealths[i] = monster.Health.Max.ToString();
                }


                int partsCount   = monster.Parts.Count();
                int effectsCount = monster.StatusEffects.Count();
                monsterPartsAndStatuses[i] = "";

                for (int j = 0; j < partsCount; j++)
                {
                    MonsterPart monsterPart = monster.Parts.ElementAt(j);
                    monsterPartsAndStatuses[i] += monsterPart.Name + ": " + monsterPart.Health.Current + " / " + monsterPart.Health.Max + "<br />";
                }
                monsterPartsAndStatuses[i] += "<br />";
                for (int j = 0; j < effectsCount; j++)
                {
                    MonsterStatusEffect statusEffect = monster.StatusEffects.ElementAt(j);
                    if (0 < statusEffect.Duration.Fraction && statusEffect.Duration.Fraction < 1000 && statusEffect.Buildup.Fraction > 0)
                    {
                        monsterPartsAndStatuses[i]
                            += statusEffect.Name + " Build: "
                               + Math.Round(statusEffect.Buildup.Fraction) * 100 + "% / Dur "
                               + Math.Round(statusEffect.Duration.Fraction) * 100 + "% <br />";
                    }
                }
            }
        }
 public CopyingStrategy(MonsterPart part)
 {
     monsterPart = part;
 }
 public void RemovePart(MonsterPart part)
 {
     allParts.Remove(part);
     if (allParts.Count == 0) ShowGameOver();
 }
 public void AddPart(MonsterPart part)
 {
     partsAtAll++;
     allParts.Add(part);
 }
        private void UpdateMonsterInfo(Monster Monster)
        {
            Visibility                = Visibility.Visible;
            MonsterName.Text          = Monster.Name;
            MonsterHealthBar.MaxSize  = Width * 0.7833333333333333;
            MonsterStaminaBar.MaxSize = Width - 72;

            // Update monster health and stamina
            UpdateHealthBar(MonsterHealthBar, Monster.Health, Monster.MaxHealth);
            UpdateHealthBar(MonsterStaminaBar, Monster.Stamina, Monster.MaxStamina);
            SetMonsterHealthBarText(Monster.Health, Monster.MaxHealth);
            SetMonsterStaminaText(Monster.Stamina, Monster.MaxStamina);
            DisplayCapturableIcon(Monster.Health, Monster.MaxHealth, Monster.CaptureThreshold);

            // Gets monster icon
            MonsterIcon.Source = GetMonsterIcon(Monster.Id);

            SwitchSizeBasedOnTarget();

            // Parts
            int index = 0;

            MonsterPartsContainer.Children.Clear();
            while (index < Monster.Parts.Count)
            {
                Part        mPart       = Monster.Parts[index];
                MonsterPart PartDisplay = new MonsterPart()
                {
                    Style = FindResource("OVERLAY_MONSTER_SUB_PART_STYLE") as Style
                };
                PartDisplay.SetContext(mPart, MonsterPartsContainer.ItemWidth);
                MonsterPartsContainer.Children.Add(PartDisplay);
                index++;
            }

            // Ailments
            index = 0;
            MonsterAilmentsContainer.Children.Clear();
            while (index < Monster.Ailments.Count)
            {
                Ailment        ailment        = Monster.Ailments[index];
                MonsterAilment AilmentDisplay = new MonsterAilment()
                {
                    Style = FindResource("OVERLAY_MONSTER_SUB_AILMENT_STYLE") as Style
                };
                AilmentDisplay.SetContext(ailment, MonsterAilmentsContainer.ItemWidth);
                MonsterAilmentsContainer.Children.Add(AilmentDisplay);
                index++;
            }

            // Enrage
            if (Monster.IsEnraged && !ConfigManager.Settings.Overlay.MonstersComponent.HideHealthInformation)
            {
                ANIM_ENRAGEDICON.Begin(MonsterHealthBar, true);
                ANIM_ENRAGEDICON.Begin(HealthBossIcon, true);
                EnrageTimerText.Visibility = Visibility.Visible;
                EnrageTimerText.Text       = $"{Monster.EnrageTimerStatic - Monster.EnrageTimer:0}s";
            }

            // Set monster crown
            MonsterCrown.Source     = Monster.Crown == null ? null : (ImageSource)FindResource(Monster.Crown);
            MonsterCrown.Visibility = Monster.Crown == null ? Visibility.Collapsed : Visibility.Visible;
            Weaknesses.Children.Clear(); // Removes every weakness icon
            if (Monster.Weaknesses == null)
            {
                return;
            }
            index = 0;
            while (index < Monster.Weaknesses.Keys.Count)
            {
                string      Weakness = Monster.Weaknesses.Keys.ElementAt(index);
                ImageSource img      = FindResource(Weakness) as ImageSource;
                img?.Freeze();
                WeaknessDisplay MonsterWeaknessDisplay = new WeaknessDisplay
                {
                    Icon   = img,
                    Width  = 20,
                    Height = 20
                };
                Weaknesses.Children.Add(MonsterWeaknessDisplay);
                index++;
            }
            // Sometimes Alatreon's state changes before OnMonsterSpawn is dispatched
            if (Monster.GameId == 87)
            {
                OnAlatreonElementShift(this, EventArgs.Empty);
            }
        }