예제 #1
0
        /// <summary>
        /// returns true if it hits a body and outs the first body that it hits
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <param name="hit"></param>
        /// <returns></returns>
        public bool WhatDidRaycastHit(QVector2 a, QVector2 b, out List <QBody> hit)
        {
            var aSim = a.ToSim();
            var bSim = b.ToSim();
            var fl   = PhysicsWorld.RayCast(aSim, aSim + bSim);

            hit = null;
            if (fl.Count > 0)
            {
                //List<QRigiBody> qbodies = new List<QRigiBody>();
                while (_hitListNogc.Count > 0)
                {
                    //hitListNOGC.RemoveFirst();
                    _hitListNogc.Clear();
                }
                for (int i = 0; i < fl.Count; i++)
                {
                    QBehavior script = fl[i].Body.UserData as QBehavior;
                    var       qbod   = script?.World.Physics.Bodies.Find(bod => script.Id == bod.Id);
                    if (qbod != null)
                    {
                        _hitListNogc.Add(qbod);
                    }
                }
                hit = _hitListNogc;
                return(true);
            }
            return(false);
        }
예제 #2
0
        public bool DidRaycastHit(QVector2 a, QVector2 b)
        {
            var aSim = a.ToSim();
            var bSim = b.ToSim();
            var fl   = PhysicsWorld.RayCast(aSim, aSim + bSim);

            if (fl.Count > 0)
            {
                return(true);
            }
            return(false);
        }
예제 #3
0
        /// <summary>
        /// Creates an edge, line collision from point a to b
        /// </summary>
        /// <param name="script"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public QBody CreateEdge(QBehavior script, QVector2 start, QVector2 end)
        {
            //if the body already exists we just return that one
            QBody body = FindBody(script);

            if (body != null)
            {
                return(body);
            }
            body = new QBody(script, BodyFactory.CreateEdge(PhysicsWorld, start.ToSim(), end.ToSim(), script));
            return(AddBody(body));
        }