protected virtual void LoadFSM()
    {
        var startState 		= new FSMStartSkillState(this);
        var updateState 	= new FSMUpdateSkillState(this);
        var excuteEffectState 		= new FSMExcuteEffectSkillState(this);
        var excuteEffectUpdateState = new FSMExcuteEffectUpdateSkillState(this);
        var moveState 		= new FSMMoveState(this);
        var chaseState 		= new FSMChaseState(this);
        var endState 		= new FSMEndSkillState(this);
        var destroyState 	= new FSMDestroySkillState(this);

        m_FSMManager.RegisterState("StartSkillState", startState);
        m_FSMManager.RegisterState("UpdateSkillState", updateState);
        m_FSMManager.RegisterState("ExcuteEffectSkillState", excuteEffectState);
        m_FSMManager.RegisterState("ExcuteEffectUpdateSkillState", excuteEffectUpdateState);
        m_FSMManager.RegisterState("MoveState", moveState);
        m_FSMManager.RegisterState("ChaseState", chaseState);
        m_FSMManager.RegisterState("EndSkillState", endState);
        m_FSMManager.RegisterState("DestroySkillState", destroyState);

        m_FSMManager.RegisterCondition("CanActiveSkill", CanActiveSkill);
        m_FSMManager.RegisterCondition("HaveCreatureAroundOwner", HaveCreatureAroundOwner);
        m_FSMManager.RegisterCondition("MoveToTarget", MoveToTarget);
        m_FSMManager.RegisterCondition("MoveToEnemy", MoveToEnemy);
        m_FSMManager.RegisterCondition("IsFinishSkill", IsFinishSkill);
        m_FSMManager.RegisterCondition("IsEnemyDeath", IsEnemyDeath);
        m_FSMManager.RegisterCondition("HaveEndEffectPerTime", HaveEndEffectPerTime);
        m_FSMManager.RegisterCondition("HaveEndTimeEffect", HaveEndTimeEffect);
    }
    public override void Init()
    {
        base.Init ();

        m_ColliderLayerMask = 1 << (int)TDCEnum.ELayer.LayerCreature | 1 << (int)TDCEnum.ELayer.LayerEnviroment | 1 << (int)TDCEnum.ELayer.LayerGObject | 1 << (int)TDCEnum.ELayer.LayerItem | 1 << (int)TDCEnum.ELayer.LayerPlayer;

        var idleState   	= new FSMIdleState(this);
        var moveState   	= new FSMMoveState(this);
        var findRandomState = new FSMFindRandomState(this);
        var avoidState  	= new FSMAvoidState(this);
        var flyAvoidState 	= new FSMFlyAvoidState(this);
        var chaseState  	= new FSMChaseState(this);
        var attackState  	= new FSMAttackState(this);
        var dieState    	= new FSMDieState(this);
        var flyState 		= new FSMFlyState(this);
        var landingState 	= new FSMLandingState(this);
        var wildModeState 	= new FSMWildModeState(this);
        var petModeState	= new FSMPetModeState(this);
        var followState 	= new FSMFollowState(this);
        var flyFollowState	= new FSMFlyFollowState(this);
        var flyHomeState	= new FSMFlyHomeState(this);
        var landingHomeState = new FSMLandingHomeState(this);
        var goHomeState 	= new FSMGoHomeState(this);

        m_FSMManager.RegisterState("IdleState", idleState);
        m_FSMManager.RegisterState("MoveState", moveState);
        m_FSMManager.RegisterState("FindRandomState", findRandomState);
        m_FSMManager.RegisterState("AvoidState", avoidState);
        m_FSMManager.RegisterState("ChaseState", chaseState);
        m_FSMManager.RegisterState("AttackState", attackState);
        m_FSMManager.RegisterState("DieState", dieState);
        m_FSMManager.RegisterState("FlyAvoidState", flyAvoidState);
        m_FSMManager.RegisterState("FlyState", flyState);
        m_FSMManager.RegisterState("LandingState", landingState);
        m_FSMManager.RegisterState("WildModeState", wildModeState);
        m_FSMManager.RegisterState("PetModeState", petModeState);
        m_FSMManager.RegisterState("FollowState", followState);
        m_FSMManager.RegisterState("FlyFollowState", flyFollowState);
        m_FSMManager.RegisterState("GoHomeState", goHomeState);
        m_FSMManager.RegisterState("FlyHomeState", flyHomeState);
        m_FSMManager.RegisterState("LandingHomeState", landingHomeState);

        m_FSMManager.RegisterCondition("IsActive", GetActive);
        m_FSMManager.RegisterCondition("MoveToTarget", MoveToTarget);
        m_FSMManager.RegisterCondition("MoveToEnemy", MoveToEnemy);
        m_FSMManager.RegisterCondition("FoundEnemy", FoundEnemy);
        m_FSMManager.RegisterCondition("IsDeath", IsDeath);
        m_FSMManager.RegisterCondition("IsToFarGroup", IsToFarGroup);
        m_FSMManager.RegisterCondition("IsToFarStartBattlePosition", IsToFarStartBattlePosition);
        m_FSMManager.RegisterCondition("IsToFarStartPosition", IsToFarStartPosition);
        m_FSMManager.RegisterCondition("IsToFarLeaderPosition", IsToFarLeaderPosition);
        m_FSMManager.RegisterCondition("FoundFood", FoundFood);
        m_FSMManager.RegisterCondition("IsEnemyDeath", IsEnemyDeath);
        m_FSMManager.RegisterCondition("IsLandingFinish", IsLandingFinish);
        m_FSMManager.RegisterCondition("HaveLeader", HaveLeader);
        m_FSMManager.RegisterCondition("HaveEnemyByLeader", HaveEnemyByLeader);
        m_FSMManager.RegisterCondition("IsLeaderDeath", IsLeaderDeath);
    }