public void UpdateAttackArea(Canvas canvas)
        {
            Ellipse attackArea = visuals["attackArea"] as Ellipse;



            switch (State)
            {
            case GameObjectState.Simple:
                if (attackArea.Visibility == Visibility.Visible)
                {
                    attackArea.Visibility = Visibility.Collapsed;
                }
                break;

            case GameObjectState.Selected:
                if (attackArea.Visibility != Visibility.Visible)
                {
                    attackArea.Visibility = Visibility.Visible;
                }

                attackArea.Width = attackArea.Height = AttackRadius.ToPixels() * 2;
                Canvas.SetLeft(attackArea, Position.X - AttackRadius.ToPixels());
                Canvas.SetTop(attackArea, Position.Y - AttackRadius.ToPixels());

                break;
            }
        }
Beispiel #2
0
        public void UpdateAttackArea(Canvas canvas)
        {
            Path attackArea = visuals["attackArea"] as Path;



            switch (State)
            {
            case GameObjectState.Simple:
                if (attackArea.Visibility == Visibility.Visible)
                {
                    attackArea.Visibility = Visibility.Collapsed;
                }
                break;

            case GameObjectState.Selected:
                if (attackArea.Visibility != Visibility.Visible)
                {
                    attackArea.Visibility = Visibility.Visible;
                }

                recreateDrawAttackGeometry(attackArea);
                Canvas.SetLeft(attackArea, Position.X - AttackRadius.ToPixels());
                Canvas.SetTop(attackArea, Position.Y - AttackRadius.ToPixels());

                break;
            }
        }
Beispiel #3
0
        /// <summary>
        /// Функция возвращающая истину, если монстр находится в области атаки
        /// </summary>
        /// <param name="monster"></param>
        /// <returns></returns>
        public virtual bool InAttackArea(Monster monster)
        {
            if (HelperFunctions.GetLength(Position, monster.Position) <= AttackRadius.ToPixels())
            {
                return(true);
            }

            return(false);
        }
Beispiel #4
0
        /// <summary>
        /// Функция возвращающая истину, если монстр находится в области атаки
        /// </summary>
        public override bool InAttackArea(Monster monster)
        {
            if (HelperFunctions.GetLength(Position, monster.Position) <= AttackRadius.ToPixels())
            {
                if (Math.Abs(monster.Position.X - Position.X) <= Radius.ToPixels() || Math.Abs(monster.Position.Y - Position.Y) <= Radius.ToPixels())
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// checks and returns the nearest target
        /// </summary>
        protected Collider FindTargetInRange()
        {
            Collider closestTarget = null;

            float distance = 0;

            bool otherIsBullet = false;

            lock (GameWorld.colliderKey)
            {
                foreach (Collider other in GameWorld.Instance.Colliders)
                {
                    if (other.GetAlignment == Alignment.Friendly)
                    {
                        if (AttackRadius.Contains(other.CollisionBox.Center))
                        {
                            foreach (Component comp in other.GameObject.GetComponentList)
                            {
                                if (comp is Bullet)
                                {
                                    otherIsBullet = true;
                                    break;
                                }
                            }
                            if (otherIsBullet == false)
                            {
                                float otherDistance;
                                otherDistance = ((GameObject.Transform.Position.X - other.CollisionBox.Center.X)
                                                 * (GameObject.Transform.Position.X - other.CollisionBox.Center.X)
                                                 + (GameObject.Transform.Position.Y - other.CollisionBox.Center.Y)
                                                 * (GameObject.Transform.Position.Y - other.CollisionBox.Center.Y));
                                if (closestTarget == null)
                                {
                                    closestTarget = other;
                                    distance      = otherDistance;
                                }
                                else if (distance > otherDistance)
                                {
                                    closestTarget = other;
                                    distance      = otherDistance;
                                }
                            }
                        }
                    }
                }
            }
            return(closestTarget);
        }
Beispiel #6
0
        private void recreateDrawAttackGeometry(Path attackArea)
        {
            RectangleGeometry hRect = new RectangleGeometry();

            hRect.Rect    = new Rect(0.0, AttackRadius.ToPixels() - Radius.ToPixels(), 2 * AttackRadius.ToPixels(), 2 * Radius.ToPixels());
            hRect.RadiusX = hRect.RadiusY = 5;

            RectangleGeometry vRect = new RectangleGeometry();

            vRect.Rect    = new Rect(AttackRadius.ToPixels() - Radius.ToPixels(), 0.0, 2 * Radius.ToPixels(), 2 * AttackRadius.ToPixels());
            vRect.RadiusX = vRect.RadiusY = 5;

            Geometry crossGeometry = new CombinedGeometry(GeometryCombineMode.Union, hRect, vRect);

            attackArea.Data = crossGeometry;
        }
        /// <summary>
        /// Взорвать башню
        /// </summary>
        public void Explode()
        {
            Exploded = true;

            List <Monster> toAttack = new List <Monster>();

            foreach (Monster monster in Game.Field.GetMonsters())
            {
                if (HelperFunctions.GetLength(Position, monster.Position) <= AttackRadius.ToPixels())
                {
                    toAttack.Add(monster);
                }
            }

            foreach (Monster monster in toAttack)
            {
                Game.Field.AddBullet(Bullet.Clone(Position, monster));
            }

            Game.Field.RecalculateAllMonsterPaths(true);

            Game.Field.AddAnimation(new DisappearanceImageGameAnimation(new Uri("/images/bomb.png", UriKind.Relative), Position, 10.0, Game.Field.CellSize));
            Game.Field.AddAnimation(new ColorFieldGameAnimation(Colors.Yellow, 1.0, 0.5, 0.0));
        }