Ejemplo n.º 1
0
            public static void Init()
            {
                // 实例化所有 spgbase 的子类
                var baseType  = typeof(SkillParamGeneratorBase);
                var implTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(s => s.GetTypes()).Where(p => !p.IsAbstract && baseType.IsAssignableFrom(p));

                foreach (var type in implTypes)
                {
                    SkillParamGeneratorBase spgImpl = type.GetConstructor(Type.EmptyTypes).Invoke(null) as SkillParamGeneratorBase;
                    s_spgDict.Add(spgImpl.m_AimType, spgImpl);
                }
            }
Ejemplo n.º 2
0
        public GL_MonsterAction(INetworkService netService) : base(netService)
        {
            var monEn = EM_Monster.s_instance.GetMonsterEn();

            while (monEn.MoveNext())
            {
                var mfsm = new MFSM(monEn.Current.Value);
                m_mfsmDict.Add(monEn.Current.Key, mfsm);
            }
            // Mfsm 的构造
            SkillParamGeneratorBase.Init();
        }
Ejemplo n.º 3
0
            public override MFSMStateBase GetNextState(E_Monster self)
            {
                if (self.m_IsDead)
                {
                    return(m_mfsm.m_dead);
                }
                if (self.m_IsFaint)
                {
                    return(m_mfsm.m_faint);
                }
                if (self.m_HighestHatredTargetNetId == -1)
                {
                    return(m_mfsm.m_autoMove);
                }
                if (self.m_IsSilent)
                {
                    return(null);
                }
                var unit = EM_Sight.s_instance.GetUnitVisibleByNetworkId(self.m_HighestHatredTargetNetId);

                if (unit == null)
                {
                    return(null);
                }
                // 尝试对仇恨最高的目标释放技能
                E_MonsterSkill skill;

                if (EM_MonsterSkill.s_instance.GetRandomValidSkill(self.m_MonsterId, out skill))
                {
                    var spg = SkillParamGeneratorBase.GetSpg(skill.m_AimType);
                    if (spg.InCastRange(self, skill.m_CastRange, unit))
                    {
                        SkillParam sp        = spg.GetSkillParam(self, unit);
                        var        castState = m_mfsm.m_castFront;
                        castState.Reset(skill, sp);
                        return(castState);
                    }
                }
                return(null);
            }