Пример #1
0
    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
        }
    }
Пример #2
0
    public void ChooseCharacter()
    {
        var deck = new SavedDeck();

        deck.character = currentCharacter;
        deckBuilder.OpenCardPanel(deck, true);
    }
Пример #3
0
    public void SetDeck(SavedDeck deck, DeckPanel deckPanel)
    {
        nameText.text = deck.name;

        editButton.onClick.AddListener(() => deckPanel.EditDeck(deck));
        deleteButton.onClick.AddListener(() => deckPanel.DeleteDeck(gameObject, deck));
    }
Пример #4
0
 public void OpenCardPanel(SavedDeck deck, bool isNew)
 {
     cardPanel.gameObject.SetActive(true);
     deckPanel.gameObject.SetActive(false);
     characterPanel.gameObject.SetActive(false);
     cardPanel.SetCurrentDeck(deck, isNew);
 }
Пример #5
0
        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);
        }
Пример #6
0
 public void SelectCharacterBuild(int index)
 {
     if (!hasAuthority)
     {
         return;
     }
     selectedBuild = availableBuilds[index];
     CmdSelectCharacterBuild(selectedBuild.ToString());
 }
Пример #7
0
    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);
    }
Пример #8
0
    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);
    }
Пример #9
0
    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();
    }
Пример #10
0
 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);
     }
 }
Пример #11
0
    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);
    }
Пример #12
0
    /// <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);
    }
Пример #13
0
    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
    }
Пример #14
0
 public void LoadBuilds()
 {
     availableBuilds = SavedDeck.LoadLocalDecks();
 }
Пример #15
0
 private void RpcSelectCharacterBuild(string deckJson)
 {
     selectedBuild = SavedDeck.LoadFromString(deckJson);
 }
Пример #16
0
        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);
        }
Пример #17
0
 public void DeleteDeck(GameObject deckUI, SavedDeck deck)
 {
     deck.Delete();
     Destroy(deckUI);
 }
Пример #18
0
        public static SavedDeck GetDeckFromId(List <SavedDeck> decks, string id)
        {
            SavedDeck deck = decks.FirstOrDefault(a => a.DeckId == id);

            return(deck);
        }
Пример #19
0
 public void EditDeck(SavedDeck deck)
 {
     deckbuilder.OpenCardPanel(deck, false);
 }