/// <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); } } } }