protected void EvStateEnter(PlayerStateContext context) { disposable = GameManager.I.GameEvents.OnRoundStart .Subscribe(u => { context.ChangeState(Player.StateNameNeutral); }); }
private void OnDestroy() { disposable.Dispose(); disposable = null; Rigidbody = null; stateMachine = null; context = null; }
protected new void EvStateEnter(PlayerStateContext context) { base.EvStateEnter(context); this.context = context; itsOwnDisposable = new CompositeDisposable(); sprite = context.Sprite.GetComponent <Script_SpriteStudio_Root>(); SetAnimation("Damage"); WaitForTransitToNeutral(context); }
private void WaitForTransitToNeutral(PlayerStateContext context) { var source = GameManager.I.GameEvents.OnHitEnemyShot .Select(c => Unit.Default) .Merge(Observable.Return(Unit.Default)); // 一定時間被弾しなかったら Neutral 状態へ戻る source.Throttle(TimeSpan.FromSeconds(1)) .Subscribe(u => { SetAnimation("Player"); context.ChangeState(Player.StateNameNeutral); }) .AddTo(itsOwnDisposable); }
protected void EvStateEnter(PlayerStateContext context) { Context = context; Disposable = new CompositeDisposable(); // 一定時間ごとにショットを撃つ Observable.IntervalFrame(context.ShotSpan) .Subscribe(t => Shot()) .AddTo(Disposable); Observable.EveryUpdate() .Subscribe(t => Move()) .AddTo(Disposable); SetMouseControlUp(); GameManager.I.GameEvents.OnPlayerExitsFightArea .Subscribe(u => { SoundManager.I.PlaySe(SeKind.PlayerDefeated); context.ChangeState(Player.StateNameLose); }) .AddTo(Disposable); GameManager.I.GameEvents.OnEnemyDefeated .Subscribe(u => context.ChangeState(Player.StateNameWin)) .AddTo(Disposable); GameManager.I.GameEvents.OnNextRound .Subscribe(u => context.ChangeState(Player.StateNameOpening)) .AddTo(Disposable); GameManager.I.GameEvents.OnHitEnemyShot .Subscribe(collider => OnHitBody(collider)) .AddTo(Disposable); // MissingReferenceException対策 Observable.EveryUpdate() .SkipWhile(t => context.Player != null) .Take(1) .Subscribe(t => Disposable.Dispose()) .AddTo(Disposable); }
// Use this for initialization void Start() { Rigidbody = GetComponent <Rigidbody2D>(); stateMachine = GetComponent <StateMachine>(); disposable = new CompositeDisposable(); context = new PlayerStateContext { Player = this, ShotObject = shotObject, ShotSource = shotSource, MoveSpeed = speed, PushOnCollideEnemy = pushOnCollide, PushOnShoot = pushOnShoot, PushOnHitMob = pushOnHitMob, Sprite = playerSprite, ShotSpan = shotSpan, DamageAsset = Resources.Load <PlayerDamagedCameraAsset> ("ScriptableAsset/PlayerDamagedCameraAsset"), }; context.ChangeState(StateNameOpening); var smoke = Instantiate(smokePrefab); smoke.transform.SetParent(transform); smoke.transform.localPosition = Vector3.zero; GameManager.I.GameEvents.OnHitEnemyShot .Subscribe(c => { ShowHitEffect(); ShakeCamera(); }) .AddTo(disposable); GameManager.I.GameEvents.OnHitEnemyShot .Subscribe(c => SoundManager.I.PlaySe(SeKind.PlayerDamaged)) .AddTo(disposable); }
protected void EvStateEnter(PlayerStateContext context) { }