123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480 |
- using CommonAI.Zone;
- using CommonAI.ZoneClient;
- using CommonLang;
- using CommonLang.Geometry;
- using ET.Client;
- using ET.EventType;
- using System.IO;
- using XmdsCommon.Message;
- namespace ET
- {
- [FriendOf(typeof(UnitMgr))]
- public partial class BattleMgr : Singleton<BattleMgr>, ISingletonAwake, ISingletonUpdate, ILayerClient
- {
- public ZoneLayer Layer;
- private bool isInited = false;
- private readonly MemoryStream writeBuffer = new MemoryStream(2048);
- private EventDispatcher<ZoneEvent> zoneEventHandler;
- private EventDispatcher<ObjectEvent> objectEventHandler;
- private static CommonLang.Geometry.Vector3 vecTemp = new();
- public void Awake()
- {
- zoneEventHandler = new();
- objectEventHandler = new();
- registerEventHandler();
- Layer = TemplateManager.Factory.CreateClientZoneLayer(BattleResourceMgr.Instance.GameEditorTemplates, this);
- Layer.ActorSyncMode = SyncMode.MoveByClient_PreSkillByClient;
- Layer.LayerInit += LayerEvent_Init;
- Layer.ObjectEnter += LayerEvent_ObjectEnter;
- Layer.ObjectLeave += LayerEvent_ObjectLeave;
- Layer.MessageReceived += LayerEvent_MessageReceived;
- Layer.DecorationChanged += LayerEvent_DecorationChanged;
- isInited = true;
- }
- public void Update()
- {
- if (!isInited) return;
-
- Layer.Update();
- this.doUpdate();
- }
-
-
- void ILayerClient.BattleReady(bool bok)
- {
- Log.Debug($"battle ready......{bok}");
- }
-
-
- public void SendAction(CommonAI.Zone.Action action)
- {
- if(PlayerComponent.Instance == null)
- {
- Log.Error("playerComponent is null");
- return;
- }
- Log.Debug($">>>Send BattleMsg: {action.GetType()}");
- writeBuffer.Position = 0;
- if (BattleResourceMgr.Instance.BattleMsgDecoder.doEncode(writeBuffer, action))
- {
- PlayerComponent.Instance.ClientScene().GetComponent<SessionComponent>().Session.Send(new BattleEventPushToServer() { data = writeBuffer.ToArray() });
- }
- }
-
- public void PostMsg2Layer(CommonLang.Protocol.IMessage msg)
- {
- Layer.ProcessMessage(msg);
- }
-
- protected void LayerEvent_Init(CommonAI.ZoneClient.ZoneLayer layer)
- {
- Log.Debug($"OnLayerInit- scene template ID:{layer.Data.ID}");
- }
-
- protected void LayerEvent_ObjectEnter(ZoneLayer layer, ZoneObject obj)
- {
- Log.Debug($"OnObjectEnter: {obj}@{obj.ObjectID}");
- var unit = BattleUnitFactory.Instance.Create(obj);
- if(unit != null )
- {
- UnitMgr.Instance.PutUnit(obj.ObjectID, unit);
- if (unit is BattleActor)
- {
- UnitMgr.Instance.Actor = unit as BattleActor;
- }
- unit.OnAwake(obj);
- }
- else
- {
- Log.Error($"unknow object enter:{obj.Name} ID:{obj.ObjectID}");
- }
- }
-
- protected void LayerEvent_ObjectLeave(ZoneLayer layer, ZoneObject obj)
- {
- Log.Debug($"OnObjectLeave: {obj.ObjectID}");
- var unit = UnitMgr.Instance.GetUnit(obj.ObjectID);
- if(unit == null)
- {
- Log.Error($"LayerEvent_ObjectLeave not exist:{obj.Name}:{obj.ObjectID}");
- return;
- }
- unit.OnSleep();
- UnitMgr.Instance.RemoveUnit(obj.ObjectID);
- }
- protected void LayerEvent_DecorationChanged(CommonAI.ZoneClient.ZoneLayer layer, CommonAI.ZoneClient.ZoneEditorDecoration ed)
- {
- Log.Error("Layer_DecorationChanged");
-
- }
- protected void LayerEvent_MessageReceived(CommonAI.ZoneClient.ZoneLayer layer, CommonLang.Protocol.IMessage msg)
- {
- if (msg is ZoneEvent)
- {
- zoneEventHandler.Notify(msg as ZoneEvent);
- }
- else if(msg is ObjectEvent)
- {
- objectEventHandler.Notify(msg as ObjectEvent);
- }
- }
- private void registerEventHandler()
- {
-
- objectEventHandler.AddListener<SetAutoBattleB2C>((ev) => {
- var isAutoFight = (ev as SetAutoBattleB2C).isAutoBattle != 0;
- Log.Debug($"AutoFight: {isAutoFight}");
- (UnitMgr.Instance.Actor.ZUnit as ZoneActor).IsGuard = isAutoFight;
- });
- objectEventHandler.AddListener<ShowTipsEventB2C>((ev) =>
- {
- });
- objectEventHandler.AddListener<UnitDeadEvent>((ev) =>
- {
- });
- objectEventHandler.AddListener<UnitRebirthEvent>((ev) =>
- {
- });
- objectEventHandler.AddListener<UnitHitEvent>((ev) =>
- {
- });
- objectEventHandler.AddListener<PlayerPKModeChangeEventB2C>((ev) =>
- {
- });
- objectEventHandler.AddListener<PlayerBattlePropChangeEventB2C>((ev) =>
- {
- });
- objectEventHandler.AddListener<PlayerPKValueChangeEventB2C>((ev) =>
- {
- });
- objectEventHandler.AddListener<BuffActiveSkillEventB2C>((ev) =>
- {
- });
- objectEventHandler.AddListener<UnitEffectEvent>((ev) =>
- {
- var e = ev as UnitEffectEvent;
- EventSystem.Instance.Publish<PlayEffectEvent>(PlayEffectEvent.Static.Clone(e.effect, e.ObjectID, CommonLang.Geometry.Vector3.Zero));
- });
-
-
-
-
-
- zoneEventHandler.AddListener<AddEffectEvent>((ev) => {
- var e = ev as AddEffectEvent;
- if(e.hostId == 0 || UnitMgr.Instance.HasUnit(e.hostId))
- {
- vecTemp.Set(e.x, e.y, 0);
- EventSystem.Instance.Publish<PlayEffectEvent>(PlayEffectEvent.Static.Clone(e.effect, e.hostId, vecTemp));
- }
- });
-
-
- }
- }
- }
|