GameCreatorGroupProject.GameObject.intersects C# (CSharp) Méthode

intersects() private méthode

private intersects ( float speed, string dir, List seg ) : bool
speed float
dir string
seg List
Résultat bool
        private bool intersects(float speed, string dir, List<Segment> seg)
        {
            //this object has no collision
            if (!col)
            {
                return false;
            }

            //bool ret = false;

            float width;

            if (dir.Equals("r") || dir.Equals("l"))
            {
                width = maxX - minX;
            }
            else
            {
                width = maxY - minY;
            }

            //for (float i = speed; (int)i > 0; i -= width)
            
            //iterates through collidable objects in parallel
            foreach (GameObject o in collision)
            {
                if (this != o)
                {
                    //indicates movement in upwards direction
                    if (dir.Equals("u"))
                    {
                        //checks if objects intersect on two axis, else doesn't bother to check intersections
                        if (((maxX < o.getMaxX() && maxX > o.minX) || (minX > o.getMinX() && minX < o.maxX))
                            && ((maxY < o.getMaxY() && maxY > o.minY) || (minY > o.getMinY() && minY < o.maxY)))
                        {
                            foreach (Segment s in seg)
                            {
                                //modifies segment
                                s.move(speed, "u");
                                //compares with each collidable objects segments
                                foreach (Segment l in o.getSegments())
                                {
                                    //chacks if intersect
                                    if (s.intersect(l))
                                    {
                                        //reverts segment
                                        s.move(speed, "d");
                                        return true;
                                    }
                                }
                                //reverts segment
                                s.move(speed, "d");
                            }
                            //indicates segments in temp have already been updated
                        }
                    }
                    //indicates movement in downward direction (see above comments)
                    else if (dir.Equals("d"))
                    {
                        if (((maxX < o.getMaxX() && maxX > o.minX) || (minX > o.getMinX() && minX < o.maxX))
                            && ((maxY < o.getMaxY() && maxY > o.minY) || (minY > o.getMinY() && minY < o.maxY)))
                        {
                            foreach (Segment s in seg)
                            {
                                s.move(speed, "d");
                                foreach (Segment l in o.getSegments())
                                {
                                    if (s.intersect(l))
                                    {
                                        s.move(speed, "u");
                                        return true;
                                    }
                                }
                                s.move(speed, "u");
                            }
                        }
                    }
                    //indicates movement in left direction (see above comments)
                    else if (dir.Equals("l"))
                    {
                        if (((maxX < o.getMaxX() && maxX > o.minX) || (minX > o.getMinX() && minX < o.maxX))
                            && ((maxY < o.getMaxY() && maxY > o.minY) || (minY > o.getMinY() && minY < o.maxY)))
                        {
                            foreach (Segment s in seg)
                            {
                                s.move(speed, "l");
                                foreach (Segment l in o.getSegments())
                                {
                                    if (s.intersect(l))
                                    {
                                        s.move(speed, "r");
                                        return true;
                                    }
                                }
                                s.move(speed, "r");
                            }
                        }
                    }
                    //indicates movement in right direction (see above comments)
                    else if (dir.Equals("r"))
                    {
                        if (((maxX < o.getMaxX() && maxX > o.minX) || (minX > o.getMinX() && minX < o.maxX))
                            && ((maxY < o.getMaxY() && maxY > o.minY) || (minY > o.getMinY() && minY < o.maxY)))
                        {
                            foreach (Segment s in seg)
                            {
                                s.move(speed, "r");
                                foreach (Segment l in o.getSegments())
                                {
                                    if (s.intersect(l))
                                    {
                                        s.move(speed, "l");
                                        return true;
                                    }
                                }
                                s.move(speed, "l");
                            }
                        }
                    }
                    else
                    {
                        throw new ArgumentException("invalid direction");
                    }
                }
            }
            //returns false if no collision detected, else true
            return false;
        }