CombatMagicWeaponEntity.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using Animancer;
  2. using Common.Utility.CombatEvent;
  3. using Excel2Json;
  4. using Fort23.Core;
  5. using Fort23.UTool;
  6. using GameLogic.Combat.Buff;
  7. using GameLogic.Combat.Hero.State;
  8. using UnityEngine;
  9. using UnityEngine.AI;
  10. namespace GameLogic.Combat.Hero
  11. {
  12. /// <summary>
  13. /// 法宝对象
  14. /// </summary>
  15. public class CombatMagicWeaponEntity : CombatHeroEntity
  16. {
  17. /// <summary>
  18. /// 碰撞的target
  19. /// </summary>
  20. public CombatMagicWeaponEntity CollidingTarget;
  21. protected MagicWeaponConfig _magicWeaponConfig;
  22. public float cd = 10;
  23. /// <summary>
  24. /// 是否进入战斗状态
  25. /// </summary>
  26. public bool isCombatState;
  27. private MagicWeaponControl _magicWeaponControl;
  28. public MagicWeaponControl MagicWeaponControl
  29. {
  30. get { return _magicWeaponControl; }
  31. }
  32. public async CTask<CombatMagicWeaponEntity> Init(MagicWeaponControl magicWeaponControl,
  33. MagicWeaponConfig magicWeaponConfig,
  34. System.Action<CombatMagicWeaponEntity> callBack = null)
  35. {
  36. this._magicWeaponControl = magicWeaponControl;
  37. string modelName = magicWeaponConfig.model;
  38. // GameTimeLineParticleFactory
  39. CombatHeroGameObjectPool poolInterface =
  40. await GObjectPool.Instance.FetchAsync<CombatHeroGameObjectPool>(modelName + ".prefab", null);
  41. #if !COMBAT_SERVER
  42. if (poolInterface == null || poolInterface.own == null)
  43. {
  44. return null;
  45. }
  46. poolInterface.own.transform.position = Vector3.one;
  47. poolInterface.own.SetActive(false);
  48. combatHeroTimeLineControl = new CombatHeroTimeLineControl();
  49. combatHeroTimeLineControl.Init(this);
  50. AssetHandle assetHandle =
  51. await AssetBundleLoadManager.Instance.LoadAssetAsyncTask<TextAsset>(
  52. modelName + "_TD.txt");
  53. if (assetHandle != null)
  54. {
  55. TextAsset textAsset = assetHandle.AssetObject<TextAsset>();
  56. TimeLienData timeLienData = JsonManager.FromJson<TimeLienData>(textAsset.text);
  57. timeLienData.DeserializeData();
  58. assetHandle.Release();
  59. combatHeroTimeLineControl.AddTimeLienData(timeLienData);
  60. }
  61. combatHeroGameObject = new CombatHeroGameObject();
  62. combatHeroGameObject.Init(this, poolInterface);
  63. if (CombatAIBasic == null)
  64. {
  65. CombatAIBasic = new MagicWeaponAi();
  66. }
  67. HeroEntityMono heroEntityMono = poolInterface.own.GetComponent<HeroEntityMono>();
  68. if (heroEntityMono == null)
  69. {
  70. heroEntityMono = poolInterface.own.AddComponent<HeroEntityMono>();
  71. }
  72. heroEntityMono.combatHeroEntity = this;
  73. CombatAIBasic.Init(this);
  74. AnimancerComponent animancerComponent = poolInterface.own.GetComponent<AnimancerComponent>();
  75. combatHeroAnimtion = new CombatHeroAnimtion();
  76. poolInterface.own.SetActive(true);
  77. combatHeroAnimtion.Init(this);
  78. CombatAIBasic.ChangeState(CombatHeroStateType.XiuMian);
  79. #endif
  80. callBack?.Invoke(this);
  81. return this;
  82. }
  83. public override void Update(float t)
  84. {
  85. combatHeroTimeLineControl.Update(t);
  86. CombatAIBasic?.Update(t);
  87. if (CombatAIBasic.CurrState.GetType() == typeof(MagicWeapomDormancyState))
  88. {
  89. cd -= t;
  90. if (cd <= 0)
  91. {
  92. _magicWeaponControl.UseMagicWeapon(this);
  93. }
  94. }
  95. }
  96. }
  97. }