using vnxbqy.UI;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using LitJson;
|
|
|
/// <summary>
|
/// 合服-转盘
|
/// </summary>
|
|
public class MergeServerTurntableModel : ILModel<MergeServerTurntableModel>
|
{
|
public ILOpenServerActivityProxy activity;
|
public Operation operationType = Operation.default9;
|
public const int activityID = 2;
|
public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_HFHD;
|
|
public event Action PlayerTurntableEvent;
|
public int[] jpPosition; //展示极品位置
|
public int[] zjPosition;
|
|
public int turntableCount;
|
public int ctgTotal;
|
public int useMoneyTotal;
|
public int turnItemState; //转盘物品已抽中记录,按转盘物品编号二进制位代表是否已抽中
|
public int getItemNum; //本次抽中的物品编号,非转盘结果时为0,大于0时为通知本次转到的物品编号
|
public const int itemCount = 12;
|
public int runIndex = 0; //转圈的位置,已经获得的物品不再转 itemSort的索引
|
public int runState = 0; //0未开始 1起步转(加速) 2结束转(减速)
|
|
//客户端排序对应下发的物品索引turnItemList //物品库类型;1-常规,2-极品,3-终极
|
//-1 为未分配 -2为空
|
public List<int> itemSort = new List<int>();
|
public bool IsOpen()
|
{
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(operationType);
|
}
|
|
public bool IsAdvance()
|
{
|
return false;
|
}
|
|
public bool priorityOpen()
|
{
|
//红点
|
return redpoint.state == RedPointState.Simple;
|
}
|
|
|
public event Action<int> onStateUpdate;
|
public event Action OnOperationTimeUpdateEvent; //为了保证执行顺序
|
|
|
protected override void Init()
|
{
|
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
|
OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
|
GameEvent.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
|
GameEvent.playerLoginOkEvent += OnPlayerLoginOk;
|
ILOperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent;
|
activity = new ILOpenServerActivityProxy(IsOpen, IsAdvance, priorityOpen);
|
OpenServerActivityCenter.Instance.Register(activityID, activity, activityType);
|
|
ParseConfig();
|
}
|
|
void ParseConfig()
|
{
|
var config = FuncConfigConfig.Get("HFTurntable");
|
jpPosition = JsonMapper.ToObject<int[]>(config.Numerical1);
|
zjPosition = JsonMapper.ToObject<int[]>(config.Numerical2);
|
|
}
|
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
turntableCount = 0;
|
ctgTotal = 0;
|
useMoneyTotal = 0;
|
turnItemState = 0;
|
getItemNum = 0;
|
itemSort.Clear();
|
}
|
|
|
public void OnPlayerLoginOk()
|
{
|
UpdateRedpoint();
|
}
|
|
protected override void UnInit()
|
{
|
OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
|
OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
|
GameEvent.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
|
GameEvent.playerLoginOkEvent -= OnPlayerLoginOk;
|
ILOperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent;
|
}
|
|
private void operationTimeUpdateEvent(Operation type)
|
{
|
if (type == operationType)
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationTurntable operation = operationBase as OperationTurntable;
|
//-1 为未分配 -2为空
|
itemSort.Clear();
|
for (int i = 0; i < itemCount; i++)
|
{
|
itemSort.Add(-1);
|
}
|
|
//物品库类型;1-常规,2-极品,3-终极
|
for (int i = 0; i < jpPosition.Length; i++)
|
{
|
if (operation.itemTypeIndexs.ContainsKey(2))
|
{
|
if (i < operation.itemTypeIndexs[2].Count)
|
{
|
itemSort[jpPosition[i]] = operation.itemTypeIndexs[2][i];
|
}
|
else
|
{
|
itemSort[jpPosition[i]] = -2;
|
}
|
}
|
else
|
{
|
itemSort[jpPosition[i]] = -2;
|
}
|
}
|
|
for (int i = 0; i < zjPosition.Length; i++)
|
{
|
if (operation.itemTypeIndexs.ContainsKey(3))
|
{
|
if (i < operation.itemTypeIndexs[3].Count)
|
{
|
itemSort[zjPosition[i]] = operation.itemTypeIndexs[3][i];
|
}
|
else
|
{
|
itemSort[zjPosition[i]] = -2;
|
}
|
}
|
else
|
{
|
itemSort[zjPosition[i]] = -2;
|
}
|
}
|
|
int normalIndex = 0;
|
for (int i = 0; i < itemSort.Count; i++)
|
{
|
if (itemSort[i] == -1)
|
{
|
itemSort[i] = operation.itemTypeIndexs[1][normalIndex];
|
normalIndex++;
|
}
|
}
|
|
OnOperationTimeUpdateEvent?.Invoke();
|
}
|
}
|
|
private void DayResetEvent(int resetType)
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
if (resetType == operationBase.resetType)
|
{
|
UpdateRedpoint();
|
}
|
}
|
}
|
|
private void OperationEndEvent(Operation operation, int state)
|
{
|
if (operation == operationType && state == 0)
|
{
|
UpdateRedpoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(activityID);
|
}
|
}
|
}
|
|
private void OperationStartEvent(Operation operation, int state)
|
{
|
if (operation == operationType && state == 0)
|
{
|
UpdateRedpoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(activityID);
|
}
|
}
|
}
|
|
#region 服务端数据
|
public void UpdatePlayerTurntable(IL_HAA53_tagMCActTurntablePlayerInfo package)
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
OperationTurntable operation = operationBase as OperationTurntable;
|
if (operation.ActNum != package.ActNum)
|
{
|
return;
|
}
|
turntableCount = package.CanUseCount;
|
ctgTotal = (int)package.CTGTotal;
|
useMoneyTotal = (int)package.UseMoneyTotal;
|
turnItemState = (int)package.TurnItemState;
|
getItemNum = (int)package.GetItemNum;
|
|
|
UpdateRedpoint();
|
if (PlayerTurntableEvent != null)
|
{
|
PlayerTurntableEvent();
|
}
|
}
|
}
|
|
//是否已抽中
|
public bool IsHitItemState(int index)
|
{
|
return ((int)Math.Pow(2, index) & turnItemState) != 0;
|
}
|
|
public int GetRunStartIndex()
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return -1;
|
}
|
OperationTurntable operation = operationBase as OperationTurntable;
|
|
if (itemSort.Contains(-2))
|
{
|
return -1;
|
}
|
for (int i = 0; i < itemCount; i++)
|
{
|
|
if (!IsHitItemState(operation.turnItemList[itemSort[i]].ItemNum))
|
{
|
return i;
|
}
|
|
}
|
return -1;
|
}
|
|
//将ItemNum转化为显示的索引
|
public int GetHitIndex()
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return -1;
|
}
|
OperationTurntable operation = operationBase as OperationTurntable;
|
for (int i = 0; i < itemCount; i++)
|
{
|
if (getItemNum == operation.turnItemList[itemSort[i]].ItemNum)
|
{
|
return i;
|
}
|
}
|
return -1;
|
}
|
|
|
#endregion
|
|
|
#region 红点
|
public Redpoint redpoint = new Redpoint(MainRedPoint.hfhdRedPoint, MainRedPoint.hfhdRedPoint * 100 + activityID);
|
public void UpdateRedpoint()
|
{
|
redpoint.state = RedPointState.None;
|
if (!IsOpen())
|
{
|
return;
|
}
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
OperationTurntable operation = operationBase as OperationTurntable;
|
if (turntableCount > 0)
|
{
|
redpoint.state = RedPointState.Simple;
|
}
|
}
|
}
|
#endregion
|
}
|