//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Tuesday, June 11, 2019
|
//--------------------------------------------------------
|
|
using UnityEngine.UI;
|
using vnxbqy.UI;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.EventSystems;
|
using DG.Tweening;
|
|
public class HolidayRefuseClassificationWin : ILWindow
|
{
|
List<Transform> bins = new List<Transform>();
|
List<Image> binImages = new List<Image>();
|
List<UIEffect> uiEffectIn = new List<UIEffect>();
|
List<UIEffect> uiEffectOut = new List<UIEffect>();
|
Button rankBtn;
|
Button collectBtn;
|
ItemCell dragItem;
|
ItemCell selectItem;
|
Text itemName;
|
Text itemDesc;
|
Transform itemDescFrame;
|
Text resultMsg;
|
ScrollerController m_ItemScrollControl;
|
Text envValue;
|
|
float sortableTime = 0; //整理背包间隔
|
PointerEventData data; //点击事件
|
float ImageHideTime = 0; //图片的动态显示和特效搭配
|
Vector3 showPosition;
|
|
PackModel playerPack { get { return ModelCenter.Instance.GetModelEx<PackModel>(); } }
|
|
#region Built-in
|
protected override void BindController()
|
{
|
bins.Clear();
|
bins.Add(proxy.GetWidgtEx<Transform>("bin1"));
|
bins.Add(proxy.GetWidgtEx<Transform>("bin2"));
|
bins.Add(proxy.GetWidgtEx<Transform>("bin3"));
|
bins.Add(proxy.GetWidgtEx<Transform>("bin4"));
|
binImages.Clear();
|
binImages.Add(proxy.GetWidgtEx<Image>("image1"));
|
binImages.Add(proxy.GetWidgtEx<Image>("image2"));
|
binImages.Add(proxy.GetWidgtEx<Image>("image3"));
|
binImages.Add(proxy.GetWidgtEx<Image>("image4"));
|
uiEffectIn.Clear();
|
uiEffectIn.Add(proxy.GetWidgtEx<UIEffect>("uieffectIn1"));
|
uiEffectIn.Add(proxy.GetWidgtEx<UIEffect>("uieffectIn2"));
|
uiEffectIn.Add(proxy.GetWidgtEx<UIEffect>("uieffectIn3"));
|
uiEffectIn.Add(proxy.GetWidgtEx<UIEffect>("uieffectIn4"));
|
uiEffectOut.Clear();
|
uiEffectOut.Add(proxy.GetWidgtEx<UIEffect>("uieffectOut1"));
|
uiEffectOut.Add(proxy.GetWidgtEx<UIEffect>("uieffectOut2"));
|
uiEffectOut.Add(proxy.GetWidgtEx<UIEffect>("uieffectOut3"));
|
uiEffectOut.Add(proxy.GetWidgtEx<UIEffect>("uieffectOut4"));
|
m_ItemScrollControl = proxy.GetWidgtEx<ScrollerController>("ScrollerControl");
|
rankBtn = proxy.GetWidgtEx<Button>("rank");
|
collectBtn = proxy.GetWidgtEx<Button>("collectBtn");
|
dragItem = proxy.GetWidgtEx<ItemCell>("DragItem");
|
|
selectItem = proxy.GetWidgtEx<ItemCell>("selectItem");
|
itemName = proxy.GetWidgtEx<Text>("itemName");
|
itemDesc = proxy.GetWidgtEx<Text>("itemDesc");
|
resultMsg = proxy.GetWidgtEx<Text>("ResultMsg");
|
itemDescFrame = proxy.GetWidgtEx<Transform>("itemDescFrame");
|
envValue = proxy.GetWidgtEx<Text>("envValue");
|
|
}
|
|
protected override void AddListeners()
|
{
|
rankBtn.SetListener(()=> {
|
WindowCenter.Instance.OpenIL<HolidayEnvRankWin>();
|
});
|
|
collectBtn.SetListener(() => {
|
WindowCenter.Instance.OpenIL<HolidayGarbageCollectionWin>();
|
});
|
}
|
|
protected override void OnPreOpen()
|
{
|
SortPack();
|
UIDragDropBehaviour.draging = false;
|
ImageHideTime = 0;
|
ShowMsgTime = 0;
|
addValueEx = 0;
|
dragItem.SetActiveIL(false);
|
resultMsg.SetActiveIL(false);
|
|
m_ItemScrollControl.OnRefreshCell += OnRefreshCell;
|
HolidayRefuseClassificationModel.Instance.onDropResult += onDropResult;
|
playerPack.refreshItemCountEvent += refreshItemCountEvent;
|
GameEvent.OnRefrechPackEvent += refrechPackEvent;
|
HolidayRefuseClassificationModel.Instance.onSelectUpdate += OnSelectEvent;
|
GameEvent.playerDataRefreshEvent += OnPlayerDataRefreshEvent;
|
|
HolidayRefuseClassificationModel.Instance.selectIndex = 0;
|
Display();
|
|
//取消新活动红点
|
LocalSave.SetBool(StringUtility.Contact(PlayerDatas.Instance.PlayerId, "ActGarbageRedPoint"), false);
|
HolidayRefuseClassificationModel.Instance.UpdateRedpoint();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
Display();
|
}
|
|
private void SortPack()
|
{
|
if (Time.time - sortableTime > 5)
|
{
|
ItemLogicUtility.Instance.ResetPack(PackType.default1);
|
sortableTime = Time.time;
|
}
|
}
|
|
|
|
protected override void OnPreClose()
|
{
|
m_ItemScrollControl.OnRefreshCell -= OnRefreshCell;
|
HolidayRefuseClassificationModel.Instance.onDropResult -= onDropResult;
|
playerPack.refreshItemCountEvent -= refreshItemCountEvent;
|
GameEvent.OnRefrechPackEvent -= refrechPackEvent;
|
HolidayRefuseClassificationModel.Instance.onSelectUpdate -= OnSelectEvent;
|
GameEvent.playerDataRefreshEvent -= OnPlayerDataRefreshEvent;
|
|
}
|
|
|
|
protected override void LateUpdate()
|
{
|
ShowImage();
|
|
if (UIDragDropBehaviour.draging)
|
{
|
if (dragItem.gameObject.activeSelf == false)
|
{
|
data = new PointerEventData(EventSystem.current);
|
dragItem.SetActiveIL(true);
|
HolidayRefuseClassificationModel.Instance.selectIndex = UIDragDropBehaviour.dragData;
|
var item = HolidayRefuseClassificationModel.Instance.packModel.GetItemByIndex(HolidayRefuseClassificationModel.Instance.selectIndex);
|
if (item == null)
|
{
|
return;
|
}
|
var model = new ItemCellModel(item.itemId, false, 1);
|
dragItem.Init(model);
|
m_ItemScrollControl.mScrollRect.OnEndDrag(data);
|
}
|
|
var mousePosition = new Vector2();
|
mousePosition.x = Input.mousePosition.x;
|
mousePosition.y = Input.mousePosition.y;
|
Vector2 pos;
|
var contain = RectTransformUtility.ScreenPointToLocalPointInRectangle(this.transform as RectTransform, mousePosition, CameraManager.uiCamera, out pos);
|
if (contain)
|
{
|
showPosition = new Vector3(pos.x, pos.y, 0);
|
dragItem.GetComponent<RectTransform>().localPosition = showPosition;
|
}
|
|
if (Input.GetMouseButtonUp(0))
|
{
|
TryDropGarbage();
|
UIDragDropBehaviour.draging = false;
|
dragItem.SetActiveIL(false);
|
}
|
}
|
else
|
{
|
data = null;
|
}
|
|
}
|
|
|
#endregion
|
|
|
void TryDropGarbage()
|
{
|
for (int i = 0; i < bins.Count; i++)
|
{
|
var des = RectTransformUtility.CalculateRelativeRectTransformBounds(transform, bins[i]);
|
var src = RectTransformUtility.CalculateRelativeRectTransformBounds(transform, dragItem.transform);
|
var dis = Vector3.Distance(des.center, src.center);
|
|
if (dis < 100)
|
{
|
HolidayRefuseClassificationModel.Instance.SendGarbageSorting(HolidayRefuseClassificationModel.Instance.selectIndex, i + 1);
|
break;
|
}
|
}
|
}
|
|
|
private void OnSelectEvent()
|
{
|
m_ItemScrollControl.m_Scorller.RefreshActiveCellViews();
|
DisplayItemDesc();
|
}
|
|
void Display()
|
{
|
DisplayScrollor();
|
DisplayItemDesc();
|
|
envValue.text = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default4).ToString();
|
}
|
|
void DisplayScrollor()
|
{
|
if (m_ItemScrollControl.GetNumberOfCells(m_ItemScrollControl.m_Scorller) > 0)
|
{
|
m_ItemScrollControl.m_Scorller.RefreshActiveCellViews();
|
}
|
else
|
{
|
var lines = HolidayRefuseClassificationModel.Instance.packModel.unlockedGridCount / 5;
|
m_ItemScrollControl.Refresh();
|
for (int i = 0; i < lines; i++)
|
{
|
m_ItemScrollControl.AddCell(ScrollerDataType.Header, i);
|
|
}
|
m_ItemScrollControl.Restart();
|
}
|
}
|
|
void DisplayItemDesc()
|
{
|
var item = HolidayRefuseClassificationModel.Instance.packModel.GetItemByIndex(HolidayRefuseClassificationModel.Instance.selectIndex);
|
if (item == null)
|
{
|
itemDescFrame.SetActiveIL(false);
|
return;
|
}
|
|
itemDescFrame.SetActiveIL(true);
|
var model = new ItemCellModel(item.itemId, false, 1);
|
selectItem.Init(model);
|
itemName.text = item.config.ItemName;
|
itemDesc.text = item.config.Description;
|
}
|
|
|
private void refreshItemCountEvent(PackType type, int index, int id)
|
{
|
if (type != PackType.default1)
|
return;
|
|
DisplayScrollor();
|
DisplayItemDesc();
|
}
|
|
|
private void refrechPackEvent(PackType type)
|
{
|
if (type != PackType.default1)
|
return;
|
m_ItemScrollControl.JumpIndex(0);
|
DisplayScrollor();
|
DisplayItemDesc();
|
}
|
|
private void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
int gridlineIndex = cell.index;
|
|
for (int childCode = 0; childCode < cell.transform.childCount; childCode++)
|
{
|
GarbageGirdCell gridCell = cell.transform.GetChild(childCode).GetILBehaviour<GarbageGirdCell>();
|
gridCell.Display(cell.transform.childCount * gridlineIndex + childCode);
|
}
|
}
|
|
|
|
void onDropResult(int type, int isRight, int addValue)
|
{
|
//显示特效,文字飘动,底图隐藏
|
int index = type - 1;
|
if (isRight == 1)
|
{
|
uiEffectIn[index].Play();
|
}
|
else
|
{
|
uiEffectOut[index].Play();
|
}
|
ImageHideTime = Time.time;
|
binImages[index].SetActiveIL(false);
|
|
isRightEx = isRight;
|
addValueEx = addValue;
|
//ResultMsgAnimate(isRight, addValue);
|
}
|
int isRightEx = 0;
|
int addValueEx = 0;
|
float ShowMsgTime = -1;
|
private void ShowImage()
|
{
|
if (ImageHideTime != -1 && (Time.time - ImageHideTime) > 0.5)
|
{
|
for (int i = 0; i < binImages.Count; i++)
|
{
|
binImages[i].SetActiveIL(true);
|
}
|
|
ImageHideTime = -1;
|
if (addValueEx != 0)
|
{
|
ResultMsgAnimate(isRightEx, addValueEx);
|
ShowMsgTime = Time.time;
|
}
|
}
|
if (ShowMsgTime != -1 && (Time.time - ShowMsgTime) > 1)
|
{
|
resultMsg.SetActiveIL(false);
|
ShowMsgTime = -1;
|
addValueEx = 0;
|
}
|
}
|
|
private void ResultMsgAnimate(int isRight, int addValue)
|
{
|
resultMsg.SetActiveIL(true);
|
if (isRight == 1)
|
{
|
resultMsg.text = Language.Get("GarbageSortingRight", addValue);
|
}
|
else
|
{
|
resultMsg.text = Language.Get("GarbageSortingWrong", addValue);
|
}
|
resultMsg.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
|
//resultMsg.GetComponent<RectTransform>().localPosition = showPosition;
|
//OnComplete无效 改update里处理消失
|
resultMsg.transform.DOScale(new Vector3(1, 1, 1), 0.3f).SetEase(Ease.Linear).Play();
|
|
}
|
|
|
void OnPlayerDataRefreshEvent(PlayerDataType dataType)
|
{
|
if (dataType != PlayerDataType.default4)
|
{
|
return;
|
}
|
envValue.text = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.default4).ToString();
|
}
|
}
|