Exemplo n.º 1
0
        protected virtual void Awake()
        {
            if (m_NavMeshAgent == null)
            {
                m_NavMeshAgent = GetComponent <NavMeshAgent>();
            }

            if (m_Nameplate != null)
            {
                UnitNameplate nameplate = Instantiate(m_Nameplate);
                nameplate.parent = this;
            }

            if (m_Skills == null)
            {
                m_Skills = new List <Skill>();
            }
            else
            {
                foreach (GameObject skillPrefab in m_SkillPrefabs)
                {
                    if (skillPrefab.GetComponent <ICastable <IUsesSkills> >() == null)
                    {
                        m_SkillPrefabs.Remove(skillPrefab);
                    }
                }
                for (int i = 0, j = 0; i < m_SkillPrefabs.Count; ++i)
                {
                    m_Skills.Add(new Skill());
                    m_Skills[j].skillIndex           = j;
                    m_Skills[j].skillData            = m_SkillPrefabs[i].GetComponent <ICastable <IUsesSkills> >().skillData.Clone();
                    m_Skills[j].skillData.skillIndex = j;
                    m_Skills[j].skillPrefab          = m_SkillPrefabs[i].gameObject;
                    m_Skills[j].parent = this;
                    ++j;
                }
            }

            //GetComponent<NavMeshAgent>().updateRotation = false;
            m_MovementFSM = new FiniteStateMachine <MovementState>();

            m_DamageFSM = new FiniteStateMachine <DamageState>();

            m_DamageFSM.AddTransition(DamageState.Init, DamageState.Idle);
            m_DamageFSM.AddTransitionFromAny(DamageState.Dead);

            m_MovementFSM.Transition(MovementState.Idle);

            m_DamageFSM.Transition(DamageState.Idle);

            Publisher.self.Subscribe(Event.UpgradeSkill, OnUpgradeSkill);
            Publisher.self.Subscribe(Event.UseSkill, OnUseSkill);
        }