private void Bind() { // attack phase になった時の画面表示 _phaseProvider.OnPhaseChanged() .Where(phase => phase == GamePhase.Attack) .Subscribe(_ => { _index = 1; _targetUseCase.Target(_index); _screen.Open(); }) .AddTo(_disposable); // ターン変更時のキャラクター更新 _turnCharacter.OnTurnCharacterChanged() .Subscribe(character => { _attacker.Dispose(); _attacker = character.OnDirectionChanged() .Where(_ => _phaseProvider.OnPhaseChanged().Value == GamePhase.Attack) .Subscribe(_ => _targetUseCase.Target(_index)); }).AddTo(_disposable); // ターゲット変更時のSubmitボタンの有効可否 _targetSubmitter.TargetOnChanged() .Subscribe(targets => _screen.IsEmitable(targets.Count != 0)) .AddTo(_disposable); }
// 攻撃範囲の敵キャラクター取得 public void Target(int skillIndex) { var attacker = _turnCharacter.OnTurnCharacterChanged().Value; _stageModel.TargetReset(); var targets = _stageModel.TargetCharacterIds(attacker, skillIndex) .Select(id => attacker.Owner == Owner.CPU ? _residueCharacter.GetCharacter(id) : _residueEnemy.GetCharacter(id)) .Where(character => character != null) .ToList(); _targetRegister.SetTargets(targets); }
public void Initialize() { // StandBy phase to Move phase _turnCharacter.OnTurnCharacterChanged() .Subscribe(_ => _phaseRegister.OnNextPhase()) .AddTo(_disposable); // Move phase to Attack phase _moveHandler.OnMoveEvent() .Subscribe(_ => _phaseRegister.OnNextPhase()) .AddTo(_disposable); // Attack phase to Dice phase _skillModel.OnSkillSubmit() .Subscribe(_ => _phaseRegister.OnNextPhase()) .AddTo(_disposable); // Dice phase to Damage phase _damageProvider.OnDamageChanged() .Subscribe(_ => _phaseRegister.OnNextPhase()) .AddTo(_disposable); // Damage phase to End phase _targetProvider.OnTargetCharacters() .Subscribe(targets => { _targets.Dispose(); var stream = targets.Select(c => c.OnHpChanged()).Merge(); _targets = stream .Buffer(stream.Throttle(TimeSpan.FromMilliseconds(100))) .Subscribe(_ => _phaseRegister.OnNextPhase()); }) .AddTo(_disposable); }
public void Initialize() { _turnCharacter.OnTurnCharacterChanged() .Subscribe(character => { _currentDisposable.Dispose(); _currentDisposable = character.Position() .Subscribe(pos => _camera.transform.position = pos + Offset); }) .AddTo(_disposable); }
private void Bind() { _phaseProvider.OnPhaseChanged() .Where(phase => phase == GamePhase.OutGame) .Subscribe(_ => _screen.Open()) .AddTo(_disposable); _moveLoadRegister.OnLoadChanged() .ObserveCountChanged() .Subscribe(count => _screen.IsMovable(count != 0)); _turnCharacter.OnTurnCharacterChanged() .Subscribe(CharacterEvents).AddTo(_disposable); }
public void Initialize() { var entity = _characterView.GetEntity(); _character.Initialize(entity.Id, entity, entity.SkillEntities, entity.Owner); _residueCharacter.AddCharacter(_character); _moveLoadProvider.OnLoadSubmit() .Where(_ => _characterView.GetEntity() == _turnCharacter.OnTurnCharacterChanged().Value.CharacterEntity) .Subscribe(OnMove).AddTo(_disposable); _phaseProvider.OnPhaseChanged() .Where(phase => phase == GamePhase.Damage) .Where(_ => _character == _turnCharacter.OnTurnCharacterChanged().Value) .Subscribe(_ => { _characterView.OnAnimation(_currentSkill.OnSkillChanged().Value.AnimationState); _characterView.OnAnimationEnded() .Take(1) .Subscribe(animation => { _damagePhaseFinalizer.EmitDamage(); }); }).AddTo(_disposable); _character.OnDirectionChanged() .Subscribe(_characterView.SetRotation).AddTo(_disposable); _character.Position() .Subscribe(_characterView.SetPosition) .AddTo(_disposable); _character.OnHpChanged() .Do(_ => _characterView.OnAnimation(AnimationState.Attacked)) .Where(hp => hp <= 0) .Subscribe(_ => _characterView.OnDead()) .AddTo(_disposable); }
public void Initialize() { _moveLoadProvider.OnLoadSubmit() .Where(_ => _characterView.GetEntity() == _turnCharacter.OnTurnCharacterChanged().Value.CharacterEntity) .Subscribe(OnMove).AddTo(_disposable); }
public void SelectSkillIndex(int index) { _currentSkill.OnSkillSet(_turnCharacter.OnTurnCharacterChanged().Value.Skill(index)); }
public void Initialize() { var entity = _characterView.GetEntity(); _character.Initialize(entity.Id, entity, entity.SkillEntities, entity.Owner); _enemyRegister.AddEnemy(_character); // 移動アニメーション _moveLoadProvider.OnLoadSubmit() .Where(_ => _characterView.GetEntity() == _turnCharacter.OnTurnCharacterChanged().Value.CharacterEntity) .Subscribe(OnMove).AddTo(_disposable); _phaseProvider.OnPhaseChanged() .Where(phase => phase == GamePhase.Damage) .Where(_ => _character == _turnCharacter.OnTurnCharacterChanged().Value) .Subscribe(_ => { _characterView.OnAnimation(_currentSkill.OnSkillChanged().Value.AnimationState); _characterView.OnAnimationEnded() .Take(1) .Subscribe(animation => { _damagePhaseFinalizer.EmitDamage(); }); }).AddTo(_disposable); _character.OnDirectionChanged() .Subscribe(_characterView.SetRotation).AddTo(_disposable); _character.Position() .Subscribe(_characterView.SetPosition) .AddTo(_disposable); _character.OnHpChanged() .Where(hp => hp <= 0) .Subscribe(_ => _characterView.OnDead()) .AddTo(_disposable); _phaseProvider.OnPhaseChanged() .Where(phase => phase == GamePhase.Move) .Where(_ => _character == _turnCharacter.OnTurnCharacterChanged().Value) .Subscribe(_ => { var load = _cpuUseCase.CpuMove(); var panelEntities = load.ToList(); if (panelEntities.Any()) { _cpuUseCase.MoveCharacter(panelEntities); } else { _phaseRegister.SkipAttack(); } }) .AddTo(_disposable); _phaseProvider.OnPhaseChanged() .Where(phase => phase == GamePhase.Attack) .Where(_ => _character == _turnCharacter.OnTurnCharacterChanged().Value) .Subscribe(_ => { if (!_cpuUseCase.CpuAttack()) { _phaseRegister.SkipAttack(); } }) .AddTo(_disposable); }