예제 #1
0
        private void AddDashTele()
        {
            ParticleSystem.MainModule main = _trail.main;
            var psr = _trail.GetComponent<ParticleSystemRenderer>();

            bool tele = false;

            IEnumerator TeleOut()
            {
                tele = false;

                // After Tele can transition here if the Tele fails so I want to reset the trail regardless.
                if (main.startColor.color == Color.black)
                {
                    psr.material.shader = Shader.Find("Particles/Additive");
                    main.startColor = Color.white;
                    _trail.Play();
                }

                if (_hm.hp           > HP * 2 / 3) yield break;
                if (_rand.Next(0, 2) == 0) yield break;

                tele = true;

                psr.material.shader = Shader.Find("Particles/Multiply");
                main.startColor = Color.black;

                yield return new WaitForSeconds(.20f);

                _anim.Stop();

                _trail.Pause();

                _control.SetState("Tele Out Dash");
            }

            _control.CreateState("Dash Wall");

            // ReSharper disable once ImplicitlyCapturedClosure
            void ConditionalEvent()
            {
                if (tele)
                {
                    _control.SetState("Tele Out Dash");
                }
            }

            _control.AddMethod("Dash Wall", ConditionalEvent);

            _control.ChangeTransition("Dash", "WALL", "Dash Wall");

            _control.AddTransition("Dash Wall", FsmEvent.Finished, "Dash Recover");

            _control.AddCoroutine("Dash", TeleOut);

            _control.CopyState("Tele Out", "Tele Out Dash");
            _control.CopyState("TelePos Slash", "TelePos DashOut");
            _control.CopyState("Tele In", "Tele In Dash");

            _control.AddTransition("Dash", "TELE", "Tele Out Dash");

            _control.ChangeTransition("Tele Out Dash", "FINISHED", "TelePos DashOut");
            _control.ChangeTransition("TelePos DashOut", "FINISHED", "Tele In Dash");
            _control.ChangeTransition("Tele In Dash", "FINISHED", "Dash Continue");

            _control.GetAction<SetStringValue>("TelePos DashOut").stringValue = "DASH";

            _control.CreateState("Dash Continue");

            IEnumerator ResumeDash()
            {
                psr.material.shader = Shader.Find("Particles/Additive");
                main.startColor = Color.white;

                _trail.Play();

                transform.localScale = transform.localScale.SetX
                (
                    Math.Abs(transform.localScale.x) *
                    Math.Sign(HeroController.instance.transform.position.x - transform.position.x)
                );

                gameObject.GetComponent<Rigidbody2D>().velocity = new Vector2(60 * Math.Sign(transform.localScale.x), 0);

                _anim.Play("Dash");

                yield return new WaitForSeconds(.15f);

                _anim.Stop();
            }

            _control.InsertCoroutine("Dash Continue", 0, ResumeDash);

            _control.AddTransition("Dash Continue", FsmEvent.Finished, "Dash Recover");
        }