public void LoadDecks() { try { string deckDir = $"{Application.persistentDataPath}/Decks"; if (!System.IO.Directory.Exists(deckDir)) { System.IO.Directory.CreateDirectory(deckDir); } string[] deckFiles = System.IO.Directory.GetFiles(deckDir); decks = SavedDeck.LoadLocalDecks(); for (int i = 0; i < deckFiles.Length; i++) { string fileName = deckFiles[i].Substring(deckFiles[i].LastIndexOf("\\") + 1); decks[i] = new SavedDeck(fileName); decks[i].Load(); var deck = Instantiate(deckPrefab, decksContent).GetComponent <FullDeck>(); deck.SetDeck(decks[i], this); displayedDecks.Add(deck); } } catch (Exception err) { Debug.Log(err); // TODO: send some feedback to the client } }
public void ChooseCharacter() { var deck = new SavedDeck(); deck.character = currentCharacter; deckBuilder.OpenCardPanel(deck, true); }
public void SetDeck(SavedDeck deck, DeckPanel deckPanel) { nameText.text = deck.name; editButton.onClick.AddListener(() => deckPanel.EditDeck(deck)); deleteButton.onClick.AddListener(() => deckPanel.DeleteDeck(gameObject, deck)); }
public void OpenCardPanel(SavedDeck deck, bool isNew) { cardPanel.gameObject.SetActive(true); deckPanel.gameObject.SetActive(false); characterPanel.gameObject.SetActive(false); cardPanel.SetCurrentDeck(deck, isNew); }
public override void Run(BotMain bot, BotCommandController commandController, string[] rawTerms, string[] terms, string characterName, string channel, UserGeneratedCommand command) { string customDeckName = Utils.GetCustomDeckName(characterName); SavedDeck deleteDeck = Utils.GetDeckFromId(bot.SavedDecks, customDeckName); string sendMessage = "No decks found for [user]" + characterName + "[/user]"; if (deleteDeck != null) { if (characterName == deleteDeck.OriginCharacter) { bot.SavedDecks.Remove(deleteDeck); sendMessage = "[b]" + deleteDeck.DeckId + "[/b] deleted by [user]" + characterName + "[/user]"; Utils.WriteToFileAsData(bot.SavedDecks, Utils.GetTotalFileName(BotMain.FileFolder, BotMain.SavedDecksFileName)); } else { sendMessage = "Only " + deleteDeck.OriginCharacter + " can delete their own saved deck."; } } bot.SendMessageInChannel(sendMessage, channel); }
public void SelectCharacterBuild(int index) { if (!hasAuthority) { return; } selectedBuild = availableBuilds[index]; CmdSelectCharacterBuild(selectedBuild.ToString()); }
private void LoadFromJSON() { string deckJson = System.IO.File.ReadAllText($"{deckDir}/{fileName}"); SavedDeck loaded = SavedDeck.LoadFromString(deckJson); this.name = loaded.name; this.character = loaded.character; this.cards = new List <Card>(loaded.cards); }
public static SavedDeck LoadFromString(string deckJson) { DeckData data = JsonUtility.FromJson <DeckData>(deckJson); SavedDeck deck = new SavedDeck(); deck.name = data.name; deck.character = data.GetCharacter(); deck.cards = data.GetCards(); return(deck); }
public override void OnStartAuthority() { build = SavedDeck.LoadFromString(buildJson); var byType = build.cards.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count()); foreach (var kvp in byType) { RegisterPrefab(kvp.Key.spellPrefab, kvp.Value); } this.buildJson = build.ToString(); CmdAvatarSpawned(); }
public void SetCurrentDeck(SavedDeck deck, bool isNew) { if (!isNew) { deckName.interactable = false; } this.currentDeck = deck; deckName.text = deck.name; PopulateCards(currentDeck.character.lores); for (int i = 0; i < deck.cards.Count; i++) { var card = Instantiate(deckCardPrefab, deckContent).GetComponent <DeckCard>(); card.SetCard(deck.cards[i], this); cardsInDeck.Add(card); } }
public override void OnStartServer() { // Get the chosen buildJson and deserialize it. build = SavedDeck.LoadFromString(buildJson); // Spawn the build.character.avatarPrefab with client authority var spawnPoint = NetworkManager.singleton.GetStartPosition(); build = SavedDeck.LoadFromString(buildJson); var avatarGameObject = GameObject.Instantiate(build.character.avatarPrefab, spawnPoint.position, spawnPoint.rotation); avatarGameObject.GetComponent <Avatar>().playerNetId = netId; NetworkServer.Spawn(avatarGameObject, connectionToClient); // // setup the avatar // avatar = avatarGameObject.GetComponent<Avatar>(); // avatar.Init(this); }
/// <summary> /// Gets a list of the decks that are loaded in the user's LocalLow folder /// </summary> /// <returns>All decks that were found locally</returns> public static SavedDeck[] LoadLocalDecks() { if (!System.IO.Directory.Exists(deckDir)) { System.IO.Directory.CreateDirectory(deckDir); } string[] deckFiles = System.IO.Directory.GetFiles(deckDir); SavedDeck[] decks = new SavedDeck[deckFiles.Length]; for (int i = 0; i < deckFiles.Length; i++) { string fileName = deckFiles[i].Substring(deckFiles[i].LastIndexOf("\\") + 1); decks[i] = new SavedDeck(fileName); decks[i].Load(); } return(decks); }
public void RpcAvatarSpawned() { Debug.Log("RpcAvatarSpawned"); var avatars = FindObjectsOfType <Avatar>(); var players = new List <GamePlayer>(FindObjectsOfType <GamePlayer>()); var playerDictionary = players.ToDictionary(x => x.netId, x => x); foreach (Avatar a in avatars) { if (playerDictionary.ContainsKey(a.playerNetId)) { // map the other players to their respective avatars if (a.initialized == true) { continue; } a.Init(playerDictionary[a.playerNetId]); playerDictionary[a.playerNetId].avatar = a; // get the buildJson of this gamePlayer and call LoadCards() to initialize the deck a.deck.LoadCards(SavedDeck.LoadFromString(playerDictionary[a.playerNetId].buildJson).cards); if (a.hasAuthority) { // This will only happen on the local player hudUI.SetActive(true); // link healthUI to health healthUI.Health = ((PlayerHealth)avatar.health); // link deckUI to deck deckUI.deck = avatar.deck; deckUI.Init(); } continue; } // we should never get here, so spit out a warning Debug.LogWarning($"Warning, avatar with connectionId: {netIdentity.connectionToClient} does not have a gamePlayer"); } // look up all avatars in the scene and match them with their gameplayers }
public void LoadBuilds() { availableBuilds = SavedDeck.LoadLocalDecks(); }
private void RpcSelectCharacterBuild(string deckJson) { selectedBuild = SavedDeck.LoadFromString(deckJson); }
public override void Run(BotMain bot, BotCommandController commandController, string[] rawTerms, string[] terms, string characterName, string channel, UserGeneratedCommand command) { string saveJson = Utils.GetFullStringOfInputs(rawTerms); string sendMessage = ""; try { //accept JSON format deck SavedDeck d = JsonConvert.DeserializeObject <SavedDeck>(saveJson); FChatDicebot.DiceFunctions.Deck newDeck = new DiceFunctions.Deck(DiceFunctions.DeckType.Custom); newDeck.CreateFromDeckList(d.DeckList); string newDeckId = Utils.GetCustomDeckName(characterName); var thisCharacterDecks = bot.SavedDecks.Where(a => a.OriginCharacter == characterName); SavedDeck existingDeck = Utils.GetDeckFromId(bot.SavedDecks, newDeckId); if (thisCharacterDecks.Count() >= BotMain.MaximumSavedTablesPerCharacter && existingDeck == null) { sendMessage = "Failed: A character can only save up to 3 decks at one time. Delete or overwrite old decks."; } else if (existingDeck != null && existingDeck.OriginCharacter != characterName) { sendMessage = "Failed: This table name is taken by a different character."; } else if (newDeckId.Length < 2) { sendMessage = "Failed: Deck name too short."; } else if (newDeck.GetTotalCards() <= 0) { sendMessage = "Failed: No card entries found for this deck."; } else if (newDeck.GetTotalCards() > BotMain.MaximumCardsInDeck) { sendMessage = "Failed: Deck contains more than " + BotMain.MaximumCardsInDeck + " cards."; } else { SavedDeck newSavedDeck = new SavedDeck() { DeckList = newDeck.GetDeckList(), DeckId = newDeckId, OriginCharacter = characterName }; if (existingDeck != null) { existingDeck.Copy(newSavedDeck); } else { bot.SavedDecks.Add(newSavedDeck); } Utils.WriteToFileAsData(bot.SavedDecks, Utils.GetTotalFileName(BotMain.FileFolder, BotMain.SavedDecksFileName)); bot.DiceBot.ResetDeck(false, channel, DeckType.Custom, newDeckId); sendMessage = "[b]Success[/b]. Deck saved by [user]" + characterName + "[/user]. Draw from this deck using !drawcard custom"; } } catch (Exception) { sendMessage = "Failed to parse deck entry data. Make sure the Json is correctly formatted."; } bot.SendMessageInChannel(sendMessage, channel); }
public void DeleteDeck(GameObject deckUI, SavedDeck deck) { deck.Delete(); Destroy(deckUI); }
public static SavedDeck GetDeckFromId(List <SavedDeck> decks, string id) { SavedDeck deck = decks.FirstOrDefault(a => a.DeckId == id); return(deck); }
public void EditDeck(SavedDeck deck) { deckbuilder.OpenCardPanel(deck, false); }