using Games.AnimationModule; using Games.LogicObj; using GCGame.Table; using Module.Log; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Child_Init_Data : Obj_Character_Init_Data { public int childLevel = -1; public string childName = ""; public long childGuid = -1; public int childFashionId = -1; public int childGender = -1; public ulong bindPlayerGuid = 0; public Child_Init_Data() { CleanUp(); } public override void CleanUp() { base.CleanUp(); childLevel = -1; childName = ""; childGuid = -1; childFashionId = -1; childGender = -1; bindPlayerGuid = 0; } } public class Obj_Child : Obj_Character{ private Child_Init_Data childData; public override UIPathData HeadUiPath { get { return Obj_NPCHeadUI.pathData; } } private ulong _BindPlayerGuid = 0; public long _ChildGuid = -1; public override bool Init(ObjParent_Init_Data initData1) { var result = base.Init(initData1); if(result == false) { LogModule.ErrorLog("Base Init Failure!"); return result; } //取消跟随 childData = (Child_Init_Data)initData1; if(childData == null) { Debug.LogError("childData is null"); return false; } _ChildGuid = childData.childGuid; _BindPlayerGuid = childData.bindPlayerGuid; BaseAttr.MoveSpeed = childData.m_MoveSpeed; if (childData.childLevel == -1 || childData.childGuid == -1) { DestroyObj(); return result; } if (childData.childFashionId != -1) { var childFashionTab = TableManager.GetChildrenFashionByID(childData.childFashionId, 0); if (childFashionTab == null) { DestroyObj(); Debug.LogError("childFashionTab is null : " + childData.childFashionId); return result; } var charModelId = childData.childGender == (int)ChildHeadIcon.ChildSex.Boy ? childFashionTab.BoyCharModelId : childFashionTab.GirlCharModelId; var charModelTab = TableManager.GetCharModelByID(charModelId, 0); if (charModelTab == null) { DestroyObj(); Debug.LogError("CharModlTab is null : " + charModelId); return result; } m_DeltaHeight = charModelTab.HeadInfoHeight * ModelScale; ModelScale = charModelTab.Scale; CreateModel(charModelId, charModelTab.ResPath); } else { var childrenLevelTab = TableManager.GetChildrenLevelUpByID(childData.childLevel, 0); if (childrenLevelTab == null) { DestroyObj(); Debug.LogError("ChldrenLevelTab is null : " + childData.childLevel); return result; } var childStateTypeTab = TableManager.GetChildrenStateTypeByID(childrenLevelTab.CurStateType, 0); if (childStateTypeTab == null) { DestroyObj(); Debug.LogError("childStateTypeTab is null : " + childrenLevelTab.CurStateType); return result; } var charModelId = childData.childGender == (int)ChildHeadIcon.ChildSex.Boy ? childStateTypeTab.BoyModelId : childStateTypeTab.GirlModelId; var charModelTab = TableManager.GetCharModelByID(charModelId, 0); if (charModelTab == null) { DestroyObj(); Debug.LogError("charModelTab is null : " + charModelId); return result; } ModelScale = charModelTab.Scale; m_DeltaHeight = charModelTab.HeadInfoHeight * ModelScale; CreateModel(charModelId, charModelTab.ResPath); } //ObjManager.Instance.AddPoolObj(this); return result; } private void Start() { if(m_headUIObj == null) CreateNameBoard(); } protected override void CreateModelOver(Hashtable hashParam) { base.CreateModelOver(hashParam); //初始化寻路代理 InitNavAgent(); if(m_headUIObj == null) CreateNameBoard(); } private bool _IsInitOwnerName = false; protected Obj_NPCHeadUI m_headUIObj = null; private const float _TalkDuration = 3.0f; public override void InitNameBoard(Obj_HeadUI headUiItem) { base.InitNameBoard(headUiItem); m_headUIObj = (Obj_NPCHeadUI)headUiItem; m_headUIObj.HideHp(false); m_headUIObj.SetName(childData.childName); m_headUIObj.HideBackImage(false); m_headUIObj.SetNameColor(GCGame.Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5558}"))); if (!string.IsNullOrEmpty(_RecordChildTalkingVal)) { Games.ChatHistory.ChatHistoryItem histroy = new Games.ChatHistory.ChatHistoryItem(); histroy.ChatInfo = _RecordChildTalkingVal; histroy.Duration = _TalkDuration; histroy.EChannel = GC_CHAT.CHATTYPE.CHAT_TYPE_INVALID; m_headUIObj.ShowChatBubble(histroy); _RecordChildTalkingVal = null; } var otherPlayer = Singleton.Instance.FindOtherPlayerByGuid((ulong)_BindPlayerGuid) as Obj_OtherPlayer; if (otherPlayer) { //会有被隐藏的问题 临时处理 m_headUIObj.transform.GetChild(0).gameObject.SetActive(true); m_headUIObj.SetOwnerName(otherPlayer.BaseAttr.RoleName); _IsInitOwnerName = true; hideChildName(); } } public override void DestroyObj() { base.DestroyObj(); } //更换时装 更换孩子 public void ReloadChildModel(Child_Init_Data childData) { if (childData.childFashionId != -1) { var childFashionTab = TableManager.GetChildrenFashionByID(childData.childFashionId, 0); if (childFashionTab == null) { DestroyObj(); Debug.LogError("childFashionTab is null : " + childData.childFashionId); return; } ModelID = childData.childGender == (int)ChildHeadIcon.ChildSex.Boy ? childFashionTab.BoyCharModelId : childFashionTab.GirlCharModelId; var charModelTab = TableManager.GetCharModelByID(ModelID, 0); if (charModelTab == null) { DestroyObj(); Debug.LogError("CharModlTab is null : " + ModelID); return; } ModelScale = charModelTab.Scale; m_DeltaHeight = charModelTab.HeadInfoHeight * ModelScale; CreateModel(ModelID, charModelTab.ResPath); } else { var childrenLevelTab = TableManager.GetChildrenLevelUpByID(childData.childLevel, 0); if (childrenLevelTab == null) { DestroyObj(); Debug.LogError("ChldrenLevelTab is null : " + childData.childLevel); return; } var childStateTypeTab = TableManager.GetChildrenStateTypeByID(childrenLevelTab.CurStateType, 0); if (childStateTypeTab == null) { DestroyObj(); Debug.LogError("childStateTypeTab is null : " + childrenLevelTab.CurStateType); return; } ModelID = childData.childGender == (int)ChildHeadIcon.ChildSex.Boy ? childStateTypeTab.BoyModelId : childStateTypeTab.GirlModelId; var charModelTab = TableManager.GetCharModelByID(ModelID, 0); if (charModelTab == null) { DestroyObj(); Debug.LogError("charModelTab is null : " + ModelID); return; } ModelScale = charModelTab.Scale; m_DeltaHeight = charModelTab.HeadInfoHeight * ModelScale; CreateModel(ModelID, charModelTab.ResPath); ChangeChildName(childData.childName); hideChildName(); } } protected override void AsycCreateModelOver(string modelName, ObjPartRoot modelObj, ObjModelLoadResult loadResult, Hashtable hashParam) { base.AsycCreateModelOver(modelName, modelObj, loadResult, hashParam); SetModelScale(ModelScale); } protected override void Update() { base.Update(); FollowByBindPlayer(); } public void hideChildName() { // 紫禁之巅 中隐藏其他玩家的子女名字 if (ObjManager.Instance.MainPlayer != _BindPlayer && GameManager.gameManager.m_RunningScene == 658) { m_headUIObj.OwerNameText.gameObject.SetActive(false); m_headUIObj.NameText.gameObject.SetActive(false); } } private Transform _BindPlayerTransform = null; private Obj_OtherPlayer _BindPlayer = null; protected void GetBindPlayerTransform() { _BindPlayer = Singleton.Instance.FindOtherPlayerByGuid((ulong)_BindPlayerGuid) as Obj_OtherPlayer; if (_BindPlayer != null) { _BindPlayerTransform = _BindPlayer.transform; if(!_IsInitOwnerName) { if (m_headUIObj == null) CreateNameBoard();//回调中会重新设置名称 else { //会有被隐藏的问题 临时处理 m_headUIObj.transform.GetChild(0).gameObject.SetActive(true); _IsInitOwnerName = true; m_headUIObj.SetOwnerName(_BindPlayer.BaseAttr.RoleName); hideChildName(); } } } else { Debug.LogError("Can't find guid : " + _BindPlayerGuid); _BindPlayerTransform = null; } } protected Obj_OtherPlayer FindBindPlayer() { _BindPlayer = Singleton.Instance.FindOtherPlayerByGuid((ulong)_BindPlayerGuid) as Obj_OtherPlayer; return _BindPlayer; } //相对偏移位置 private Vector3 _ChildOffset = new Vector3(2, 0, -2); private float _LerpTime = 0.5f; private float _CountTime = 0.0f; protected void FollowByBindPlayer() { if(_BindPlayerTransform == null) { GetBindPlayerTransform(); } else { _CountTime += Time.deltaTime; if(_CountTime >= _LerpTime) { _CountTime -= _LerpTime; var destPos = Vector2.zero; destPos.x = _BindPlayerTransform.transform.position.x + _ChildOffset.x; destPos.y = _BindPlayerTransform.transform.position.z + _ChildOffset.z; var startPos = new Vector2(gameObject.transform.position.x, gameObject.transform.position.z); FindBindPlayer(); if (_BindPlayer != null) { BaseAttr.MoveSpeed = _BindPlayer.BaseAttr.MoveSpeed; CharacterMoveAnim(); SyncMove(startPos, destPos, MoveState.Move); } } } } public void ChangeChildName(string name) { if (m_headUIObj == null) CreateNameBoard(); else m_headUIObj.SetName(name); } private string _RecordChildTalkingVal = null; public void ShowAdventurePop(string val) { if (m_headUIObj) { Games.ChatHistory.ChatHistoryItem histroy = new Games.ChatHistory.ChatHistoryItem(); histroy.ChatInfo = val; histroy.Duration = _TalkDuration; histroy.EChannel = GC_CHAT.CHATTYPE.CHAT_TYPE_INVALID; m_headUIObj.ShowChatBubble(histroy); _RecordChildTalkingVal = null; } else { _RecordChildTalkingVal = val; CreateNameBoard(); } } }