Ejemplo n.º 1
0
 public void Remove(CollisionInfo info)
 {
     if (infoList.Remove(info))
     {
         // ヒット回数をリセット
         ResetCollisionCount(info.ID);
         // IDをストックに返す
         availableIDList.Add(info.ID);
         info.ID = 0;
     }
 }
Ejemplo n.º 2
0
 public void Add(CollisionInfo info)
 {
     // 未登録ならID発行
     if (info.ID == 0)
     {
         if (availableIDList.Count == 0)
         {
             // 新ID発行
             info.ID = ++objectIDCount;
         }
         else
         {
             // IDストックから発行
             info.ID = availableIDList[availableIDList.Count - 1];
             availableIDList.RemoveAt(availableIDList.Count - 1);
         }
         infoList.Add(info);
         if (!collisionMatrix.ContainsKey(info.ID))
         {
             collisionMatrix[info.ID] = new Dictionary<int, int>();
         }
     }
 }
Ejemplo n.º 3
0
        int UpdateCollisionMatrix(CollisionInfo a, CollisionInfo b)
        {
            if (!collisionMatrix[a.ID].ContainsKey(b.ID))
            {
                collisionMatrix[a.ID][b.ID] = 0;
            }
            if (!collisionMatrix[b.ID].ContainsKey(a.ID))
            {
                collisionMatrix[b.ID][a.ID] = 0;
            }

            var ab = ++collisionMatrix[a.ID][b.ID];
            var ba = ++collisionMatrix[b.ID][a.ID];

            if (ab < ba)
            {
                collisionMatrix[b.ID][a.ID] = ba = ab;
            }
            if (ba < ab)
            {
                collisionMatrix[a.ID][b.ID] = ab = ba;
            }

            return ab;
        }
Ejemplo n.º 4
0
        bool Detect(CollisionInfo a, CollisionInfo b, CollisionResult result)
        {
            foreach (var primitiveA in a.Primitives)
            {
                foreach (var primitiveB in b.Primitives)
                {
                    if (DetectorFactory.Create(primitiveA, primitiveB).Detect(result))
                    {
                        return true;
                    }
                }
            }

            return false;
        }