Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
224 lines
6.5 KiB
C#
224 lines
6.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using LitJson;
|
|
using UnityEngine;
|
|
|
|
namespace Wizard;
|
|
|
|
public class MyRotationAllInfo
|
|
{
|
|
public class PeriodData
|
|
{
|
|
public DateTime BeginTime = DateTime.MaxValue;
|
|
|
|
public DateTime EndTime = DateTime.MinValue;
|
|
|
|
public double StartUnixTime { get; set; }
|
|
|
|
public double EndUnixTime { get; set; }
|
|
}
|
|
|
|
private Dictionary<string, MyRotationInfo> _myRotationDictionary = new Dictionary<string, MyRotationInfo>();
|
|
|
|
public PeriodData GatheringPeriod = new PeriodData();
|
|
|
|
public PeriodData FreeMatchPeriod = new PeriodData();
|
|
|
|
private bool _myRotationScheduleExist;
|
|
|
|
private float _receiveSinceTime;
|
|
|
|
private double _receiveServerUnixTime;
|
|
|
|
public List<MyRotationInfo> MyRotationInfoList { get; } = new List<MyRotationInfo>();
|
|
|
|
public MyRotationInfo FirstPackInfo { get; private set; }
|
|
|
|
public MyRotationInfo FirstPackInfoNemesis { get; private set; }
|
|
|
|
public List<MyRotationAbilityGroup> AbilityGroup { get; private set; } = new List<MyRotationAbilityGroup>();
|
|
|
|
public List<string> DisableCardPackIdList { get; private set; } = new List<string>();
|
|
|
|
public bool IsFinishInitializeText { get; private set; }
|
|
|
|
public bool IsMyRotationEnable => IsWithinPeriod(FreeMatchPeriod);
|
|
|
|
public bool IsWithinGatheringPeriod => IsWithinPeriod(GatheringPeriod);
|
|
|
|
public bool IsWithinFreeMatchPeriod => IsWithinPeriod(FreeMatchPeriod);
|
|
|
|
public bool IsWithinCopyDeckIntroductionPeriod => IsWithinFreeMatchPeriod;
|
|
|
|
public void InitializeText()
|
|
{
|
|
IsFinishInitializeText = true;
|
|
int num = int.MaxValue;
|
|
int num2 = int.MaxValue;
|
|
foreach (MyRotationInfo myRotationInfo in MyRotationInfoList)
|
|
{
|
|
myRotationInfo.InitializeText();
|
|
int num3 = int.Parse(myRotationInfo.LastPackId);
|
|
if (num3 < num)
|
|
{
|
|
num = num3;
|
|
FirstPackInfo = myRotationInfo;
|
|
}
|
|
if (myRotationInfo.IsEnableNemesis && num3 < num2)
|
|
{
|
|
num2 = num3;
|
|
FirstPackInfoNemesis = myRotationInfo;
|
|
}
|
|
}
|
|
InitializeAbilityGroup();
|
|
InitializeRePrintCard();
|
|
}
|
|
|
|
private void InitializeRePrintCard()
|
|
{
|
|
CardMaster instance = CardMaster.GetInstance(FormatBehaviorManager.GetDefaultBehaviour(Format.MyRotation).CardMasterId);
|
|
List<int> allCardIds = instance.GetAllCardIds();
|
|
List<CardParameter> list = new List<CardParameter>(allCardIds.Count);
|
|
foreach (int item in allCardIds)
|
|
{
|
|
list.Add(instance.GetCardParameterFromId(item));
|
|
}
|
|
foreach (MyRotationInfo myRotationInfo in MyRotationInfoList)
|
|
{
|
|
myRotationInfo.InitializeRePrintCard(list);
|
|
}
|
|
}
|
|
|
|
public MyRotationInfo Get(string id)
|
|
{
|
|
if (string.IsNullOrEmpty(id))
|
|
{
|
|
return null;
|
|
}
|
|
if (_myRotationDictionary.TryGetValue(id, out var value))
|
|
{
|
|
return value;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private void InitializeAbilityGroup()
|
|
{
|
|
if (MyRotationInfoList.Count == 0)
|
|
{
|
|
return;
|
|
}
|
|
MyRotationInfo myRotationInfo = MyRotationInfoList[0];
|
|
MyRotationInfo lastPack = MyRotationInfoList[0];
|
|
bool isFirst = true;
|
|
for (int i = 0; i < MyRotationInfoList.Count; i++)
|
|
{
|
|
MyRotationInfo myRotationInfo2 = MyRotationInfoList[i];
|
|
if (!MyRotationInfo.IsEqualAbility(myRotationInfo, myRotationInfo2))
|
|
{
|
|
AbilityGroup.Add(CreateGroup(myRotationInfo, lastPack, isFirst));
|
|
isFirst = false;
|
|
myRotationInfo = (lastPack = myRotationInfo2);
|
|
}
|
|
else
|
|
{
|
|
lastPack = myRotationInfo2;
|
|
}
|
|
}
|
|
AbilityGroup.Add(CreateGroup(myRotationInfo, lastPack, isFirst));
|
|
}
|
|
|
|
private static MyRotationAbilityGroup CreateGroup(MyRotationInfo startPack, MyRotationInfo lastPack, bool isFirst)
|
|
{
|
|
int startNumber = int.Parse(startPack.LastPackId) - 10000;
|
|
int lastNumber = int.Parse(lastPack.LastPackId) - 10000;
|
|
string shortName = Data.Master.CardSetNameMgr.Get(startPack.LastPackId).ShortName;
|
|
string shortName2 = Data.Master.CardSetNameMgr.Get(lastPack.LastPackId).ShortName;
|
|
if (isFirst)
|
|
{
|
|
startNumber = int.Parse(startPack.FirstPackId) - 10000;
|
|
shortName = Data.Master.CardSetNameMgr.Get(startPack.FirstPackId).ShortName;
|
|
}
|
|
return new MyRotationAbilityGroup(startNumber, lastNumber, shortName, shortName2, startPack.Abilities);
|
|
}
|
|
|
|
public void Parse(JsonData json, JsonData headerData)
|
|
{
|
|
JsonData jsonData = json["setting"];
|
|
JsonData jsonData2 = json["restricted_base_card_id_list"];
|
|
JsonData jsonData3 = json["abilities"];
|
|
foreach (string key in jsonData.Keys)
|
|
{
|
|
MyRotationInfo myRotationInfo = new MyRotationInfo(jsonData[key]);
|
|
_myRotationDictionary[myRotationInfo.Id] = myRotationInfo;
|
|
MyRotationInfoList.Add(myRotationInfo);
|
|
}
|
|
if (jsonData2.IsObject)
|
|
{
|
|
foreach (string key2 in jsonData2.Keys)
|
|
{
|
|
_myRotationDictionary[key2].ParseRestrictJson(jsonData2[key2]);
|
|
}
|
|
}
|
|
JsonData jsonData4 = json["reprinted_base_card_ids"];
|
|
if (jsonData4.IsObject)
|
|
{
|
|
foreach (string key3 in jsonData4.Keys)
|
|
{
|
|
_myRotationDictionary[key3].ParseRePrintJson(jsonData4[key3]);
|
|
}
|
|
}
|
|
if (jsonData3.IsObject)
|
|
{
|
|
foreach (MyRotationInfo myRotationInfo2 in MyRotationInfoList)
|
|
{
|
|
myRotationInfo2.ParseAbilitiesJson(jsonData3);
|
|
}
|
|
}
|
|
JsonData jsonData5 = json["schedules"];
|
|
if (jsonData5.IsObject)
|
|
{
|
|
if (jsonData5.TryGetValue("gathering", out var value))
|
|
{
|
|
SetPeriodData(GatheringPeriod, value);
|
|
}
|
|
if (jsonData5.TryGetValue("free_battle", out var value2))
|
|
{
|
|
SetPeriodData(FreeMatchPeriod, value2);
|
|
_myRotationScheduleExist = true;
|
|
_receiveSinceTime = Time.realtimeSinceStartup;
|
|
_receiveServerUnixTime = headerData["servertime"].ToDouble();
|
|
}
|
|
}
|
|
if (json.TryGetValue("disable_card_set_ids", out var value3))
|
|
{
|
|
for (int i = 0; i < value3.Count; i++)
|
|
{
|
|
DisableCardPackIdList.Add(value3[i].ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
private void SetPeriodData(PeriodData period, JsonData jsonData)
|
|
{
|
|
period.BeginTime = DateTime.Parse(jsonData["begin_time"].ToString());
|
|
period.EndTime = DateTime.Parse(jsonData["end_time"].ToString());
|
|
period.StartUnixTime = ConvertTime.DateTimeToUnixTime(DateTime.Parse(jsonData["begin_time"].ToString()));
|
|
period.EndUnixTime = ConvertTime.DateTimeToUnixTime(DateTime.Parse(jsonData["end_time"].ToString()));
|
|
}
|
|
|
|
private bool IsWithinPeriod(PeriodData period)
|
|
{
|
|
if (!_myRotationScheduleExist)
|
|
{
|
|
return false;
|
|
}
|
|
double num = _receiveServerUnixTime + (double)Time.realtimeSinceStartup - (double)_receiveSinceTime;
|
|
if (num >= period.EndUnixTime)
|
|
{
|
|
return false;
|
|
}
|
|
return num > period.StartUnixTime;
|
|
}
|
|
}
|