367 lines
12 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|