using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using WebSocketSharp; using UnityEngine; [CreateAssetMenu(menuName = "Create/CEntity_Base")] public class CEntity_Base : ScriptableObject { public int CardIndex = 0; public List cardColors = new List(); public int PlayCost = -1; public List EvoCosts = new List(); public int Level = 0; public string CardName_JPN = ""; public string CardName_ENG = ""; public List Form_JPN = new List(); public List Form_ENG = new List(); public List Attribute_JPN = new List(); public List Attribute_ENG = new List(); public List Type_JPN = new List(); public List Type_ENG = new List(); public string CardSpriteName = ""; public List cardKind = new List { CardKind.Digimon }; [TextArea] public string EffectDiscription_JPN = ""; [TextArea] public string EffectDiscription_ENG = ""; [TextArea] public string InheritedEffectDiscription_JPN = ""; [TextArea] public string InheritedEffectDiscription_ENG = ""; [TextArea] public string SecurityEffectDiscription_JPN = ""; [TextArea] public string SecurityEffectDiscription_ENG = ""; public string CardEffectClassName = ""; public int DP = 0; public Rarity rarity; public int OverflowMemory = 0; public int LinkDP = 0; [TextArea] public string LinkEffect = ""; [TextArea] public string LinkRequirement = ""; [TextArea] public string dualEffect = ""; public List OptionCardColorRequirements = new List(); [TextArea] public string OptionEffect = ""; public bool HasInhetitedEffect => !string.IsNullOrEmpty(InheritedEffectDiscription_ENG) && !InheritedEffectDiscription_ENG.Equals("-"); public bool HasSecutiryEffect => !string.IsNullOrEmpty(SecurityEffectDiscription_ENG) && !SecurityEffectDiscription_ENG.Equals("-"); public string CardID = ""; public int MaxCountInDeck = 4; public bool HasLoadStarted { get; set; } = false; public Sprite CardSprite { get; set; } = null; public async Task LoadCardImage() { if (String.IsNullOrEmpty(CardSpriteName)) { return; } if (HasLoadStarted) { return; } HasLoadStarted = true; Sprite sprite = await StreamingAssetsUtility.GetSprite(CardSpriteName, isCard: true); CardSprite = sprite; } public async Task GetCardSprite() { if (!HasLoadStarted) await LoadCardImage(); return CardSprite; } public bool IsACE => OverflowMemory >= 1; public bool IsStandardValid => true; public bool IsDualCard => !String.IsNullOrEmpty(dualEffect); #region regulation mark public string RegulationMark { get { string regulationMark = ""; switch (GetParseByHyphen(CardSpriteName)[0]) { case "ST1": regulationMark = "00"; break; case "ST2": regulationMark = "00"; break; case "ST3": regulationMark = "00"; break; case "ST4": regulationMark = "00"; break; case "ST5": regulationMark = "00"; break; case "ST6": regulationMark = "00"; break; case "ST7": regulationMark = "01"; break; case "ST8": regulationMark = "01"; break; case "ST9": regulationMark = "01"; break; case "ST10": regulationMark = "01"; break; case "ST11": regulationMark = "01"; break; case "ST12": regulationMark = "02"; break; case "ST13": regulationMark = "02"; break; case "ST14": regulationMark = "02"; break; case "BT1": regulationMark = "00"; break; case "BT2": regulationMark = "00"; break; case "BT3": regulationMark = "00"; break; case "BT4": regulationMark = "00"; break; case "BT5": regulationMark = "00"; break; case "BT6": regulationMark = "01"; break; case "BT7": regulationMark = "01"; break; case "BT8": regulationMark = "01"; break; case "BT9": regulationMark = "01"; break; case "BT10": regulationMark = "02"; break; case "BT11": regulationMark = "02"; break; case "BT12": regulationMark = "02"; break; case "BT13": regulationMark = "02"; break; case "EX1": regulationMark = "01"; break; case "EX2": regulationMark = "01"; break; case "EX3": regulationMark = "02"; break; case "EX4": regulationMark = "02"; break; case "RB1": regulationMark = "02"; break; } return regulationMark; } } #endregion #region �Z�b�gID public string SetID { get { if (GetParseByHyphen(CardSpriteName).Length >= 1) { return GetParseByHyphen(CardSpriteName)[0]; } return ""; } } #endregion #region whether it is permanent card public bool IsPermanent => cardKind.Contains(CardKind.Digimon) || cardKind.Contains(CardKind.Tamer) || cardKind.Contains(CardKind.DigiEgg); #endregion #region �J�[�hIndex���f�b�L�R�[�h�ɗp���镶����ɕϊ�(256�i��) public string CardIndex_String { get { string CardID_String = ConvertBinaryNumber.IntToNString(CardIndex, DeckData.m); while (CardID_String.Length < DeckData.CardKindCellLength) { CardID_String = $"0{CardID_String}"; } return CardID_String; } } #endregion #region �J�[�h�摜�����A���_�[�o�[�ŋ�؂� public static string[] GetParseByUnderBar(string CardImageName) { string[] parseByUnderBar = new string[] { CardImageName }; if (CardImageName.Contains('_')) { parseByUnderBar = CardImageName.Split('_'); } return parseByUnderBar; } #endregion #region �J�[�h�摜�����n�C�t���ŋ�؂� public static string[] GetParseByHyphen(string CardImageName) { string[] parseByHyphen = new string[] { CardImageName }; if (CardImageName.Contains('-')) { parseByHyphen = CardImageName.Split('-'); } return parseByHyphen; } #endregion #region �f�b�L�ɂ���Ɠ��J�[�hID�̃J�[�h�������Ă��閇�� public int SameCardIDCount(List DeckCards) { return DeckCards.Count((cEntity_Base) => cEntity_Base.CardID == CardID); } #endregion #region �p�������� public bool isParallel { get { if (!string.IsNullOrEmpty(CardSpriteName)) { string s = CardSpriteName.Replace(CardID, ""); if (!string.IsNullOrEmpty(s)) { if (s.Contains("_P")) { return true; } } } return false; } } #endregion #region ���x�������‚� public bool HasLevel { get { if (Level == 0) { return false; } if (!cardKind.Contains(CardKind.Digimon) && !cardKind.Contains(CardKind.DigiEgg)) { return false; } return true; } } #endregion #region Whether the card has any cost public bool HasCost => PlayCost >= 0; #endregion #region Wheter the card has play cost public bool HasPlayCost => !cardKind.Contains(CardKind.Option) && PlayCost >= 0; #endregion #region Wheter the card has use cost public bool HasUseCost => cardKind.Contains(CardKind.Option) && PlayCost >= 0; #endregion } public enum CardKind { Digimon, Tamer, Option, DigiEgg, } [Serializable] public class EvoCost : IEquatable { public CardColor CardColor; public int Level; public int MemoryCost; public bool Equals(EvoCost other) { if (other is null) { return false; } if (object.ReferenceEquals(this, other)) { return true; } return CardColor.Equals(other.CardColor) && Level.Equals(other.Level) && MemoryCost.Equals(other.MemoryCost); } public override int GetHashCode() => CardColor.GetHashCode() ^ Level.GetHashCode() + MemoryCost.GetHashCode(); } public enum CardColor { Red, Blue, Yellow, Green, White, Black, Purple, None, } public enum Rarity { C, U, R, SR, SEC, P, None, }