using vnxbqy.UI; using System; using System.Collections.Generic; using UnityEngine.UI; using System.Linq; using LitJson; public class HolidayRefuseClassificationModel : ILModel { 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 tasksInfo = new Dictionary(); public int hisEnvValueTotal = 0; public event Action onDropResult; public event Action OnGarbageTaskPack; public SinglePack packModel; PackModel playerPack { get { return ModelCenter.Instance.GetModelEx(); } } 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 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(); } }