protected void EvStateEnter(PlayerStateContext context)
 {
     disposable = GameManager.I.GameEvents.OnRoundStart
                  .Subscribe(u =>
     {
         context.ChangeState(Player.StateNameNeutral);
     });
 }
Beispiel #2
0
 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);
    }
Beispiel #6
0
    // 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)
 {
 }