// using System;
//
// using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
//
// using Fort23.Common;
// using Fort23.Core;
// using Fort23.UTool;
//
// #if !COMBAT_SERVER
// using UnityEngine;
// #endif
//
// using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
// using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic;
//
// namespace Common.Combat.FxAILogic
// {
//     public class FxAILogicBasic :  IDisposable, ITimelineFxLogic
//     {
//         protected TimeLineEventParticleLogicBasic timeLineEventParticleLogicBasic;
//         protected ILifetCycleHitPoint attTarget;
//
//         public ILifetCycleHitPoint AttTarget
//         {
//             get { return attTarget; }
//         }
//
//         public TimeLineEventParticleLogicBasic TimeLineEventParticleLogicBasic
//         {
//             get { return timeLineEventParticleLogicBasic; }
//         }
//         public IGObjectPoolInterface ObjectPoolInterface;
//
//         public long InitGuid;
//         protected int _updateCount;
//
//         protected float _initTime;
//
//      
//         public bool isPenetrate;
//
//        
//
//         /// <summary>
//         /// 开始点
//         /// </summary>
//         protected Vector3 startPos;
//
//         public Vector3 CurrPos
//         {
//             get { return _currPos; }
//         }
//
//         /// <summary>
//         /// 当前Obj的位置
//         /// </summary>
//         protected Vector3 _currPos;
//
//         protected Vector3 rotation;
//
//         protected SpecialDotInfo specialDotInfo;
//         protected float currTime;
//
//         public TriggerData triggerData;
//
//         protected bool isNotCanTriggerGround;
//
//         protected bool _isUpdateBasic;
//
//         public void Init(Vector3 startPos, 
//             TimeLineEventParticleLogicBasic timeLineEventParticleLogicBasic, ILifetCycleHitPoint attTarget,
//             SpecialDotInfo specialDotInfo = null)
//         {
//          
//             _currPos = startPos;
//             this.startPos = startPos;
//             this.timeLineEventParticleLogicBasic = timeLineEventParticleLogicBasic;
//           
//
//             this.attTarget = attTarget;
//           
//             this.specialDotInfo = specialDotInfo;
//             ITimeLineTriggerEvent trigger = timeLineEventParticleLogicBasic.ITimeLineTriggerEntity as ITimeLineTriggerEvent;
//             if (trigger != null)
//             {
//                 trigger.TimelineFxLogicInit(timeLineEventParticleLogicBasic.timeLinePlayFxSerializtion.groupName, this,
//                     triggerData);
//             }
//
//             _initTime = 0;
//             triggerData = timeLineEventParticleLogicBasic.extraData;
//             triggerData.TrggerObject = this;
//           
//             _isUpdateBasic = true;
//             ProInit();
//         }
//
//         public void SetAIMonoObj(IGObjectPoolInterface poolInterface)
//         {
//             this.ObjectPoolInterface = poolInterface;
//         }
//
//
//         private void Detection()
//         {
//             if (_updateCount % 2 != 0)
//             {
//                 return;
//             }
//
//             ProDetection();
//         }
//
//         protected virtual void ProDetection()
//         {
//         }
//
//       
//
//       
//
//         protected void Hit(string fxName, Vector3 startPos, ILifetCycleHitPoint fxTarget, bool isRotate,
//             SpecialDotInfo targetSpecialDotInfo)
//         {
//             if (string.IsNullOrEmpty(fxName))
//             {
//                 return;
//             }
//
//             CombatFactoryTool.Instance.CreateParticle(fxName, startPos, fxTarget, isRotate,
//                 targetSpecialDotInfo, delegate(CombatParticleSystemPool pool)
//                 {
// #if !COMBAT_SERVER
//                     if (ObjectPoolInterface != null&&pool.own!=null)
//                     {
//                         FxColorAlter colorAlter = ObjectPoolInterface.own.GetComponent<FxColorAlter>();
//                         if (colorAlter != null)
//                         {
//                             FxColorAlter colorAlter2 = pool.own.GetComponent<FxColorAlter>();
//                             if (colorAlter2 == null)
//                             {
//                                 colorAlter2 = pool.own.AddComponent<FxColorAlter>();
//                             }
//
//                             colorAlter2.AlterColor(colorAlter.currValue);
//                         }
//                     }
// #endif
//                 });
//         }
//
//         public void CombatUpdate(float time)
//         {
//             if (!_isUpdateBasic)
//             {
//                 return;
//             }
//
//             _updateCount++;
//             _initTime += time;
//             ProCombatUpdate(time);
//             if (timeLineEventParticleLogicBasic == null)
//             {
//                 return;
//             }
//
//             Detection();
//             if (ObjectPoolInterface != null && !UnityRenderUpdateComponent.Instance.isActive)
//             {
//                 UnityRenderUpdate(time);
//             }
//         }
//
//         public int initLogicFrame { get; set; }
//         public int initRenderFrame { get; set; }
//
//         public void UnityRenderUpdate(float time)
//         {
//             ProUnityRenderUpdate(time);
//         }
//
//         public void UnityRenderUpdateFinish()
//         {
//         }
//
//         public void Dispose()
//         {
//             if (timeLineEventParticleLogicBasic == null)
//             {
//                 return;
//             }
//
//             string scName = _fxAiDataBasic.aiScriptName;
//             CombatHeroEntity combatHeroEntity = timeLineEventParticleLogicBasic.castEntity.This<CombatHeroEntity>();
//             if (combatHeroEntity != null)
//             {
//                 combatHeroEntity.CombatReportHeroInfo.RemoveRepotLogs(this);
//             }
//
//             GObjectPool.Instance.Recycle(ObjectPoolInterface);
//             CombatFactoryTool.Instance.RemoveFxAILogicBasic(this);
//             ProDispose();
//             // timeLineEventParticleLogicBasic?.Dispose();
//             ObjectPoolInterface = null;
//             timeLineEventParticleLogicBasic = null;
//             attTarget = null;
//             ObjectPoolInterface = null;
//             _fxAiDataBasic = null;
//             _isUpdateBasic = false;
//             UnityRenderUpdateComponent.Instance.RemoveICombatUpdate(this);
//             CombatFactoryTool.Instance.Recycle(scName, this);
//         }
//
//         protected virtual void ProInit()
//         {
//         }
//
//         protected virtual void ProCombatUpdate(float time)
//         {
//         }
//
//         protected virtual void ProUnityRenderUpdate(float time)
//         {
//         }
//
//         protected virtual void ProDispose()
//         {
//         }
//
//
//         public RepotLogInfo CurrFrameRepotLogInfo()
//         {
//             RepotLogInfo repotLogInfo = new RepotLogInfo();
//             repotLogInfo.key = timeLineEventParticleLogicBasic.timeLinePlayFxSerializtion.fxName + InitGuid;
//             repotLogInfo.currFrameAlterValue.Add("pos_x", CurrPos.x.m_rawValue);
//             repotLogInfo.currFrameAlterValue.Add("pos_y", CurrPos.y.m_rawValue);
//             repotLogInfo.currFrameAlterValue.Add("rot_x", rotation.x.m_rawValue);
//             repotLogInfo.currFrameAlterValue.Add("rot_y", rotation.y.m_rawValue);
//             repotLogInfo.currFrameAlterValue.Add("rot_z", rotation.z.m_rawValue);
//
//             return repotLogInfo;
//         }
//
//
//        
//     }
// }