Files
JJBB/Assets/Project/Script/GUI/Childs/ChildInfoPanel.cs
2024-08-23 15:49:34 +08:00

488 lines
17 KiB
C#

using GCGame.Table;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ChildInfoPanel : MonoBehaviour, ChildRefreshInterface, SyncSingleChildInterface{
public static ChildInfoPanel Instance;
private void Awake()
{
Instance = this;
}
private void OnEnable()
{
RefreshChildData();
}
private void OnDisable()
{
_IsShowAdventurePop = false;
}
//信息 模型
public Text _ChildName;
public ChildModelAndEffectCtr _ModelEffectlCtr;
public UIImgText _ChildCombatVal;
public RectTransform _ChildChatPopBG;
public Text _ChidChatText;
public ChildSwitchBtnPanel _SwitchPanel;
//技能
public ChildSkillPanel _ChildSkillPanel;
//属性
public List<AdvanceAttrItem> _ChildAttrItemList;
//成长
public Text _TodayPreGrowthVal; //今日预测成长值
public Text _ChildFoodVal;
public Text _ChildCleanVal;
public Text _ChildMoodVal;
public Text _ChildHealthVal;
public Text _GrowthStateDescText;
public Text _CloseVal; //亲密度
public Slider _ChildGrowthSlider;
public Text _ChildGrowthSliderVal;
public List<UIImgText> _RemainInteracTimes;
//孩子当前学习状态
public GameObject _ChildStatePanel;
public Text _ChildStateDescText;
public RemainTimeCoroutine _ChildStateRemainTimeText;
//按钮
public GameObject _FollowBtn;
public GameObject _CancelFollowBtn;
//红点
public List<GameObject> _RedIconList;
//改名面板
public GameObject _ChangeNamePanel;
/// <summary>
/// 召唤孩子跟随
/// </summary>
public void OnChildFollowBtn()
{
if (ChildData.GetChildByIndex(_CurSelectChildIndex) == null)
return;
var childParamTab = TableManager.GetChildrenParaByID(1, 0);
if (ChildData.GetChildByIndex(_CurSelectChildIndex).basic.curLevel < (childParamTab != null ? childParamTab.FollowLevel : 2))
{
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{86816}"));
return;
}
ReqChildrenFollow req = new ReqChildrenFollow();
req.childrenGuid = ChildData.GetChildByIndex(_CurSelectChildIndex).guid;
req.SendMsg();
}
/// <summary>
/// 跟孩子互动,区别Index
/// </summary>
/// <param name="operationIndex"></param>
public void OnChildInteractionBtn(int operationIndex)
{
if (ChildData.GetChildByIndex(_CurSelectChildIndex) == null)
return;
if (ChildData.GetChildByIndex(_CurSelectChildIndex).basic.embryoEndtime > GlobalData.ServerAnsiTime)
{
GUIData.AddNotifyData(StrDictionary.GetClientDictionaryString("#{86804}"));
return;
}
_IsShowAdventurePop = false; //主动交互的时候屏蔽当前的奇遇 在交互完成之后重新触发.
if (int.Parse(_RemainInteracTimes[operationIndex - 1].text) > 0)
{
InitChatPop(operationIndex);
_ModelEffectlCtr.PlayChildAnimation(operationIndex);
}
ReqChildrenInteract req = new ReqChildrenInteract();
req.childrenGuid = ChildData.GetChildByIndex(_CurSelectChildIndex).guid;
req.type = operationIndex;
req.SendMsg();
}
private bool isShowChatPop = false;
public void InitChatPop(int operationIndex)
{
var index = operationIndex - 1;
if (int.Parse(_RemainInteracTimes[index].text) <= 0)
return;
var talkVal = StrDictionary.GetClientDictionaryString("#{" + (86830 + index) + "}");
SetChildChats(talkVal);
}
private float _WaitSconds = 3.0f;
private float _CountTime = 0.0f;
private void Update()
{
if(isShowChatPop)
{
_CountTime += Time.deltaTime;
if(_CountTime >= _WaitSconds)
{
_CountTime = 0.0f;
if(!_IsShowAdventurePop)
{
isShowChatPop = false;
_ChildChatPopBG.gameObject.SetActive(false);
//正常互动结束的时候判断当前是否有奇遇
InitAdventureDesc();
}
}
}
}
/// <summary>
/// 点击修改名称
/// </summary>
public void OnChangeChildNameBtn()
{
ChangeNameInputPanel.ShowChangeNameInputPanel(OnConfirmNameBtn);
_ChangeNamePanel.SetActive(true);
}
public void OnConfirmNameBtn(string name)
{
ChildrenChangeName req = new ChildrenChangeName();
req.childrenGuid =_CurChildGuid;
req.name = name;
req.SendMsg();
}
// 边界值20 20 17 17 原始大小119 64
public bool _IsShowAdventurePop = false;
public void SetChildChats(string info)
{
_CountTime = 0.0f;
isShowChatPop = true;
_ChildChatPopBG.gameObject.SetActive (true);
_ChidChatText.text = info;
}
//奇遇事件,暂留
public void OnAdventureRecordBtn()
{
UIManager.ShowUI(UIInfo.ChildAdventureRecordPanel, (bool bSucess, object param) => {
if(bSucess)
{
ChildAdventureRecordPanel.Instance.InitRecordPanel(_CurSelectChildIndex);
}
});
}
public void RefreshChildData(RetChildren childData = null)
{
_FollowBtn.SetActive(ChildData.ChildPacket != null && ChildData.ChildPacket.list.Count >0);
InitChildInfoPanel();
}
void InitChildInfoPanel()
{
_SwitchPanel.InitSwitchPanel(ChildData.ChildPacket == null ? 0 : ChildData.ChildPacket.list.Count);
ShowChildByIndex();
}
private int _CurSelectChildIndex = -1;
public long _CurChildGuid = -1;
public void ShowChildByIndex(int index = 0)
{
//切换成功之后再记录
_CurSelectChildIndex = index;
ChildPanel.PlayeChildSoundByIndex(_CurSelectChildIndex);
if (ChildData.ChildPacket != null && index > ChildData.ChildPacket.list.Count - 1)
{
Debug.LogError("index out of range");
return;
}
_CurChildGuid = ChildData.GetChildByIndex(index).guid;
//倒计时初始化
IsInitEmbyroPanel();
//告诉服务器当前选中的子女
SetCurSelectChild();
//名称 战力 模型
InitNameAndModelPanel();
//技能
_ChildSkillPanel.InitSkillItem(_CurSelectChildIndex);
//属性
InitAttrPanel();
//清洁相关 交互
InitInteractionPanel();
//当前学习状态
InitStudyState();
//初始化按钮状态
InitBtnState();
//初始化奇遇
InitAdventureDesc();
//刷新界面红点
RefreshMenuItemRedState();
}
public void RefreshMenuItemRedState()
{
var stateList = ChildData.GetChildRedStateByIndex(_CurSelectChildIndex);
var _MenuItemBase = ChildPanel.Instance._MenuItemBase;
for (int index = 0; index < _MenuItemBase._MenuItemList.Count; index++)
{
_MenuItemBase._MenuItemList[index].ShowRedIcon(stateList != null && stateList.Contains(index + 1));
}
//转世
if (ChildRenicarNationPanel.Instance)
ChildRenicarNationPanel.Instance.ShowRedIcon(stateList != null && stateList.Contains(3));
}
//选中当前子女
void SetCurSelectChild()
{
SelectCurChildren req = new SelectCurChildren();
req.childrenGuid = ChildData.GetChildByIndex(_CurSelectChildIndex).guid;
req.SendMsg();
}
public void InitBtnState()
{
_FollowBtn.SetActive(ChildData.GetChildByIndex(_CurSelectChildIndex).guid != GameManager.gameManager.PlayerDataPool.ChildData.CurCarryChildData.childGuid);
_CancelFollowBtn.SetActive(ChildData.GetChildByIndex(_CurSelectChildIndex).guid == GameManager.gameManager.PlayerDataPool.ChildData.CurCarryChildData.childGuid);
}
public void IsInitEmbyroPanel()
{
if(ChildData.GetChildByIndex(_CurSelectChildIndex).basic.embryoEndtime > GlobalData.ServerAnsiTime)
{
_FollowBtn.SetActive(false);
_CancelFollowBtn.SetActive(false);
}
else
{
InitBtnState();
}
}
void InitNameAndModelPanel()
{
//名称 战力
_CurChildGuid = ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? -1 : ChildData.GetChildByIndex(_CurSelectChildIndex).guid;
if (ChildData.GetChildByIndex(_CurSelectChildIndex) != null)
{
if (ChildData.GetChildByIndex(_CurSelectChildIndex).basic.embryoEndtime > GlobalData.ServerAnsiTime)
{
_ChildName.text = "";
}
else
{
_ChildName.text = ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? "" : ChildData.GetChildByIndex(_CurSelectChildIndex).basic.name;
}
}
_ChildCombatVal.text = ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? "0" : ChildData.GetChildByIndex(_CurSelectChildIndex).basic.power.ToString();
if (ChildData.GetChildByIndex(_CurSelectChildIndex) == null)
return;
_ModelEffectlCtr.ShowChild(_CurSelectChildIndex);
}
void InitAttrPanel()
{
if(ChildData.GetChildByIndex(_CurSelectChildIndex) == null)
{
for (int index = 0; index < _ChildAttrItemList.Count; index++)
_ChildAttrItemList[index].gameObject.SetActive(false);
return;
}
for (int index = 0; index < ChildData.GetChildByIndex(_CurSelectChildIndex).attr.attrList.Count && index < _ChildAttrItemList.Count; index++)
{
_ChildAttrItemList[index].gameObject.SetActive(true);
_ChildAttrItemList[index].InitAttrInfo(ChildData.GetChildByIndex(_CurSelectChildIndex).attr.attrList[index].attrId, int.Parse(ChildData.GetChildByIndex(_CurSelectChildIndex).attr.attrList[index].attrValue.ToString()));
}
for(int index = ChildData.GetChildByIndex(_CurSelectChildIndex).attr.attrList.Count; index < _ChildAttrItemList.Count; index++)
{
_ChildAttrItemList[index].gameObject.SetActive(false);
}
}
void InitInteractionPanel()
{
_TodayPreGrowthVal.text = ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? "0" : ChildData.GetChildByIndex(_CurSelectChildIndex).interact.expectExp.ToString();
//获取上限
var childParamTab = TableManager.GetChildrenParaByID(0, 0);
if(childParamTab == null)
{
Debug.LogError("childParamTab is null");
return;
}
_ChildCleanVal.text = (ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? 0 : ChildData.GetChildByIndex(_CurSelectChildIndex).interact.curClean) + "/" + childParamTab.MaxClean;
_ChildFoodVal.text = (ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? 0 : ChildData.GetChildByIndex(_CurSelectChildIndex).interact.curSatiety) + "/" + childParamTab.MaxSatiety;
_ChildMoodVal.text = (ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? 0 : ChildData.GetChildByIndex(_CurSelectChildIndex).interact.curMood) + "/" + childParamTab.MaxMood;
_ChildHealthVal.text = (ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? 0 : ChildData.GetChildByIndex(_CurSelectChildIndex).interact.curHealth) + "/" + childParamTab.MaxHealth;
var adId = ChildData.GetChildByIndex(_CurSelectChildIndex).randomEvent.reserved;
Tab_ChildrenAdventure charAdventureTab = null;
if (adId != -1)
{
charAdventureTab = TableManager.GetChildrenAdventureByID(adId, 0);
}
//设置剩余互动次数
for(int index = 0; index < _RemainInteracTimes.Count; index++)
{
if(ChildData.GetChildByIndex(_CurSelectChildIndex) == null)
{
_RemainInteracTimes[index].text = "0";
}
else
{
if (charAdventureTab != null && charAdventureTab.InteractType == (index + 1))
{
_RemainInteracTimes[index].text = ChildData.GetChildByIndex(_CurSelectChildIndex) == null
? "0" : (Math.Max(ChildData.GetChildByIndex(_CurSelectChildIndex).interact.remainTimes, 0) + 1) + "";
}
else
{
_RemainInteracTimes[index].text = ChildData.GetChildByIndex(_CurSelectChildIndex) == null
? "0" : Math.Max(ChildData.GetChildByIndex(_CurSelectChildIndex).interact.remainTimes, 0) + "";
}
_RedIconList[index].SetActive(int.Parse(_RemainInteracTimes[index].text) > 0);
}
}
//成长阶段描述
var childSkillTab = TableManager.GetChildrenLevelUpByID(ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? 1 : ChildData.GetChildByIndex(_CurSelectChildIndex).basic.curLevel, 0);
if(childSkillTab == null)
{
Debug.LogError("ChildrenLevelUp is null : " + ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? 1 : ChildData.GetChildByIndex(_CurSelectChildIndex).basic.curLevel);
}
var childStateTypeTab = TableManager.GetChildrenStateTypeByID(childSkillTab.CurStateType, 0);
if(childStateTypeTab == null)
{
}else
{
_GrowthStateDescText.EnsureVal(childStateTypeTab.StateDesc);
}
//亲密度
_CloseVal.text = (ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? 0 : ChildData.GetChildByIndex(_CurSelectChildIndex).basic.intimacy) + "";
//Slider
_ChildGrowthSlider.value = ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? 0 : (float)ChildData.GetChildByIndex(_CurSelectChildIndex).basic.curExp / (float)childSkillTab.ExpNeed;
_ChildGrowthSliderVal.text = ChildData.GetChildByIndex(_CurSelectChildIndex) == null ? "0" : ChildData.GetChildByIndex(_CurSelectChildIndex).basic.curExp + "/" + childSkillTab.ExpNeed;
}
public void InitAdventureDesc()
{
_IsShowAdventurePop = false;
var childData = ChildData.GetChildByIndex(_CurSelectChildIndex);
if (childData == null)
return;
if (childData.randomEvent.reserved == -1)
return;
var childAdventureTab = TableManager.GetChildrenAdventureByID(childData.randomEvent.reserved, 0);
if (childAdventureTab == null)
return;
_IsShowAdventurePop = true;
SetChildChats(StrDictionary.GetClientDictionaryString("#{" + childAdventureTab.PopStrId + "}"));
}
void InitStudyState()
{
if(ChildData.GetChildByIndex(_CurSelectChildIndex) == null)
{
_ChildStatePanel.SetActive(false);
return;
}
if(ChildData.GetChildByIndex(_CurSelectChildIndex).study.studyingType != 0)
{
_ChildStatePanel.SetActive(true);
var strId = 86800 + ChildData.GetChildByIndex(_CurSelectChildIndex).study.studyingType - 1;
_ChildStateDescText.text = StrDictionary.GetClientDictionaryString("#{" + strId + "}");
_ChildStateRemainTimeText.StartCountTime(ChildData.GetChildByIndex(_CurSelectChildIndex).study.studyingEndtime + 60, OnStudyFinishCallBack);
}
else
{
_ChildStatePanel.SetActive(false);
}
}
public void OnStudyFinishCallBack()
{
_ChildStatePanel.SetActive(false);
}
//使用增长经验的道具
public void OnGrowthItemBtn()
{
var childParaTab = TableManager.GetChildrenParaByID(0, 0);
if (childParaTab == null)
return;
List<int> itemList = new List<int>();
for(int index = 0; index < childParaTab.getIncGrowthItemIdCount(); index++)
{
if (!itemList.Contains(childParaTab.GetIncGrowthItemIdbyIndex(index)))
itemList.Add(childParaTab.GetIncGrowthItemIdbyIndex(index));
}
if(itemList.Count < 1)
{
Debug.LogError("Growth itemidList is null, check childPara table");
return;
}
ChildItemCtrBase.ShowItemBase(itemList);
}
//取消跟随
public void OnCancelFollowBtn()
{
if(GameManager.gameManager.PlayerDataPool.ChildData.CurCarryChildData.childGuid == -1)
{
Debug.LogError("CurCarry child guid is -1, can't cancel follow!");
//这种神奇的BUG万一遇到了呢.
InitBtnState();
return;
}
ReqChildrenCancelFollow req = new ReqChildrenCancelFollow();
req.childrenGuid = GameManager.gameManager.PlayerDataPool.ChildData.CurCarryChildData.childGuid;
req.SendMsg();
}
public void RefreshSingleChild(CNode info)
{
if (info.guid == ChildData.GetChildByIndex(_CurSelectChildIndex).guid)
ShowChildByIndex(_CurSelectChildIndex);
}
public void OnHelpBtn()
{
MessageHelpLogic.ShowHelpMessage(75);
}
}