Beispiel #1
0
        /// <summary>
        /// Проверка столкновения игрока с заданным юнитом. Игрок представляется сферой с радиусом SphereRadius
        /// </summary>
        /// <param name="unit">Заданный юнит</param>
        /// <returns></returns>
        public override bool Intersects(Unit unit)
        {
            if (unit == this)
                return false;

            _boundingSphere = new BoundingSphere(Position, SphereRadius);
            return unit.Intersects(_boundingSphere);
        }
Beispiel #2
0
 /// <summary>
 /// Проверяет пересекает ли заданный юнит хотя бы один юнит на карте
 /// </summary>
 /// <param name="unit">Заданный юнит</param>
 public bool Intersects(Unit unit)
 {
     return Units.Any(unit.Intersects);
 }
Beispiel #3
0
 /// <summary>
 /// Перемещает текущий юнит в направлении заданного на заданное расстояние
 /// </summary>
 /// <param name="unit">Заданный юнит</param>
 /// <param name="distance">Расстояние</param>
 public void Step(Unit unit, float distance)
 {
     Position += Vector3.Normalize(unit.Position - Position)*distance;
 }
Beispiel #4
0
        /// <summary>
        /// Поворот юнита вокруг оси Y по напрввлению к заданному
        /// </summary>
        /// <param name="unit">Заданный юнит</param>
        public void RotateTo(Unit unit)
        {
            Vector3 direction = unit.Position - Position;

            float angleY = (float)Math.Atan(direction.Z / direction.X);
            if (direction.X > 0)
                angleY = -angleY - (float)Math.PI / 2.0f;
            else
                angleY = -angleY + (float)Math.PI / 2.0f;
            Angles = new Vector3(Angles.X, angleY, Angles.Z);
        }
Beispiel #5
0
        public virtual bool Intersects(Unit unit)
        {
            if (unit == this)
                return false;

            if (Type.Model == null || unit.Type.Model == null)
                return false;

            //Проверка столкновения каждой сферы юнита с каждой сферой заданного юнита
            foreach (var mesh in Type.Model.Meshes)
            {
                foreach (var mesh1 in unit.Type.Model.Meshes)
                {
                    if (mesh.BoundingSphere.Transform(GetResultingTransformation(Transforms[mesh.ParentBone.Index])).Intersects(
                        mesh1.BoundingSphere.Transform(unit.GetResultingTransformation(Transforms[mesh1.ParentBone.Index]))))
                        return true;
                }
            }
            return false;
        }
Beispiel #6
0
 /// <summary>
 /// Вычисление расстояния до заданного юнита
 /// </summary>
 /// <param name="unit">Заданный юнит</param>
 /// <returns>Расстояние</returns>
 public float DistanceTo(Unit unit)
 {
     return Vector3.Distance(Position, unit.Position);
 }