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