Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/MyRotationAllInfo.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
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.
2026-06-05 17:22:20 -04:00

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;
}
}