EventAdapter.cs 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443
  1. using CommonAI.Zone.Helper;
  2. using CommonAI.Zone.Instance;
  3. using CommonAI.Zone.Formula;
  4. using CommonAI.Zone.ZoneEditor;
  5. using CommonAI.Zone.ZoneEditor.EventTrigger;
  6. using CommonLang;
  7. using CommonLang.Log;
  8. using CommonLang.Property;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Diagnostics;
  12. using System.Linq;
  13. using System.Text;
  14. using CommonAI.Data;
  15. using CommonAI.ZoneServer.JSGModule;
  16. namespace CommonAI.Zone.EventTrigger
  17. {
  18. //---------------------------------------------------------------------------------
  19. public class EventArguments
  20. {
  21. public InstanceUnit TriggingUnit { get; set; }
  22. public InstanceUnit AttackUnit { get; set; }
  23. public InstanceFlag TriggingFlag { get; set; }
  24. public InstanceItem TriggingItem { get; set; }
  25. public InstanceSpell TriggingSpell { get; set; }
  26. public ItemTemplate TriggingItemTemplate { get; set; }
  27. public BuffTemplate TriggingBuffTemplate { get; set; }
  28. public SkillTemplate TriggingSkillTemplate { get; set; }
  29. public SpellTemplate TriggingSpellTemplate { get; set; }
  30. public string TriggingQuestID { get; set; }
  31. public string TriggingQuestStatusValue { get; set; }
  32. public string TriggingQuestStatusKey { get; set; }
  33. //----------------------------------------------------------------
  34. public ZoneRegion TriggingRegion { get { return TriggingFlag as ZoneRegion; } }
  35. public ZoneWayPoint TriggingPoint { get { return TriggingFlag as ZoneWayPoint; } }
  36. public ZoneDecoration TriggingDecoration { get { return TriggingFlag as ZoneDecoration; } }
  37. public ZoneArea TriggingArea { get { return TriggingFlag as ZoneArea; } }
  38. //----------------------------------------------------------------
  39. public InstanceUnit IteratingUnit { get; set; }
  40. public InstanceItem IteratingItem { get; set; }
  41. public int IteratingInt32 { get; set; }
  42. //----------------------------------------------------------------
  43. public void Set(EventArguments trigger)
  44. {
  45. this.TriggingUnit = trigger.TriggingUnit;
  46. this.TriggingFlag = trigger.TriggingFlag;
  47. this.TriggingItem = trigger.TriggingItem;
  48. this.TriggingSpell = trigger.TriggingSpell;
  49. this.TriggingItemTemplate = trigger.TriggingItemTemplate;
  50. this.TriggingBuffTemplate = trigger.TriggingBuffTemplate;
  51. this.TriggingSkillTemplate = trigger.TriggingSkillTemplate;
  52. this.TriggingSpellTemplate = trigger.TriggingSpellTemplate;
  53. this.TriggingQuestID = trigger.TriggingQuestID;
  54. this.TriggingQuestStatusValue = trigger.TriggingQuestStatusValue;
  55. this.TriggingQuestStatusKey = trigger.TriggingQuestStatusKey;
  56. this.IteratingUnit = trigger.IteratingUnit;
  57. this.IteratingItem = trigger.IteratingItem;
  58. this.IteratingInt32 = trigger.IteratingInt32;
  59. }
  60. public EventArguments Clone()
  61. {
  62. var ret = new EventArguments();
  63. ret.Set(this);
  64. return ret;
  65. }
  66. }
  67. //---------------------------------------------------------------------------------
  68. /// <summary>
  69. /// 抽象值数据接口
  70. /// </summary>
  71. public abstract class IEditorValueAdapter : IDisposable
  72. {
  73. //----------------------------------------------------------------
  74. protected HashMap<string, object> mAttributes = new HashMap<string, object>();
  75. protected HashMap<string, object> mLocalVarMap = new HashMap<string, object>();
  76. //----------------------------------------------------------------
  77. public abstract TemplateManager Templates { get; }
  78. /// <summary>
  79. /// 场景触发器
  80. /// </summary>
  81. public abstract InstanceZone ZoneAPI { get; }
  82. /// <summary>
  83. /// 单位触发器
  84. /// </summary>
  85. public abstract InstanceUnit UnitAPI { get; }
  86. public abstract IEventTriggerCollection Group { get; }
  87. //----------------------------------------------------------------
  88. public abstract bool IsActive { get; set; }
  89. //----------------------------------------------------------------
  90. public void SetLocalVar(string key, object value)
  91. {
  92. if (!string.IsNullOrEmpty(key))
  93. {
  94. mLocalVarMap.Put(key, value);
  95. }
  96. }
  97. public T GetLocalVarAs<T>(string key)
  98. {
  99. if (!string.IsNullOrEmpty(key))
  100. {
  101. try
  102. {
  103. T ret = (T)mLocalVarMap[key];
  104. return ret;
  105. }
  106. catch (Exception er)
  107. {
  108. Console.WriteLine("IEditorValueAdapter : " + key + ", catch: " + er);
  109. }
  110. }
  111. return default(T);
  112. }
  113. public bool IsAttribute(string key)
  114. {
  115. return mAttributes.ContainsKey(key);
  116. }
  117. public void SetAttribute(string key, object value)
  118. {
  119. mAttributes.Put(key, value);
  120. }
  121. public object GetAttribute(string key)
  122. {
  123. return mAttributes.Get(key);
  124. }
  125. public virtual void Dispose()
  126. {
  127. this.mAttributes.Clear();
  128. this.mAttributes = null;
  129. this.mLocalVarMap.Clear();
  130. this.mLocalVarMap = null;
  131. }
  132. }
  133. public interface IEventTriggerCollection : IDisposable
  134. {
  135. void Bind<T>(ICollection<T> events) where T : IEventDataNode;
  136. EventTriggerAdapter GetEditEvent(string name);
  137. void EventActive(string name, EventArguments args);
  138. void EventDeactive(string name, EventArguments args);
  139. }
  140. //---------------------------------------------------------------------------------
  141. /// <summary>
  142. /// 执行事件触发器的数据接口
  143. /// </summary>
  144. public abstract class EventTriggerAdapter : IEditorValueAdapter, IDisposable
  145. {
  146. public static int EXPECT_TEST_AND_DO_ACTION_TIME_MS = 10;
  147. private Logger log = LoggerFactory.GetLogger("ET");
  148. private IEventDataNode mData;
  149. private IEventTriggerCollection mGroup;
  150. private List<TimeTaskMS> mTimes = new List<TimeTaskMS>();
  151. private bool mActive = true;
  152. //-------------------------------------------------------------------------
  153. public string Name { get { return mData.EventName; } }
  154. public override IEventTriggerCollection Group { get { return mGroup; } }
  155. public override TemplateManager Templates { get { return ZoneAPI.Templates; } }
  156. //-------------------------------------------------------------------------
  157. public override bool IsActive
  158. {
  159. get { return mActive; }
  160. set
  161. {
  162. if (mActive != value)
  163. {
  164. mActive = value;
  165. if (mActive)
  166. {
  167. foreach (TimeTaskMS task in mTimes)
  168. {
  169. task.Resume();
  170. }
  171. }
  172. else
  173. {
  174. foreach (TimeTaskMS task in mTimes)
  175. {
  176. task.Pause();
  177. }
  178. }
  179. }
  180. }
  181. }
  182. //-------------------------------------------------------------------------
  183. public EventTriggerAdapter(IEventDataNode evt, IEventTriggerCollection group)
  184. {
  185. this.mData = evt;
  186. this.mGroup = group;
  187. this.mActive = evt.EventIsActive;
  188. }
  189. public override void Dispose()
  190. {
  191. foreach (var t in mData.EventTriggers) { if (t != null) t.Dispose(); }
  192. foreach (var t in mData.EventConditions) { if (t != null) t.Dispose(); }
  193. foreach (var t in mData.EventActions) { if (t != null) t.Dispose(); }
  194. foreach (TimeTaskMS task in mTimes)
  195. {
  196. task.Dispose();
  197. }
  198. mTimes.Clear();
  199. mTimes = null;
  200. if (mOnDisposed != null)
  201. {
  202. mOnDisposed.Invoke(this);
  203. }
  204. mOnDisposed = null;
  205. mOnActionBegin = null;
  206. mOnActionEnd = null;
  207. mData = null;
  208. mGroup = null;
  209. base.Dispose();
  210. }
  211. //-------------------------------------------------------------------------
  212. //-------------------------------------------------------------------------
  213. internal void Start()
  214. {
  215. this.Listen();
  216. if (!mActive)
  217. {
  218. foreach (TimeTaskMS task in mTimes)
  219. {
  220. task.Pause();
  221. }
  222. }
  223. }
  224. private void Listen()
  225. {
  226. var args = new EventArguments();
  227. foreach (AbstractTrigger t in mData.EventTriggers)
  228. {
  229. if (t != null)
  230. {
  231. t.Listen(this, args);
  232. }
  233. }
  234. }
  235. /// <summary>
  236. /// 测试并执行一次触发器
  237. /// </summary>
  238. /// <returns></returns>
  239. public bool TestAndDoAction(EventArguments args)
  240. {
  241. if (!IsActive)
  242. {
  243. return false;
  244. }
  245. int timeUse = 0;
  246. #if JSGProfile
  247. int startTick = System.Environment.TickCount;
  248. bool isTrigger = true;
  249. #endif
  250. Stopwatch stopwatch = Stopwatch.StartNew();
  251. try
  252. {
  253. InitLocalVars(args);
  254. foreach (AbstractCondition c in mData.EventConditions)
  255. {
  256. if (c != null && !c.Test(this, args))
  257. {
  258. #if JSGProfile
  259. isTrigger = false;
  260. #endif
  261. return false;
  262. }
  263. }
  264. }
  265. finally
  266. {
  267. stopwatch.Stop();
  268. PrintStopwatch(stopwatch, "Test");
  269. #if JSGProfile
  270. if (!isTrigger)
  271. {
  272. timeUse = System.Environment.TickCount - startTick;
  273. JSGServerProfile.RecordTrigger(this.ZoneAPI, this.Name, timeUse, false);
  274. }
  275. #endif
  276. }
  277. if (mData.EventDelayTimeMS == 0)
  278. {
  279. RunInternal(args, timeUse);
  280. }
  281. else
  282. {
  283. var argst = args.Clone();
  284. ZoneAPI.AddTimeDelayMS(mData.EventDelayTimeMS, (TimeTaskMS) =>
  285. {
  286. RunInternal(argst, timeUse);
  287. });
  288. }
  289. return true;
  290. }
  291. /// <summary>
  292. /// 重置TaskTimer().
  293. /// </summary>
  294. public void ResetTimeTask()
  295. {
  296. foreach (TimeTaskMS task in mTimes)
  297. {
  298. task.Reset();
  299. }
  300. }
  301. private void RunInternal(EventArguments args, int checkTimeUse)
  302. {
  303. #if JSGProfile
  304. int startTick = System.Environment.TickCount;
  305. #endif
  306. //if(this.Name.Equals("事件重置列表1") || this.Name.Equals("玉重置"))
  307. //{
  308. // int i = 0;
  309. //}
  310. Stopwatch stopwatch = Stopwatch.StartNew();
  311. try
  312. {
  313. if (mOnActionBegin != null)
  314. {
  315. mOnActionBegin.Invoke(this, args);
  316. }
  317. foreach (AbstractAction a in mData.EventActions)
  318. {
  319. if (a != null)
  320. {
  321. a.DoAction(this, args);
  322. }
  323. }
  324. if (mOnActionEnd != null)
  325. {
  326. mOnActionEnd.Invoke(this, args);
  327. }
  328. }
  329. finally
  330. {
  331. stopwatch.Stop();
  332. PrintStopwatch(stopwatch, "RunInternal");
  333. #if JSGProfile
  334. int timeUse = System.Environment.TickCount - startTick + checkTimeUse;
  335. bool needNotice = JSGServerProfile.RecordTrigger(this.ZoneAPI, this.Name, timeUse, true);
  336. if (GlobalData.GAME_BS_TEST) //内部测试标记开放了
  337. {
  338. log.Warn("--事件: " + this.ZoneAPI.UUID + ", " + this.ZoneAPI.GetSceneID() + ", act:" + this.Name);
  339. }
  340. else if(needNotice)
  341. {
  342. log.Debug("--事件: " + this.ZoneAPI.UUID + ", " + this.ZoneAPI.GetSceneID() + ", act:" + this.Name);
  343. }
  344. #endif
  345. }
  346. }
  347. public void ProcessActionActive(EventArguments args)
  348. {
  349. if (mOnActionActive != null)
  350. {
  351. mOnActionActive.Invoke(this, args);
  352. }
  353. }
  354. private void PrintStopwatch(Stopwatch stopwatch, string function)
  355. {
  356. if (stopwatch.ElapsedMilliseconds > EXPECT_TEST_AND_DO_ACTION_TIME_MS)
  357. {
  358. log.WarnFormat("[{0}] at scene[{1}] -> event[{2}] : usetime {3} > {4}ms, data{5}",
  359. function,
  360. (ZoneAPI as EditorScene).Data.ToString() + "-" + ZoneAPI.UUID,
  361. mData.EventName,
  362. stopwatch.ElapsedMilliseconds,
  363. EXPECT_TEST_AND_DO_ACTION_TIME_MS,
  364. ZoneAPI.GetInfo());
  365. }
  366. }
  367. //-----------------------------------------------------------------------------------------------
  368. #region _局部变量_
  369. private void InitLocalVars(EventArguments args)
  370. {
  371. mLocalVarMap.Clear();
  372. foreach (LocalVar klv in mData.EventLocalVars)
  373. {
  374. object obj = klv.GetValue(this, args);
  375. mLocalVarMap.Put(klv.Key, obj);
  376. }
  377. }
  378. #endregion
  379. public delegate bool TryPickItemHandler(EventArguments args, InstanceUnit unit, InstanceItem item);
  380. public delegate void TimeTask(EventArguments args);
  381. //-----------------------------------------------------------------------------------------------
  382. #region _时间任务_
  383. internal void listen_TimeDelaySEC(EventArguments args, float TimeSEC)
  384. {
  385. args = args.Clone();
  386. TimeTaskMS task = ZoneAPI.AddTimeDelayMS((int)(TimeSEC * 1000), (time) =>
  387. {
  388. TestAndDoAction(args);
  389. });
  390. this.mTimes.Add(task);
  391. }
  392. internal void listen_TimePeriodicSEC(EventArguments args, float EveryTimeSEC)
  393. {
  394. args = args.Clone();
  395. TimeTaskMS task = ZoneAPI.AddTimePeriodicMS((int)(EveryTimeSEC * 1000), (time) =>
  396. {
  397. TestAndDoAction(args);
  398. });
  399. if (task != null)
  400. {
  401. this.mTimes.Add(task);
  402. }
  403. }
  404. internal void listen_TimeTaskSEC(EventArguments args, float EveryTimeSEC, float DelayTimeSEC, int repeat)
  405. {
  406. args = args.Clone();
  407. TimeTaskMS task = ZoneAPI.AddTimeTask((int)(EveryTimeSEC * 1000), (int)(DelayTimeSEC * 1000), repeat, (time) =>
  408. {
  409. TestAndDoAction(args);
  410. });
  411. this.mTimes.Add(task);
  412. }
  413. internal void listen_TimeTask(EventArguments args, int intervalMS, int delayMS, int repeat, TimeTask handler)
  414. {
  415. args = args.Clone();
  416. TimeTaskMS task = ZoneAPI.AddTimeTask(intervalMS, delayMS, repeat, (t) =>
  417. {
  418. handler(args);
  419. });
  420. this.mTimes.Add(task);
  421. }
  422. #endregion
  423. //-----------------------------------------------------------------------------------------------
  424. //-----------------------------------------------------------------------------------------------
  425. //-----------------------------------------------------------------------------------------------
  426. #region __监听_场景事件__
  427. public void listen_SceneInit(EventArguments args, InstanceZone zone)
  428. {
  429. args = args.Clone();
  430. InstanceZone.InitHandler handler = new InstanceZone.InitHandler((z) =>
  431. {
  432. TestAndDoAction(args);
  433. });
  434. zone.OnInit += handler;
  435. this.OnDisposed += (api) =>
  436. {
  437. zone.OnInit -= handler;
  438. };
  439. }
  440. public void listen_TryPickItem(EventArguments args, InstanceZone zone, TryPickItemHandler action)
  441. {
  442. args = args.Clone();
  443. InstanceZone.TryPickItemHandler handler = new InstanceZone.TryPickItemHandler((z, u, i) =>
  444. {
  445. args.TriggingUnit = u;
  446. args.TriggingItem = i;
  447. args.TriggingItemTemplate = i.Info;
  448. TestAndDoAction(args);
  449. return action.Invoke(args, u, i);
  450. });
  451. zone.OnTryPickItem += handler;
  452. this.OnDisposed += (api) =>
  453. {
  454. zone.OnTryPickItem -= handler;
  455. };
  456. }
  457. public void listen_RecvMessageFromGS(EventArguments args, InstanceZone zone, string msg)
  458. {
  459. args = args.Clone();
  460. InstanceZone.RecvMessageR2BHandler handler = new InstanceZone.RecvMessageR2BHandler((z, m) =>
  461. {
  462. if (m.Message == msg)
  463. {
  464. TestAndDoAction(args);
  465. }
  466. });
  467. zone.OnRecvMessageFromGS += handler;
  468. this.OnDisposed += (api) =>
  469. {
  470. zone.OnRecvMessageFromGS -= handler;
  471. };
  472. }
  473. public void listen_ItemAdded(EventArguments args, InstanceZone zone)
  474. {
  475. args = args.Clone();
  476. InstanceZone.ItemAddedHandler handler = new InstanceZone.ItemAddedHandler((z, i, u) =>
  477. {
  478. args.TriggingItem = i;
  479. args.TriggingItemTemplate = i.Info;
  480. TestAndDoAction(args);
  481. });
  482. zone.OnItemAdded += handler;
  483. this.OnDisposed += (api) =>
  484. {
  485. zone.OnItemAdded -= handler;
  486. };
  487. }
  488. #endregion
  489. //-----------------------------------------------------------------------------------------------
  490. #region __监听_FLAG事件__
  491. public void listen_FlagOpened(EventArguments args, InstanceFlag flag)
  492. {
  493. args = args.Clone();
  494. InstanceFlag.FlagEnabledHandler handler = new InstanceFlag.FlagEnabledHandler((f) =>
  495. {
  496. args.TriggingFlag = f;
  497. TestAndDoAction(args);
  498. });
  499. flag.OnFlagEnabled += handler;
  500. this.OnDisposed += (api) =>
  501. {
  502. flag.OnFlagEnabled -= handler;
  503. };
  504. }
  505. public void listen_FlagClosed(EventArguments args, InstanceFlag flag)
  506. {
  507. args = args.Clone();
  508. InstanceFlag.FlagDisabledHandler handler = new InstanceFlag.FlagDisabledHandler((f) =>
  509. {
  510. args.TriggingFlag = flag;
  511. TestAndDoAction(args);
  512. });
  513. flag.OnFlagDisabled += handler;
  514. this.OnDisposed += (api) =>
  515. {
  516. flag.OnFlagDisabled -= handler;
  517. };
  518. }
  519. public void listen_RegionSpawnOver(EventArguments args, ZoneRegion region)
  520. {
  521. args = args.Clone();
  522. ZoneRegion.SpawnOverHandler handler = new ZoneRegion.SpawnOverHandler((rg) =>
  523. {
  524. args.TriggingFlag = rg;
  525. TestAndDoAction(args);
  526. });
  527. region.OnSpawnOver += handler;
  528. this.OnDisposed += (api) =>
  529. {
  530. region.OnSpawnOver -= handler;
  531. };
  532. }
  533. public void listen_RegionEntered(EventArguments args, ZoneRegion region)
  534. {
  535. args = args.Clone();
  536. ZoneRegion.UnitEnterHandler handler = new ZoneRegion.UnitEnterHandler((rg, u) =>
  537. {
  538. args.TriggingFlag = rg;
  539. args.TriggingUnit = u as InstanceUnit;
  540. TestAndDoAction(args);
  541. });
  542. region.OnUnitEnter += handler;
  543. this.OnDisposed += (api) =>
  544. {
  545. region.OnUnitEnter -= handler;
  546. };
  547. }
  548. public void listen_RegionLeft(EventArguments args, ZoneRegion region)
  549. {
  550. args = args.Clone();
  551. ZoneRegion.UnitLeaveHandler handler = new ZoneRegion.UnitLeaveHandler((rg, u) =>
  552. {
  553. args.TriggingFlag = rg;
  554. args.TriggingUnit = u as InstanceUnit;
  555. TestAndDoAction(args);
  556. });
  557. region.OnUnitLeave += handler;
  558. this.OnDisposed += (api) =>
  559. {
  560. region.OnUnitLeave -= handler;
  561. };
  562. }
  563. public void listen_AreaEntered(EventArguments args, ZoneArea area)
  564. {
  565. args = args.Clone();
  566. ZoneArea.UnitEnterHandler handler = new ZoneArea.UnitEnterHandler((rg, u) =>
  567. {
  568. args.TriggingFlag = rg;
  569. args.TriggingUnit = u as InstanceUnit;
  570. TestAndDoAction(args);
  571. });
  572. area.OnUnitEnter += handler;
  573. this.OnDisposed += (api) =>
  574. {
  575. area.OnUnitEnter -= handler;
  576. };
  577. }
  578. public void listen_AreaLeft(EventArguments args, ZoneArea area)
  579. {
  580. args = args.Clone();
  581. ZoneArea.UnitLeaveHandler handler = new ZoneArea.UnitLeaveHandler((rg, u) =>
  582. {
  583. args.TriggingFlag = rg;
  584. args.TriggingUnit = u as InstanceUnit;
  585. TestAndDoAction(args);
  586. });
  587. area.OnUnitLeave += handler;
  588. this.OnDisposed += (api) =>
  589. {
  590. area.OnUnitLeave -= handler;
  591. };
  592. }
  593. #endregion
  594. //-----------------------------------------------------------------------------------------------
  595. #region __监听_单位事件__
  596. public void listen_GenericUnitAdded(EventArguments args, InstanceZone zone)
  597. {
  598. args = args.Clone();
  599. InstanceZone.UnitAddedHandler handler = new InstanceZone.UnitAddedHandler((z, u) =>
  600. {
  601. args.TriggingUnit = u;
  602. TestAndDoAction(args);
  603. });
  604. zone.OnUnitAdded += handler;
  605. this.OnDisposed += (api) =>
  606. {
  607. zone.OnUnitAdded -= handler;
  608. };
  609. }
  610. public void listen_GenericUnitRemoved(EventArguments args, InstanceZone zone)
  611. {
  612. InstanceZone.UnitRemovedHandler handler = new InstanceZone.UnitRemovedHandler((z, u) =>
  613. {
  614. args.TriggingUnit = u;
  615. TestAndDoAction(args);
  616. });
  617. zone.OnUnitRemoved += handler;
  618. this.OnDisposed += (api) =>
  619. {
  620. zone.OnUnitRemoved -= handler;
  621. };
  622. }
  623. public void listen_GenericUnitActivated(EventArguments args, InstanceZone zone)
  624. {
  625. args = args.Clone();
  626. InstanceZone.UnitActivatedHandler handler = new InstanceZone.UnitActivatedHandler((z, u) =>
  627. {
  628. args.TriggingUnit = u;
  629. TestAndDoAction(args);
  630. });
  631. zone.OnUnitActivated += handler;
  632. this.OnDisposed += (api) =>
  633. {
  634. zone.OnUnitActivated -= handler;
  635. };
  636. }
  637. public void listen_GenericUnitDamaged(EventArguments args, InstanceZone zone)
  638. {
  639. args = args.Clone();
  640. InstanceZone.UnitDamageHandler handler = new InstanceZone.UnitDamageHandler((z, u, attacker, reduceHP, attack) =>
  641. {
  642. args.TriggingUnit = u;
  643. args.AttackUnit = attacker;
  644. args.TriggingSpell = attack.FromSpellUnit;
  645. args.TriggingSkillTemplate = attack.FromSkill;
  646. args.TriggingSpellTemplate = attack.FromSpell;
  647. args.TriggingBuffTemplate = attack.FromBuff;
  648. TestAndDoAction(args);
  649. });
  650. zone.OnUnitDamage += handler;
  651. this.OnDisposed += (api) =>
  652. {
  653. zone.OnUnitDamage -= handler;
  654. };
  655. }
  656. public void listen_GenericUnitDead(EventArguments args, InstanceZone zone)
  657. {
  658. args = args.Clone();
  659. InstanceZone.UnitDeadHandler handler = new InstanceZone.UnitDeadHandler((z, u, attacker) =>
  660. {
  661. args.TriggingUnit = u;
  662. TestAndDoAction(args);
  663. });
  664. zone.OnUnitDead += handler;
  665. this.OnDisposed += (api) =>
  666. {
  667. zone.OnUnitDead -= handler;
  668. };
  669. }
  670. public void listen_GenericUnitRebirth(EventArguments args, InstanceZone zone)
  671. {
  672. InstanceZone.UnitRebirthHandler handler = new InstanceZone.UnitRebirthHandler((z, u) =>
  673. {
  674. args.TriggingUnit = u;
  675. TestAndDoAction(args);
  676. });
  677. zone.OnUnitRebirth += handler;
  678. this.OnDisposed += (api) =>
  679. {
  680. zone.OnUnitRebirth -= handler;
  681. };
  682. }
  683. public void listen_GenericUnitGotInstanceItem(EventArguments args, InstanceZone zone)
  684. {
  685. args = args.Clone();
  686. InstanceZone.UnitGotInstanceItemHandler handler = new InstanceZone.UnitGotInstanceItemHandler((z, u, i) =>
  687. {
  688. args.TriggingUnit = u;
  689. args.TriggingItem = i;
  690. args.TriggingItemTemplate = i.Info;
  691. TestAndDoAction(args);
  692. });
  693. zone.OnUnitGotInstanceItem += handler;
  694. this.OnDisposed += (api) =>
  695. {
  696. zone.OnUnitGotInstanceItem -= handler;
  697. };
  698. }
  699. public void listen_GenericUnitGotInventoryItem(EventArguments args, InstanceZone zone)
  700. {
  701. args = args.Clone();
  702. InstanceZone.UnitGotInventoryItemHandler handler = new InstanceZone.UnitGotInventoryItemHandler((z, u, i, c) =>
  703. {
  704. args.TriggingUnit = u;
  705. args.TriggingItemTemplate = i;
  706. TestAndDoAction(args);
  707. });
  708. zone.OnUnitGotInventoryItem += handler;
  709. this.OnDisposed += (api) =>
  710. {
  711. zone.OnUnitGotInventoryItem -= handler;
  712. };
  713. }
  714. public void listen_GenericUnitLostInventoryItem(EventArguments args, InstanceZone zone)
  715. {
  716. InstanceZone.UnitLostInventoryItemHandler handler = new InstanceZone.UnitLostInventoryItemHandler((z, u, i, c) =>
  717. {
  718. args.TriggingUnit = u;
  719. args.TriggingItemTemplate = i;
  720. TestAndDoAction(args);
  721. });
  722. zone.OnUnitLostInventoryItem += handler;
  723. this.OnDisposed += (api) =>
  724. {
  725. zone.OnUnitLostInventoryItem -= handler;
  726. };
  727. }
  728. public void listen_GenericUnitUseItem(EventArguments args, InstanceZone zone)
  729. {
  730. args = args.Clone();
  731. InstanceZone.UnitUseItemHandler handler = new InstanceZone.UnitUseItemHandler((z, u, i, c) =>
  732. {
  733. args.TriggingUnit = u;
  734. args.TriggingItemTemplate = i;
  735. TestAndDoAction(args);
  736. });
  737. zone.OnUnitUseItem += handler;
  738. this.OnDisposed += (api) =>
  739. {
  740. zone.OnUnitUseItem -= handler;
  741. };
  742. }
  743. public void listen_GenericUnitGotBuff(EventArguments args, InstanceZone zone)
  744. {
  745. args = args.Clone();
  746. InstanceZone.UnitGotBuffHandler handler = new InstanceZone.UnitGotBuffHandler((z, u, b) =>
  747. {
  748. args.TriggingUnit = u;
  749. args.TriggingBuffTemplate = b.Data;
  750. TestAndDoAction(args);
  751. });
  752. zone.OnUnitGotBuff += handler;
  753. this.OnDisposed += (api) =>
  754. {
  755. zone.OnUnitGotBuff -= handler;
  756. };
  757. }
  758. public void listen_GenericUnitLostBuff(EventArguments args, InstanceZone zone)
  759. {
  760. args = args.Clone();
  761. InstanceZone.UnitLostBuffHandler handler = new InstanceZone.UnitLostBuffHandler((z, u, b) =>
  762. {
  763. args.TriggingUnit = u;
  764. args.TriggingBuffTemplate = b.Data;
  765. TestAndDoAction(args);
  766. });
  767. zone.OnUnitLostBuff += handler;
  768. this.OnDisposed += (api) =>
  769. {
  770. zone.OnUnitLostBuff -= handler;
  771. };
  772. }
  773. public void listen_GenericUnitQuestAccepted(EventArguments args, InstanceZone zone)
  774. {
  775. args = args.Clone();
  776. InstanceZone.QuestAcceptedHandler handler = new InstanceZone.QuestAcceptedHandler((u, q) =>
  777. {
  778. args.TriggingUnit = u;
  779. args.TriggingQuestID = q;
  780. TestAndDoAction(args);
  781. });
  782. zone.OnQuestAccepted += handler;
  783. this.OnDisposed += (api) =>
  784. {
  785. zone.OnQuestAccepted -= handler;
  786. };
  787. }
  788. public void listen_GenericUnitQuestCompleted(EventArguments args, InstanceZone zone)
  789. {
  790. args = args.Clone();
  791. InstanceZone.QuestCommittedHandler handler = new InstanceZone.QuestCommittedHandler((u, q) =>
  792. {
  793. args.TriggingUnit = u;
  794. args.TriggingQuestID = q;
  795. TestAndDoAction(args);
  796. });
  797. zone.OnQuestCommitted += handler;
  798. this.OnDisposed += (api) =>
  799. {
  800. zone.OnQuestCommitted -= handler;
  801. };
  802. }
  803. public void listen_GenericUnitQuestDropped(EventArguments args, InstanceZone zone)
  804. {
  805. args = args.Clone();
  806. InstanceZone.QuestDroppedHandler handler = new InstanceZone.QuestDroppedHandler((u, q) =>
  807. {
  808. args.TriggingUnit = u;
  809. args.TriggingQuestID = q;
  810. TestAndDoAction(args);
  811. });
  812. zone.OnQuestDropped += handler;
  813. this.OnDisposed += (api) =>
  814. {
  815. zone.OnQuestDropped -= handler;
  816. };
  817. }
  818. public void listen_GenericUnitQuestStatusChanged(EventArguments args, InstanceZone zone)
  819. {
  820. args = args.Clone();
  821. InstanceZone.QuestStatusChangedHandler handler = new InstanceZone.QuestStatusChangedHandler((u, q, k, v) =>
  822. {
  823. args.TriggingUnit = u;
  824. args.TriggingQuestID = q;
  825. TestAndDoAction(args);
  826. });
  827. zone.OnQuestStatusChanged += handler;
  828. this.OnDisposed += (api) =>
  829. {
  830. zone.OnQuestStatusChanged -= handler;
  831. };
  832. }
  833. public void listen_GenericUnitPickUnit(EventArguments args, InstanceZone zone)
  834. {
  835. args = args.Clone();
  836. InstanceZone.UnitPickUnitHandler handler = new InstanceZone.UnitPickUnitHandler((z, u, p) =>
  837. {
  838. args.TriggingUnit = u;
  839. TestAndDoAction(args);
  840. });
  841. zone.OnUnitPickUnit += handler;
  842. this.OnDisposed += (api) =>
  843. {
  844. zone.OnUnitPickUnit -= handler;
  845. };
  846. }
  847. public void listen_GenericUnitLaunchSkill(EventArguments args, InstanceZone zone)
  848. {
  849. args = args.Clone();
  850. InstanceZone.UnitLaunchSkillHandler handler = new InstanceZone.UnitLaunchSkillHandler((z, u, s) =>
  851. {
  852. args.TriggingUnit = u;
  853. args.TriggingSkillTemplate = s.Data;
  854. TestAndDoAction(args);
  855. });
  856. zone.OnUnitLaunchSkill += handler;
  857. this.OnDisposed += (api) =>
  858. {
  859. zone.OnUnitLaunchSkill -= handler;
  860. };
  861. }
  862. public void listen_GenericPlayerReady(EventArguments args, InstanceZone zone)
  863. {
  864. args = args.Clone();
  865. InstanceZone.PlayerReadyHandler handler = new InstanceZone.PlayerReadyHandler((p) =>
  866. {
  867. args.TriggingUnit = p;
  868. TestAndDoAction(args);
  869. });
  870. zone.OnPlayerReady += handler;
  871. this.OnDisposed += (api) =>
  872. {
  873. zone.OnPlayerReady -= handler;
  874. };
  875. }
  876. //////////////////////////////////////////////////////////////////////////////////////
  877. public void listen_PointUnitDead(EventArguments args, InstanceZone zone, string unitName, int UnitTemplateID = 0)
  878. {
  879. args = args.Clone();
  880. InstanceZone.UnitDeadHandler handler = new InstanceZone.UnitDeadHandler((z, u, attacker) =>
  881. {
  882. if (UnitTemplateID > 0)
  883. {
  884. if (u.Info.ID == UnitTemplateID)
  885. {
  886. args.TriggingUnit = u;
  887. TestAndDoAction(args);
  888. }
  889. }
  890. else
  891. {
  892. if (u.Name.Equals(unitName))
  893. {
  894. args.TriggingUnit = u;
  895. TestAndDoAction(args);
  896. }
  897. }
  898. });
  899. zone.OnUnitDead += handler;
  900. this.OnDisposed += (api) =>
  901. {
  902. zone.OnUnitDead -= handler;
  903. };
  904. }
  905. public void listen_PointUnitOutBattle(EventArguments args, InstanceZone zone, int unitID)
  906. {
  907. args = args.Clone();
  908. InstanceZone.UnitOutBattleHandler handler = new InstanceZone.UnitOutBattleHandler((z, u) =>
  909. {
  910. if (u.Info.ID == unitID)
  911. {
  912. args.TriggingUnit = u;
  913. TestAndDoAction(args);
  914. }
  915. });
  916. zone.OnUnitOutBattle += handler;
  917. this.OnDisposed += (api) =>
  918. {
  919. zone.OnUnitOutBattle -= handler;
  920. };
  921. }
  922. //////////////////////////////////////////////////////////////////////////////////////
  923. public void listen_SpecifyUnitActivated(EventArguments args, InstanceUnit unit)
  924. {
  925. args = args.Clone();
  926. InstanceUnit.ActivatedHandler handler = new InstanceUnit.ActivatedHandler((u) =>
  927. {
  928. args.TriggingUnit = u;
  929. TestAndDoAction(args);
  930. });
  931. unit.OnActivated += handler;
  932. this.OnDisposed += (api) =>
  933. {
  934. unit.OnActivated -= handler;
  935. };
  936. }
  937. public void listen_SpecifyUnitAttack(EventArguments args, InstanceUnit unit)
  938. {
  939. args = args.Clone();
  940. InstanceUnit.AttackHandler handler = new InstanceUnit.AttackHandler((u, t, hp, s) =>
  941. {
  942. args.TriggingUnit = u;
  943. args.TriggingSpell = s.FromSpellUnit;
  944. args.TriggingSkillTemplate = s.FromSkill;
  945. args.TriggingSpellTemplate = s.FromSpell;
  946. args.TriggingBuffTemplate = s.FromBuff;
  947. TestAndDoAction(args);
  948. });
  949. unit.OnAttack += handler;
  950. this.OnDisposed += (api) =>
  951. {
  952. unit.OnAttack -= handler;
  953. };
  954. }
  955. public void listen_PointUnitIDDamaged(EventArguments args, InstanceZone zone, int templateID)
  956. {
  957. args = args.Clone();
  958. InstanceZone.UnitDamageHandler handler = new InstanceZone.UnitDamageHandler((z, u, attacker, reduceHP, attack) =>
  959. {
  960. if (u.Info.ID == templateID)
  961. {
  962. args.TriggingUnit = u;
  963. args.AttackUnit = attacker;
  964. args.TriggingSpell = attack.FromSpellUnit;
  965. args.TriggingSkillTemplate = attack.FromSkill;
  966. args.TriggingSpellTemplate = attack.FromSpell;
  967. args.TriggingBuffTemplate = attack.FromBuff;
  968. TestAndDoAction(args);
  969. }
  970. });
  971. zone.OnUnitDamage += handler;
  972. this.OnDisposed += (api) =>
  973. {
  974. zone.OnUnitDamage -= handler;
  975. };
  976. }
  977. public void listen_SpecifyUnitDamaged(EventArguments args, InstanceUnit unit)
  978. {
  979. args = args.Clone();
  980. InstanceUnit.DamageHandler handler = new InstanceUnit.DamageHandler((u, a, hp, s) =>
  981. {
  982. args.TriggingUnit = u;
  983. args.TriggingSpell = s.FromSpellUnit;
  984. args.TriggingSkillTemplate = s.FromSkill;
  985. args.TriggingSpellTemplate = s.FromSpell;
  986. args.TriggingBuffTemplate = s.FromBuff;
  987. TestAndDoAction(args);
  988. });
  989. unit.OnDamage += handler;
  990. this.OnDisposed += (api) =>
  991. {
  992. unit.OnDamage -= handler;
  993. };
  994. }
  995. public void listen_SpecifyUnitDead(EventArguments args, InstanceUnit unit)
  996. {
  997. args = args.Clone();
  998. InstanceUnit.DeadHandler handler = new InstanceUnit.DeadHandler((u, a) =>
  999. {
  1000. args.TriggingUnit = u;
  1001. TestAndDoAction(args);
  1002. });
  1003. unit.OnDead += handler;
  1004. this.OnDisposed += (api) =>
  1005. {
  1006. unit.OnDead -= handler;
  1007. };
  1008. }
  1009. public void listen_SpecifyUnitRebirth(EventArguments args, InstanceUnit unit)
  1010. {
  1011. InstanceUnit.RebirthHandler handler = new InstanceUnit.RebirthHandler((u) =>
  1012. {
  1013. args.TriggingUnit = u;
  1014. TestAndDoAction(args);
  1015. });
  1016. unit.OnRebirth += handler;
  1017. this.OnDisposed += (api) =>
  1018. {
  1019. unit.OnRebirth -= handler;
  1020. };
  1021. }
  1022. public void listen_SpecifyUnitGotInstanceItem(EventArguments args, InstanceUnit unit)
  1023. {
  1024. args = args.Clone();
  1025. InstanceUnit.GotInstanceItemHandler handler = new InstanceUnit.GotInstanceItemHandler((u, i) =>
  1026. {
  1027. args.TriggingUnit = u;
  1028. args.TriggingItem = i;
  1029. args.TriggingItemTemplate = i.Info;
  1030. TestAndDoAction(args);
  1031. });
  1032. unit.OnGotInstanceItem += handler;
  1033. this.OnDisposed += (api) =>
  1034. {
  1035. unit.OnGotInstanceItem -= handler;
  1036. };
  1037. }
  1038. public void listen_SpecifyUnitGotInventoryItem(EventArguments args, InstanceUnit unit)
  1039. {
  1040. args = args.Clone();
  1041. InstanceUnit.GotInventoryItemHandler handler = new InstanceUnit.GotInventoryItemHandler((u, i) =>
  1042. {
  1043. args.TriggingUnit = u;
  1044. args.TriggingItemTemplate = i;
  1045. TestAndDoAction(args);
  1046. });
  1047. unit.OnGotInventoryItem += handler;
  1048. this.OnDisposed += (api) =>
  1049. {
  1050. unit.OnGotInventoryItem -= handler;
  1051. };
  1052. }
  1053. public void listen_SpecifyUnitLostInventoryItem(EventArguments args, InstanceUnit unit)
  1054. {
  1055. InstanceUnit.LostInventoryItemHandler handler = new InstanceUnit.LostInventoryItemHandler((u, i) =>
  1056. {
  1057. args.TriggingUnit = u;
  1058. args.TriggingItemTemplate = i;
  1059. TestAndDoAction(args);
  1060. });
  1061. unit.OnLostInventoryItem += handler;
  1062. this.OnDisposed += (api) =>
  1063. {
  1064. unit.OnLostInventoryItem -= handler;
  1065. };
  1066. }
  1067. public void listen_SpecifyUnitUseItem(EventArguments args, InstanceUnit unit)
  1068. {
  1069. args = args.Clone();
  1070. InstanceUnit.UseItemHandler handler = new InstanceUnit.UseItemHandler((u, i, c) =>
  1071. {
  1072. args.TriggingUnit = u;
  1073. args.TriggingItemTemplate = i;
  1074. TestAndDoAction(args);
  1075. });
  1076. unit.OnUseItem += handler;
  1077. this.OnDisposed += (api) =>
  1078. {
  1079. unit.OnUseItem -= handler;
  1080. };
  1081. }
  1082. public void listen_SpecifyUnitGotBuff(EventArguments args, InstanceUnit unit)
  1083. {
  1084. args = args.Clone();
  1085. InstanceUnit.GotBuffHandler handler = new InstanceUnit.GotBuffHandler((u, b) =>
  1086. {
  1087. args.TriggingUnit = u;
  1088. args.TriggingBuffTemplate = b.Data;
  1089. TestAndDoAction(args);
  1090. });
  1091. unit.OnGotBuff += handler;
  1092. this.OnDisposed += (api) =>
  1093. {
  1094. unit.OnGotBuff -= handler;
  1095. };
  1096. }
  1097. public void listen_SpecifyUnitLostBuff(EventArguments args, InstanceUnit unit)
  1098. {
  1099. args = args.Clone();
  1100. InstanceUnit.LostBuffHandler handler = new InstanceUnit.LostBuffHandler((u, b) =>
  1101. {
  1102. args.TriggingUnit = u;
  1103. args.TriggingBuffTemplate = b.Data;
  1104. TestAndDoAction(args);
  1105. });
  1106. unit.OnLostBuff += handler;
  1107. this.OnDisposed += (api) =>
  1108. {
  1109. unit.OnLostBuff -= handler;
  1110. };
  1111. }
  1112. public void listen_SpecifyUnitLaunchSkill(EventArguments args, InstanceUnit unit)
  1113. {
  1114. args = args.Clone();
  1115. InstanceUnit.OnLaunchSkillHandler handler = new InstanceUnit.OnLaunchSkillHandler((u, s) =>
  1116. {
  1117. args.TriggingUnit = u;
  1118. args.TriggingSkillTemplate = s.Data;
  1119. TestAndDoAction(args);
  1120. });
  1121. unit.OnLaunchSkill += handler;
  1122. this.OnDisposed += (api) =>
  1123. {
  1124. unit.OnLaunchSkill -= handler;
  1125. };
  1126. }
  1127. #endregion
  1128. //-----------------------------------------------------------------------------------------------
  1129. #region __监听_触发器事件__
  1130. public void listen_EventActionBegin(EventArguments args, EventTriggerAdapter adapter)
  1131. {
  1132. args = args.Clone();
  1133. OnActionBeginHandler handler = new OnActionBeginHandler((a, g) =>
  1134. {
  1135. TestAndDoAction(g);
  1136. });
  1137. adapter.OnActionBegin += handler;
  1138. this.OnDisposed += (api) =>
  1139. {
  1140. adapter.OnActionBegin -= handler;
  1141. };
  1142. }
  1143. public void listen_EventActionEnd(EventArguments args, EventTriggerAdapter adapter)
  1144. {
  1145. args = args.Clone();
  1146. OnActionEndHandler handler = new OnActionEndHandler((a, g) =>
  1147. {
  1148. TestAndDoAction(g);
  1149. });
  1150. adapter.OnActionEnd += handler;
  1151. this.OnDisposed += (api) =>
  1152. {
  1153. adapter.OnActionEnd -= handler;
  1154. };
  1155. }
  1156. public void listen_EventActionActive(EventArguments args, EventTriggerAdapter adapter)
  1157. {
  1158. args = args.Clone();
  1159. OnActionActiveHandler handler = new OnActionActiveHandler((a, g) =>
  1160. {
  1161. TestAndDoAction(g);
  1162. });
  1163. adapter.mOnActionActive += handler;
  1164. this.OnDisposed += (api) =>
  1165. {
  1166. adapter.mOnActionActive -= handler;
  1167. };
  1168. }
  1169. #endregion
  1170. //-----------------------------------------------------------------------------------------------
  1171. #region Delegates
  1172. public delegate void OnActionBeginHandler(EventTriggerAdapter trigger, EventArguments args);
  1173. public delegate void OnActionEndHandler(EventTriggerAdapter trigger, EventArguments args);
  1174. public delegate void OnActionActiveHandler(EventTriggerAdapter trigger, EventArguments args);
  1175. public delegate void OnDisposedHandler(EventTriggerAdapter trigger);
  1176. private OnActionBeginHandler mOnActionBegin;
  1177. private OnActionEndHandler mOnActionEnd;
  1178. private OnActionActiveHandler mOnActionActive;
  1179. private OnDisposedHandler mOnDisposed;
  1180. public event OnActionBeginHandler OnActionBegin { add { mOnActionBegin += value; } remove { mOnActionBegin -= value; } }
  1181. public event OnActionEndHandler OnActionEnd { add { mOnActionEnd += value; } remove { mOnActionEnd -= value; } }
  1182. public event OnActionActiveHandler OnActionActive { add { mOnActionActive += value; } remove { mOnActionActive -= value; } }
  1183. public event OnDisposedHandler OnDisposed { add { mOnDisposed += value; } remove { mOnDisposed -= value; } }
  1184. #endregion
  1185. //-----------------------------------------------------------------------------------------------
  1186. }
  1187. //---------------------------------------------------------------------------------
  1188. /// <summary>
  1189. /// 绑定环境变量用的数据接口
  1190. /// </summary>
  1191. public class BindValuesAdapter : IEditorValueAdapter
  1192. {
  1193. private IEventTriggerCollection mGroup;
  1194. private InstanceZone mZoneAPI;
  1195. private InstanceUnit mUnitAPI;
  1196. public BindValuesAdapter(EditorScene scene, IEventTriggerCollection group)
  1197. {
  1198. this.IsActive = true;
  1199. this.mGroup = group;
  1200. this.mZoneAPI = scene;
  1201. this.mUnitAPI = null;
  1202. }
  1203. public override void Dispose()
  1204. {
  1205. this.mGroup = null;
  1206. this.mZoneAPI = null;
  1207. this.mUnitAPI = null;
  1208. base.Dispose();
  1209. }
  1210. public override bool IsActive { get; set; }
  1211. public override TemplateManager Templates { get { return mZoneAPI.Templates; } }
  1212. public override IEventTriggerCollection Group { get { return mGroup; } }
  1213. public override InstanceZone ZoneAPI { get { return mZoneAPI; } }
  1214. public override InstanceUnit UnitAPI { get { return mUnitAPI; } }
  1215. }
  1216. //---------------------------------------------------------------------------------
  1217. public class ZoneEventTriggerCollection : IEventTriggerCollection
  1218. {
  1219. private EditorScene mScene;
  1220. private HashMap<string, EventTriggerAdapter> mEvents = new HashMap<string, EventTriggerAdapter>();
  1221. public ZoneEventTriggerCollection(EditorScene scene)
  1222. {
  1223. this.mScene = scene;
  1224. }
  1225. public void Dispose()
  1226. {
  1227. foreach (EventTriggerAdapter trigger in mEvents.Values)
  1228. {
  1229. trigger.Dispose();
  1230. }
  1231. mEvents.Clear();
  1232. mEvents = null;
  1233. mScene = null;
  1234. }
  1235. public void Bind<T>(ICollection<T> events) where T : IEventDataNode
  1236. {
  1237. foreach (IEventDataNode e in events)
  1238. {
  1239. ZoneEventTrigger trigger = new ZoneEventTrigger(mScene, e, this);
  1240. mEvents.Put(e.EventName, trigger);
  1241. }
  1242. foreach (EventTriggerAdapter trigger in mEvents.Values)
  1243. {
  1244. trigger.Start();
  1245. }
  1246. }
  1247. public EventTriggerAdapter GetEditEvent(string name)
  1248. {
  1249. if (name == null) { return null; }
  1250. return mEvents.Get(name);
  1251. }
  1252. public void EventActive(string name, EventArguments args)
  1253. {
  1254. EventTriggerAdapter apt = this.GetEditEvent(name);
  1255. if (apt != null)
  1256. {
  1257. apt.IsActive = true;
  1258. apt.ProcessActionActive(args);
  1259. }
  1260. }
  1261. public void EventDeactive(string name, EventArguments args)
  1262. {
  1263. EventTriggerAdapter apt = this.GetEditEvent(name);
  1264. if (apt != null)
  1265. {
  1266. apt.IsActive = false;
  1267. }
  1268. }
  1269. public class ZoneEventTrigger : EventTriggerAdapter
  1270. {
  1271. private readonly EditorScene mScene;
  1272. public override InstanceZone ZoneAPI { get { return mScene; } }
  1273. public override InstanceUnit UnitAPI { get { return null; } }
  1274. public ZoneEventTrigger(EditorScene scene, IEventDataNode evt, ZoneEventTriggerCollection group)
  1275. : base(evt, group)
  1276. {
  1277. mScene = scene;
  1278. }
  1279. }
  1280. }
  1281. public class UnitEventTriggerCollection : IEventTriggerCollection
  1282. {
  1283. private InstanceUnit mUnit;
  1284. private HashMap<string, EventTriggerAdapter> mEvents = new HashMap<string, EventTriggerAdapter>();
  1285. public UnitEventTriggerCollection(InstanceUnit unit)
  1286. {
  1287. this.mUnit = unit;
  1288. }
  1289. public void Dispose()
  1290. {
  1291. foreach (EventTriggerAdapter trigger in mEvents.Values)
  1292. {
  1293. trigger.Dispose();
  1294. }
  1295. mEvents.Clear();
  1296. mEvents = null;
  1297. mUnit = null;
  1298. }
  1299. public void Bind<T>(ICollection<T> events) where T : IEventDataNode
  1300. {
  1301. foreach (IEventDataNode e in events)
  1302. {
  1303. UnitEventTrigger trigger = new UnitEventTrigger(mUnit, e, this);
  1304. mEvents.Put(e.EventName, trigger);
  1305. }
  1306. foreach (EventTriggerAdapter trigger in mEvents.Values)
  1307. {
  1308. trigger.Start();
  1309. }
  1310. }
  1311. public EventTriggerAdapter GetEditEvent(string name)
  1312. {
  1313. if (name == null) { return null; }
  1314. return mEvents.Get(name);
  1315. }
  1316. public void EventActive(string name, EventArguments args)
  1317. {
  1318. EventTriggerAdapter apt = this.GetEditEvent(name);
  1319. if (apt != null)
  1320. {
  1321. apt.IsActive = true;
  1322. }
  1323. }
  1324. public void EventDeactive(string name, EventArguments args)
  1325. {
  1326. EventTriggerAdapter apt = this.GetEditEvent(name);
  1327. if (apt != null)
  1328. {
  1329. apt.IsActive = false;
  1330. }
  1331. }
  1332. public class UnitEventTrigger : EventTriggerAdapter
  1333. {
  1334. private readonly InstanceZone mScene;
  1335. private readonly InstanceUnit mUnit;
  1336. public override InstanceZone ZoneAPI { get { return mScene; } }
  1337. public override InstanceUnit UnitAPI { get { return mUnit; } }
  1338. public UnitEventTrigger(InstanceUnit unit, IEventDataNode evt, UnitEventTriggerCollection group)
  1339. : base(evt, group)
  1340. {
  1341. mUnit = unit;
  1342. mScene = unit.Parent;
  1343. }
  1344. }
  1345. }
  1346. //---------------------------------------------------------------------------------
  1347. }