Beispiel #1
0
        private bool CheckCollision()
        {
            var posColObjs = m_owner.GetObjectsInRadius(m_owner.BoundingCollisionRadius, ObjectTypes.Unit, false);

            posColObjs.Remove(m_owner);
            var totalX = 0f;
            var totalY = 0f;

            foreach (Unit worldObject in posColObjs)
            {
                var colDist = m_owner.IsCollisionWith(worldObject);
                if (colDist > 0)
                {
                    var x    = (m_owner.Position.X - worldObject.Position.X);
                    var y    = (m_owner.Position.Y - worldObject.Position.Y);
                    var vect = new Vector3(x, y);
                    vect.Normalize();
                    totalX += vect.X * colDist;
                    totalY += vect.Y * colDist;
                }
            }
            var totalVector = new Vector3(totalX, totalY);

            if (totalVector != Vector3.Zero)
            {
                var len = totalVector.Length();
                if (len > m_owner.BoundingRadius / 2)
                {
                    m_destination = new Vector3(m_owner.Position.X + totalX, m_owner.Position.Y + totalY);
                    MoveToDestination();
                }
                return(true);
            }
            return(false);
        }
Beispiel #2
0
        private bool CheckCollision()
        {
            IList <WorldObject> objectsInRadius =
                m_owner.GetObjectsInRadius(m_owner.BoundingCollisionRadius, ObjectTypes.Unit, false,
                                           int.MaxValue);

            objectsInRadius.Remove(m_owner);
            float x = 0.0f;
            float y = 0.0f;

            foreach (Unit unit in objectsInRadius)
            {
                float num = m_owner.IsCollisionWith(unit);
                if (num > 0.0)
                {
                    Vector3 vector3 = new Vector3(m_owner.Position.X - unit.Position.X,
                                                  m_owner.Position.Y - unit.Position.Y);
                    vector3.Normalize();
                    x += vector3.X * num;
                    y += vector3.Y * num;
                }
            }

            Vector3 vector3_1 = new Vector3(x, y);

            if (!(vector3_1 != Vector3.Zero))
            {
                return(false);
            }
            if (vector3_1.Length() > m_owner.BoundingRadius / 2.0)
            {
                m_destination = new Vector3(m_owner.Position.X + x, m_owner.Position.Y + y);
                MoveToDestination();
            }

            return(true);
        }