Exemplo n.º 1
0
        /// <summary>
        ///     重ならなくなった時のコールバックメソッドを実行します。
        /// </summary>
        /// <param name="other">重なっていたオブジェクト</param>
        private void HandleColliderExit(SpriteCollider2D other)
        {
            RemoveCollidedPair(other);

            onColliderExit.Invoke(other);
            other.onColliderExit.Invoke(this);
        }
Exemplo n.º 2
0
        /*
         * コールバックのハンドリング
         */

        /// <summary>
        ///     重なった時のコールバックメソッドを実行します。
        ///     前フレームで重なっていなかったペアであればOnColliderEnterイベントもハンドルします。
        /// </summary>
        /// <param name="other">重なっているオブジェクト</param>
        private void HandleColliding(SpriteCollider2D other)
        {
            if (!IsCollidedPair(other))
            {
                CollidedPairs.Add(new CollidedPair(this, other));

                onColliderEnter.Invoke(other);
                other.onColliderEnter.Invoke(this);
            }

            onColliding.Invoke(other);
            other.onColliding.Invoke(this);
        }
Exemplo n.º 3
0
        /*
         * 当たり判定計算からの除外
         */

        /// <summary>
        ///     重なっていたオブジェクトのペアを削除します
        /// </summary>
        /// <param name="other">重なっていたオブジェクト</param>
        private void RemoveCollidedPair(SpriteCollider2D other)
        {
            CollidedPair target = null;

            foreach (var it in CollidedPairs.Where(it => it.IsEquals(this, other)))
            {
                target = it;
            }

            if (target != null)
            {
                CollidedPairs.Remove(target);
            }
        }
Exemplo n.º 4
0
 /// <summary>
 ///     同一フレームでの当たり判定処理済みペアとしてリストに追加します
 /// </summary>
 /// <param name="other">重なっているオブジェクト</param>
 private void AddSameFrameDecidedPair(SpriteCollider2D other)
 {
     DecidedInFrame.Add(new CollidedPair(this, other));
 }
Exemplo n.º 5
0
        /*
         * 多重判定の防止
         */

        /// <summary>
        ///     同一フレームで当たり判定処理をしているか判定します
        /// </summary>
        /// <param name="other">重なっているオブジェクト</param>
        /// <returns>同一フレームで当たり判定処理済みであるか否か</returns>
        private bool IsDecidedPairInFrame(SpriteCollider2D other)
        {
            return(DecidedInFrame.Any(it => it.IsEquals(this, other)));
        }
Exemplo n.º 6
0
 /// <summary>
 ///     前フレームで重なっていたかどうか調べる
 /// </summary>
 /// <param name="other">比較対象</param>
 /// <returns>重なっていたどうか</returns>
 private bool IsCollidedPair(SpriteCollider2D other)
 {
     return(CollidedPairs.Any(it => it.IsEquals(this, other)));
 }
Exemplo n.º 7
0
        /*
         * 当たり判定比較
         */

        /// <summary>
        ///     他方と重なっているか調べる
        /// </summary>
        /// <param name="other">比較対象</param>
        /// <returns>重なっているかどうか</returns>
        private bool IsColliding(SpriteCollider2D other)
        {
            return(Math.Abs(X - other.X) < Width / 2 + other.Width / 2 &&
                   Math.Abs(Y - other.Y) < Height / 2 + other.Height / 2);
        }