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); } }
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); } }
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)); }
public AiInput(BallKind ballKind, PlayerPositionService playerPositionService, IBallSettings ballSettings) { _ballKind = ballKind; _playerPositionService = playerPositionService; _ballSettings = ballSettings; }