private static void DoRadiusAttack(Tower tower, List<Creep> creepsWithinRange)
		{
			var type = tower.Type;
			var power = tower.GetStatValue("Power");
			foreach (var creep in creepsWithinRange)
				creep.ReceiveAttack(type, power, RadiusAttackModifier);
		}
		private static void DamageCreepAndSurroundingCreeps(Tower tower, Creep target, 
			List<Creep> creepsWithinRange)
		{
			if (tower.AttackType == AttackType.Circle)
				DoRadiusAttack(tower, creepsWithinRange);
			else if (tower.AttackType == AttackType.Cone)
				DoConeAttack(tower, target, creepsWithinRange);
			//else if (tower.AttackType == AttackType.DirectShot)
			//	target.ReceiveAttack(tower.Type, tower.Power);
		}
		private static List<Creep> FindAllCreepsWithinRangeOfTower(Tower tower, List<Creep> creeps)
		{
			float range = tower.GetStatValue("Range");
			float rangeSquared = range * range;
			var targets = new List<Creep>();
			foreach (Creep creep in creeps)
			{
				var distance = (creep.Position - tower.Position).LengthSquared;
				if (distance <= rangeSquared)
					targets.Add(creep);
			}
			return targets;
		}
		private static void DoConeAttack(Tower tower, Creep target, List<Creep> creepsWithinRange)
		{
			Vector2D towerPosition = tower.Position.GetVector2D();
			Vector2D creepPosition = target.Position.GetVector2D();
			Vector2D aim = Vector2D.Normalize(creepPosition - towerPosition);
			float edgeDotProduct = GetEdgeDotProduct(creepPosition, towerPosition, aim);
			var power = tower.GetStatValue("Power");
			foreach (Creep creep in creepsWithinRange)
			{
				var position = creep.Position.GetVector2D();
				if (aim.DotProduct(Vector2D.Normalize(position - towerPosition)) >= edgeDotProduct)
					creep.ReceiveAttack(tower.Type, power, ConeAttackModifier);
			}
		}