CombatHeroEntity.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using Animancer;
  4. using Fort23.Core;
  5. using Fort23.UTool;
  6. using GameLogic.Combat.Hero;
  7. using UnityEngine;
  8. using UnityEngine.AI;
  9. using UnityEngine.Rendering;
  10. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  11. public class CombatHeroEntity : ITimeLineSpecialDotPos, ILifeCycle, ITimeLineAnimtion
  12. {
  13. public bool IsEnemy;
  14. public CombatAIBasic CombatAIBasic;
  15. public CombatHeroGameObject combatHeroGameObject;
  16. public CombatHeroInfo CurrCombatHeroInfo;
  17. public CombatHeroInfo MaxCombatHeroInfo;
  18. public CombatHeroTimeLineControl combatHeroTimeLineControl;
  19. public CombatHeroAnimtion combatHeroAnimtion;
  20. public Vector3 dotPos
  21. {
  22. get { return combatHeroGameObject.position; }
  23. }
  24. public Vector3 faceDir { get; }
  25. public async CTask<CombatHeroEntity> Init(CombatAIBasic combatAIBasic, CombatHeroInfo combatHeroInfo,
  26. System.Action<CombatHeroEntity> callBack = null)
  27. {
  28. //后面记到检查战斗里面不要出现异步加载,也不要出现同步IO加载
  29. GameObjectPool poolInterface =
  30. await GObjectPool.Instance.FetchAsync<GameObjectPool>(combatHeroInfo.modelName + ".prefab", null);
  31. #if !COMBAT_SERVER
  32. if (poolInterface == null || poolInterface.own == null)
  33. {
  34. return null;
  35. }
  36. combatHeroTimeLineControl = new CombatHeroTimeLineControl();
  37. combatHeroGameObject = new CombatHeroGameObject();
  38. combatHeroGameObject.Init(this, poolInterface);
  39. NavMeshAgent navMeshAgent = poolInterface.own.GetComponent<NavMeshAgent>();
  40. if (combatAIBasic == null)
  41. {
  42. combatAIBasic = new CombatAIBasic();
  43. }
  44. combatAIBasic.Init(this, navMeshAgent);
  45. CombatAIBasic = combatAIBasic;
  46. CurrCombatHeroInfo = combatHeroInfo.Copy();
  47. MaxCombatHeroInfo = combatHeroInfo.Copy();
  48. AnimancerComponent animancerComponent = poolInterface.own.GetComponent<AnimancerComponent>();
  49. combatHeroAnimtion = new CombatHeroAnimtion();
  50. combatHeroAnimtion.Init(animancerComponent);
  51. CombatAIBasic.ChangeState(CombatHeroStateType.idle);
  52. callBack?.Invoke(this);
  53. #endif
  54. return this;
  55. }
  56. public void Update(float t)
  57. {
  58. CombatAIBasic.Update(t);
  59. combatHeroTimeLineControl.Update(t);
  60. }
  61. public T This<T>()
  62. {
  63. return (T)(object)this;
  64. }
  65. public T GetILifetCycleHitPoint<T>(string hitPoinName, bool isStandType, bool isIgnoreHind)
  66. where T : ILifetCycleHitPoint
  67. {
  68. return combatHeroGameObject.GetILifetCycleHitPoint<T>(hitPoinName, isStandType, isIgnoreHind);
  69. }
  70. public T GetMainHotPoin<T>(bool isIgnoreHind) where T : ILifetCycleHitPoint
  71. {
  72. return combatHeroGameObject.GetMainHotPoin<T>(isIgnoreHind);
  73. }
  74. public void PlayAnim(string animName, bool isLoop, int layerId, bool repeat, float speed)
  75. {
  76. combatHeroAnimtion.Play(animName, speed);
  77. }
  78. }