Files
JJBB/Assets/Project/Script/Obj/Obj_Characters/Obj_Child.cs
2024-08-23 15:49:34 +08:00

367 lines
12 KiB
C#

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<ObjManager>.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<ObjManager>.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<ObjManager>.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();
}
}
}