public EntityPlayer(float x, float y, float size, Color color) : base(new Vector2(x, y)) { _size = size; CollisionBoundingBox = new AxisAlignedBB(size); BoundingBox = CollisionBoundingBox.Offset(Pos - (Vector2.UnitX * CollisionBoundingBox.Size.X / 2 + Vector2.UnitY * CollisionBoundingBox.Size.Y / 2)); }
public virtual void Move() { var bbO = BoundingBox.Union(BoundingBox.Offset(Motion)); List <AxisAlignedBB> list = Game.Instance.Map.GetCollidingBoxes(bbO); var mOrig = Motion; for (int i = 0; i < list.Count; i++) { var blockBb = list[i]; Motion.Y = blockBb.CalculateYOffset(BoundingBox, Motion.Y); } BoundingBox = BoundingBox.Offset(Motion * Vector2.UnitY); for (int i = 0; i < list.Count; i++) { var blockBb = list[i]; Motion.X = blockBb.CalculateXOffset(BoundingBox, Motion.X); } BoundingBox = BoundingBox.Offset(Motion * Vector2.UnitX); SetPositionToBb(); var stoppedX = Math.Abs(mOrig.X - Motion.X) > 0.00001f; var stoppedY = Math.Abs(mOrig.Y - Motion.Y) > 0.00001f; if (stoppedX) { Motion.X = 0; } if (stoppedY) { Motion.Y = 0; } }