using vnxbqy.UI;
|
using System;
|
using System.Collections.Generic;
|
using UnityEngine.UI;
|
using System.Linq;
|
using LitJson;
|
|
public class HolidayRefuseClassificationModel : ILModel<HolidayRefuseClassificationModel>
|
{
|
public ILOpenServerActivityProxy activity;
|
|
public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_JRZF;
|
public const int activityID = 112;
|
public const Operation operationType = Operation.default3; //垃圾分类
|
//活动首次开启需要一次红点
|
public const int redpointID = 28012;
|
public Redpoint redpoint = new Redpoint(MainRedDot.RedPoint_HolidayWishes, redpointID);
|
public Redpoint redpointCol = new Redpoint(redpointID, 280121); //垃圾收集红点
|
public event Action onSelectUpdate;
|
|
//任务ID:x-当前总进度 y-完成次数 单次当前进度 = x-y*单次所需进度
|
Dictionary<int, Int2> tasksInfo = new Dictionary<int, Int2>();
|
public int hisEnvValueTotal = 0;
|
public event Action<int, int, int> onDropResult;
|
public event Action OnGarbageTaskPack;
|
|
public SinglePack packModel;
|
PackModel playerPack { get { return ModelCenter.Instance.GetModelEx<PackModel>(); } }
|
|
int m_SelectIndex = 0; //选择物品索引
|
public int selectIndex
|
{
|
get { return m_SelectIndex; }
|
set
|
{
|
if (m_SelectIndex != value)
|
{
|
m_SelectIndex = value;
|
if (onSelectUpdate != null)
|
{
|
onSelectUpdate();
|
}
|
}
|
}
|
}
|
|
protected override void Init()
|
{
|
GameEvent.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
|
ILOperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent;
|
playerPack.refreshItemCountEvent += refreshItemCountEvent;
|
GameEvent.OnRefrechPackEvent += refrechPackEvent;
|
GameEvent.playerLoginOkEvent += OnPlayerLoginOk;
|
activity = new ILOpenServerActivityProxy(IsOpen, IsAdvance, priorityOpen);
|
OpenServerActivityCenter.Instance.Register(activityID, activity, activityType);
|
}
|
|
protected override void UnInit()
|
{
|
GameEvent.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
|
ILOperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent;
|
playerPack.refreshItemCountEvent -= refreshItemCountEvent;
|
GameEvent.OnRefrechPackEvent -= refrechPackEvent;
|
GameEvent.playerLoginOkEvent -= OnPlayerLoginOk;
|
}
|
|
public bool IsOpen()
|
{
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(operationType);
|
}
|
|
public bool IsAdvance()
|
{
|
return false;
|
}
|
|
public bool priorityOpen()
|
{
|
//红点
|
return redpoint.state == RedPointState.Simple;
|
}
|
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
tasksInfo.Clear();
|
packModel = null;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
if (packModel == null)
|
packModel = playerPack.GetSinglePack(PackType.default1);
|
}
|
|
public void UpdateActGarbageTaskInfo(IL_HAA56_tagMCActGarbageTaskInfo package)
|
{
|
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationRefuseClassification operation = operationBase as OperationRefuseClassification;
|
if (operation.ActNum != package.ActNum)
|
{
|
return;
|
}
|
for (int i = 0; i < package.GarbageTaskList.Length; i++)
|
{
|
tasksInfo[package.GarbageTaskList[i].GarbageTaskID] = new Int2((int)package.GarbageTaskList[i].GarbageTaskValue, (int)package.GarbageTaskList[i].GarbageTaskFinishCount);
|
}
|
hisEnvValueTotal = (int)package.HisEnvValueTotal;
|
OnGarbageTaskPack?.Invoke();
|
|
UpdateRedpoint();
|
}
|
|
public Dictionary<int, Int2> GetGarbageTasksInfo()
|
{
|
return tasksInfo;
|
}
|
|
public Int2 TryGetTaskInfo(int id)
|
{
|
if (tasksInfo.ContainsKey(id))
|
{
|
return tasksInfo[id];
|
}
|
|
return Int2.zero;
|
}
|
|
public void UpdateActGarbageSortingResult(IL_HAA57_tagMCActGarbageSortingResult package)
|
{
|
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationRefuseClassification operation = operationBase as OperationRefuseClassification;
|
if (operation.ActNum != package.ActNum)
|
{
|
return;
|
}
|
hisEnvValueTotal = (int)package.HisEnvValueTotal;
|
onDropResult?.Invoke(package.GarbageSortingType, package.IsRight, (int)package.AddEnvValue);
|
}
|
|
private void operationTimeUpdateEvent(Operation type)
|
{
|
if (type == operationType)
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationRefuseClassification operation = operationBase as OperationRefuseClassification;
|
|
MarkNewActivity(operation.startDate.ToString());
|
|
UpdateRedpoint();
|
}
|
}
|
|
public void UpdateRedpoint()
|
{
|
redpoint.state = RedPointState.None;
|
redpointCol.state = RedPointState.None;
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationRefuseClassification operation = operationBase as OperationRefuseClassification;
|
|
if (GetGarbageCollectIndex() > -1)
|
{
|
redpointCol.state = RedPointState.Simple;
|
}
|
if (packModel == null)
|
packModel = playerPack.GetSinglePack(PackType.default1);
|
//新活动,垃圾未投放,可手动收集
|
if (LocalSave.GetBool(StringUtility.Contact(PlayerDatas.Instance.PlayerId, "ActGarbageRedPoint")) || packModel.GetAllItems().Count > 0)
|
{
|
redpoint.state = RedPointState.Simple;
|
}
|
}
|
|
|
public void SendGarbageSorting(int itemIndex, int garbageType)
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationRefuseClassification operation = operationBase as OperationRefuseClassification;
|
|
var pak = new IL_CAA14_tagCMActGarbageSorting();
|
pak.ActNum = (byte)operation.ActNum;
|
pak.GarbageSortingType = (byte)garbageType;
|
pak.ItemIndexCount = 1;
|
pak.ItemIndexList = new byte[] { (byte)itemIndex };
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
|
public void SendActGarbageGetTaskAward(int ID)
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationRefuseClassification operation = operationBase as OperationRefuseClassification;
|
|
var pak = new IL_CAA15_tagCMActGarbageGetTaskAward();
|
pak.ActNum = (byte)operation.ActNum;
|
pak.GarbageTaskID = (byte)ID;
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
|
//需要手动收集的位置
|
public int GetGarbageCollectIndex()
|
{
|
var idList = tasksInfo.Keys.ToList();
|
idList.Sort();
|
|
for (int i = 0; i < idList.Count; i++)
|
{
|
var id = idList[i];
|
|
//跳转到可手动收集行
|
var config = ILActGarbageTaskConfig.Get(id);
|
if (config != null)
|
{
|
if (config.AutoProduce == 1)
|
{
|
continue;
|
}
|
var taskInfo = TryGetTaskInfo(id);
|
if ((taskInfo.x - taskInfo.y * config.FinishNeedValue) >= config.FinishNeedValue)
|
{
|
return i;
|
}
|
}
|
}
|
return -1;
|
}
|
|
public void MarkNewActivity(string newActMark)
|
{
|
if (LocalSave.GetString(StringUtility.Contact(PlayerDatas.Instance.PlayerId, "ActGarbage")) != newActMark)
|
{
|
LocalSave.SetString(StringUtility.Contact(PlayerDatas.Instance.PlayerId, "ActGarbage"), newActMark);
|
LocalSave.SetBool(StringUtility.Contact(PlayerDatas.Instance.PlayerId, "ActGarbageRedPoint"), true);
|
}
|
}
|
|
private void refreshItemCountEvent(PackType type, int index, int id)
|
{
|
if (type != PackType.default1)
|
return;
|
UpdateRedpoint();
|
}
|
|
|
private void refrechPackEvent(PackType type)
|
{
|
if (type != PackType.default1)
|
return;
|
UpdateRedpoint();
|
}
|
}
|