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