Exemple #1
0
 public void calcPoints()
 {
     points = new Vector[rads.Length];
     for (int i = 0; i < rads.Length; ++i)
     {
         points[i] = Vector.fromRadMag(rads[i], Abs(dists[i]));
     }
 }
Exemple #2
0
        /// <summary>
        /// Scan one wall.
        /// </summary>
        private ScanResult _ScanWall(Wall wall, double[] rads)
        {
            ScanResult res    = ScanResult.init(rads, range + 1);
            var        egopos = ego.pos;

            var castTry = new CircleCast(egopos, 0, margin);
            var hitTry  = castTry.CastTo(wall);

            // currently in collision
            if (hitTry.isOriginHit)
            {
                res.isCollision = true;

                var dist2wall   = wall.DistToPoint_TruncatedByEnds(egopos);
                var colSeverity = Max(0, margin + wall.margin - dist2wall) / margin;

                for (int i = 0; i < rads.Length; ++i)
                {
                    var rad          = rads[i];
                    var repulsionDir = wall.RepulsionDirToPoint(egopos);

                    if (useSafety)
                    {
                        res.safety[i] = Cos(AbsRad(rads[i] - repulsionDir.rad)) * (1 + colSeverity);
                    }
                    else
                    {
                        var dist = Max(0.1, Vector.fromRadMag(rad, 1) * repulsionDir * 100);
                        res.dists[i] = dist;
                    }
                }
            }
            // not in collision
            else
            {
                for (int i = 0; i < rads.Length; ++i)
                {
                    var rad  = rads[i];
                    var cast = new CircleCast(egopos, rad, margin);
                    var hit  = cast.CastTo(wall);

                    // No hit
                    if (!hit.isHit)
                    {
                        continue;
                    }

                    // Hit
                    var dist = hit.dist;
                    if (dist < res.dists[i])
                    {
                        res.dists[i] = dist;
                    }
                }
            }

            return(res);
        }
Exemple #3
0
 protected void UpdateProperty()
 {
     rad = Deg2Rad(deg);
     dir = Vector.fromRadMag(rad, 1);
     pos = new Vector(x, y);
 }