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

644 lines
19 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using Games.Item;
using GCGame.Table;
using Games.ChatHistory;
using GCGame;
using Games.GlobeDefine;
using Module.Log;
public class CommunityBlogInfo
{
public ulong GUID;
public string Contex = "";
public int Profession;
public List<string> ContexImageUrls;
public string HeadIconUrl = "";
public int Level;
public string Name = "";
public ulong RoleGuid;
public int Time;
public int ForwardingCnt;
public int LikeCnt;
public int CommentCnt;
public bool IsLikeBlog;
public List<LikedRoleInfo> LikeRoles;
public List<BlogComment> Comments;
public CommunityBlogInfo ForwardingBlog;
}
public class CommunityBlogItem : CommunityBlogContexItem
{
#region
void Update()
{
CommentHeightUpdate();
}
#endregion
public Text _TargetPlayerTime;
public CommunityBlogContexItem _ForwardingContex;
public GameObject _BlogOptPanel;
public GameObject _CommentOptPanel;
public Text _Time;
public Text _ForwardingCnt;
public Text _LikeCnt;
public Text _CommentCnt;
public Button _BtnLike;
public Button _BtnDisLike;
public CommunityBlogCommentItem _LikePlayerNames;
public UIContainerBase _CommentContainer;
public GameObject _BtnDelete;
public Text _CommentRet;
public LayoutElement _ContentLayout;
private BlogComment _RetBlogComment;
public CommunityBlogInfo _BlogInfo;
private bool _IsShowDeleteBtn = false;
public override void Show(Hashtable hash)
{
base.Show(hash);
var blogInfo = (CommunityBlogInfo)hash["InitObj"];
bool isShowPlayerInfo = true;
if (hash.ContainsKey("IsShowPlayerInfo"))
{
isShowPlayerInfo = (bool)hash["IsShowPlayerInfo"];
}
_IsFixedCommentHeight = false;
if (hash.ContainsKey("IsFixedCommentHeight"))
{
_IsFixedCommentHeight = (bool)hash["IsFixedCommentHeight"];
}
_IsShowDeleteBtn = false;
if (hash.ContainsKey("IsShowDeleteBtn"))
{
_IsShowDeleteBtn = (bool)hash["IsShowDeleteBtn"];
}
if (_ContentLayout != null)
{
_ContentLayout.enabled = false;
}
_ContexText._ContexText.verticalOverflow = VerticalWrapMode.Overflow;
_GUID = blogInfo.RoleGuid;
ShowBlogInfo(blogInfo, isShowPlayerInfo);
OnBtnShowOpt();
}
public override void ShowBlogInfo(CommunityBlogInfo blogInfo, bool isShowPlayerInfo)
{
base.ShowBlogInfo(blogInfo, isShowPlayerInfo);
_BlogInfo = blogInfo;
if (blogInfo.ForwardingBlog != null)
{
_ForwardingContex.gameObject.SetActive(true);
_ForwardingContex.ShowBlogInfo(blogInfo.ForwardingBlog, true);
}
else
{
_ForwardingContex.gameObject.SetActive(false);
}
var timeStr = GetBlogTimeStr(blogInfo.Time);
if (!isShowPlayerInfo)
{
_TargetPlayerTime.gameObject.SetActive(true);
_Time.gameObject.SetActive(false);
_TargetPlayerTime.text = timeStr;
}
else
{
_TargetPlayerTime.gameObject.SetActive(false);
_Time.gameObject.SetActive(true);
_Time.text = timeStr;
}
if (_IsShowDeleteBtn)
{
_BtnDelete.SetActive(true);
}
else
{
_BtnDelete.SetActive(false);
}
_ForwardingCnt.text = blogInfo.ForwardingCnt.ToString();
_LikeCnt.text = blogInfo.LikeCnt.ToString();
_CommentCnt.text = blogInfo.CommentCnt.ToString();
blogInfo.IsLikeBlog = false;
foreach (var likeInfo in blogInfo.LikeRoles)
{
if (likeInfo.Roleguid == GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid)
{
blogInfo.IsLikeBlog = true;
}
}
InitLikeNames();
InitLikeBtn();
if (blogInfo.Comments.Count == 0)
{
_CommentContainer._ContainerObj.gameObject.SetActive(false);
}
else
{
_CommentContainer._ContainerObj.gameObject.SetActive(true);
ShowComments();
}
if (blogInfo.Comments.Count == 0 && blogInfo.LikeRoles.Count == 0)
{
_CommentContainer.gameObject.SetActive(false);
}
else
{
_CommentContainer.gameObject.SetActive(true);
}
_GUID = blogInfo.RoleGuid;
}
private void InitLikeNames()
{
if (_BlogInfo.LikeRoles.Count == 0)
{
_LikePlayerNames.gameObject.SetActive(false);
}
else
{
_LikePlayerNames.gameObject.SetActive(true);
string likeNameStr = "";
for (int i = 0; i < _BlogInfo.LikeRoles.Count; ++i)
{
likeNameStr += StrDictionary.GetClientDictionaryString("#{39003}", _BlogInfo.LikeRoles[i].Rolename, _BlogInfo.LikeRoles[i].Roleguid);
}
_LikePlayerNames._MsgInfo.ShowLinkStr(likeNameStr);
}
}
private void InitLikeBtn()
{
if (_BlogInfo.IsLikeBlog)
{
_BtnLike.gameObject.SetActive(false);
_BtnDisLike.gameObject.SetActive(true);
}
else
{
_BtnLike.gameObject.SetActive(true);
_BtnDisLike.gameObject.SetActive(false);
}
if (_BlogInfo.Comments.Count == 0 && _BlogInfo.LikeRoles.Count == 0)
{
_CommentContainer.gameObject.SetActive(false);
}
else
{
_CommentContainer.gameObject.SetActive(true);
}
_LikeCnt.text = _BlogInfo.LikeCnt.ToString();
}
public static string GetBlogTimeStr(int serverTime)
{
GuiTextDebug.debug("Blog ServerTime:" + serverTime);
string timeStr = "";
var dateTime = Utils.GetServerDateTime(serverTime);
var nowTime = Utils.GetServerDateTime();
if (dateTime.Day == nowTime.Day && dateTime.Hour == nowTime.Hour)
{
timeStr = StrDictionary.GetClientDictionaryString("#{39014}", nowTime.Minute - dateTime.Minute);
}
else if (dateTime.Day == nowTime.Day)
{
timeStr = StrDictionary.GetClientDictionaryString("#{39001}", nowTime.Hour - dateTime.Hour);
}
else
{
timeStr = StrDictionary.GetClientDictionaryString("#{39002}", dateTime.Month, dateTime.Day);
}
return timeStr;
}
public void OnBtnDelete()
{
MessageBoxLogic.OpenOKCancelBox(39008, -1, OnDeleteOk);
}
private void OnDeleteOk()
{
CG_REQ_DELETE_BLOG packet = (CG_REQ_DELETE_BLOG)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_DELETE_BLOG);
packet.Blogguid = _BlogInfo.GUID;
packet.SendPacket();
}
public void OnFwording()
{
var targetSprite = _Icon;
if (!_Icon.isActiveAndEnabled)
{
targetSprite = CommunityLogic.Instance()._Icon;
}
if (_BlogInfo.ForwardingBlog != null)
{
targetSprite = _ForwardingContex._Icon;
}
if (targetSprite == null)
{
targetSprite = CommunityLogic.Instance()._Icon;
}
CommunityLogic.Instance().ShowFwording(_BlogInfo, targetSprite);
}
public void OnBtnLike()
{
Community.Instance.SetLikeBlog(this);
}
public void AddLike()
{
++_BlogInfo.LikeCnt;
_BlogInfo.LikeRoles.Insert(0, new LikedRoleInfo() { Roleguid = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid, Rolename = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.RoleName });
_BlogInfo.IsLikeBlog = true;
InitLikeNames();
InitLikeBtn();
}
public void OnBtnDisLike()
{
Community.Instance.SetDisLikeBlog(this);
}
public void RemoveLike()
{
--_BlogInfo.LikeCnt;
var myGuid = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid;
var myLikeInfo = _BlogInfo.LikeRoles.Find((likeRole) =>
{
if (likeRole.Roleguid == myGuid)
return true;
return false;
});
if (myLikeInfo != null)
{
_BlogInfo.LikeRoles.Remove(myLikeInfo);
}
_BlogInfo.IsLikeBlog = false;
InitLikeNames();
InitLikeBtn();
}
public void OnBtnShowComment()
{
_RetBlogComment = null;
_BlogOptPanel.SetActive(false);
_CommentOptPanel.SetActive(true);
_CommentRet.text = StrDictionary.GetClientDictionaryString("#{39006}", _BlogInfo.Name);
}
public void OnBtnShowOpt()
{
_RetBlogComment = null;
_BlogOptPanel.SetActive(true);
_CommentOptPanel.SetActive(false);
}
public void OnCommentClick(object commentObj)
{
BlogComment blogComment = commentObj as BlogComment;
if (blogComment == null)
return;
_BlogOptPanel.SetActive(false);
_CommentOptPanel.SetActive(true);
_RetBlogComment = blogComment;
_CommentRet.text = StrDictionary.GetClientDictionaryString("#{39006}", _RetBlogComment.Rolename);
}
public void OnCommentSend(string commentContex)
{
if (string.IsNullOrEmpty(commentContex))
{
return;
}
if (Utils.IsStrFilter_Chat(commentContex))
{
GUIData.AddNotifyData("#{39025}");
return;
}
LogModule.DebugLog("Comment:" + commentContex);
ulong guid;
if(_RetBlogComment != null)
guid = _RetBlogComment.Roleguid;
else
guid = GlobeVar.INVALID_GUID;
Community.Instance.SetCommentBlog(this, commentContex, guid);
}
public void UpdateMyComment(string commentContex, int index)
{
BlogComment blogComment = new BlogComment();
blogComment.Index = index;
blogComment.Roleguid = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid;
blogComment.Rolename = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.RoleName;
blogComment.Comment = commentContex;
if (_RetBlogComment != null)
{
blogComment.Desguid = _RetBlogComment.Roleguid;
blogComment.Desname = _RetBlogComment.Rolename;
}
_BlogInfo.Comments.Insert(0, blogComment);
if (_BlogInfo.Comments.Count > 0)
{
Hashtable hash = new Hashtable();
hash.Add("ShowDelete", true);
hash.Add("BlogInfo", _BlogInfo);
hash.Add("BlogItem", this);
_CommentContainer._ContainerObj.gameObject.SetActive(true);
_CommentContainer.gameObject.SetActive(true);
_LastCommentIdx = -1;
for (int i = 0; i < _BlogInfo.Comments.Count; ++i)
{
if (_LastCommentIdx < _BlogInfo.Comments[i].Index)
{
_LastCommentIdx = _BlogInfo.Comments[i].Index;
}
}
_CommentContainer.InitContentItem(_BlogInfo.Comments, OnCommentClick, hash);
}
else
{
_CommentContainer._ContainerObj.gameObject.SetActive(false);
_CommentContainer.InitContentItem(null);
}
_CommentCnt.text = (++_BlogInfo.CommentCnt).ToString();
OnBtnShowOpt();
}
#region comment list
private int _LastCommentIdx = 0;
public void ShowComments()
{
//if (!_IsFixedCommentHeight)
{
if (_BlogInfo.Comments.Count > 0)
{
Hashtable hash = new Hashtable();
hash.Add("ShowDelete", true);
hash.Add("BlogInfo", _BlogInfo);
hash.Add("BlogItem", this);
_CommentContainer._ContainerObj.gameObject.SetActive(true);
_CommentContainer.gameObject.SetActive(true);
_LastCommentIdx = -1;
for (int i = 0; i < _BlogInfo.Comments.Count; ++i)
{
if (_LastCommentIdx < _BlogInfo.Comments[i].Index)
{
_LastCommentIdx = _BlogInfo.Comments[i].Index;
}
}
_CommentContainer.InitContentItem(_BlogInfo.Comments, OnCommentClick, hash);
}
else
{
_CommentContainer._ContainerObj.gameObject.SetActive(false);
_CommentContainer.InitContentItem(null);
}
}
//else
//{
// _BlogInfo.Comments.Clear();
// _CommentContainer.InitContentItem(null);
// _LastCommentIdx = 0;
//}
}
public void ReloadComments()
{
CG_REQ_VIEW_BLOG_COMMENT packet = (CG_REQ_VIEW_BLOG_COMMENT)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_VIEW_BLOG_COMMENT);
packet.Blogguid = _BlogInfo.GUID;
packet.Curindex = 0;
packet.Desindex = _BlogInfo.Comments.Count;
packet.Count = _BlogInfo.Comments.Count;
packet.SendPacket();
}
public void LoadMoreComment(int num = 20)
{
CG_REQ_VIEW_BLOG_COMMENT packet = (CG_REQ_VIEW_BLOG_COMMENT)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_VIEW_BLOG_COMMENT);
packet.Blogguid = _BlogInfo.GUID;
packet.Curindex = _LastCommentIdx;
packet.Desindex = packet.Curindex + 10000;
packet.Count = num;
packet.SendPacket();
//RetBlogDetailCommentsTest();
}
public void ReloadCommentRet(GC_RET_VIEW_BLOG_COMMENT packet)
{
if (packet.Blogguid != _BlogInfo.GUID)
return;
for (int i = 0; i < packet.commentCount; ++i)
{
BlogComment blogComment = new BlogComment();
blogComment.Index = packet.GetIndex(i);
blogComment.Roleguid = packet.GetRoleguid(i);
blogComment.Rolename = packet.GetRolename(i);
blogComment.Comment = packet.GetComment(i);
blogComment.Desguid = packet.GetTargetguid(i);
blogComment.Desname = packet.GetTargetname(i);
if (_LastCommentIdx < blogComment.Index)
{
_LastCommentIdx = blogComment.Index;
}
_BlogInfo.Comments.Add(blogComment);
}
InitLikeBtn();
if (_BlogInfo.Comments.Count > 0)
{
_CommentContainer._ContainerObj.gameObject.SetActive(true);
_CommentContainer.gameObject.SetActive(true);
Hashtable hash = new Hashtable();
hash.Add("ShowDelete", true);
hash.Add("BlogInfo", _BlogInfo);
hash.Add("BlogItem", this);
_CommentContainer.InitContentItem(_BlogInfo.Comments, OnCommentClick, hash);
}
else
{
_CommentContainer._ContainerObj.gameObject.SetActive(false);
_CommentContainer.InitContentItem(null);
}
}
public void RetBlogDetailComments(GC_RET_VIEW_BLOG_COMMENT packet)
{
if (packet.Blogguid != _BlogInfo.GUID)
return;
for (int i = 0; i < packet.commentCount; ++i)
{
BlogComment blogComment = new BlogComment();
blogComment.Index = packet.GetIndex(i);
blogComment.Roleguid = packet.GetRoleguid(i);
blogComment.Rolename = packet.GetRolename(i);
blogComment.Comment = packet.GetComment(i);
blogComment.Desguid = packet.GetTargetguid(i);
blogComment.Desname = packet.GetTargetname(i);
if (_LastCommentIdx < blogComment.Index)
{
_LastCommentIdx = blogComment.Index;
}
_BlogInfo.Comments.Add(blogComment);
}
InitLikeBtn();
if (_BlogInfo.Comments.Count > 0)
{
_CommentContainer._ContainerObj.gameObject.SetActive(true);
_CommentContainer.gameObject.SetActive(true);
Hashtable hash = new Hashtable();
hash.Add("ShowDelete", true);
hash.Add("BlogInfo", _BlogInfo);
hash.Add("BlogItem", this);
_CommentContainer.InitContentItem(_BlogInfo.Comments, OnCommentClick, hash);
}
else
{
_CommentContainer._ContainerObj.gameObject.SetActive(false);
_CommentContainer.InitContentItem(null);
}
}
public void RetBlogDetailCommentsTest()
{
for (int i = 0; i < 10; ++i)
{
BlogComment blogComment = new BlogComment();
_BlogInfo.Comments.Add(blogComment);
blogComment.Roleguid = (ulong)(i + _LastCommentIdx);
blogComment.Rolename = _LastCommentIdx.ToString();
blogComment.Comment = "test " + _LastCommentIdx;
blogComment.Desguid = GlobeVar.INVALID_GUID;
blogComment.Desname = "";
++_LastCommentIdx;
}
Hashtable hash = new Hashtable();
hash.Add("ShowDelete", true);
hash.Add("BlogInfo", _BlogInfo);
hash.Add("BlogItem", this);
_CommentContainer.InitContentItem(_BlogInfo.Comments, OnCommentClick, hash);
}
#endregion
#region comment rect
public LayoutElement _CommentLayout;
private RectTransform _CommentRect;
private bool _IsFixedCommentHeight;
private void CommentHeightUpdate()
{
if (_IsFixedCommentHeight)
{
if (_CommentRect == null)
{
_CommentRect = _CommentLayout.GetComponent<RectTransform>();
}
_CommentLayout.preferredHeight = -_CommentRect.anchoredPosition.y + 30;
}
else
{
if (_CommentContainer._ContainerObj.gameObject.activeSelf)
{
_CommentLayout.preferredHeight = _CommentContainer._ContainerObj.sizeDelta.y;
}
else
{
_CommentLayout.preferredHeight = 0;
}
if (_LikePlayerNames.gameObject.activeSelf)
{
_CommentLayout.preferredHeight += _LikePlayerNames._MsgInfo._ContexText.rectTransform.sizeDelta.y + 5;
}
}
if (_ContexText._ContexText.rectTransform.sizeDelta.y > 300)
{
_ContentLayout.enabled = true;
_ContentLayout.preferredHeight = 300;
_ContexText._ContexText.verticalOverflow = VerticalWrapMode.Truncate;
}
}
#endregion
#region
public override void OnItemClick()
{
base.OnItemClick();
if (!_IsFixedCommentHeight)
{
CommunityLogic.Instance().ShowBlogDetail(_BlogInfo);
}
}
#endregion
}