public StandardizedRuleGame(Encampment firstPlayerEncampment, IReadOnlyServiceLocator serviceLocator) { FirstPlayer = new Player(firstPlayerEncampment); SecondPlayer = new Player(Terminologies.GetReversal(firstPlayerEncampment)); var frontPlayer = GetPlayer(Encampment.Front); var backPlayer = GetPlayer(Encampment.Back); ScoreHolder = new DefaultScoreHolder(new Dictionary <IPlayer, int> { { frontPlayer, 20 }, { backPlayer, 20 } }); //終了条件をまとめる ScoreHolder.GetScore(frontPlayer).Where(value => value == 0).Subscribe(_ => gameEndSubject.OnNext(Unit.Default)); ScoreHolder.GetScore(backPlayer).Where(value => value == 0).Subscribe(_ => gameEndSubject.OnNext(Unit.Default)); handDatabase = new HandDatabase(); //seasonSequencer.OnEndは季の開始の呼び出しと一体化している。 //OnSeasonEndは季の開始前に呼び出されることが保証されている。 StartNextSeason(); handChangeObserver = new HandChangeObserver(HandDatabase, OnTurnEnd); seasonSequencer = new SeasonSequencer(handChangeObserver.Observable, serviceLocator.GetInstance <ISeasonDeclarationProvider>(), 4); seasonSequencer.OnContinue.Subscribe(_ => ScoreRate *= 2); //専用のクラス内に隠ぺいすべきかも seasonSequencer.OnStart.Subscribe(_ => StartNextSeason()); var scoreCalculator = new ScoreCalculator(HandDatabase); seasonSequencer.OnEnd.Select(_ => Terminologies.GetReversal(CurrentTurn)) //終季の時点で終季した人のターンが終わってしまっているのでこの形にしている。 .Select(GetPlayer) //終季の時点ではターンが終わらないようにした方がよい? .Select(scoreCalculator.Calculate) .Select(tuple => { tuple.score *= 2; return(tuple); }) .Subscribe(tuple => ScoreHolder.MoveScore(tuple.scorer, tuple.score)); }
public void Init(IReadOnlyServiceLocator services, Action onComplete) { m_InputService = services.Get <IInputService>(); m_InputService.OnJump += () => { m_Jump = true; }; m_SpawnPoint = transform.localPosition; enabled = true; onComplete.Invoke(); }
public RulesetList(IReadOnlyServiceLocator serviceLocator) { //RulesetNameとの相互依存関係を明確化する IGameInstanceFactory[] factories = new IGameInstanceFactory[] { new DefaultGameInstanceFactory <Domain.Entities.StandardizedRule.StandardizedRuleGame>(firstPlayerEncampment => new Domain.Entities.StandardizedRule.StandardizedRuleGame(firstPlayerEncampment, serviceLocator)), new DefaultGameInstanceFactory <Domain.Entities.StandardizedRule.StandardizedRuleGame>(firstPlayerEncampment => new Domain.Entities.StandardizedRule.StandardizedRuleGame(firstPlayerEncampment, serviceLocator)), new DefaultGameInstanceFactory <Domain.Entities.NoRule.NoRuleGame>(firstPlayerEncampment => new Domain.Entities.NoRule.NoRuleGame(firstPlayerEncampment)), }; int i = 0; rulesets = factories.Select(factory => { RulesetName rulesetName = (RulesetName)i; return(new Ruleset(i++, rulesetName.ToString(), "", factory)); }).ToDictionary(ruleset => ruleset.id); }
public void Init(IReadOnlyServiceLocator services, Action onComplete) { StartCoroutine(SpawnLoop()); onComplete.Invoke(); }