Esempio n. 1
0
        // getData

        // setDirty

        // findPath

        // simplifyPath

        // raySimplifyPath

        // computePathDistance

        // walkPath

        override public Boolean overlaps(FlxBasic ObjectOrGroup, Boolean InScreenSpace = false, FlxCamera Camera = null)
        {
            if (ObjectOrGroup is FlxGroup)
            {
                Boolean         results = false;
                FlxBasic        basic;
                int             i       = 0;
                List <FlxBasic> members = new List <FlxBasic>();
                members = (ObjectOrGroup as FlxGroup).members;
                while (i < members.Count)
                {
                    basic = members[i++] as FlxBasic;
                    if (basic is FlxObject)
                    {
                        if (overlapsWithCallback(basic as FlxObject))
                        {
                            results = true;
                        }
                    }
                    else
                    {
                        if (overlaps(basic, InScreenSpace, Camera))
                        {
                            results = true;
                        }
                    }
                }
                return(results);
            }
            else if (ObjectOrGroup is FlxObject)
            {
                return(overlapsWithCallback(ObjectOrGroup as FlxObject));
            }
            return(false);
        }
Esempio n. 2
0
 public void load(FlxBasic ObjectOrGroup1, FlxBasic ObjectOrGroup2 = null, Func <FlxObject, FlxObject, Boolean> NotifyCallback = null, Func <FlxObject, FlxObject, Boolean> ProcessCallback = null)
 {
     add(ObjectOrGroup1, A_LIST);
     if (ObjectOrGroup2 != null)
     {
         add(ObjectOrGroup2, B_LIST);
         _useBothLists = true;
     }
     else
     {
         _useBothLists = false;
     }
     _notifyCallback     = NotifyCallback;
     _processingCallback = ProcessCallback;
 }
Esempio n. 3
0
 public void add(FlxBasic ObjectOrGroup, uint List)
 {
     _list = List;
     if (ObjectOrGroup is FlxGroup)
     {
         uint            i = 0;
         FlxBasic        basic;
         List <FlxBasic> members = new List <FlxBasic>();
         members = (ObjectOrGroup as FlxGroup).Members;
         uint l = (uint)members.Count;
         while (i < l)
         {
             basic = members[(int)i++] as FlxBasic;
             if ((basic != null) && basic.Exists)
             {
                 if (basic is FlxGroup)
                 {
                     add(basic, List);
                 }
                 else if (basic is FlxObject)
                 {
                     _object = basic as FlxObject;
                     if (_object.Exists && Convert.ToBoolean(_object.AllowCollisions))
                     {
                         _objectLeftEdge   = _object.X;
                         _objectTopEdge    = _object.Y;
                         _objectRightEdge  = _object.X + _object.Width;
                         _objectBottomEdge = _object.Y + _object.Height;
                         addObject();
                     }
                 }
             }
         }
     }
     else
     {
         _object = ObjectOrGroup as FlxObject;
         if (_object.Exists && Convert.ToBoolean(_object.AllowCollisions))
         {
             _objectLeftEdge   = _object.X;
             _objectTopEdge    = _object.Y;
             _objectRightEdge  = _object.X + _object.Width;
             _objectBottomEdge = _object.Y + _object.Height;
             addObject();
         }
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Checks to see if this FlxObject were located at the given position
        /// </summary>
        /// <param name="X">X position you want to check</param>
        /// <param name="Y">Y position you want to check</param>
        /// <param name="ObjectOrGroup">The object or group being tested</param>
        /// <param name="InScreenSpace">Whether to take scroll factors into account.</param>
        /// <param name="Camera">Which Camera - currently only one exists</param>
        /// <returns></returns>
        public virtual bool overlapsAt(float X, float Y, FlxBasic ObjectOrGroup, bool InScreenSpace = false, FlxCamera Camera = null)
        {
            if (ObjectOrGroup is FlxGroup)
            {
                bool results = false;
                int  i = 0; List <FlxBasic> members = new List <FlxBasic>();
                members = (ObjectOrGroup as FlxGroup).members;
                uint length = (uint)members.Count;
                while (i < length)
                {
                    if (overlapsAt(X, Y, members[i++], InScreenSpace, Camera))
                    {
                        results = true;
                    }
                }
                return(results);
            }

            if (ObjectOrGroup is FlxTilemap)
            {
                FlxTilemap tilemap = ObjectOrGroup as FlxTilemap;
                return(tilemap.overlapsAt(tilemap.x - (X - x), tilemap.y - (Y - y), this, InScreenSpace, Camera));
            }

            FlxObject Object = ObjectOrGroup as FlxObject;

            if (!InScreenSpace)
            {
                return((Object.x + Object.width > X) && (Object.x < X + width) &&
                       (Object.y + Object.height > Y) && (Object.y < Y + height));
            }

            if (Camera == null)
            {
                Camera = FlxG.camera;
            }
            FlxPoint objectScreenPos = Object.getScreenXY(null, Camera);

            _point.x  = X - Camera.scroll.x * scrollFactor.x;
            _point.y  = Y - Camera.scroll.y * scrollFactor.y;
            _point.x += (_point.x > 0) ? 0.0000001f : -0.0000001f;
            _point.y += (_point.y > 0) ? 0.0000001f : -0.0000001f;

            return((objectScreenPos.x + Object.width > _point.x) && (objectScreenPos.x < _point.x + width) &&
                   (objectScreenPos.y + Object.height > _point.y) && (objectScreenPos.y < _point.y + height));
        }
Esempio n. 5
0
        /// <summary>
        /// Checks to see if some FlxObject overlaps this FlxObject or FlxGroup.
        /// If the group has a LOT of things in it, it might be faster to use <code>FlxG.ovelaps()</code>
        /// </summary>
        /// <param name="ObjectOrGroup">The object or group being tested</param>
        /// <param name="InScreenSpace">Whether to take scroll factors into account.</param>
        /// <param name="Camera">Which Camera - currently only one exists</param>
        /// <returns></returns>
        public virtual bool overlaps(FlxBasic ObjectOrGroup, bool InScreenSpace = false, FlxCamera Camera = null)
        {
            if (ObjectOrGroup is FlxGroup)
            {
                bool            results = false;
                int             i       = 0;
                List <FlxBasic> members = new List <FlxBasic>();
                members = (ObjectOrGroup as FlxGroup).members;
                //uint l = (uint)(ObjectOrGroup as FlxGroup).length;
                uint length = (uint)members.Count;
                while (i < length)
                {
                    if (overlaps(members[i++], InScreenSpace, Camera))
                    {
                        results = true;
                    }
                }
                return(results);
            }

            if (ObjectOrGroup is FlxTilemap)
            {
                //Since tilemap's have to be the caller, not the target, to do proper tile-based collisions,
                // we redirect the call to the tilemap overlap here.
                return((ObjectOrGroup as FlxTilemap).overlaps(this, InScreenSpace, Camera));
            }

            FlxObject Object = ObjectOrGroup as FlxObject;

            if (!InScreenSpace)
            {
                return((Object.x + Object.width > x) && (Object.x < x + width) &&
                       (Object.y + Object.height > y) && (Object.y < y + height));
            }

            if (Camera == null)
            {
                Camera = FlxG.camera;
            }
            FlxPoint objectScreenPos = Object.getScreenXY(null, Camera);

            getScreenXY(_point, Camera);
            return((objectScreenPos.x + Object.width > _point.x) && (objectScreenPos.x < _point.x + width) &&
                   (objectScreenPos.y + Object.height > _point.y) && (objectScreenPos.y < _point.y + height));
        }
Esempio n. 6
0
        public FlxBasic recycle(Object ObjectClass)
        {
            FlxBasic basic;
            FlxBasic rt = ObjectClass as FlxBasic;

            if (_maxSize > 0)
            {
                if (length < _maxSize)
                {
                    if (ObjectClass == null)
                    {
                        return(null);
                    }
                    rt = new FlxBasic();
                    return(add(rt));
                }
                else
                {
                    basic = members[(int)_marker++];
                    if (_marker >= _maxSize)
                    {
                        _marker = 0;
                    }
                    return(basic);
                }
            }
            else
            {
                basic = getFirstAvailable(ObjectClass);
                if (basic != null)
                {
                    return(basic);
                }
                if (ObjectClass == null)
                {
                    return(null);
                }
                return(add(ObjectClass as FlxBasic));
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Checks to see if this FlxObject were located at the given position
        /// </summary>
        /// <param name="X">X position you want to check</param>
        /// <param name="Y">Y position you want to check</param>
        /// <param name="ObjectOrGroup">The object or group being tested</param>
        /// <param name="InScreenSpace">Whether to take scroll factors into account.</param>
        /// <param name="Camera">Which Camera - currently only one exists</param>
        /// <returns></returns>
        public virtual bool overlapsAt(float X, float Y, FlxBasic ObjectOrGroup, bool InScreenSpace = false, FlxCamera Camera = null)
        {
            if (ObjectOrGroup is FlxGroup)
            {
                bool results = false;
                int i = 0;List<FlxBasic> members = new List<FlxBasic>();
                members = (ObjectOrGroup as FlxGroup).members;
                uint length = (uint)members.Count;
                while (i < length)
                {
                        if (overlapsAt(X, Y, members[i++], InScreenSpace, Camera))
                            results = true;
                }
                return results;
            }

            if (ObjectOrGroup is FlxTilemap)
            {
                FlxTilemap tilemap = ObjectOrGroup as FlxTilemap;
                return tilemap.overlapsAt(tilemap.x - (X - x), tilemap.y - (Y - y), this, InScreenSpace, Camera);
            }

            FlxObject Object = ObjectOrGroup as FlxObject;
            if(!InScreenSpace)
            {
                return (Object.x + Object.width > X) && (Object.x < X + width) &&
                        (Object.y + Object.height > Y) && (Object.y < Y + height);
            }

            if (Camera == null)
                Camera = FlxG.camera;
            FlxPoint objectScreenPos = Object.getScreenXY(null, Camera);
            _point.x = X - Camera.scroll.x * scrollFactor.x;
            _point.y = Y - Camera.scroll.y * scrollFactor.y;
            _point.x += (_point.x > 0) ? 0.0000001f : -0.0000001f;
            _point.y += (_point.y > 0) ? 0.0000001f : -0.0000001f;

            return (objectScreenPos.x + Object.width > _point.x) && (objectScreenPos.x < _point.x + width) &&
                (objectScreenPos.y + Object.height > _point.y) && (objectScreenPos.y < _point.y + height);
        }
Esempio n. 8
0
        /// <summary>
        /// Checks to see if some FlxObject overlaps this FlxObject or FlxGroup.
        /// If the group has a LOT of things in it, it might be faster to use <code>FlxG.ovelaps()</code>
        /// </summary>
        /// <param name="ObjectOrGroup">The object or group being tested</param>
        /// <param name="InScreenSpace">Whether to take scroll factors into account.</param>
        /// <param name="Camera">Which Camera - currently only one exists</param>
        /// <returns></returns>
        public virtual bool overlaps(FlxBasic ObjectOrGroup, bool InScreenSpace=false, FlxCamera Camera=null)
        {
            if(ObjectOrGroup is FlxGroup)
            {
                bool results = false;
                int i = 0;
                List<FlxBasic> members = new List<FlxBasic>();
                members = (ObjectOrGroup as FlxGroup).members;
                //uint l = (uint)(ObjectOrGroup as FlxGroup).length;
                uint length = (uint)members.Count;
                while(i < length)
                {
                    if(overlaps(members[i++],InScreenSpace,Camera))
                        results = true;
                }
                return results;
            }

            if (ObjectOrGroup is FlxTilemap)
            {
                //Since tilemap's have to be the caller, not the target, to do proper tile-based collisions,
                // we redirect the call to the tilemap overlap here.
                return (ObjectOrGroup as FlxTilemap).overlaps(this, InScreenSpace, Camera);
            }

            FlxObject Object = ObjectOrGroup as FlxObject;
            if(!InScreenSpace)
            {
                return (Object.x + Object.width > x) && (Object.x < x + width) &&
                        (Object.y + Object.height > y) && (Object.y < y + height);
            }

            if(Camera == null)
                Camera = FlxG.camera;
            FlxPoint objectScreenPos = Object.getScreenXY(null, Camera);
            getScreenXY(_point,Camera);
            return (objectScreenPos.x + Object.width > _point.x) && (objectScreenPos.x < _point.x + width) &&
                    (objectScreenPos.y + Object.height > _point.y) && (objectScreenPos.y < _point.y + height);
        }
Esempio n. 9
0
 /// <summary>
 /// Add a FlxObject to the group
 /// </summary>
 /// <param name="Object"></param>
 /// <returns></returns>
 public FlxBasic add(FlxBasic Object)
 {
     members.Add(Object);
     length++;
     return Object;
 }
Esempio n. 10
0
 public FlxBasic recycle(Object ObjectClass)
 {
     FlxBasic basic;
     FlxBasic rt = ObjectClass as FlxBasic;
     if (_maxSize > 0)
     {
         if (length < _maxSize)
         {
             if (ObjectClass == null)
                 return null;
             rt = new FlxBasic();
             return add(rt);
         }
         else
         {
             basic = members[(int)_marker++];
             if (_marker >= _maxSize)
                 _marker = 0;
             return basic;
         }
     }
     else
     {
         basic = getFirstAvailable(ObjectClass);
         if (basic != null)
             return basic;
         if (ObjectClass == null)
             return null;
         return add(ObjectClass as FlxBasic);
     }
 }
Esempio n. 11
0
 // getData
 // setDirty
 // findPath
 // simplifyPath
 // raySimplifyPath
 // computePathDistance
 // walkPath
 public override Boolean overlaps(FlxBasic ObjectOrGroup, Boolean InScreenSpace = false, FlxCamera Camera = null)
 {
     if (ObjectOrGroup is FlxGroup)
     {
         Boolean results = false;
         FlxBasic basic;
         int i = 0;
         List<FlxBasic> members = new List<FlxBasic>();
         members = (ObjectOrGroup as FlxGroup).members;
         while (i < members.Count)
         {
             basic = members[i++] as FlxBasic;
             if (basic is FlxObject)
             {
                 if (overlapsWithCallback(basic as FlxObject))
                 results = true;
             }
             else
             {
                 if (overlaps(basic, InScreenSpace, Camera))
                     results = true;
             }
         }
         return results;
     }
     else if (ObjectOrGroup is FlxObject)
     {
         return overlapsWithCallback(ObjectOrGroup as FlxObject);
     }
     return false;
 }
Esempio n. 12
0
 /// <summary>
 /// Add a FlxObject to the group
 /// </summary>
 /// <param name="Object"></param>
 /// <returns></returns>
 public FlxBasic add(FlxBasic Object)
 {
     members.Add(Object);
     length++;
     return(Object);
 }