Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protected void DoCollisions()
- {
- if (!IsSolid())
- return;
- var myColl = GetCollisionBounds();
- var myPrevColl = GetCollisionBounds();
- myPrevColl.Left -= Position.X - PreviousPosition.X;
- myPrevColl.Top -= Position.Y - PreviousPosition.Y;
- // Gather colliding entities
- var colls = new List<FloatRect>();
- foreach (var entity in CurrentLocation.GetEntities())
- {
- if (entity == this)
- continue;
- var otherColl = entity.GetCollisionBounds();
- if (entity.IsSolid() && otherColl.Intersects(myColl) && !otherColl.Intersects(myPrevColl))
- {
- colls.Add(otherColl);
- }
- }
- // TODO: Tiles
- // Resolve collisions
- foreach (var otherColl in colls)
- {
- // Horizontal
- if (otherColl.Left + otherColl.Width > myColl.Left && otherColl.Left + otherColl.Width <= myPrevColl.Left)
- {
- Position.X += (otherColl.Left + otherColl.Width) - myColl.Left;
- Velocity.X = 0;
- }
- else if (otherColl.Left < myColl.Left + myColl.Width && otherColl.Left >= myPrevColl.Left + myPrevColl.Width)
- {
- Position.X -= (myColl.Left + myColl.Width) - otherColl.Left;
- Velocity.X = 0;
- }
- // Vertical
- if (otherColl.Top + otherColl.Height > myColl.Top && otherColl.Top + otherColl.Height <= myPrevColl.Top)
- {
- Position.Y += (otherColl.Top + otherColl.Height) - myColl.Top;
- Velocity.Y = 0;
- }
- else if (otherColl.Top < myColl.Top + myColl.Height && otherColl.Left >= myPrevColl.Top + myPrevColl.Height)
- {
- Position.Y -= (myColl.Top + myColl.Height) - otherColl.Top;
- Velocity.Y = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement