Exemple #1
0
        public override void CalcBoundingBox2D()
        {
            ray2DEffects.Clear();
            float         timepassed = totalTime - lifeTime.TimeLeft;
            int           length     = positions.Length;
            BoundingBox2D box        = null;
            IControlable  source     = weaponInfo.LastBody;

            for (int pos = 0; pos < length; ++pos)
            {
                if (timepassed >= startTimes[pos] && timepassed <= startTimes[pos] + lifeTimes[pos])
                {
                    Vector2D     start     = Vector2D.Rotate(source.Current.Position.Angular + positions[pos], Vector2D.XAxis) * source.BoundingRadius + source.Current.Position.Linear;
                    Vector2D     Direction = Vector2D.Rotate(source.Current.Position.Angular + directions[pos], Vector2D.XAxis);
                    RaySegment2D segment   = new RaySegment2D(start, Direction, distances[pos]);
                    if (box == null)
                    {
                        box = segment.BoundingBox2D;
                    }
                    else
                    {
                        box = BoundingBox2D.From2BoundingBox2Ds(box, segment.BoundingBox2D);
                    }
                    ray2DEffects.Add(new SelectiveImpulseRay(lifeTime, segment, impulses[pos], BodyFlags.IgnoreGravity));
                }
            }
            if (box == null)
            {
                box = new BoundingBox2D(Vector2D.Zero, Vector2D.Zero);
            }
            this.boundingBox2D = box;
        }
Exemple #2
0
        protected RayICollidableBodyPair GetIntersection(RaySegment2D raySegment, List <ICollidableBody> collidables)
        {
            int collidablesCount = collidables.Count;

            if (collidablesCount == 0)
            {
                return(null);
            }
            float Smallestdistance             = raySegment.Length;
            RayICollidableBodyPair returnvalue = null;
            RayICollidableBodyPair pair;

            for (int pos = 0; pos < collidablesCount; ++pos)
            {
                pair = new RayICollidableBodyPair(raySegment, collidables[pos]);
                if (pair.TestIntersection())
                {
                    if (pair.BestIntersectInfo != null && Smallestdistance > pair.BestIntersectInfo.DistanceFromOrigin)
                    {
                        Smallestdistance = pair.BestIntersectInfo.DistanceFromOrigin;
                        returnvalue      = pair;
                    }
                }
            }
            return(returnvalue);
        }
Exemple #3
0
 public SelectiveImpulseRay(
     LifeSpan lifeTime,
     RaySegment2D raySegment,
     float impulse,
     BodyFlags ignoreFlags)
     : base(lifeTime, raySegment, impulse)
 {
     this.ignoreFlags = ignoreFlags;
 }
Exemple #4
0
        public override void CalcBoundingBox2D()
        {
            IControlable source    = weaponInfo.LastBody;
            IControlable target    = weaponInfo.Target;
            Vector2D     start     = source.Current.Position.Linear;
            Vector2D     end       = target.Current.Position.Linear;
            Vector2D     Direction = end - start;
            float        Distance  = Direction.Magnitude;

            Direction = Direction * (1 / Distance);
            RaySegment2D segment = new RaySegment2D(start, Direction, distance);

            ray2DEffects.Add(new SelectiveImpulseRay(lifeTime, segment, impulse, BodyFlags.IgnoreGravity));
            this.boundingBox2D = segment.BoundingBox2D;
        }
Exemple #5
0
        protected void CalcEffects(LinkedList <Vector2D> points)
        {
            ray2DEffects = new List <IRay2DEffect>(points.Count - 1);
            Vector2D last = Vector2D.Zero;
            bool     good = false;

            foreach (Vector2D point in points)
            {
                if (good)
                {
                    Vector2D Direction = point - last;
                    float    Distance  = Direction.Magnitude;
                    Direction = Direction * (1 / Distance);
                    RaySegment2D segment = new RaySegment2D(last, Direction, Distance);
                    ray2DEffects.Add(new SelectiveImpulseRay(lifeTime, segment, impulse, BodyFlags.IgnoreGravity));
                }
                good = true;
                last = point;
            }
        }