//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, January 28, 2019
|
//--------------------------------------------------------
|
|
using System;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using vnxbqy.UI;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
public class CrossServerBattleFieldCallWin : ILWindow
|
{
|
Button Btn_OK;
|
ButtonEx Btn_ChatCall;
|
Text chatText;
|
Button Btn_Close;
|
Image faction;
|
Text leader;
|
List<Text> teamMarks = new List<Text>();
|
List<Button> joinBtns = new List<Button>();
|
List<Transform> playerObjs = new List<Transform>();
|
List<Text> playerNames = new List<Text>();
|
List<Button> kickBtns = new List<Button>();
|
List<Transform> noPlayerObjs = new List<Transform>();
|
ToggleButton onlyThisServer;
|
Text callLimit;
|
|
int callTick = 0;
|
int cdTime = 300;
|
int factionType;
|
#region Built-in
|
protected override void BindController()
|
{
|
Btn_OK = proxy.GetWidgtEx<Button>("OK");
|
Btn_ChatCall = proxy.GetWidgtEx<ButtonEx>("chat");
|
chatText = proxy.GetWidgtEx<Text>("chatText");
|
Btn_Close = proxy.GetWidgtEx<Button>("CloseBtn");
|
faction = proxy.GetWidgtEx<Image>("Image");
|
leader = proxy.GetWidgtEx<Text>("leader");
|
|
for (int i = 0; i < 3; i++)
|
{
|
teamMarks.Add(proxy.GetWidgtEx<Text>("teamMark" + i));
|
joinBtns.Add(proxy.GetWidgtEx<Button>("enter" + i));
|
playerObjs.Add(proxy.GetWidgtEx<Transform>("playername" + i));
|
playerNames.Add(proxy.GetWidgtEx<Text>("TextEx" + i));
|
kickBtns.Add(proxy.GetWidgtEx<Button>("kick" + i));
|
noPlayerObjs.Add(proxy.GetWidgtEx<Transform>("noplayer" + i));
|
}
|
onlyThisServer = proxy.GetWidgtEx<ToggleButton>("Toggle_Inevitable");
|
callLimit = proxy.GetWidgtEx<Text>("callLimit");
|
}
|
|
protected override void AddListeners()
|
{
|
Btn_OK.SetListener(() => {
|
WindowCenter.Instance.CloseIL<CrossServerBattleFieldCallWin>();
|
});
|
|
Btn_ChatCall.SetListener(CallWorld);
|
|
Btn_Close.SetListener(()=> {
|
WindowCenter.Instance.CloseIL<CrossServerBattleFieldCallWin>();
|
});
|
|
onlyThisServer.SetListener(ChangeCallRange);
|
}
|
|
protected override void OnPreOpen()
|
{
|
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
|
ILCrossServerModel.Instance.UpdateBuyInfoEvent += Display;
|
Display();
|
}
|
|
protected override void OnPreClose()
|
{
|
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
|
ILCrossServerModel.Instance.UpdateBuyInfoEvent -= Display;
|
}
|
#endregion
|
|
bool isLeader = false; //是否本方阵营的购买者
|
uint leaderID = 0;
|
bool isOtherLeader = false;
|
bool isInFaction = false; //是否在本阵营中
|
List<string> players = new List<string>();
|
List<uint> playerIDs = new List<uint>();
|
bool isThisServerCall = false;
|
|
float lastClick;
|
void ChangeCallRange()
|
{
|
if (Time.time - lastClick < 5)
|
{
|
SysNotifyMgr.Instance.ShowTip("RequestLater");
|
return;
|
}
|
lastClick = Time.time;
|
//onlyThisServer.isOn = !onlyThisServer.isOn; 待回包显示
|
int index = Math.Max(ILCrossServerModel.Instance.selectIndex, 0);
|
var int3Config = ILCrossServerModel.Instance.crossBattleFieldOpenTimes[index];
|
|
var pack = new IL_CC009_tagCGCrossBattlefieldCallChange();
|
pack.Hour = (byte)int3Config.x;
|
pack.Minute = (byte)int3Config.y;
|
if (!onlyThisServer.isOn) //待回包显示 反着取值
|
{
|
pack.ServerOnly = 1;
|
}
|
else
|
{
|
pack.ServerOnly = 0;
|
}
|
GameNetSystem.Instance.SendInfo(pack);
|
}
|
|
void Display()
|
{
|
|
factionType = proxy.functionOrder;
|
faction.SetSprite("GSZCIcon" + factionType);
|
//找出购买者,显示不同不可加入对方阵营
|
//参与者可以切换阵营,已在加入阵营中 不可再加入
|
var int3Config = ILCrossServerModel.Instance.crossBattleFieldOpenTimes[ILCrossServerModel.Instance.selectIndex];
|
|
Int2 timeInt2 = new Int2(int3Config.x, int3Config.y);
|
|
ParseFaction(timeInt2);
|
int num;
|
leader.text = ILCrossServerModel.Instance.GetLeaderName(factionType, timeInt2, out num);
|
|
for (int i = 0; i < teamMarks.Count; i++)
|
{
|
teamMarks[i].text = Language.Get("CrossBattleField32") + (i + 1);
|
joinBtns[i].SetActiveIL(!isLeader && i >= players.Count);
|
playerObjs[i].SetActiveIL(i < players.Count);
|
playerNames[i].text = i < players.Count ? players[i] : string.Empty;
|
kickBtns[i].SetActiveIL(isLeader);
|
noPlayerObjs[i].SetActiveIL(isLeader && i >= players.Count);
|
|
joinBtns[i].SetListener(()=> {
|
if (isInFaction && isOtherLeader)
|
{
|
return;
|
}
|
var pack = new IL_CC007_tagCGCrossBattlefieldJoinByCall();
|
pack.BuyPlayerID = leaderID;
|
pack.Hour = (byte)int3Config.x;
|
pack.Minute = (byte)int3Config.y;
|
GameNetSystem.Instance.SendInfo(pack);
|
});
|
|
int playerIndex = i;
|
kickBtns[i].SetListener(()=> {
|
if (!isLeader) return;
|
var pack = new IL_CC008_tagCGCrossBattlefieldCallKick();
|
pack.TagPlayerID = playerIDs[playerIndex];
|
pack.Hour = (byte)int3Config.x;
|
pack.Minute = (byte)int3Config.y;
|
GameNetSystem.Instance.SendInfo(pack);
|
});
|
}
|
Btn_ChatCall.SetActiveIL(isLeader);
|
Btn_OK.SetActiveIL(!isLeader);
|
OnSecondEvent();
|
|
if (isLeader)
|
{
|
onlyThisServer.SetActiveIL(true);
|
onlyThisServer.isOn = isThisServerCall;
|
callLimit.SetActiveIL(false);
|
}
|
else
|
{
|
onlyThisServer.SetActiveIL(false);
|
callLimit.SetActiveIL(isThisServerCall);
|
}
|
}
|
|
void ParseFaction(Int2 timeInt2)
|
{
|
isThisServerCall = false;
|
isLeader = false; //是否本方阵营的购买者
|
leaderID = 0;
|
isOtherLeader = false;
|
isInFaction = false; //是否在本阵营中
|
playerIDs.Clear();
|
players.Clear();
|
for (int i = 0; i < ILCrossServerModel.Instance.crossBattleFieldBuyDict[timeInt2].Count; i++)
|
{
|
var buyInfo = ILCrossServerModel.Instance.crossBattleFieldBuyDict[timeInt2][i];
|
if (buyInfo.BuyPlayerID == PlayerDatas.Instance.baseData.PlayerID)
|
{
|
if (buyInfo.Faction == factionType)
|
{
|
isLeader = true;
|
}
|
else
|
{
|
isOtherLeader = true;
|
}
|
}
|
|
if (buyInfo.Faction == factionType)
|
{
|
leaderID = buyInfo.BuyPlayerID;
|
for (int j = 0; j < buyInfo.FactionPlayerList.Length; j++)
|
{
|
if (buyInfo.FactionPlayerList[j].PlayerID == PlayerDatas.Instance.baseData.PlayerID)
|
{
|
isInFaction = true;
|
}
|
if (buyInfo.BuyPlayerID != buyInfo.FactionPlayerList[j].PlayerID)
|
{
|
players.Add(buyInfo.FactionPlayerList[j].PlayerName.Trim().Replace("\0", ""));
|
playerIDs.Add(buyInfo.FactionPlayerList[j].PlayerID);
|
}
|
}
|
isThisServerCall = buyInfo.ServerOnly == 1 ? true : false;
|
}
|
|
}
|
}
|
|
void CallWorld()
|
{
|
int index = Math.Max(ILCrossServerModel.Instance.selectIndex, 0);
|
var int3Config = ILCrossServerModel.Instance.crossBattleFieldOpenTimes[index];
|
|
var msg = Language.Get("CrossBattleField52", PlayerDatas.Instance.baseData.PlayerName, int3Config.x, int3Config.y.ToString("D2"), ILCrossServerModel.openUIMark + index + 1);
|
if (onlyThisServer.isOn)
|
{
|
// 世界频道
|
C0201_tagCTalkGong chatPack = new C0201_tagCTalkGong();
|
chatPack.Len = (ushort)ChatCtrl.GetUTF8InfoLen(msg);
|
chatPack.Content = msg;
|
GameNetSystem.Instance.SendInfo(chatPack);
|
}
|
else
|
{
|
// 跨服
|
C0208_tagCTalkCountry chatPack = new C0208_tagCTalkCountry();
|
chatPack.Len = (ushort)ChatCtrl.GetUTF8InfoLen(msg);
|
chatPack.Content = msg;
|
GameNetSystem.Instance.SendInfo(chatPack);
|
}
|
|
|
callTick = (int)Time.time;
|
}
|
|
void OnSecondEvent()
|
{
|
int nowTime = (int)Time.time;
|
if (callTick == 0 || nowTime >= (callTick + cdTime))
|
{
|
Btn_ChatCall.interactable = true;
|
Btn_ChatCall.SetColorful(null, true);
|
chatText.text = Language.Get("CrossBattleField36");
|
}
|
else
|
{
|
Btn_ChatCall.interactable = false;
|
Btn_ChatCall.SetColorful(null, false);
|
chatText.text = Language.Get("CrossBattleField36") + "(" + (cdTime - (nowTime - callTick)) + ")" ;
|
}
|
}
|
}
|