public static HashSet<Body> GetBodies(Body mCBody) { var result = new HashSet<Body>(); foreach (var cell in mCBody.Cells) foreach (var group in mCBody.GroupsToCheck) foreach (var body in cell.GroupedBodies[group]) result.Add(body); return result; }
private HashSet<Cell> CalculateCells(Body mBody) { var startX = mBody.Left/_cellSize + _offset; var startY = mBody.Top/_cellSize + _offset; var endX = mBody.Right/_cellSize + _offset; var endY = mBody.Bottom/_cellSize + _offset; var result = new HashSet<Cell>(); if (startX < 0 || endX >= _columns || startY < 0 || endY >= _rows) { mBody.OnOutOfBounds.SafeInvoke(); return result; } for (var iY = startY; iY <= endY; iY++) for (var iX = startX; iX <= endX; iX++) result.Add(_cells[iX, iY]); return result; }
public void UpdateBody(Body mCBody) { RemoveBody(mCBody); AddBody(mCBody); }
public void RemoveBody(Body mCBody) { foreach (var cell in mCBody.Cells) cell.RemoveBody(mCBody); }
public void AddBody(Body mCBody) { mCBody.Cells = CalculateCells(mCBody); foreach (var cell in mCBody.Cells) cell.AddBody(mCBody); }
private bool IsOverlapping(Body mBody) { return Right > mBody.Left && Left < mBody.Right && (Bottom > mBody.Top && Top < mBody.Bottom); }
public CBody(Body mBody) { Body = mBody; }
public void RemoveBody(Body mBody) { foreach (var group in mBody.Groups) GroupedBodies[group].Remove(mBody); }
public void AddBody(Body mBody) { foreach (var group in mBody.Groups) GroupedBodies[group].Add(mBody); }