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); } }
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(); }
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); }