예제 #1
0
        /// <summary>
        /// 衝突判定
        /// </summary>
        public void Collision()
        {
            Parameters.GameSpeed = 1.0f;

            //弾と各物の判定
            foreach (var b in bulletList)
            {
                if (b.BulletType == BulletType.ENEMY)
                {
                    foreach (var p in playerList)
                    {
                        if (p.NowState == State.START || p.NowState == State.DEATH || p.NowState == State.INVINCIBLE)
                        {
                            continue;
                        }

                        bool hitFlag  = false;
                        bool safeFlag = false;

                        //弾の判定形状によって判定関数を呼び出す
                        switch (b.ColiderType)
                        {
                        case ColiderType.CIRLCE:
                        {
                            hitFlag = CollisionCheck.Check(((ICircleColider)b).GetColider(), p.DamegeColider);

                            if (Parameters.GameSpeed == 1.0f)
                            {
                                safeFlag = CollisionCheck.Check(((ICircleColider)b).GetColider(), p.SafeColider);
                            }
                            break;
                        }

                        case ColiderType.LINE:
                        {
                            hitFlag = CollisionCheck.Check(((ILineColider)b).GetColider(), p.DamegeColider);

                            if (Parameters.GameSpeed == 1.0f)
                            {
                                safeFlag = CollisionCheck.Check(((ILineColider)b).GetColider(), p.SafeColider);
                            }
                            break;
                        }

                        case ColiderType.RECTANGLE:
                        {
                            hitFlag = CollisionCheck.Check(((IRectangleColider)b).GetColider(), p.DamegeColider);

                            if (Parameters.GameSpeed == 1.0f)
                            {
                                safeFlag = CollisionCheck.Check(((IRectangleColider)b).GetColider(), p.SafeColider);
                            }
                            break;
                        }
                        }
                        if (hitFlag)
                        {
                            b.HitEvent(p);
                            p.HitEvent(b);
                        }
                        if (safeFlag)
                        {
                            //b.HitEvent(p);
                            p.SafeHitEvent(b);
                        }
                    }
                }
                else if (b.BulletType == BulletType.PLAYER)
                {
                    foreach (var e in enemyList)
                    {
                        if (e.NowState == State.DEATH)
                        {
                            continue;
                        }

                        bool hitFlag = false;

                        switch (b.ColiderType)
                        {
                        case ColiderType.CIRLCE:
                        {
                            hitFlag = CollisionCheck.Check(((ICircleColider)b).GetColider(), e.DamegeColider);
                            break;
                        }

                        case ColiderType.LINE:
                        {
                            hitFlag = CollisionCheck.Check(((ILineColider)b).GetColider(), e.DamegeColider);
                            break;
                        }

                        case ColiderType.RECTANGLE:
                        {
                            hitFlag = CollisionCheck.Check(((IRectangleColider)b).GetColider(), e.DamegeColider);
                            break;
                        }
                        }
                        if (hitFlag)
                        {
                            b.HitEvent(e);
                            e.HitEvent(b);
                        }
                    }
                }
            }

            //敵とPlayerの判定
            foreach (var e in enemyList)
            {
                if (e.NowState == State.DEATH)
                {
                    continue;
                }
                foreach (var p in playerList)
                {
                    if (p.NowState == State.START || p.NowState == State.DEATH || p.NowState == State.INVINCIBLE)
                    {
                        continue;
                    }

                    bool hitFlag  = false;
                    bool safeFlag = false;

                    hitFlag = CollisionCheck.Check(e.DamegeColider, p.DamegeColider);

                    if (Parameters.GameSpeed == 1.0f)
                    {
                        safeFlag = CollisionCheck.Check(e.DamegeColider, p.SafeColider);
                    }

                    if (hitFlag)
                    {
                        //e.HitEvent(p);
                        p.HitEvent(e);
                    }
                    if (safeFlag)
                    {
                        //e.HitEvent(p);
                        p.SafeHitEvent(e);
                    }
                }
            }
        }