/// <summary>
        /// Define Animator states
        /// </summary>
        private void InitializeAnimator()
        {
            this.JumpTrigger = new AnimationTrigger("Jump", this.Animator);
            this.SecondJumpTrigger = new AnimationTrigger("SecondJump", this.Animator);
            this.LandingTrigger = new AnimationTrigger("Landing", this.Animator);
            this.RestTrigger = new AnimationTrigger("Rest", this.Animator);

            this.WeakDamageTrigger = new AnimationTrigger("WeakDamage", this.Animator);
            this.StrongDamageTrigger = new AnimationTrigger("StrongDamage", this.Animator);
            this.FlyDamageTrigger = new AnimationTrigger("FlyDamage", this.Animator);
            this.StunDamageTrigger = new AnimationTrigger("StunDamage", this.Animator);

            this.AnimatorSpeed = new AnimatorValueFloat("Speed", this.Animator);
            this.AttackEnabled = new ReadOnlyAnimatorValueFloat("AttackEnabled", this.Animator);
            this.DamageMove = new ReadOnlyAnimatorValueFloat("DamageMove", this.Animator);
            this.JumpStability = new ReadOnlyAnimatorValueFloat("JumpStability", this.Animator);
            this.Invincible = new ReadOnlyAnimatorValueFloat("Invincible", this.Animator);

            this.OnGrond = new AnimatorValueBool("OnGround", this.Animator);
            this.Attack1 = new AnimatorValueBool("Attack1", this.Animator);
            this.Attack2_0 = new AnimatorValueBool("Attack2_0", this.Animator);
            this.Attack2 = new AnimatorValueBool("Attack2", this.Animator);
            this.Attack2Finish = new AnimatorValueBool("Attack2_finish", this.Animator);

            this.AnimatorStates = new AnimatorStateManager().AddTo(this.Disposables);

            this.IdleState = new AnimatorState("Base Layer.Idle", this.AnimatorStates);
            this.LocoState = new AnimatorState("Base Layer.Locomotion", this.AnimatorStates);
            this.JumpState = new AnimatorState("Base Layer.Jump", this.AnimatorStates);
            this.Jmp2State = new AnimatorState("Base Layer.SecondJump", this.AnimatorStates);
            this.LandState = new AnimatorState("Base Layer.Landing", this.AnimatorStates);
            this.Lan2State = new AnimatorState("Base Layer.Landed", this.AnimatorStates);
            this.RestState = new AnimatorState("Base Layer.Rest", this.AnimatorStates);

            var airAttack1State = new AnimatorState("Base Layer.AirAtk1", this.AnimatorStates);
            var airAttack2_0State = new AnimatorState("Base Layer.AirAtk2_0", this.AnimatorStates);
            var airAttack2_1State = new AnimatorState("Base Layer.AirAtk2_1", this.AnimatorStates);
            var airAttack2_2State = new AnimatorState("Base Layer.AirAtk2_2", this.AnimatorStates);
            var landAttack1State = new AnimatorState("Base Layer.LandAtk1", this.AnimatorStates);
            var landAttack2_0State = new AnimatorState("Base Layer.LandAtk2_0", this.AnimatorStates);
            var landAttack2_1State = new AnimatorState("Base Layer.LandAtk2_1", this.AnimatorStates);
            var landAttack2_2State = new AnimatorState("Base Layer.LandAtk2_2", this.AnimatorStates);
            var landAttack2FinishState = new AnimatorState("Base Layer.LandAtk2_finish", this.AnimatorStates);

            this.WeakDamageState = new AnimatorState("Base Layer.WeakDamage", this.AnimatorStates);
            this.StrongDamageState = new AnimatorState("Base Layer.StrongDamage", this.AnimatorStates);
            this.FlyDamageState = new AnimatorState("Base Layer.FlyDamage", this.AnimatorStates);
            var stunDamageState = new AnimatorState("Base Layer.StunDamage", this.AnimatorStates);

            //var damagedGround1State = new AnimatorState("Base Layer.DamagedGround1", this.AnimatorStates);
            //var damagedGround2State = new AnimatorState("Base Layer.DamagedGround2", this.AnimatorStates);
            //var damagedGround3State = new AnimatorState("Base Layer.DamagedGround3", this.AnimatorStates);
            //var damagedAir1State = new AnimatorState("Base Layer.DamagedAir1", this.AnimatorStates);
            //var damagedAir2State = new AnimatorState("Base Layer.DamagedAir2", this.AnimatorStates);
            //var damagedAir3State = new AnimatorState("Base Layer.DamagedAir3", this.AnimatorStates);

            new[]
            {
                this.JumpState,
                this.Jmp2State,
                this.LandState,
                airAttack1State,
                airAttack2_0State,
                airAttack2_1State,
                airAttack2_2State,
            }
            .ForEach(y => y.Tags.Add(inAirTag));

            new[]
            {
                airAttack1State,
                airAttack2_0State,
                airAttack2_1State,
                airAttack2_2State,
                landAttack1State,
                landAttack2_0State,
                landAttack2_1State,
                landAttack2_2State,
                landAttack2FinishState,
            }
            .ForEach(y =>
            {
                y.Tags.Add(inAttackTag);
                //y.Tags.Add(clearSecondJumpFlagTag);
            });

            new[]
            {
                airAttack2_0State,
                airAttack2_1State,
                airAttack2_2State,
                landAttack2_0State,
                landAttack2_1State,
                landAttack2_2State,
            }
            .ForEach(y => y.Tags.Add(inRushAttackTag));

            new[]
            {
                this.WeakDamageState,
                this.StrongDamageState,
                this.FlyDamageState,
                stunDamageState,
            }
            .ForEach(y => y.Tags.Add(damagedTag));

            //new[]
            //{
            //    damagedAir1State,
            //    damagedAir2State,
            //    damagedAir3State,
            //}
            //.ForEach(y => y.Tags.Add(clearSecondJumpFlagTag));

            new[]
            {
                this.JumpState,
                this.Jmp2State,
                this.IdleState,
                this.LocoState,
                this.LandState,
                this.RestState,
            }
            .ForEach(y => y.Tags.Add(attackableTag));

            new[]
            {
                airAttack2_0State,
                airAttack2_1State,
                //airAttack2_2State,
                landAttack2_0State,
                landAttack2_1State,
                //landAttack2_2State,
                landAttack2FinishState,
            }
            .ForEach(y => y.Tags.Add(punchAttackTag));

            new[]
            {
                landAttack2FinishState,
            }
            .ForEach(y => y.Tags.Add(finishPunchAttackTag));

            new[]
            {
                airAttack2_2State,
                landAttack2_2State,
            }
            .ForEach(y => y.Tags.Add(punch2AttackTag));

            new[]
            {
                airAttack1State,
                landAttack1State,
            }
            .ForEach(y => y.Tags.Add(kickAttackTag));
        }
 public void Register(AnimatorState state)
 {
     this.States.Add(state);
 }