void CheckAsteroidsCollision() { for (var i = 0; i < _asteroids.Length; i++) { var asteroid1 = _asteroids[i]; if (!asteroid1.Frozen) { for (var j = i + 1; j < _asteroids.Length; j++) { var asteroid2 = _asteroids[j]; if (!asteroid2.Frozen) { if (ISceneObjectInfo.CheckCollision(asteroid1, asteroid2, out var deltaPositionNormalized)) { asteroid1.CollidedWith.Value = asteroid2; asteroid2.CollidedWith.Value = asteroid1; asteroid2.LinearVelocity -= deltaPositionNormalized * asteroid1.Scale.Value * 0.01f; asteroid1.LinearVelocity += deltaPositionNormalized * asteroid2.Scale.Value * 0.01f; } } } if (ISceneObjectInfo.CheckCollision(asteroid1, _shipInfo, out var deltaPositionNormalized2)) { MessageBroker.Default.Publish(SharedMessage.Create(this, SharedMessage.MessageType.SHIP_COLLIDED, asteroid1)); } } } }
void CheckBulletsCollision() { for (var i = 0; i < _asteroids.Length; i++) { var asteroid1 = _asteroids[i]; if (!asteroid1.Frozen) { for (var j = 0; j < _bullets.Count; j++) { var bullet = _bullets[j]; if (ISceneObjectInfo.CheckCollision(asteroid1, bullet, out var deltaPositionNormalized)) { asteroid1.Durability -= _shipInfo.WeaponDamage; if (asteroid1.Durability <= 0f) { MessageBroker.Default.Publish(SharedMessage.Create(this, SharedMessage.MessageType.CREATE_EXPLOSION, asteroid1.Position.Value)); asteroid1.Position.Value = new Vector3(0f, 0f, -2f); } bullet.Position.Value += new Vector3(0f, 0f, 20f); _bullets.Remove(bullet); j--; } } } } }