using vnxbqy.UI; using UnityEngine; public class GA_NpcSummonFight : GActorNpcFight { private H0408_tagPlayerSummonNPCAppear m_H0408; // 用于触发点击的组件 private NPCInteractProcessor m_NPCInteractProcessor; protected override void OnInit(GameNetPackBasic package) { m_H0408 = package as H0408_tagPlayerSummonNPCAppear; if (m_H0408 == null) { return; } ActorInfo.ownerSID = m_H0408.PlayerID; ActorInfo.moveSpeed = 1; ActorInfo.serverBornPos = new UnityEngine.Vector2(m_H0408.PosX, m_H0408.PosY); if (ClientDungeonStageUtility.isClientDungeon) { var _delta = new Vector3(ActorInfo.serverBornPos.x, 0, ActorInfo.serverBornPos.y) - GA_Hero.recordServerPos; var _real = new Vector3(PlayerDatas.Instance.hero.Pos.x * 2, 0, PlayerDatas.Instance.hero.Pos.z * 2); AdjustPos((ushort)_real.x, (ushort)_real.z); } else { AdjustPos(m_H0408.PosX, m_H0408.PosY); } base.OnInit(package); // 可选择对象创建碰撞区 if (CanBeSelected()) { m_NPCInteractProcessor = Root.AddMissingComponent(); m_NPCInteractProcessor.npcIntergactEvent -= OnClick; m_NPCInteractProcessor.npcIntergactEvent += OnClick; } GActor _parent = GAMgr.Instance.GetBySID(m_H0408.PlayerID); if (_parent != null) { ActorInfo.moveSpeed = _parent.ActorInfo.moveSpeed; } } protected override void OnMainModelLoaded() { base.OnMainModelLoaded(); uint _parentSID = ActorInfo.ownerSID; if (_parentSID != PlayerDatas.Instance.PlayerId) { GA_Player _player = GAMgr.Instance.GetBySID(_parentSID) as GA_Player; if (_player != null) { if (!_player.ShowOrHide) { ShowOrHideModel(false); } } } } public sealed override void RequestLifeBar() { } public sealed override void ReleaseLifeBar() { } public sealed override void RefreshLifeBar(ulong value) { } public sealed override void RequestName() { } public sealed override void ReleaseName() { } public sealed override void RequestDialogueBubble() { } protected sealed override void UpdateTimeDialogueBubble() { } protected sealed override void OnUpdate() { } protected sealed override void OnLateUpdate() { } protected sealed override void OnFixedUpdate() { } public sealed override bool CanAtked() { return NpcConfig.NPCType == (int)E_NpcType.PersonalEnemy; } public sealed override bool CanAtkedRotate() { return false; } public sealed override bool CanPushedBack() { return false; } public sealed override bool CanHurted() { return false; } public sealed override bool CanDieFly() { return false; } public sealed override bool CanBeSelected() { return NpcConfig.NPCType == (int)E_NpcType.PersonalEnemy; } public sealed override void OnSelect() { if (NpcConfig.NPCType == (int)E_NpcType.PersonalEnemy) { SelectionManager.Request(SelectionManager.E_Type.Red, this, NpcConfig.ModelRadius * 2); } } public sealed override void OnUnSelect() { if (NpcConfig.NPCType == (int)E_NpcType.PersonalEnemy) { SelectionManager.Release(SelectionManager.E_Type.Red); } } public sealed override void OnClick() { if (ActorInfo.serverDie || BossShowModel.Instance.BossShowing || StatusMgr.Instance.IsInvisible(ServerInstID)) { return; } GA_Hero _hero = PlayerDatas.Instance.hero; // 当前锁定的目标已经是此对象 if (_hero.LockTarget == this && CanAtked()) { // 开启攻击至死AI _hero.Behaviour.StartKillUntilDieAI(); } else { // 设置锁定目标为此对象 _hero.LockTarget = this; _hero.SelectTarget = this; GA_Hero.CallLockTargetChanged(ServerInstID); } } }