using CommonAI.Zone;
using CommonAI.ZoneClient;
using CommonLang.Geometry;
using ET.Client;
using ET.EventType;
using System;

namespace ET
{
    //战斗中,每一帧要干的活
    public partial class BattleMgr
    {
        public void doUpdate()
        {
            SyncUnitPos();
        }

        private Vector3 VecTmp = new Vector3();
        private void SyncUnitPos()
        {
            if (UnitMgr.Instance != null)
            {
                foreach (var obj in UnitMgr.Instance.AllUnits)
                {
                    if (obj is BattleUnit)
                    {
                        var zo = obj.ZoneObject;
                        VecTmp.Set(zo.X, zo.Y, zo.Z);
                        if (!VecTmp.Equal(obj.LastPos, 0.01f) || MathF.Abs(obj.LastRotation - zo.Direction) > 0.01f)
                        {
                            EventSystem.Instance.Publish<SyncUnitPosEvent>(SyncUnitPosEvent.Static.Clone(zo.ObjectID, VecTmp, zo.Direction));
                            obj.LastPos.Set(VecTmp);
                            obj.LastRotation = zo.Direction;
                        }
                    }
                    else if(obj is BattleSpell)
                    {
                        var zs = obj.ZoneObject as ZoneSpell;
                        /*
                        if (zs.Info.MType == CommonAI.Zone.SpellTemplate.MotionType.Foxfire)
                        {
                            if (zs.Target.ObjectID == 0 || zs.PassTimeMS > zs.Info.LifeTimeMS + 5000)
                            {
                                PostMsg2Layer(new RemoveObjectEvent(zs.ObjectID));
                                return;
                            }
                        }
                        else if (zs.PassTimeMS > zs.Info.LifeTimeMS + 150)
                        {
                            PostMsg2Layer(new RemoveObjectEvent(zs.ObjectID));
                            return;
                        }*/
                        VecTmp.Set(zs.X, zs.Y, zs.Z);
                        if (!VecTmp.Equal(obj.LastPos, 0.01f) || MathF.Abs(obj.LastRotation - zs.Direction) > 0.01f)
                        {
                            EventSystem.Instance.Publish<SyncUnitPosEvent>(SyncUnitPosEvent.Static.Clone(zs.ObjectID, VecTmp, zs.Direction, zs.RotationX));
                            obj.LastPos.Set(VecTmp);
                            obj.LastRotation = zs.Direction;
                        }

                    }
                }
            }
        }
    }
}