private void UpdateElementals(GameTime gameTime, Character character, ViewManager viewManager)
 {
     for (int i = 0; i < elementals.Count; i++)
     {
         // Using relativeX for both check for a circle image zone
         if (Vector2.DistanceSquared(character.Position, elementals[i].Position) > Math.Pow(viewManager.RelativeX(relativeRemovalRadius), 2))
         {
             // Console.WriteLine("Elemental removed");
             elementals.RemoveAt(i);
         }
         else if (!elementals[i].IsAlive)
         {
             character.AddExperience(elementals[i].PointYield);
             character.AddElementalPoints(elementals[i].CurrentElement, elementals[i].PointYield * 2);
             elementals.RemoveAt(i);
         }
         else
         {
             elementals[i].Update(gameTime, elementals, character.Position);
             elementals[i].Visible = Math.Abs(character.Position.X - elementals[i].Position.X) < viewManager.RelativeX(50) + elementals[i].Width
                 || Math.Abs(character.Position.Y - elementals[i].Position.Y) < viewManager.RelativeY(50) + elementals[i].Height;
         }
     }
 }
        private void UpdateZones(GameTime gameTime, Character character, ViewManager viewManager)
        {
             // Using relativeX for both check for a circle image zone
            int zoneRadius = viewManager.RelativeX(50);

            if (newZoneNeeded)
            {
                // Console.WriteLine("New zone needed");
                if (elementalZones.Count == 0)
                {
                    // Create a zone with the character at the radius
                    AddNewZone(character.Position, character.StatAverage, zoneRadius);
                } else if(elementalZones.Count < maxZoneCount) {
                    CreateNewZone(character, viewManager, zoneRadius);
                }
            }
            else
            {
                elapsedZoneTime += (int)gameTime.ElapsedGameTime.TotalMilliseconds;

                if (elapsedZoneTime >= zoneInterval)
                {
                    newZoneNeeded = true;
                    elapsedZoneTime = 0;
                }
            }

            for (int i = 0; i < elementalZones.Count; i++)
            {
                // Smaller removal radius for zones
                if (elementalZones[i].GeneratedAll || Vector2.DistanceSquared(character.Position, elementalZones[i].Position)
                    > viewManager.RelativeX(relativeRemovalRadius) * viewManager.RelativeX(relativeRemovalRadius))
                {
                    // Console.WriteLine("Zone removed");
                    elementalZones.RemoveAt(i);
                }
                else
                {
                    elementalZones[i].Update(gameTime, character.Position);

                    if (elementalZones[i].GeneratingElement)
                    {
                        elementalZones[i].GeneratingElement = false;

                        if (elementals.Count < maxElementalCount)
                        {
                            Elemental optionElemental = elementalZones[i].NewElemental(elementals);
                            
                            if(optionElemental != null) elementals.Add(optionElemental);

                            // Console.WriteLine("Elemental created at: " + elementals[elementals.Count - 1].Position);
                        }
                    }
                }
            }
        }
 private Vector2 RandomZonePos(Vector2 characterPosition, ViewManager viewManager)
 {
     var angle = Math.Sqrt(Helper.RandomNextDouble()) * Math.PI * 2;
     var gRadius = Helper.RandomInt(viewManager.RelativeY(10), viewManager.RelativeX(125));
     return new Vector2((int)(characterPosition.X + gRadius * Math.Cos(angle)),
         (int)(characterPosition.Y + gRadius * Math.Sin(angle)));
 }
Example #4
0
        public InfoArea(ViewManager viewManager)
        {
            infoZoneRect = new Rectangle(0, viewManager.Height - viewManager.RelativeX(17.5f), viewManager.RelativeX(25), viewManager.RelativeX(17.5f));
            characterCircleRect = new Rectangle(viewManager.RelativeX(3.5f), viewManager.Height - viewManager.RelativeX(11f),
                viewManager.RelativeX(10), viewManager.RelativeX(10));
            expBarRect = new Rectangle(characterCircleRect.X + characterCircleRect.Width / 2,
                characterCircleRect.Y + characterCircleRect.Height - viewManager.RelativeX(1), viewManager.RelativeX(25), viewManager.RelativeX(1));
            hpBarRect = new Rectangle(characterCircleRect.X + (int)(0.7f * characterCircleRect.Width), expBarRect.Y - viewManager.RelativeX(2),
                expBarRect.Width - (int)(0.20f * characterCircleRect.Width), viewManager.RelativeX(2));

            // Element icons
            int iconWidth = viewManager.RelativeX(3.5f);
            int iconMargin = viewManager.RelativeX(0.1f);
            int radius = (characterCircleRect.Width + iconWidth) / 2 + iconMargin;
            this.fireIconRect =
                new Rectangle(-iconWidth / 2 + characterCircleRect.Center.X + (int)(radius * Math.Cos(Math.PI * 13 / 12)),
                    -iconWidth / 2 + characterCircleRect.Center.Y + (int)(radius * Math.Sin(Math.PI * 13 / 12)),
                    iconWidth, iconWidth);
            this.waterIconRect =
                new Rectangle(-iconWidth / 2 + characterCircleRect.Center.X + (int)(radius * Math.Cos(Math.PI * 49 / 36)),
                    -iconWidth / 2 + characterCircleRect.Center.Y + (int)(radius * Math.Sin(Math.PI * 49 / 36)),
                    iconWidth, iconWidth);
            this.earthIconRect =
                new Rectangle(-iconWidth / 2 + characterCircleRect.Center.X + (int)(radius * Math.Cos(Math.PI * 59 / 36)),
                    -iconWidth / 2 + characterCircleRect.Center.Y + (int)(radius * Math.Sin(Math.PI * 59 / 36)),
                    iconWidth, iconWidth);
            this.windIconRect =
                new Rectangle(-iconWidth / 2 + characterCircleRect.Center.X + (int)(radius * Math.Cos(Math.PI * 23 / 12)),
                    -iconWidth / 2 + characterCircleRect.Center.Y + (int)(radius * Math.Sin(Math.PI * 23 / 12)),
                    iconWidth, iconWidth);

            // Stat icons
            int statIconWidth = viewManager.RelativeX(2);
            int statIconMargin = viewManager.RelativeX(3);
            int baseY = infoZoneRect.Y + statIconMargin / 2;
            this.attackIconRect = new Rectangle(infoZoneRect.Right - statIconWidth - 4 * statIconMargin / 3, baseY,
                statIconWidth, statIconWidth);
            this.staminaIconRect = new Rectangle(infoZoneRect.Right - statIconWidth - 4 * statIconMargin / 3, baseY + statIconMargin,
                statIconWidth, statIconWidth);
            this.defenseIconRect = new Rectangle(infoZoneRect.Right - statIconWidth - 4 * statIconMargin / 3, baseY + 2 * statIconMargin,
                statIconWidth, statIconWidth);
            this.speedIconRect = new Rectangle(infoZoneRect.Right - statIconWidth - 4 * statIconMargin / 3, baseY + 3 * statIconMargin,
                statIconWidth, statIconWidth);

            // Stat number rects
            this.attackStatRect = new Rectangle(attackIconRect.Right + viewManager.RelativeX(0.5f), attackIconRect.Top,
                statIconWidth * 2 / 3, statIconWidth);
            this.staminaStatRect = new Rectangle(staminaIconRect.Right + viewManager.RelativeX(0.5f), staminaIconRect.Top,
                statIconWidth * 2 / 3, statIconWidth);
            this.defenseStatRect = new Rectangle(defenseIconRect.Right + viewManager.RelativeX(0.5f), defenseIconRect.Top,
                statIconWidth * 2 / 3, statIconWidth);
            this.speedStatRect = new Rectangle(speedIconRect.Right + viewManager.RelativeX(0.5f), speedIconRect.Top,
                statIconWidth * 2 / 3, statIconWidth);
            this.healthStatRect = new Rectangle(hpBarRect.Right - statIconWidth * 3, hpBarRect.Top - statIconWidth * 5 / 3, statIconWidth,
                statIconWidth * 3 / 2);
        }