public Vector2 CheckCollision(World world, GeometryType ignore) { float xMove = 0; GeometryBox collisionBox = new GeometryBox(); collisionBox.rect = _bbox; if (world.Collides(_bbox, ignore, collisionBox, out collisionBox)) { xMove = 5 * Math.Sign(_bbox.X - collisionBox.rect.X); } _position += new Vector2(xMove, 0); _bbox.X += (int)xMove; return new Vector2(xMove, 0); }
public int Register(Rectangle rect, GeometryType type = GeometryType.None) { var box = new GeometryBox(); box.rect = rect; box.type = type; _geometry.Add(box); return _geometry.Count - 1; }
public bool Collides(Rectangle rect, GeometryType ignore, GeometryBox c, out GeometryBox collision) { collision = c; foreach (var r in _geometry) { if (rect.Intersects(r.rect) && r.type != ignore) { collision = r; return true; } } return false; }