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; } }
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; } }
/// <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); }
/// <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); }
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)); }