using CommonAI.Zone; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using System; using CommonAI.Zone.ZoneEditor; using CommonAI.ZoneClient; using XmdsCommon.ZoneClient; using CommonAI.Zone.Formula; using XmdsCommon.Message; using XmdsCommon.ZoneClient.XmdsClientVirtual; using XmdsCommon.EditorData; using System.IO; using CommonLang.Concurrent; using System.Collections.Generic; namespace XmdsCommon.Plugin { public class XmdsZoneFactory : InstanceZoneFactory { private XmdsClientFormula mFormula = new XmdsClientFormula(); public override CommonAI.Zone.Formula.IFormula Formula { get { return mFormula; } } public XmdsZoneFactory() { } public override IUnitProperties CreateUnitProperties() { return new XmdsUnitProperties(); } public override IAttackProperties CreateAttackProperties() { return new XmdsAttackProperties(); } public override IBuffProperties CreateBuffProperties() { return new XmdsBuffProperties(); } public override IItemProperties CreateItemProperties() { return new XmdsItemProperties(); } public override ISkillProperties CreateSkillProperties() { return new XmdsSkillProperties(); } public override ISpellProperties CreateSpellProperties() { return new XmdsSpellProperties(); } public override IUnitTriggerProperties CreateTriggerProperties() { return new XmdsUnitTriggerProperties(); } public override ISceneProperties CreateSceneProperties() { return new XmdsSceneProperties(); } public override ICommonConfig CreateCommonCFG() { return new XmdsConfig(); } public override IQuestAdapter CreateQuestAdapter(InstanceZone zone) { throw new NotImplementedException(); } public override ZoneLayer CreateClientZoneLayer(EditorTemplates templates, ILayerClient listener) { return new HZZoneLayer(templates, listener); } public override IVirtualClientUnit CreateClientUnitVirtual(ZoneUnit owner) { //是否主角. if (owner is ZoneActor) { return new XmdsClientVirtual_Actor(); } IUnitVisibleData data = owner.SyncInfo.VisibleInfo; //根据数据类型,确定中间层数据类型. if (data == null) { switch (owner.Info.UType) { case UnitInfo.UnitType.TYPE_MONSTER: return new XmdsClientVirtual_Monster(); case UnitInfo.UnitType.TYPE_NPC: return new XmdsClientVirtual_Monster(); case UnitInfo.UnitType.TYPE_PET: return new XmdsClientVirtual_Pet(); case UnitInfo.UnitType.TYPE_PLAYER: return new XmdsClientVirtual_Player(); case UnitInfo.UnitType.TYPE_SUMMON: return new XmdsClientVirtual_SummonUnit(); default: return new XmdsClientVirtual(); } } else if (data is SummonUnitVisibleDataB2C) { return new XmdsClientVirtual_SummonUnit(); } else if (data is PlayerVisibleDataB2C) { return new XmdsClientVirtual_Player(); } else if (data is PetVisibleDataB2C) { return new XmdsClientVirtual_Pet(); } else if (data is MonsterVisibleDataB2C) { return new XmdsClientVirtual_Monster(); } return base.CreateClientUnitVirtual(owner); } public override string ToClientDisplayName(UnitInfo info, SyncUnitInfo syncInfo) { if (!string.IsNullOrEmpty(syncInfo.Alias)) { return syncInfo.Alias; } var prop = info.Properties as XmdsCommon.Plugin.XmdsUnitProperties; if (prop.ServerData != null && prop.ServerData.BaseInfo != null) { return prop.ServerData.BaseInfo.name; } var visible = syncInfo.VisibleInfo as PlayerVisibleDataB2C; if (visible != null && visible.BaseInfo != null) { return visible.BaseInfo.name; } return info.Name; } } public class XmdsClientFormula : IFormula { public override void OnEditorSaving(EditorTemplatesData datas, DirectoryInfo data_root, List savedfiles, AtomicFloat progress_percent) { base.OnEditorSaving(datas, data_root, savedfiles, progress_percent); SceneSnapManager.SaveAllSceneSnap(datas, new DirectoryInfo(data_root.FullName + "/scene_snaps")); //UnitSnapData dataTemp = SceneSnapManager.LoadSceneUnitSnapData(10099); SceneSnapManager.SaveAllSceneSnapExt(datas, new DirectoryInfo(data_root.FullName + "/scene_unitsnaps")); } public override void InitPluginsData(EditorTemplates data_root) { base.InitPluginsData(data_root); SceneSnapManager.InitSceneSnap(data_root.DataRoot + "/scene_snaps", data_root.DataRoot + "/scene_unitsnaps"); } } }