Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/BattleParameter.cs
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

193 lines
6.2 KiB
C#

using LitJson;
using Wizard.RoomMatch;
namespace Wizard;
public class BattleParameter
{
public NetworkDefine.ServerBattleType BattleType { get; set; }
public Format DeckFormat { get; set; }
public RoomConnectController.BattleRule Rule { get; set; }
public TwoPickFormat TwoPickFormat { get; set; }
public bool IsOpenDeckRoom { get; private set; }
public bool IsTwoPick
{
get
{
if (BattleType != NetworkDefine.ServerBattleType.TwoPick && BattleType != NetworkDefine.ServerBattleType.RoomTwoPick && BattleType != NetworkDefine.ServerBattleType.ColosseumTwoPick)
{
return BattleType == NetworkDefine.ServerBattleType.CompetitionTwoPick;
}
return true;
}
}
public bool IsDisplayTwoPickIcon
{
get
{
if (TwoPickFormat != TwoPickFormat.Normal && TwoPickFormat != TwoPickFormat.Backdraft && (TwoPickFormat != TwoPickFormat.Chaos || Data.MyPageNotifications.data.RoomRule.ChallengePickFormat != TwoPickFormat.Chaos) && (TwoPickFormat != TwoPickFormat.BackdraftChaos || Data.MyPageNotifications.data.RoomRule.ChallengePickFormat != TwoPickFormat.Chaos) && (TwoPickFormat != TwoPickFormat.Cube || Data.MyPageNotifications.data.RoomRule.ChallengePickFormat != TwoPickFormat.Cube))
{
if (TwoPickFormat == TwoPickFormat.BackdraftCube)
{
return Data.MyPageNotifications.data.RoomRule.ChallengePickFormat == TwoPickFormat.Cube;
}
return false;
}
return true;
}
}
public bool IsBackDraft
{
get
{
if (TwoPickFormat != TwoPickFormat.Backdraft && TwoPickFormat != TwoPickFormat.BackdraftCube)
{
return TwoPickFormat == TwoPickFormat.BackdraftChaos;
}
return true;
}
}
public bool IsSealed => BattleType == NetworkDefine.ServerBattleType.Sealed;
public BattleParameter(NetworkDefine.ServerBattleType battleType, Format format, TwoPickFormat deckFormatType, RoomConnectController.BattleRule rule, bool isOpenDeckRoom)
{
BattleType = battleType;
DeckFormat = format;
TwoPickFormat = deckFormatType;
Rule = rule;
IsOpenDeckRoom = isOpenDeckRoom;
}
public void SetBattleParameter(BattleParameter battleParameter)
{
BattleType = battleParameter.BattleType;
DeckFormat = battleParameter.DeckFormat;
Rule = battleParameter.Rule;
TwoPickFormat = battleParameter.TwoPickFormat;
IsOpenDeckRoom = battleParameter.IsOpenDeckRoom;
}
public bool IsSame(BattleParameter battleParameter)
{
if (BattleType == battleParameter.BattleType && DeckFormat == battleParameter.DeckFormat && Rule == battleParameter.Rule && TwoPickFormat == battleParameter.TwoPickFormat)
{
return IsOpenDeckRoom == battleParameter.IsOpenDeckRoom;
}
return false;
}
public DataMgr.BattleType ConvertClientBattleType()
{
DataMgr.BattleType result = DataMgr.BattleType.None;
switch (BattleType)
{
case NetworkDefine.ServerBattleType.Practice:
result = DataMgr.BattleType.Practice;
break;
case NetworkDefine.ServerBattleType.Story:
result = DataMgr.BattleType.Story;
break;
case NetworkDefine.ServerBattleType.Free:
result = DataMgr.BattleType.FreeBattle;
break;
case NetworkDefine.ServerBattleType.Rank:
result = DataMgr.BattleType.RankBattle;
break;
case NetworkDefine.ServerBattleType.OpenRoom:
result = DataMgr.BattleType.RoomBattle;
break;
case NetworkDefine.ServerBattleType.TwoPick:
result = DataMgr.BattleType.TwoPick;
break;
case NetworkDefine.ServerBattleType.RoomTwoPick:
switch (TwoPickFormat)
{
case TwoPickFormat.Normal:
result = DataMgr.BattleType.RoomTwoPick;
break;
case TwoPickFormat.Backdraft:
case TwoPickFormat.BackdraftCube:
case TwoPickFormat.BackdraftChaos:
result = DataMgr.BattleType.TwoPickBackdraft;
break;
case TwoPickFormat.Cube:
result = DataMgr.BattleType.RoomTwoPick;
break;
case TwoPickFormat.Chaos:
result = DataMgr.BattleType.RoomTwoPick;
break;
}
break;
case NetworkDefine.ServerBattleType.Quest:
result = DataMgr.BattleType.Quest;
break;
case NetworkDefine.ServerBattleType.BossRushQuest:
result = DataMgr.BattleType.BossRushQuest;
break;
case NetworkDefine.ServerBattleType.SecretBossQuest:
result = DataMgr.BattleType.SecretBossQuest;
break;
case NetworkDefine.ServerBattleType.Colosseum:
result = ((DeckFormat != Format.Hof) ? ((DeckFormat != Format.Windfall) ? DataMgr.BattleType.ColosseumNormal : DataMgr.BattleType.ColosseumWindFall) : DataMgr.BattleType.ColosseumHof);
break;
case NetworkDefine.ServerBattleType.ColosseumTwoPick:
result = DataMgr.BattleType.ColosseumTwoPick;
break;
case NetworkDefine.ServerBattleType.Competition:
result = DataMgr.BattleType.CompetitionNormal;
break;
case NetworkDefine.ServerBattleType.CompetitionTwoPick:
result = DataMgr.BattleType.CompetitionTwoPick;
break;
case NetworkDefine.ServerBattleType.Sealed:
result = DataMgr.BattleType.Sealed;
break;
case NetworkDefine.ServerBattleType.Gathering:
result = DataMgr.BattleType.Gathering;
break;
case NetworkDefine.ServerBattleType.OfflineEvent:
result = DataMgr.BattleType.OfflineEvent;
break;
}
return result;
}
public static BattleParameter JsonToBattleParameter(JsonData json)
{
TwoPickFormat deckFormatType = TwoPickFormat.None;
RoomConnectController.BattleRule rule = RoomConnectController.BattleRule.None;
bool isOpenDeckRoom = false;
if (json.Keys.Contains("battle_type"))
{
NetworkDefine.ServerBattleType battleType = (NetworkDefine.ServerBattleType)json["battle_type"].ToInt();
if (json.Keys.Contains("deck_format"))
{
Format format = Data.ParseApiFormat(json["deck_format"].ToInt());
if (json.Keys.Contains("two_pick_type"))
{
deckFormatType = (TwoPickFormat)json["two_pick_type"].ToInt();
}
if (json.Keys.Contains("battle_rule"))
{
rule = (RoomConnectController.BattleRule)json["battle_rule"].ToInt();
}
if (json.TryGetValue("is_deck_confirmable", out var value))
{
isOpenDeckRoom = value.ToInt() == 1;
}
return new BattleParameter(battleType, format, deckFormatType, rule, isOpenDeckRoom);
}
return null;
}
return null;
}
}