using System;
|
using UnityEngine;
|
namespace vnxbqy.UI
|
{
|
public class BlessedLandOtherCell : CellView
|
{
|
[SerializeField] RectTransform rectCombatScope;
|
[SerializeField] RectTransform rectItem;
|
[SerializeField] ImageEx imgExclusive;
|
[SerializeField] ButtonEx btnItemCell;
|
[SerializeField] UIEffect hostUIEffect;
|
[SerializeField] UIEffect theftUIEffect;
|
[SerializeField] Transform transHostStart;
|
[SerializeField] Transform transHostEnd;
|
[SerializeField] Transform transTheftStart;
|
[SerializeField] Transform transTheftEnd;
|
[SerializeField] ImageEx imgMyFlag;
|
[SerializeField] ImageEx imgHostCountBG;
|
[SerializeField] ImageEx imgHostArrow;
|
[SerializeField] ImageEx imgTheftCountBG;
|
[SerializeField] ImageEx imgTheftArrow;
|
[SerializeField] FrameEffect skeHostSpriteAnimation;
|
[SerializeField] FrameEffect skeTheftSpriteAnimation;
|
[SerializeField] AvatarCell hostHead;
|
[SerializeField] AvatarCell theftHead;
|
|
[SerializeField] TextEx txtHostCount;
|
[SerializeField] TextEx txtTheftCount;
|
[SerializeField] ImageEx imgPublicItemTime;
|
[SerializeField] TextEx txtPublicItemTime;
|
[SerializeField] TextEx txtSuperTime;
|
[SerializeField] ItemCell itemCell;
|
int index; //当前cell的索引
|
int state; //当前cell的state
|
float itemCellNowX; //itemCell中心点的Y值
|
float combatScopeLength; //可移动的总长度
|
float combatScopeMin; //可移动范围底部的Y值
|
float gridSpacing; //1格的具体距离
|
MineItemInfo mineItems;
|
BlessedLandModel blessedLandModel { get { return ModelCenter.Instance.GetModel<BlessedLandModel>(); } }
|
|
void Awake()
|
{
|
float itemCellWidth = rectItem.sizeDelta.x;
|
float combatScopeWidth = rectCombatScope.sizeDelta.x;
|
float itemCellSpacing = itemCellWidth / 2;
|
combatScopeLength = combatScopeWidth - itemCellWidth; //总可移动的距离 = 可移动范围的长度 - ItemCell的长度
|
combatScopeMin = itemCellSpacing;
|
gridSpacing = (float)Math.Round(combatScopeLength / 100, 4); //一格的距离
|
}
|
|
void OnEnable()
|
{
|
GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
|
WindowCenter.Instance.windowBeforeOpenEvent += OnWindowBeforeOpenEvent;
|
WindowCenter.Instance.windowBeforeCloseEvent += OnWindowBeforeCloseEvent;
|
}
|
|
void OnDisable()
|
{
|
GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
|
WindowCenter.Instance.windowBeforeOpenEvent -= OnWindowBeforeOpenEvent;
|
WindowCenter.Instance.windowBeforeCloseEvent -= OnWindowBeforeCloseEvent;
|
}
|
|
private void OnWindowBeforeCloseEvent(Window window)
|
{
|
if (window.name == "BlessedLandDetailsWin" || window.name == "BlessedLandCornucopiaWin"
|
|| window.name == "BlessedLandManageWin" || window.name == "BlessedLandWin"
|
|| window.name == "BlessedLandPKWin" || window.name == "BlessedLandRecordWin"
|
|| window.name == "BlessedLandSeekWin")
|
{
|
state = blessedLandModel.GetMyBlessedLandCellState(index);
|
bool isHost = state == 2 || state == 4 || state == 7 || state == 8 || state == 9 || state == 10;
|
bool isTheft = state == 5 || state == 6 || state == 7 || state == 8 || state == 9 || state == 10;
|
hostUIEffect.SetActive(isHost);
|
theftUIEffect.SetActive(isTheft);
|
}
|
}
|
|
private void OnWindowBeforeOpenEvent(Window window)
|
{
|
if (window.name == "BlessedLandDetailsWin" || window.name == "BlessedLandCornucopiaWin"
|
|| window.name == "BlessedLandManageWin" || window.name == "BlessedLandWin"
|
|| window.name == "BlessedLandPKWin" || window.name == "BlessedLandRecordWin"
|
|| window.name == "BlessedLandSeekWin")
|
{
|
hostUIEffect.SetActive(false);
|
theftUIEffect.SetActive(false);
|
}
|
}
|
|
private void OnSecondEvent()
|
{
|
if (state == 1 || state == 2 || state == 4 || state == 5 || state == 6 || state == 7 || state == 8 || state == 9 || state == 10)
|
{
|
if (!MineAreaItemConfig.Has(mineItems.MineID))
|
return;
|
UpdateItemCellPosition();
|
ChangeShow();
|
}
|
|
}
|
|
public void Display(int index)
|
{
|
this.index = index;
|
this.gameObject.name = "BlessedLandOtherCell_" + index;
|
if (!blessedLandModel.newAreaDataDict.ContainsKey(blessedLandModel.showPlayerId))
|
return;
|
mineItems = blessedLandModel.newAreaDataDict[blessedLandModel.showPlayerId].MineItems[index];
|
if (mineItems.MineID == 0 || !MineAreaItemConfig.GetKeys().Contains(mineItems.MineID.ToString()))
|
{
|
rectItem.SetActive(false);
|
txtSuperTime.SetActive(false);
|
imgExclusive.SetActive(false);
|
imgHostCountBG.SetActive(false);
|
imgTheftCountBG.SetActive(false);
|
skeHostSpriteAnimation.SetActive(false);
|
skeTheftSpriteAnimation.SetActive(false);
|
imgMyFlag.SetActive(false);
|
hostHead.bgImage.SetActive(false);
|
hostHead.avatarImage.SetActive(false);
|
hostHead.avatarFrameImage.SetActive(false);
|
imgHostArrow.SetActive(false);
|
imgTheftArrow.SetActive(false);
|
hostUIEffect.SetActive(false);
|
theftUIEffect.SetActive(false);
|
btnItemCell.SetActive(false);
|
imgPublicItemTime.SetActive(false);
|
txtPublicItemTime.SetActive(false);
|
return;
|
}
|
state = blessedLandModel.GetOtherBlessedLandCellState(index);
|
//0 无物品 1 有物品-超级物品-无人拉 2 有物品-超级物品-房主拉
|
//3 有物品-普通物品-无人拉 4 有物品-普通物品-房主拉 5 有物品-普通物品-玩家拉 6 有物品-普通物品-别人拉
|
//7 有物品-普通物品-房主和玩家抢-向房主移动 8 有物品-普通物品-房主和玩家抢-向玩家移动
|
//9 有物品-普通物品-房主和别人抢-向房主移动 10 有物品-普通物品-房主和别人抢-向别人移动
|
bool isHost = state == 2 || state == 4 || state == 7 || state == 8 || state == 9 || state == 10;
|
bool isTheft = state == 5 || state == 6 || state == 7 || state == 8 || state == 9 || state == 10;
|
bool isMoveToHost = state == 2 || state == 4 || state == 7 || state == 9;
|
bool isMoveToTheft = state == 5 || state == 6 || state == 8 || state == 10;
|
rectItem.SetActive(state != 0);
|
txtSuperTime.SetActive(state == 1);
|
imgExclusive.SetActive(state == 1 || state == 2);
|
imgHostCountBG.SetActive(isHost);
|
imgTheftCountBG.SetActive(isTheft);
|
skeHostSpriteAnimation.SetActive(isHost);
|
skeTheftSpriteAnimation.SetActive(isTheft);
|
hostHead.bgImage.SetActive(isTheft);
|
hostHead.avatarImage.SetActive(isTheft);
|
hostHead.avatarFrameImage.SetActive(isTheft);
|
imgMyFlag.SetActive(state == 5 || state == 7 || state == 8);
|
theftHead.SetActive(state == 6 || state == 9 || state == 10);
|
imgHostArrow.SetActive(isMoveToHost);
|
imgTheftArrow.SetActive(isMoveToTheft);
|
hostUIEffect.SetActive(isHost);
|
theftUIEffect.SetActive(isTheft);
|
btnItemCell.SetActive(true);
|
imgPublicItemTime.SetActive(state == 1 || state == 2 || state == 4 || isTheft);
|
txtPublicItemTime.SetActive(state == 2 || state == 4 || isTheft);
|
|
var com = hostUIEffect.AddMissingComponent<UIEffectTransmitController>();
|
com.start = transHostStart;
|
com.end = transHostEnd;
|
com.transmit = hostUIEffect;
|
com.scale = 22;
|
com.enabled = true;
|
|
com = theftUIEffect.AddMissingComponent<UIEffectTransmitController>();
|
com.start = transTheftStart;
|
com.end = transTheftEnd;
|
com.transmit = theftUIEffect;
|
com.scale = 22;
|
com.enabled = true;
|
|
var canvas = rectItem.AddMissingComponent<Canvas>();
|
canvas.overrideSorting = true;
|
canvas.sortingLayerName = "UI";
|
canvas.sortingOrder = 3001;
|
|
canvas = skeHostSpriteAnimation.AddMissingComponent<Canvas>();
|
canvas.overrideSorting = true;
|
canvas.sortingLayerName = "UI";
|
canvas.sortingOrder = 3001;
|
ChangeShow();
|
}
|
|
void ChangeShow()
|
{
|
txtHostCount.text = mineItems.WorkerCount.ToString();
|
txtTheftCount.text = mineItems.RobWorkerCount.ToString();
|
txtSuperTime.text = TimeUtility.SecondsToDHMS((int)mineItems.UpdTime + blessedLandModel.superRefreshDefaultSpecialItemOutputDurationSeconds - TimeUtility.AllSeconds);
|
txtPublicItemTime.text = TimeUtility.SecondsToDHMS((int)mineItems.EndTime - TimeUtility.AllSeconds);
|
MineAreaInfo mineAreaInfo = blessedLandModel.newAreaDataDict[blessedLandModel.showPlayerId];
|
hostHead.InitUI(blessedLandModel.showPlayerId < 10000 ? blessedLandModel.GetModelForPlayerId((int)blessedLandModel.showPlayerId) : AvatarHelper.GetAvatarModel((int)mineAreaInfo.PlayerID, (int)mineAreaInfo.Face, (int)mineAreaInfo.FacePic, (int)mineAreaInfo.Job));
|
theftHead.InitUI(mineItems.RobPlayerID < 10000 ? blessedLandModel.GetModelForPlayerId((int)mineItems.RobPlayerID) : AvatarHelper.GetAvatarModel((int)mineItems.RobPlayerID, (int)mineItems.RobFace, (int)mineItems.RobFacePic, (int)mineItems.RobJob));
|
UpdateItemCellPosition();
|
int itemID = MineAreaItemConfig.Get(mineItems.MineID).ItemID;
|
int itemLV = MineAreaItemConfig.Get(mineItems.MineID).ItemLV;
|
itemCell.Init(new ItemCellModel(itemID, false, (ulong)itemLV));
|
itemCell.countText.SetActive(true);
|
itemCell.countText.text = Language.Get("FashionDress106", itemLV);
|
btnItemCell.SetListener(() =>
|
{
|
//只有房主才能采集超级物品
|
if (mineItems.MineType == 1)
|
{
|
SysNotifyMgr.Instance.ShowTip("BlessedLand05");
|
return;
|
}
|
|
ModelCenter.Instance.GetModel<BlessedLandModel>().detailsIndex = (byte)index;
|
blessedLandModel.SendCB030Pack(blessedLandModel.showPlayerId, blessedLandModel.detailsIndex, mineItems.RobPlayerID == blessedLandModel.myPlayerId ? (byte)Mathf.Max(mineItems.RobWorkerCount, 1) : (byte)1, 1);
|
WindowCenter.Instance.Open<BlessedLandDetailsWin>();
|
});
|
}
|
|
void UpdateItemCellPosition()
|
{
|
float consumeTime = Mathf.Max(TimeUtility.AllSeconds - mineItems.UpdTime, 0);
|
float moveSpeed = float.Parse(mineItems.MoveSpeed);
|
float positionAdjustment = consumeTime * moveSpeed * gridSpacing;
|
positionAdjustment = state == 2 || state == 4 || state == 7 || state == 9 ? -positionAdjustment : positionAdjustment;
|
itemCellNowX = combatScopeMin + float.Parse(mineItems.Position) * gridSpacing + positionAdjustment;
|
if (itemCellNowX > combatScopeLength)
|
{
|
itemCellNowX = combatScopeLength;
|
}
|
if (itemCellNowX < combatScopeMin)
|
{
|
itemCellNowX = combatScopeMin;
|
}
|
rectItem.anchoredPosition = new Vector2(itemCellNowX, rectItem.anchoredPosition.y);
|
btnItemCell.GetComponent<RectTransform>().anchoredPosition = new Vector2(itemCellNowX, rectItem.anchoredPosition.y);
|
}
|
}
|
|
}
|