public static bool IsIgnoring(Collider.Collider c1, Collider.Collider c2) { ReactType reaction1 = c1.GetReaction(c2.GetCollisionChanell()); ReactType reaction2 = c2.GetReaction(c1.GetCollisionChanell()); return(reaction1 == ReactType.Ignore || reaction2 == ReactType.Ignore); }
/// <summary> /// Sprawdza, czy dane collidery blokują się ze sobą. /// </summary> public static bool IsBlocking(Collider.Collider c1, Collider.Collider c2) { bool reaction1 = c1.GetReaction(c2.GetCollisionChanell()).Equals(ReactType.Block); bool reaction2 = c2.GetReaction(c1.GetCollisionChanell()).Equals(ReactType.Block); return((reaction1 == reaction2) && reaction1); }
/// <summary> /// Mówi po której stronie jest collider c1 względem collidera c2. /// </summary> public static Direction CheckDirection(Collider.Collider c1, Collider.Collider c2) { Vector2 absPos = GetAbsolutePositionDifference(c1, c2); Vector2 relPos = GetRelativePositionDifference(c1, c2); if (absPos.X > absPos.Y) // LEFT || RIGHT { if (relPos.X < 0) // LEFT { return(Direction.LEFT); } else // RIGHT { return(Direction.RIGHT); } } else // UP || DOWN gdzie jest obiekt, którym poruszamy względem tego statycznego. { if (relPos.Y < 0) // UP { return(Direction.UP); } else // DOWN { return(Direction.DOWN); } } }
/// <summary> /// Sprawdza, czy dany collider ma ciało i ustawioną opcję, że może się poruszać. /// </summary> public static bool CanMove(Collider.Collider collider) { var body = collider.Parent.GetComponent <Body>(); if (body == null) { return(false); } return(body.movable); }
/// <summary> /// Zwraca wektor odległości między dwoma colliderami. Odległości są bezwzględne /// </summary> public static Vector2 GetAbsolutePositionDifference(Collider.Collider c1, Collider.Collider c2) { return(new Vector2( MathHelper.Distance( c1.GetPosition().X, c2.GetPosition().X), MathHelper.Distance( c1.GetPosition().Y, c2.GetPosition().Y))); }
private static void CheckColliderType(Collider.Collider movable, Collider.Collider stable) { if (!movable.isActive || !stable.isActive) { return; } if (GetDistanceBetween(movable, player) > physicsRange * 32 * SceneManager.scale) { return; } if (IsCircle(movable)) // 1: CIR { Collider.CircleCollider c1 = (CircleCollider)movable; if (IsCircle(stable)) // 2: CIR { Collider.CircleCollider c2 = (CircleCollider)stable; ResolveCollision(c1, c2); } else // 2: REC { Collider.BoxCollider c2 = (BoxCollider)stable; ResolveCollision(c1, c2); } } else // 1: REC { Collider.BoxCollider c1 = (BoxCollider)movable; if (IsCircle(stable)) // 2: CIR { Collider.CircleCollider c2 = (CircleCollider)stable; ResolveCollision(c1, c2); } else // 2: REC { Collider.BoxCollider c2 = (BoxCollider)stable; ResolveCollision(c1, c2); } } }
public static void RemoveCollider(Collider.Collider collider) { lock (colliders) colliders.Remove(collider); }
public static void AddCollider(Collider.Collider collider) { lock (colliders) colliders.Add(collider); }
/// <summary> /// Sprawdza, czy dane collidery reagują na najechanie na siebie. /// </summary> public static bool IsOverlaping(Collider.Collider c1, Collider.Collider c2) { return(!IsBlocking(c1, c2) && !IsIgnoring(c1, c2)); }
/// <summary> /// Sprawdza, czy dany collider jest prostokątem. /// </summary> public static bool IsRectangle(Collider.Collider collider) { return(collider.GetType() == typeof(Collider.BoxCollider)); }
/// <summary> /// Sprawdza, czy dany collider jest kołem. /// </summary> public static bool IsCircle(Collider.Collider collider) { return(collider.GetType() == typeof(Collider.CircleCollider)); }
/// <summary> /// Zwraca wektor różnicy odległości między colliderem pierwszym, a drugim. Odległości mogą być ujemne. c1 - c2 /// </summary> public static Vector2 GetRelativePositionDifference(Collider.Collider c1, Collider.Collider c2) { return(new Vector2(c1.GetPosition().X - c2.GetPosition().X, c1.GetPosition().Y - c2.GetPosition().Y)); }
/// <summary> /// Zwraca odległość między dwoma colliderami. /// </summary> public static float GetDistanceBetween(Collider.Collider c1, Collider.Collider c2) { return((float)Math.Sqrt(Math.Pow(c1.GetPosition().X - c2.GetPosition().X, 2) + Math.Pow(c1.GetPosition().Y - c2.GetPosition().Y, 2))); }