Example #1
0
        public void SetCollideWithOtherBall(BallKind otherBallKind)
        {
            switch (_ballKind)
            {
            case BallKind.Player:
                if (otherBallKind == BallKind.Hostile)
                {
                    _endGameService.DeclareDefeat();
                    _scaleAnimationSubject.OnNext(0f);
                }
                break;

            case BallKind.Hostile:
                if (otherBallKind == BallKind.Friendly)
                {
                    _scaleAnimationSubject.OnNext(0f);
                }

                if (otherBallKind == BallKind.Player)
                {
                    _scaleAnimationSubject.OnNext(_ballSettings.AteScale);
                }
                break;

            case BallKind.Friendly:
                if (otherBallKind == BallKind.Hostile)
                {
                    _scaleAnimationSubject.OnNext(_ballSettings.AteScale);
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(otherBallKind), otherBallKind, null);
            }
        }
Example #2
0
        public IBallInput Get(BallKind ballKind)
        {
            switch (ballKind)
            {
            case BallKind.Player:
                return(_player);

            case BallKind.Hostile:
                return(new AiInput(BallKind.Hostile, _positionService, _ballSettings));

            case BallKind.Friendly:
                return(new AiInput(BallKind.Friendly, _positionService, _ballSettings));;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(ballKind), ballKind, null);
            }
        }
Example #3
0
        public BallHandler(BallKind ballKind)
        {
            _ballKind = ballKind;
            Alkar.Inject(this);

            _input = _ballInputFactory.Get(ballKind);

            _input.TrackHandler(this);

            RotationTorque = _input
                             .RawDirection
                             .Select(
                x => x * _ballSettings.Speed * Time.deltaTime
                )
                             .Select(x => x * Vector3.forward);

            JumpForce = _input
                        .Jump
                        .Where(_ => _touchingFloor)
                        .Select(_ => _ballSettings.JumpForce)
                        .ThrottleFirst(TimeSpan.FromSeconds(JumpThrottleSeconds));
        }
Example #4
0
 public AiInput(BallKind ballKind, PlayerPositionService playerPositionService, IBallSettings ballSettings)
 {
     _ballKind = ballKind;
     _playerPositionService = playerPositionService;
     _ballSettings          = ballSettings;
 }