Values.Boolean.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using CommonLang.Property;
  5. using CommonAI.Zone.Attributes;
  6. using CommonAI.Zone.ZoneEditor;
  7. using CommonLang.Formula;
  8. using CommonAI.Zone.Instance;
  9. using CommonAI.RTS; using CommonLang.Vector;
  10. using CommonLang;
  11. using CommonAI.Zone.EventTrigger;
  12. namespace CommonAI.Zone.ZoneEditor.EventTrigger
  13. {
  14. [DescAttribute("布尔型")]
  15. public abstract class BooleanValue : AbstractValue<Boolean>
  16. {
  17. [DescAttribute("值", "值")]
  18. public class VALUE : BooleanValue
  19. {
  20. [DescAttribute("值")]
  21. public bool Value;
  22. public VALUE() { this.Value = true; }
  23. public VALUE(bool value) { this.Value = value; }
  24. public override string ToString()
  25. {
  26. return Value + "";
  27. }
  28. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  29. {
  30. return Value;
  31. }
  32. }
  33. [DescAttribute("百分比几率", "几率")]
  34. public class RandomPercent : BooleanValue
  35. {
  36. [DescAttribute("百分比几率")]
  37. public RealValue Percent = new RealValue.VALUE(50);
  38. public override string ToString()
  39. {
  40. return string.Format("{0}%几率", Percent);
  41. }
  42. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  43. {
  44. float pct = Percent.GetValue(api, args);
  45. if (pct > 0)
  46. {
  47. return CUtils.RandomPercent(api.ZoneAPI.RandomN, pct);
  48. }
  49. return false;
  50. }
  51. }
  52. [DescAttribute("布尔运算", "比较")]
  53. public class BooleanOperator : BooleanValue
  54. {
  55. [DescAttribute("值1")]
  56. public BooleanValue Condition1 = new VALUE();
  57. [DescAttribute("运算符")]
  58. public BooleanOP Op = BooleanOP.EQUAL;
  59. [DescAttribute("值2")]
  60. public BooleanValue Condition2 = new VALUE();
  61. public override string ToString()
  62. {
  63. return string.Format("({0}){1}({2})", Condition1, FormulaHelper.ToString(Op), Condition2);
  64. }
  65. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  66. {
  67. Boolean c1 = Condition1.GetValue(api, args);
  68. Boolean c2 = Condition2.GetValue(api, args);
  69. return FormulaHelper.Calculate(c1, Op, c2);
  70. }
  71. }
  72. [DescAttribute("布尔比较", "比较")]
  73. public class BooleanComparison : BooleanValue
  74. {
  75. [DescAttribute("值1")]
  76. public BooleanValue Condition1 = new VALUE();
  77. [DescAttribute("比较符")]
  78. public ObjectComparisonOP Op = ObjectComparisonOP.EQUAL;
  79. [DescAttribute("值2")]
  80. public BooleanValue Condition2 = new VALUE();
  81. public override string ToString()
  82. {
  83. return string.Format("({0}){1}({2})", Condition1, FormulaHelper.ToString(Op), Condition2);
  84. }
  85. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  86. {
  87. Boolean c1 = Condition1.GetValue(api, args);
  88. Boolean c2 = Condition2.GetValue(api, args);
  89. return FormulaHelper.Compare(c1, Op, c2);
  90. }
  91. }
  92. [DescAttribute("字符串比较", "比较")]
  93. public class StringComparison : BooleanValue
  94. {
  95. [DescAttribute("字符串1")]
  96. public StringValue String1 = new StringValue.VALUE();
  97. [DescAttribute("比较符")]
  98. public ObjectComparisonOP Op = ObjectComparisonOP.EQUAL;
  99. [DescAttribute("字符串2")]
  100. public StringValue String2 = new StringValue.VALUE();
  101. public override string ToString()
  102. {
  103. return string.Format("({0}){1}({2})", String1, FormulaHelper.ToString(Op), String2);
  104. }
  105. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  106. {
  107. string c1 = String1.GetValue(api, args);
  108. string c2 = String2.GetValue(api, args);
  109. return FormulaHelper.Compare(c1, Op, c2);
  110. }
  111. }
  112. [DescAttribute("字符串是否包含", "比较")]
  113. public class StringContains : BooleanValue
  114. {
  115. [DescAttribute("字符串")]
  116. public StringValue String = new StringValue.VALUE();
  117. [DescAttribute("子字符串")]
  118. public StringValue SubString = new StringValue.VALUE();
  119. public override string ToString()
  120. {
  121. return string.Format("({0}).Contains({1})", String, SubString);
  122. }
  123. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  124. {
  125. string c1 = String.GetValue(api, args);
  126. string c2 = SubString.GetValue(api, args);
  127. return c1.Contains(c2);
  128. }
  129. }
  130. [DescAttribute("字符串前缀比较", "比较")]
  131. public class StringStartsWith : BooleanValue
  132. {
  133. [DescAttribute("字符串")]
  134. public StringValue String = new StringValue.VALUE();
  135. [DescAttribute("前缀")]
  136. public StringValue Prefix = new StringValue.VALUE();
  137. public override string ToString()
  138. {
  139. return string.Format("({0}).StartsWith({1})", String, Prefix);
  140. }
  141. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  142. {
  143. string c1 = String.GetValue(api, args);
  144. string c2 = Prefix.GetValue(api, args);
  145. return c1.StartsWith(c2);
  146. }
  147. }
  148. [DescAttribute("字符串后缀比较", "比较")]
  149. public class StringEndsWith : BooleanValue
  150. {
  151. [DescAttribute("字符串")]
  152. public StringValue String = new StringValue.VALUE();
  153. [DescAttribute("后缀")]
  154. public StringValue Suffix = new StringValue.VALUE();
  155. public override string ToString()
  156. {
  157. return string.Format("({0}).EndsWith({1})", String, Suffix);
  158. }
  159. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  160. {
  161. string c1 = String.GetValue(api, args);
  162. string c2 = Suffix.GetValue(api, args);
  163. return c1.EndsWith(c2);
  164. }
  165. }
  166. [DescAttribute("小数比较", "比较")]
  167. public class RealComparison : BooleanValue
  168. {
  169. [DescAttribute("值1")]
  170. public RealValue Value1 = new RealValue.VALUE();
  171. [DescAttribute("比较符")]
  172. public NumericComparisonOP Op = NumericComparisonOP.EQUAL;
  173. [DescAttribute("值2")]
  174. public RealValue Value2 = new RealValue.VALUE();
  175. public override string ToString()
  176. {
  177. return string.Format("({0}){1}({2})", Value1, FormulaHelper.ToString(Op), Value2);
  178. }
  179. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  180. {
  181. Single c1 = Value1.GetValue(api, args);
  182. Single c2 = Value2.GetValue(api, args);
  183. return FormulaHelper.Compare(c1, Op, c2);
  184. }
  185. }
  186. [DescAttribute("整数比较", "比较")]
  187. public class IntegerComparison : BooleanValue
  188. {
  189. [DescAttribute("值1")]
  190. public IntegerValue Value1 = new IntegerValue.VALUE();
  191. [DescAttribute("比较符")]
  192. public NumericComparisonOP Op = NumericComparisonOP.EQUAL;
  193. [DescAttribute("值2")]
  194. public IntegerValue Value2 = new IntegerValue.VALUE();
  195. public override string ToString()
  196. {
  197. return string.Format("({0}){1}({2})", Value1, FormulaHelper.ToString(Op), Value2);
  198. }
  199. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  200. {
  201. Int32 c1 = Value1.GetValue(api, args);
  202. Int32 c2 = Value2.GetValue(api, args);
  203. return FormulaHelper.Compare(c1, Op, c2);
  204. }
  205. }
  206. [DescAttribute("单位比较", "比较")]
  207. public class UnitComparison : BooleanValue
  208. {
  209. [DescAttribute("单位1")]
  210. public UnitValue Value1 = new UnitValue.NA();
  211. [DescAttribute("比较符")]
  212. public ObjectComparisonOP Op = ObjectComparisonOP.EQUAL;
  213. [DescAttribute("单位2")]
  214. public UnitValue Value2 = new UnitValue.NA();
  215. public override string ToString()
  216. {
  217. return string.Format("({0}){1}({2})", Value1, FormulaHelper.ToString(Op), Value2);
  218. }
  219. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  220. {
  221. InstanceUnit c1 = Value1.GetValue(api, args);
  222. InstanceUnit c2 = Value2.GetValue(api, args);
  223. return FormulaHelper.Compare(c1, Op, c2);
  224. }
  225. }
  226. [DescAttribute("物品比较", "比较")]
  227. public class ItemComparison : BooleanValue
  228. {
  229. [DescAttribute("物品1")]
  230. public ItemValue Value1 = new ItemValue.NA();
  231. [DescAttribute("比较符")]
  232. public ObjectComparisonOP Op = ObjectComparisonOP.EQUAL;
  233. [DescAttribute("物品2")]
  234. public ItemValue Value2 = new ItemValue.NA();
  235. public override string ToString()
  236. {
  237. return string.Format("({0}){1}({2})", Value1, FormulaHelper.ToString(Op), Value2);
  238. }
  239. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  240. {
  241. InstanceItem c1 = Value1.GetValue(api, args);
  242. InstanceItem c2 = Value2.GetValue(api, args);
  243. return FormulaHelper.Compare(c1, Op, c2);
  244. }
  245. }
  246. [DescAttribute("Flag比较", "比较")]
  247. public class FlagComparison : BooleanValue
  248. {
  249. [DescAttribute("Flag1")]
  250. public FlagValue Value1 = new FlagValue.NA();
  251. [DescAttribute("比较符")]
  252. public ObjectComparisonOP Op = ObjectComparisonOP.EQUAL;
  253. [DescAttribute("Flag2")]
  254. public FlagValue Value2 = new FlagValue.NA();
  255. public override string ToString()
  256. {
  257. return string.Format("({0}){1}({2})", Value1, FormulaHelper.ToString(Op), Value2);
  258. }
  259. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  260. {
  261. InstanceFlag c1 = Value1.GetValue(api, args);
  262. InstanceFlag c2 = Value2.GetValue(api, args);
  263. return FormulaHelper.Compare(c1, Op, c2);
  264. }
  265. }
  266. [DescAttribute("Flag是否开启", "Flag状态")]
  267. public class FlagEnabled : BooleanValue
  268. {
  269. [DescAttribute("Flag")]
  270. public FlagValue Flag = new FlagValue.NA();
  271. public override string ToString()
  272. {
  273. return string.Format("({0}).Enable", Flag);
  274. }
  275. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  276. {
  277. InstanceFlag flag = Flag.GetValue(api, args);
  278. if (flag != null)
  279. {
  280. return flag.Enable;
  281. }
  282. return false;
  283. }
  284. }
  285. [DescAttribute("区域刷新点是否刷新完毕", "Flag状态")]
  286. public class FlagIsSpawnOver : BooleanValue
  287. {
  288. [DescAttribute("区域")]
  289. public FlagValue Region = new FlagValue.EditorRegion();
  290. public override string ToString()
  291. {
  292. return string.Format("({0})刷新完毕", Region);
  293. }
  294. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  295. {
  296. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  297. if (region != null)
  298. {
  299. return region.IsSpawnOver;
  300. }
  301. return false;
  302. }
  303. }
  304. [DescAttribute("区域刷新点是否没有存活单位", "Flag状态")]
  305. public class FlagIsSpawnNoneAlive : BooleanValue
  306. {
  307. [DescAttribute("区域")]
  308. public FlagValue Region = new FlagValue.EditorRegion();
  309. public override string ToString()
  310. {
  311. return string.Format("({0})没有存活单位", Region);
  312. }
  313. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  314. {
  315. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  316. if (region != null)
  317. {
  318. return region.IsSpawnNoneAlive;
  319. }
  320. return false;
  321. }
  322. }
  323. [DescAttribute("场景用户自定义属性", "场景")]
  324. public class ZoneBooleanAttribute : BooleanValue
  325. {
  326. [DescAttribute("键值")]
  327. public string Key;
  328. public override string ToString()
  329. {
  330. return string.Format("场景键值[{0}]", Key);
  331. }
  332. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  333. {
  334. try
  335. {
  336. return Boolean.Parse(api.ZoneAPI.GetAttribute(Key) as string);
  337. }
  338. catch (Exception err)
  339. {
  340. Console.WriteLine("ZoneBooleanAttribute : " + Key + ", catch: " + err);
  341. }
  342. return false;
  343. }
  344. }
  345. #region __UNIT__
  346. [DescAttribute("单位用户自定义属性", "单位")]
  347. public class UnitBooleanAttribute : BooleanValue
  348. {
  349. [DescAttribute("单位")]
  350. public UnitValue Unit = new UnitValue.Trigging();
  351. [DescAttribute("键值")]
  352. public string Key;
  353. public override string ToString()
  354. {
  355. return string.Format("单位({0})键值[{1}]", Unit, Key);
  356. }
  357. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  358. {
  359. InstanceUnit unit = Unit.GetValue(api, args);
  360. if (unit != null)
  361. {
  362. try
  363. {
  364. return Boolean.Parse(unit.GetAttribute(Key) as string);
  365. }
  366. catch (Exception err)
  367. {
  368. Console.WriteLine("UnitBooleanAttribute : " + Key + ", catch: " + err);
  369. }
  370. }
  371. return false;
  372. }
  373. }
  374. [DescAttribute("单位存活", "单位")]
  375. public class UnitIsAlived : BooleanValue
  376. {
  377. [DescAttribute("单位")]
  378. public UnitValue Unit = new UnitValue.Trigging();
  379. public override string ToString()
  380. {
  381. return string.Format("单位({0})活着", Unit);
  382. }
  383. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  384. {
  385. InstanceUnit unit = Unit.GetValue(api, args);
  386. if (unit != null)
  387. {
  388. return !unit.IsDead();
  389. }
  390. return false;
  391. }
  392. }
  393. [DescAttribute("单位是否在区域", "单位")]
  394. public class UnitIsInArea : BooleanValue
  395. {
  396. [DescAttribute("单位")]
  397. public UnitValue Unit = new UnitValue.Trigging();
  398. [DescAttribute("区域")]
  399. public FlagValue.EditorRegion Region = new FlagValue.EditorRegion();
  400. public override string ToString()
  401. {
  402. return string.Format("单位({0})在区域({1})", Unit, Region);
  403. }
  404. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  405. {
  406. InstanceUnit unit = Unit.GetValue(api, args);
  407. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  408. if (unit != null && region != null)
  409. {
  410. bool isIn = region.IsUnitInRegion(unit);
  411. //Console.WriteLine("IsInRegin : " + isIn + ", " + region.Name);
  412. return isIn;
  413. }
  414. return false;
  415. }
  416. }
  417. [DescAttribute("单位死亡", "单位")]
  418. public class UnitIsDead : BooleanValue
  419. {
  420. [DescAttribute("单位")]
  421. public UnitValue Unit = new UnitValue.Trigging();
  422. public override string ToString()
  423. {
  424. return string.Format("单位({0})死亡", Unit);
  425. }
  426. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  427. {
  428. InstanceUnit unit = Unit.GetValue(api, args);
  429. if (unit != null)
  430. {
  431. return unit.IsDead();
  432. }
  433. //不存在则认为死亡
  434. return true;
  435. }
  436. }
  437. [DescAttribute("单位存在", "单位")]
  438. public class UnitExist : BooleanValue
  439. {
  440. [DescAttribute("单位")]
  441. public UnitValue Unit = new UnitValue.Trigging();
  442. public override string ToString()
  443. {
  444. return string.Format("单位({0})存在", Unit);
  445. }
  446. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  447. {
  448. InstanceUnit unit = Unit.GetValue(api, args);
  449. return (unit != null);
  450. }
  451. }
  452. [DescAttribute("单位是否拥有道具", "单位")]
  453. public class UnitHasInventoryItem : BooleanValue
  454. {
  455. [DescAttribute("单位")]
  456. public UnitValue Unit = new UnitValue.Trigging();
  457. [DescAttribute("物品ID")]
  458. public ItemTemplateValue Item = new ItemTemplateValue.Template();
  459. public override string ToString()
  460. {
  461. return string.Format("单位({0})是否拥有道具{1}", Unit, Item);
  462. }
  463. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  464. {
  465. InstanceUnit unit = Unit.GetValue(api, args);
  466. ItemTemplate temp = Item.GetValue(api, args);
  467. if (unit != null && temp != null)
  468. {
  469. return unit.ContainsItemInInventory(temp.ID);
  470. }
  471. return false;
  472. }
  473. }
  474. [DescAttribute("玩家是否自动战斗", "玩家")]
  475. public class PlayerIsGuard : BooleanValue
  476. {
  477. [DescAttribute("玩家单位")]
  478. public UnitValue Unit = new UnitValue.Trigging();
  479. public override string ToString()
  480. {
  481. return string.Format("玩家单位({0})是否自动战斗", Unit);
  482. }
  483. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  484. {
  485. InstanceUnit unit = Unit.GetValue(api, args);
  486. if (unit is InstancePlayer)
  487. {
  488. return (unit as InstancePlayer).IsGuard;
  489. }
  490. return false;
  491. }
  492. }
  493. #endregion
  494. #region __TRIGGER__
  495. [DescAttribute("当前触发器是否已开启", "触发器")]
  496. public class CurrentEventTriggerIsActive : BooleanValue
  497. {
  498. public override string ToString()
  499. {
  500. return string.Format("当前触发器是否已开启");
  501. }
  502. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  503. {
  504. return api.IsActive;
  505. }
  506. }
  507. [DescAttribute("指定触发器是否已开启", "触发器")]
  508. public class SpecifyEventTriggerIsActive : BooleanValue
  509. {
  510. [DescAttribute("事件触发器名字")]
  511. [SceneEventIDAttribute]
  512. public string EventName;
  513. public override string ToString()
  514. {
  515. return string.Format("触发器:({0})是否已开启", EventName);
  516. }
  517. public override Boolean GetValue(IEditorValueAdapter api, EventArguments args)
  518. {
  519. EventTriggerAdapter evt = api.Group.GetEditEvent(EventName);
  520. if (evt != null)
  521. {
  522. return evt.IsActive;
  523. }
  524. return false;
  525. }
  526. }
  527. #endregion
  528. }
  529. }