using CommonAI.Zone;
using CommonAI.Zone.ZoneEditor;
using System;
using XmdsCommon.Plugin;
using CommonAI.Zone.Instance;
using System.IO;
using CommonLang.Log;
using XmdsCommon.EditorData;
namespace XmdsBattleClient.Battle
{
public class XmdsBattleManager
{
private readonly static Logger log = LoggerFactory.GetLogger("XmdsBattleManager");
private static EditorTemplates s_data_root;
public static EditorTemplates DataRoot { get { return s_data_root; } }
public static TemplateManager Templates { get { return s_data_root.Templates; } }
///
/// 初始化所有模板以及工厂类,游戏启动时调用
///
///
///
public static void Init(string data_root, InstanceZoneFactory factory)
{
//联网模式,客户端不包含服务端DLL、技能DLL.
TemplateManager.setFactory(factory);
s_data_root = new EditorTemplates(data_root, TemplateManager.MessageCodec);
s_data_root.LoadAllTemplates();
}
public static void InitWithoutLoadAllTemplates(string data_root, InstanceZoneFactory factory)
{
//联网模式,客户端不包含服务端DLL、技能DLL.
TemplateManager.setFactory(factory);
s_data_root = new EditorTemplates(data_root, TemplateManager.MessageCodec);
}
public static void LoadCFG_Step()
{
s_data_root.LoadCFG();
s_data_root.LoadResVersion();
s_data_root.LoadTerrainDefinitionMap();
s_data_root.LoadUnitActionDefinitionMap();
}
public static void LoadUnits_Step()
{
foreach (string file in s_data_root.LoadList("/units"))
{
s_data_root.LoadTemplate(file);
}
}
public static void LoadSkills_Step()
{
foreach (string file in s_data_root.LoadList("/skills"))
{
s_data_root.LoadTemplate(file);
}
}
public static void LoadSpells_Step()
{
foreach (string file in s_data_root.LoadList("/spells"))
{
s_data_root.LoadTemplate(file);
}
}
public static void loadBuffs_Step()
{
foreach (string file in s_data_root.LoadList("/buffs"))
{
s_data_root.LoadTemplate(file);
}
}
public static void loadItems_Step()
{
foreach (string file in s_data_root.LoadList("/items"))
{
s_data_root.LoadTemplate(file);
}
}
public static void loadTriggersAndEvents_Step(bool client = false)
{
if (!client)
{
foreach (string file in s_data_root.LoadList("/unit_triggers"))
{
s_data_root.LoadTemplate(file);
}
foreach (string file in s_data_root.LoadList("/unit_events"))
{
s_data_root.LoadTemplate(file);
}
}
}
public static void loadFormula_Step()
{
if (TemplateManager.Formula != null)
{
TemplateManager.Formula.InitPluginsData(s_data_root);
}
}
public static void LoadCFG(byte[] dat)
{
s_data_root.LoadAllCFG(dat);
}
public static void LoadCFG(Stream stream)
{
s_data_root.LoadAllCFG(stream);
}
public static void LoadTemplate(byte[] dat) where T : class, ITemplateData
{
using (var ms = new MemoryStream(dat))
{
LoadTemplates(ms);
}
}
public static void LoadTemplates(Stream stream) where T : class, ITemplateData
{
try
{
var br = new BinaryReader(stream);
var n = br.ReadInt32();
for (var i = 0; i < n; i++)
{
var name = br.ReadString();
var len = br.ReadInt32();
var rpos = stream.Position;
try
{
s_data_root.LoadTemplate(stream);
}
catch (Exception err)
{
log.ErrorFormat("LoadTemplate:{0},{1}", typeof(T), name);
log.Error(err);
}
finally
{
stream.Position = rpos + len;
}
}
}
catch (Exception e)
{
log.Error(e);
}
}
public static void LoadSceneSnapData(byte[] dat)
{
LoadSceneSnapData(new MemoryStream(dat));
}
public static void LoadSceneSnapData(Stream stream)
{
try
{
var br = new BinaryReader(stream);
var n = br.ReadInt32();
for (var i = 0; i < n; i++)
{
var _id = br.ReadInt32();
var _len = br.ReadInt32();
var _dat = br.ReadBytes(_len);
try
{
SceneSnapManager.LoadSceneSnapData(_id, _dat);
}
catch (Exception err)
{
log.Error(err);
}
}
}
catch (Exception e)
{
log.Error(e);
}
}
public static void LoadNewSceneSnapData(Stream stream)
{
try
{
var br = new BinaryReader(stream);
var n = br.ReadInt32();
for (var i = 0; i < n; i++)
{
var _id = br.ReadInt32();
var _len = br.ReadInt32();
var _dat = br.ReadBytes(_len);
try
{
SceneSnapManager.LoadBinUnitSnapData(_id, _dat);
}
catch (Exception err)
{
log.Error(err);
}
}
}
catch (Exception e)
{
log.Error(e);
}
}
public static void loadFinish()
{
s_data_root.Templates.RehashAll();
}
}
}