Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void Update()
- {
- IsCollidingOnTop = false;
- IsCollidingOnBottom = false;
- IsCollidingOnLeft = false;
- IsCollidingOnRight = false;
- if (IsAffectedByGravity) Velocity += World.Gravity;
- Position += Velocity;
- int left = CornerMin.X;
- int right = CornerMax.X;
- int top = CornerMin.Y;
- int bottom = CornerMax.Y;
- List<SSSPBody> bodiesToCheck = World.QuadTree.Query(new Rect(left, top, Width*2, Height*2));
- bodiesToCheck.Sort((a, b) => a.Position.Y.CompareTo(b.Position.Y));
- for (int i = 0; i < bodiesToCheck.Count; i++)
- {
- SSSPBody body = bodiesToCheck[i];
- if (body == this || IgnoreCollisionDetectBodies.Contains(body) ||
- body.CollisionGroups.Any(IgnoreCollisionDetectGroups.Contains)) continue;
- int bodyLeft = body.CornerMin.X;
- int bodyRight = body.CornerMax.X;
- int bodyTop = body.CornerMin.Y;
- int bodyBottom = body.CornerMax.Y;
- if (!SSSPUtils.IsOverlapping(this, body)) continue;
- int encrX = 0, encrY = 0, numPxOverlapX, numPxOverlapY;
- if (bottom < bodyBottom && bottom >= bodyTop) encrY = bodyTop - bottom;
- else if (top > bodyTop && top <= bodyBottom) encrY = bodyBottom - top;
- if (left < bodyLeft && right >= bodyLeft) encrX = bodyLeft - right;
- else if (right > bodyRight && left <= bodyRight) encrX = bodyRight - left;
- if (left < bodyLeft) numPxOverlapX = right - bodyLeft;
- else numPxOverlapX = bodyRight - left;
- if (top < bodyTop) numPxOverlapY = bottom - bodyTop;
- else numPxOverlapY = bodyBottom - top;
- invokations.Add(new object[] {body, encrX, encrY});
- if ((body.CollisionGroups.Any(IgnoreCollisionResolveGroups.Contains)) &&
- InvokeOnResolve(body, new SSSPVector2(encrX, encrY))) continue;
- if (numPxOverlapX > numPxOverlapY)
- {
- Position += new SSSPVector2(0, encrY);
- if (encrY <= 0) IsCollidingOnTop = true;
- if (encrY != 0) Velocity = new SSSPVector2(Velocity.X, 0);
- }
- else Position += new SSSPVector2(encrX, 0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement