Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
                }
            }
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
 /// <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)));
 }
Exemple #6
0
 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);
         }
     }
 }
Exemple #7
0
 public static void RemoveCollider(Collider.Collider collider)
 {
     lock (colliders)
         colliders.Remove(collider);
 }
Exemple #8
0
 public static void AddCollider(Collider.Collider collider)
 {
     lock (colliders)
         colliders.Add(collider);
 }
Exemple #9
0
 /// <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));
 }
Exemple #10
0
 /// <summary>
 /// Sprawdza, czy dany collider jest prostokątem.
 /// </summary>
 public static bool IsRectangle(Collider.Collider collider)
 {
     return(collider.GetType() == typeof(Collider.BoxCollider));
 }
Exemple #11
0
 /// <summary>
 /// Sprawdza, czy dany collider jest kołem.
 /// </summary>
 public static bool IsCircle(Collider.Collider collider)
 {
     return(collider.GetType() == typeof(Collider.CircleCollider));
 }
Exemple #12
0
 /// <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));
 }
Exemple #13
0
 /// <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)));
 }