//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, October 16, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
|
namespace vnxbqy.UI
|
{
|
|
public class TeamTargetJoinLimitWin : Window, SecondWindowInterface
|
{
|
[SerializeField] Image m_MinLevelSign;
|
[SerializeField] Text m_MinLevel;
|
[SerializeField] RepeatedButton m_ReduceMinLevel;
|
[SerializeField] RepeatedButton m_AddMinLevel;
|
[SerializeField] Button m_AmendMinLevel;
|
[SerializeField] Image m_MaxLevelSign;
|
[SerializeField] Text m_MaxLevel;
|
[SerializeField] RepeatedButton m_ReduceMaxLevel;
|
[SerializeField] RepeatedButton m_AddMaxLevel;
|
[SerializeField] Button m_AmendMaxLevel;
|
[SerializeField] Transform m_ContainerNumKeyBoard;
|
[SerializeField] NumKeyBoard m_NumKeyBoard;
|
[SerializeField] TeamMissionGroup m_MissionList;
|
[SerializeField] Button m_Confirm;
|
[SerializeField] Text m_ActivityTime;
|
|
TeamModel model { get { return ModelCenter.Instance.GetModel<TeamModel>(); } }
|
DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
|
TeamMission missionBuf;
|
int minLevelBuf = 0;
|
int maxLevelBuf = 0;
|
AmendLevelType amendType = AmendLevelType.Min;
|
|
int minLevelLimit = 1;
|
int maxLevelLimit = 500;
|
|
#region Built-in
|
public Button close { get; set; }
|
|
protected override void BindController()
|
{
|
if (this is SecondWindowInterface)
|
{
|
var frame = this.GetComponentInChildren<SecondFrameLoader2>();
|
frame.Create();
|
close = frame.GetComponentInChildren<Button>();
|
}
|
}
|
|
protected override void AddListeners()
|
{
|
close.AddListener(CloseClick);
|
m_ReduceMinLevel.AddListener(ReduceMinLevel);
|
m_AddMinLevel.AddListener(AddMinLevel);
|
m_ReduceMaxLevel.AddListener(ReduceMaxLevel);
|
m_AddMaxLevel.AddListener(AddMaxLevel);
|
m_AmendMinLevel.AddListener(AmendMinLevel);
|
m_AmendMaxLevel.AddListener(AmendMaxLevel);
|
m_Confirm.AddListener(ConfirmTargetAndLimit);
|
m_NumKeyBoard.onConfirm.AddListener(OnNumKeyBoardSubmit);
|
}
|
|
protected override void OnPreOpen()
|
{
|
missionBuf = model.missionBuf;
|
RefreshTeammission(missionBuf.mapId, missionBuf.mapEx);
|
m_ContainerNumKeyBoard.SetActive(false);
|
m_MissionList.Init();
|
m_MissionList.OnMissionSelected(RefreshTeammission);
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
m_MissionList.OnMissionSelected(null);
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
#endregion
|
|
private void RefreshTeammission(int _mapId, int _mapEx)
|
{
|
missionBuf = new TeamMission(_mapId, _mapEx);
|
|
var mapId = _mapId == TeamModel.NONE_MISSION ? 0 : _mapId == TeamModel.CURRENTMAP_MISSION ? PlayerDatas.Instance.baseData.MapID : _mapId;
|
var mapEx = _mapEx <= 0 ? 0 : _mapEx;
|
var dungeonId = dungeonModel.GetDungeonId(mapId, mapEx);
|
|
if (mapId == 0)
|
{
|
minLevelBuf = 1;
|
maxLevelBuf = GeneralDefine.playerMaxLevel;
|
minLevelLimit = 1;
|
maxLevelLimit = GeneralDefine.playerMaxLevel;
|
}
|
else if (dungeonId != 0)
|
{
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
if (model.targetPreferences.ContainsKey(dungeonId))
|
{
|
var target = model.targetPreferences[dungeonId];
|
minLevelBuf = target.minLevel;
|
maxLevelBuf = target.maxLevel;
|
}
|
else
|
{
|
minLevelBuf = dungeonConfig.LVLimitMin;
|
maxLevelBuf = dungeonConfig.LVLimitMax != 0 ? dungeonConfig.LVLimitMax : GeneralDefine.playerMaxLevel;
|
}
|
|
minLevelLimit = dungeonConfig.LVLimitMin;
|
if (dungeonConfig.LVLimitMax < dungeonConfig.LVLimitMin)
|
{
|
maxLevelLimit = GeneralDefine.playerMaxLevel;
|
}
|
else
|
{
|
maxLevelLimit = dungeonConfig.LVLimitMax;
|
}
|
}
|
else
|
{
|
var key = mapId * 100 + mapEx;
|
if (model.targetPreferences.ContainsKey(key))
|
{
|
var target = model.targetPreferences[key];
|
minLevelBuf = target.minLevel;
|
maxLevelBuf = target.maxLevel;
|
}
|
else
|
{
|
minLevelBuf = 1;
|
maxLevelBuf = GeneralDefine.playerMaxLevel;
|
}
|
|
minLevelLimit = 1;
|
maxLevelLimit = GeneralDefine.playerMaxLevel;
|
}
|
|
UpdateMinLevelContent();
|
UpdateMaxLevelContent();
|
UpdateActivityTime();
|
}
|
|
private void ReduceMinLevel()
|
{
|
minLevelBuf = Mathf.Clamp(minLevelBuf - 1, minLevelLimit, maxLevelBuf);
|
UpdateMinLevelContent();
|
}
|
|
private void AddMinLevel()
|
{
|
minLevelBuf = Mathf.Clamp(minLevelBuf + 1, minLevelLimit, maxLevelBuf);
|
UpdateMinLevelContent();
|
}
|
|
private void AmendMinLevel()
|
{
|
amendType = AmendLevelType.Min;
|
m_ContainerNumKeyBoard.SetActive(true);
|
m_NumKeyBoard.Value = minLevelBuf.ToString();
|
m_NumKeyBoard.min = (uint)minLevelLimit;
|
m_NumKeyBoard.max = (uint)maxLevelBuf;
|
}
|
|
private void ReduceMaxLevel()
|
{
|
maxLevelBuf = Mathf.Clamp(maxLevelBuf - 1, minLevelBuf, maxLevelLimit);
|
UpdateMaxLevelContent();
|
}
|
|
private void AddMaxLevel()
|
{
|
maxLevelBuf = Mathf.Clamp(maxLevelBuf + 1, minLevelBuf, maxLevelLimit);
|
UpdateMaxLevelContent();
|
}
|
|
private void AmendMaxLevel()
|
{
|
amendType = AmendLevelType.Max;
|
m_ContainerNumKeyBoard.SetActive(true);
|
m_NumKeyBoard.Value = maxLevelBuf.ToString();
|
m_NumKeyBoard.min = (uint)minLevelBuf;
|
m_NumKeyBoard.max = (uint)maxLevelLimit;
|
}
|
|
private void ConfirmTargetAndLimit()
|
{
|
var mapId = missionBuf.mapId == TeamModel.NONE_MISSION ? 0 :
|
missionBuf.mapId == TeamModel.CURRENTMAP_MISSION ? PlayerDatas.Instance.baseData.MapID : missionBuf.mapId;
|
var mapEx = missionBuf.mapEx <= 0 ? 0 : missionBuf.mapEx;
|
|
var key = dungeonModel.GetDungeonId(mapId, mapEx);
|
|
if (key == 0)
|
{
|
key = missionBuf.mapId * 100 + missionBuf.mapEx;
|
}
|
|
model.targetPreferences[key] = new TeamTargetPreference(minLevelBuf, maxLevelBuf);
|
|
if (model.myTeam.inTeam)
|
{
|
model.RequestAmendTeamInfo(missionBuf, minLevelBuf, maxLevelBuf);
|
}
|
else
|
{
|
model.levelMinBuf = minLevelBuf;
|
model.levelMaxBuf = maxLevelBuf;
|
model.missionBuf = missionBuf;
|
}
|
|
CloseClick();
|
}
|
|
private void UpdateMinLevelContent()
|
{
|
m_MinLevelSign.SetActive(minLevelBuf != 0);
|
m_MinLevel.SetActive(minLevelBuf != 0);
|
if (minLevelBuf != 0)
|
{
|
m_MinLevelSign.SetActive(false);
|
m_MinLevel.text = minLevelBuf.ToString();
|
}
|
}
|
|
private void UpdateMaxLevelContent()
|
{
|
m_MaxLevelSign.SetActive(maxLevelBuf != 0);
|
m_MaxLevel.SetActive(maxLevelBuf != 0);
|
|
if (maxLevelBuf != 0)
|
{
|
m_MaxLevelSign.SetActive(false);
|
m_MaxLevel.text = maxLevelBuf.ToString();
|
}
|
}
|
|
private void OnNumKeyBoardSubmit(bool _value)
|
{
|
if (_value)
|
{
|
switch (amendType)
|
{
|
case AmendLevelType.Min:
|
minLevelBuf = Mathf.Clamp(int.Parse(m_NumKeyBoard.Value), 1, maxLevelBuf);
|
UpdateMinLevelContent();
|
break;
|
case AmendLevelType.Max:
|
maxLevelBuf = Mathf.Clamp(int.Parse(m_NumKeyBoard.Value), minLevelBuf, GeneralDefine.playerMaxLevel);
|
UpdateMaxLevelContent();
|
break;
|
}
|
|
m_ContainerNumKeyBoard.SetActive(false);
|
}
|
}
|
|
private void UpdateActivityTime()
|
{
|
DailyQuestOpenTime openTime;
|
if (dungeonModel.TryGetOpenTime(missionBuf.mapId, out openTime))
|
{
|
if (openTime.always)
|
{
|
m_ActivityTime.text = Language.Get("DailyQuest_NoTimeLimit");
|
}
|
else
|
{
|
var week = (int)TimeUtility.ServerNow.DayOfWeek;
|
var durations = openTime.GetHourMinuteByWeek(week);
|
if (durations != null)
|
{
|
var stringArray = new string[durations.Count];
|
for (int i = 0; i < durations.Count; i++)
|
{
|
stringArray[i] = durations[i].ToString();
|
}
|
m_ActivityTime.text = string.Join(",", stringArray);
|
}
|
}
|
}
|
else
|
{
|
m_ActivityTime.text = Language.Get("DailyQuest_NoTimeLimit");
|
}
|
}
|
|
enum AmendLevelType
|
{
|
Min,
|
Max,
|
}
|
|
}
|
|
}
|
|
|
|
|