using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using CommonLang.Property;
using CommonAI.Zone.Instance;
using CommonAI.Zone.ZoneEditor.EventTrigger;
using CommonLang.IO.Attribute;
using CommonLang.IO;
using CommonLang.Xml;
using System.Xml;
using CommonAI.Zone.EventTrigger;
namespace CommonAI.Zone.ZoneEditor
{
///
/// 事件动作触发器
///
[MessageType(0x4501)]
[TableClassAttribute("Name")]
public class ZoneEvent : ICloneable, IEventDataNode, IExternalizable
{
public string EventName { get { return this.Name; } set { this.Name = value; } }
public string EventTreePath { get { return this.SavePath; } set { this.SavePath = value; } }
public bool EventIsActive { get { return this.Active; } set { this.Active = value; } }
public string EventComment { get { return this.Comment; } set { this.Comment = value; } }
public int EventDelayTimeMS { get { return this.DelayTimeMS; } set { this.DelayTimeMS = value; } }
public List EventLocalVars { get { return this.LocalVars.Datas; } }
public List EventTriggers { get { return this.Triggers.Datas; } }
public List EventConditions { get { return this.Conditions.Datas; } }
public List EventActions { get { return this.Actions.Datas; } }
///
/// 触发器名字
///
public string Name = "Unnamed";
///
/// 启用
///
public bool Active = true;
///
/// 注释
///
public string Comment = "";
///
/// 保存
///
public string SavePath;
///
/// 延迟执行
///
public int DelayTimeMS;
///
/// 临时变量
///
public EventLocalVars LocalVars = new EventLocalVars();
///
/// 事件触发
///
public EventTriggers Triggers = new EventTriggers();
///
/// 条件
///
public EventConditions Conditions = new EventConditions();
///
/// 动作
///
public EventActions Actions = new EventActions();
public ZoneEvent()
{
Triggers.Datas.Add(new SceneInitialized());
Conditions.Datas.Add(new AlwaysTrue());
Actions.Datas.Add(new DoNoting());
}
public override string ToString()
{
return Name + "";
}
public string FunctionText()
{
StringBuilder sb = new StringBuilder();
sb.Append(Triggers.ToString());
sb.Append(",\n");
sb.Append("满足条件:").Append(Conditions.ToString());
sb.Append(",\n");
sb.Append("执行动作:").Append(Actions.ToString());
sb.Append("。");
return sb.ToString();
}
public object Clone()
{
return IOUtil.CloneIExternalizable(TemplateManager.MessageCodec, this);
}
public void WriteExternal(IOutputStream output)
{
output.PutUTF(this.Name);
output.PutBool(this.Active);
output.PutUTF(this.Comment);
output.PutUTF(this.SavePath);
output.PutS32(this.DelayTimeMS);
output.PutObj2Xml(this.LocalVars);
output.PutObj2Xml(this.Triggers);
output.PutObj2Xml(this.Conditions);
output.PutObj2Xml(this.Actions);
}
public void ReadExternal(IInputStream input)
{
this.Name = input.GetUTF();
this.Active = input.GetBool();
this.Comment = input.GetUTF();
this.SavePath = input.GetUTF();
this.DelayTimeMS = input.GetS32();
this.LocalVars = input.GetXml2Obj();
this.Triggers = input.GetXml2Obj();
this.Conditions = input.GetXml2Obj();
this.Actions = input.GetXml2Obj();
}
}
// ----------------------------------------------------------------------
public class EventLocalVars
{
public List Datas = new List();
public override string ToString()
{
StringBuilder sb = new StringBuilder();
if (Datas.Count > 0)
{
for (int i = 0; i < Datas.Count; i++)
{
sb.AppendLine(Datas[i].ToString());
}
}
return sb.ToString();
}
}
public class EventTriggers
{
public List Datas = new List();
public override string ToString()
{
StringBuilder sb = new StringBuilder();
if (Datas.Count > 0)
{
for (int i = 0; i < Datas.Count; i++)
{
sb.Append(Datas[i]);
if (i < Datas.Count - 1)
{
sb.Append(" 或者 ");
}
}
}
else
{
sb.Append("(无起因)");
}
return sb.ToString();
}
}
public class EventConditions
{
public List Datas = new List();
public override string ToString()
{
StringBuilder sb = new StringBuilder();
if (Datas.Count > 0)
{
for (int i = 0; i < Datas.Count; i++)
{
sb.Append(Datas[i]);
if (i < Datas.Count - 1)
{
sb.Append(" 并且 ");
}
}
}
else
{
sb.Append("(无条件)");
}
return sb.ToString();
}
}
public class EventActions
{
public List Datas = new List();
public override string ToString()
{
StringBuilder sb = new StringBuilder();
if (Datas.Count > 0)
{
for (int i = 0; i < Datas.Count; i++)
{
sb.Append(Datas[i]);
if (i < Datas.Count - 1)
{
sb.Append(" 并且 ");
}
}
}
else
{
sb.Append("(无动作)");
}
return sb.ToString();
}
}
// ----------------------------------------------------------------------
}