Files
gamer147 824309ec44 feat(battle-engine): close the AI-simulation subsystem (verbatim)
Copied the 89 uncopied AI*SimulationUtility/extension files defining the
AIVirtualCard/AIVirtualField extension methods; the compile loop then auto-closed
the revealed type deps (~3049 files total, drift-clean). 10.0k -> 62 errors.
2026-06-05 20:30:59 -04:00

420 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Cute;
using UnityEngine;
namespace Wizard;
public class Chat : UIBase
{
public enum eRequestDirection
{
OLD = 1,
NEW,
BOTH
}
private const int MAX_PAST_MESSAGE_REQUEST = 30;
private int _pastMessageRequestCnt;
private IChatSettings _chatSettings;
[SerializeField]
private ChatConnectController _chatConnectController;
[SerializeField]
private ChatLogUI _chatLogUI;
[SerializeField]
private ChatSendTextUI _chatSendTextUI;
[SerializeField]
private ChatSendStampUI _sendStampUI;
[SerializeField]
private UIEventListener _sendUICloseArea;
[SerializeField]
private RewardBase _rewardBase;
private bool _isPastLogComplete;
private int _pastVisibleMessageCnt;
private bool _isInitComplete;
public Action<ChatInfo> OnAddNewChatMessage { get; set; }
public Action<List<string>> OnMissionCleared { get; set; }
public void Init(IChatSettings chatSettings, List<IChatActionUI> chatActionUIList, List<int> stampList, NetworkDefine.MAINTENANCE_TYPE maintenanceType, Action<ChatInfo> OnFinish)
{
_chatSettings = chatSettings;
_chatConnectController.Init(PollingChatLog, OnConnectResultError);
_chatSendTextUI.Init(SendTextMessage, OnOpenTextInputUI, OnCloseTextInputUI);
UIManager.SetObjectToGrey(_chatSendTextUI.gameObject, Data.MaintenanceCodeList.Contains(maintenanceType));
_sendStampUI.Init(SendStamp, OnOpenStampUI, OnCloseStampUI, stampList);
_chatLogUI.Init(chatSettings, _chatConnectController, stampList);
foreach (IChatActionUI chatActionUI in chatActionUIList)
{
chatActionUI.Init(_chatSettings, _chatConnectController, _chatLogUI, AddNewChatLogAfterSendChat);
}
UIEventListener sendUICloseArea = _sendUICloseArea;
sendUICloseArea.onClick = (UIEventListener.VoidDelegate)Delegate.Combine(sendUICloseArea.onClick, (UIEventListener.VoidDelegate)delegate
{
_chatSendTextUI.CloseInputUI(isClearText: false);
_sendStampUI.CloseStampList();
});
StartConnectChatInfo(delegate(ChatInfo chatInfo)
{
_isInitComplete = true;
OnFinish.Call(chatInfo);
});
}
public void ReadyClose()
{
_chatConnectController.Close();
}
public void ExecuteClose()
{
_chatLogUI.CloseChatLogView();
UnityEngine.Object.Destroy(base.gameObject);
}
private void OnConnectResultError()
{
UIManager.GetInstance().CloseNotLatestDialogAll();
_chatLogUI.CloseDeckView();
}
private void OnOpenTextInputUI(ChatOpenCloseAnimation openCloseAnim)
{
_sendStampUI.CloseStampList();
_chatLogUI.ChangeLogViewSizeByInputUIAnimation(openCloseAnim);
}
private void OnCloseTextInputUI(ChatOpenCloseAnimation openCloseAnim)
{
if (!_sendStampUI.IsOpen)
{
_chatLogUI.ChangeLogViewSizeByInputUIAnimation(openCloseAnim);
}
}
private void SendTextMessage(string text)
{
ChatPostTask chatPostTask = new ChatPostTask(_chatSettings.ApiSettings.ApiChatPost);
chatPostTask.SetParameter(0, text);
_chatConnectController.StartConnectCommon(chatPostTask, delegate
{
_chatConnectController.PausePolling();
_chatSendTextUI.CloseInputUI(isClearText: true, delegate
{
AddNewChatLogAfterSendChat();
_chatConnectController.ResumePolling();
});
});
}
private void OnOpenStampUI(ChatOpenCloseAnimation openCloseAnim)
{
_chatSendTextUI.CloseInputUI(isClearText: false);
_chatLogUI.ChangeLogViewSizeByInputUIAnimation(openCloseAnim);
}
private void OnCloseStampUI(ChatOpenCloseAnimation openCloseAnim)
{
if (!_chatSendTextUI.IsOpen)
{
_chatLogUI.ChangeLogViewSizeByInputUIAnimation(openCloseAnim);
}
}
private void SendStamp(int id)
{
ChatPostTask task = new ChatPostTask(_chatSettings.ApiSettings.ApiChatPost);
task.SetParameter(1, id.ToString());
_chatConnectController.StartConnectCommon(task, delegate
{
_chatConnectController.PausePolling();
_sendStampUI.CloseStampList(delegate
{
AddNewChatLogAfterSendChat();
_chatConnectController.ResumePolling();
});
if (task.AchievedInfo != null && task.AchievedInfo._rewards.Count > 0)
{
UIManager.GetInstance().createInSceneCenterLoading();
DialogBase dialogBase = UIManager.GetInstance().CreateDialogClose();
dialogBase.SetSize(DialogBase.Size.M);
dialogBase.SetTitleLabel(Data.SystemText.Get("Story_0029"));
dialogBase.SetButtonLayout(DialogBase.ButtonLayout.OkBtn);
RewardBase component = NGUITools.AddChild(dialogBase.gameObject, _rewardBase.gameObject).GetComponent<RewardBase>();
for (int num = 0; num < task.AchievedInfo._rewards.Count; num++)
{
component.AddReward(task.AchievedInfo._rewards[num]);
}
List<string> messages = new List<string>();
for (int num2 = 0; num2 < task.AchievedInfo._missions.Count; num2++)
{
messages.Add(task.AchievedInfo._missions[num2].achieved_message);
}
dialogBase.OnClose = delegate
{
if (OnMissionCleared != null)
{
OnMissionCleared(messages);
}
};
component.EndCreate();
}
});
}
private void AddNewChatLogAfterSendChat()
{
AddNewChatLog(delegate
{
_chatLogUI.MoveNewMessagePosition();
});
}
private bool GetCanUpdateUI()
{
if (UIManager.GetInstance().isOpenDialog())
{
return false;
}
if (_chatLogUI.IsShowDeckView())
{
return false;
}
return true;
}
private void Update()
{
if (!_chatLogUI.IsEnableUpdateUI && GetCanUpdateUI())
{
_chatLogUI.SetEnableUpdateUI();
}
}
private void PollingChatLog()
{
AddNewChatLog(null, isPolling: true);
}
private void StartConnectChatInfo(Action<ChatInfo> callbackOnSuccess)
{
int value = PlayerPrefsWrapper.GetValue(_chatSettings.PlayerPrefsKeyLatestReadChatMessageId);
if (value >= 0)
{
CreateChatLogReadMessage(value, callbackOnSuccess);
}
else
{
CreateChatLog(callbackOnSuccess);
}
}
private void CreateChatLogReadMessage(int latestMessageId, Action<ChatInfo> callbackOnSuccess)
{
ChatGetMessagesTask task = new ChatGetMessagesTask(_chatSettings.ApiSettings.ApiChatMessages);
task.SetParameter(latestMessageId, eRequestDirection.BOTH, 3);
_chatConnectController.StartConnectCommon(task, delegate
{
ChatInfo chatInfo = task.ChatInfo;
_chatConnectController.UpdatePollingInterval(chatInfo.WaitInterval);
int unreadMessageId = -1;
List<ChatMessageInfo> visibleMessageList = chatInfo.VisibleMessageList;
if (visibleMessageList.Count > 0)
{
int messageId = visibleMessageList.Last().MessageId;
if (latestMessageId != messageId)
{
int num = visibleMessageList.FindIndex((ChatMessageInfo x) => x.MessageId == latestMessageId) + 1;
if (num > 0 && visibleMessageList.Count > num)
{
unreadMessageId = visibleMessageList[num].MessageId;
}
SaveReadLatestId(messageId);
}
}
_pastVisibleMessageCnt += chatInfo.VisibleMessageList.Count;
_chatLogUI.CreateChatLogView(chatInfo.MessageList, OnInitializeOldestLog, delegate
{
if (CheckNeedsPastVisibleMessage(chatInfo))
{
AddPastChatLog(delegate
{
_chatLogUI.ResetScrollDefaultPosition(unreadMessageId);
callbackOnSuccess.Call(chatInfo);
});
}
else
{
callbackOnSuccess.Call(chatInfo);
}
}, unreadMessageId);
});
}
private void CreateChatLog(Action<ChatInfo> callbackOnSuccess)
{
ChatGetMessagesTask task = new ChatGetMessagesTask(_chatSettings.ApiSettings.ApiChatMessages);
task.SetParameterLatestLog(3);
_chatConnectController.StartConnectCommon(task, delegate
{
ChatInfo chatInfo = task.ChatInfo;
_chatConnectController.UpdatePollingInterval(chatInfo.WaitInterval);
if (chatInfo.VisibleMessageList.Count > 0)
{
SaveReadLatestId(chatInfo.VisibleMessageList.Last().MessageId);
}
_pastVisibleMessageCnt += chatInfo.VisibleMessageList.Count;
_chatLogUI.CreateChatLogView(chatInfo.MessageList, OnInitializeOldestLog, delegate
{
if (CheckNeedsPastVisibleMessage(chatInfo))
{
AddPastChatLog(delegate
{
_chatLogUI.ResetScrollDefaultPosition();
callbackOnSuccess.Call(chatInfo);
});
}
else
{
callbackOnSuccess.Call(chatInfo);
}
});
});
}
private void OnInitializeOldestLog()
{
if (_isInitComplete)
{
AddPastChatLog();
}
}
private bool CheckNeedsPastVisibleMessage(ChatInfo chatInfo)
{
if (_pastMessageRequestCnt > 30)
{
ResetPastMessageCnt();
return false;
}
bool num = NeedsPastMessage(chatInfo);
if (!num)
{
ResetPastMessageCnt();
}
return num;
}
private bool NeedsPastMessage(ChatInfo chatInfo)
{
if (_isPastLogComplete)
{
return false;
}
if (!chatInfo.IsIncludeInvisibleMessage)
{
return false;
}
if (_pastVisibleMessageCnt > 10)
{
return false;
}
return true;
}
private void ResetPastMessageCnt()
{
_pastVisibleMessageCnt = 0;
_pastMessageRequestCnt = 0;
}
private void AddNewChatLog(Action callbackOnSuccess = null, bool isPolling = false)
{
ChatGetMessagesTask task = new ChatGetMessagesTask(_chatSettings.ApiSettings.ApiChatMessages);
_chatConnectController.ResetPolling();
if (_chatLogUI.ChatAllLogList.Count > 0)
{
int messageId = _chatLogUI.ChatAllLogList.Last().MessageId;
task.SetParameter(messageId, eRequestDirection.NEW, _chatConnectController.PollingInterval);
}
else
{
task.SetParameterLatestLog(_chatConnectController.PollingInterval);
}
_chatConnectController.StartConnectCommon(task, delegate
{
ChatInfo chatInfo = task.ChatInfo;
_chatConnectController.UpdatePollingInterval(chatInfo.WaitInterval);
if (chatInfo.MessageList.Count <= 0)
{
callbackOnSuccess.Call();
}
else
{
if (chatInfo.VisibleMessageList.Count > 0)
{
SaveReadLatestId(chatInfo.VisibleMessageList.Last().MessageId);
}
_chatLogUI.AddChatLogView(chatInfo, eRequestDirection.NEW, GetCanUpdateUI(), callbackOnSuccess);
OnAddNewChatMessage.Call(chatInfo);
}
}, isPolling);
}
private void AddPastChatLog(Action onFinish = null)
{
if (_isPastLogComplete)
{
ResetPastMessageCnt();
onFinish.Call();
return;
}
int messageId = _chatLogUI.ChatAllLogList[0].MessageId;
ChatGetMessagesTask task = new ChatGetMessagesTask(_chatSettings.ApiSettings.ApiChatMessages);
task.SetParameter(messageId, eRequestDirection.OLD, _chatConnectController.PollingInterval);
_chatConnectController.StartConnectCommon(task, delegate
{
_pastMessageRequestCnt++;
ChatInfo chatInfo = task.ChatInfo;
if (chatInfo.MessageList.Count <= 0)
{
_isPastLogComplete = true;
}
_chatConnectController.UpdatePollingInterval(chatInfo.WaitInterval);
_chatLogUI.AddChatLogView(chatInfo, eRequestDirection.OLD);
_pastVisibleMessageCnt += chatInfo.VisibleMessageList.Count;
if (CheckNeedsPastVisibleMessage(chatInfo))
{
AddPastChatLog(onFinish);
}
else
{
onFinish.Call();
}
});
}
private void SaveReadLatestId(int latestMessageId)
{
PlayerPrefsWrapper.SetValue(_chatSettings.PlayerPrefsKeyLatestReadChatMessageId, latestMessageId);
}
public void StartConnectCommon(NetworkTask task, Action<NetworkTask.ResultCode> callbackOnSuccess, bool isPolling = false)
{
_chatConnectController.StartConnectCommon(task, callbackOnSuccess, isPolling);
}
}