コード例 #1
0
 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));
             }
         }
     }
 }
コード例 #2
0
 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--;
                 }
             }
         }
     }
 }
コード例 #3
0
        public static bool CheckCollision(ISceneObjectInfo obj1, ISceneObjectInfo obj2, out Vector3 deltaPositionNormalized)
        {
            var deltaPosition  = obj1.Position.Value - obj2.Position.Value;
            var deltaMagnitude = deltaPosition.magnitude;
            var intersection   = obj1.Scale.Value + obj2.Scale.Value - deltaMagnitude;

            deltaPositionNormalized = deltaPosition.normalized;
            return(intersection > 0f);
        }
コード例 #4
0
 public void OnCollidedWith(ISceneObjectInfo collider)
 {
     if (collider != null)
     {
         var deltaPositionNormalized = (collider.Position.Value - Position.Value).normalized;
         var newLinearVelocity       = LinearVelocity - deltaPositionNormalized * collider.Scale.Value * 0.01f;
         newLinearVelocity.z = Mathf.Min(0f, newLinearVelocity.z);
         LinearVelocity      = newLinearVelocity;
     }
 }
コード例 #5
0
        void ShipCollided(ISceneObjectInfo collider)
        {
            MessageBroker.Default.Publish(SharedMessage.Create(this, SharedMessage.MessageType.CREATE_EXPLOSION, collider.Position.Value));
            collider.Position.Value = new Vector3(0f, 0f, -2f);

            _playerInfo.HitPoints.Value--;
            if (_playerInfo.HitPoints.Value == 0)
            {
                MessageBroker.Default.Publish(SharedMessage.Create(this, SharedMessage.MessageType.GAME_OVER, false));
            }
        }
コード例 #6
0
        void ShowBullet(ISceneObjectInfo bullet)
        {
            var bulletObject = _bulletPool.Get(null);

            bulletObject.gameObject.SetActive(true);
            bullet.Position.ObserveEveryValueChanged(value => value.Value)
            .Subscribe(value => {
                bulletObject.position = value;
            }).AddTo(_disposables);
            Observable.Timer(System.TimeSpan.FromMilliseconds(3000))
            .Subscribe(_ => {
                bulletObject.gameObject.SetActive(false);
                _bulletPool.Put(bulletObject);
            }).AddTo(_disposables);
        }
コード例 #7
0
        void ShowExplosion(ISceneObjectInfo explosion)
        {
            var explosionObject = _explosionPool.Get(null);

            explosionObject.gameObject.SetActive(true);
            explosion.Position.ObserveEveryValueChanged(value => value.Value)
            .Subscribe(value => {
                explosionObject.position = value + Vector3.up;
            }).AddTo(_disposables);
            Observable.Timer(System.TimeSpan.FromMilliseconds(500))
            .Subscribe(_ => {
                explosionObject.gameObject.SetActive(false);
                _explosionPool.Put(explosionObject);
            }).AddTo(_disposables);
        }