123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.Networking;
- using System.Linq;
- public class CurrentPlayerPicker : MonoBehaviour
- {
- public GameObject serverManager;
- public int numberOfPlayers;
- public Text textfield;
- public GameObject sorryTaken;
- public GameObject selectionPanel;
- public GameObject errorPanel;
- public GameObject connectingPanel;
- public GameObject nextPanel;
- private string currentPlayer;
- private float elapsed = 0.0f;
- private float period = 1.0f;
- private bool selectionComplete;
- private string finalPlayerNumber;
- // CARD STUFF CARD STUFF CARD STUFF CARD STUFF
- public RawImage goalCard;
- public RawImage personCard;
- public RawImage goalCardView;
- public RawImage personaCardView;
- public List<Texture> goalCardImages;
- public List<Texture> personCardImages;
- //for action card selection during game running
- public Button actionButton;
- public RawImage actionCard;
- public GameObject actionCardView;
-
- public List<Texture> actionCardImages;
- //dictionary to map card images and unique IDs
- private Dictionary<string, int> personCardIDs;
- private Dictionary<string, int> goalCardIDs;
- private Dictionary<string, int> actionCardIDs;
- //mapping character cards and goal cards
- private Dictionary<int, List<int>> personToGoalCardMap;
- // Start is called before the first frame update
- void Start()
- {
- selectionComplete = false;
- finalPlayerNumber = "0";
- // Initialize dictionaries and assign unique IDs
- personCardIDs = new Dictionary<string, int>();
- goalCardIDs = new Dictionary<string, int>();
- actionCardIDs = new Dictionary<string, int>();
- // Assign IDs to character cards
- for (int i = 0; i < personCardImages.Count; i++)
- {
- personCardIDs[personCardImages[i].name] = i + 1; // ID starts from 1
- }
- // Assign IDs to goal cards
- for (int i = 0; i < goalCardImages.Count; i++)
- {
- goalCardIDs[goalCardImages[i].name] = i + 1; // ID starts from 1
- }
- // Assign IDs to action cards
- for (int i = 0; i < actionCardImages.Count; i++)
- {
- actionCardIDs[actionCardImages[i].name] = i + 1; // ID starts from 1
- }
- InitializePersonToGoalCardMap(); //initialize the character to goal cards
- //click actionButton to get the action card
- actionButton.onClick.AddListener(SelectActionCard);
- }
- // Update is called once per frame
- void Update()
- {
- if(selectionComplete)
- return;
- elapsed += Time.deltaTime;
-
- if (elapsed >= period) {
- elapsed = 0.0f;
- //Debug.Log("Inside");
- string currentGame = serverManager.GetComponent<CurrentGameConnect>().GetGameNumber();
- // GET ALL ALREADY SELECTED PLAYERS FROM SERVER
- // SET BUTTONS TO NOT ACTIVE OF THOSE PLAYERS
- string serverUrl_check = "https://smarthubs.media.tuwien.ac.at/api/is_player_available/"+ currentGame+ "/";
- for(int i = 1; i <= numberOfPlayers; i++)
- {
- //Debug.Log(i);
- StartCoroutine(AvaliablePlayers(serverUrl_check + i.ToString(), i.ToString()));
- }
- }
- }
- public void UpdatePlayerTexture(string clr)
- {
- this.gameObject.GetComponent<Image>().color = GameObject.Find("PlayerBtn" + clr).GetComponent<Button>().colors.normalColor;
- }
- public void SelectCards(string playerNumber, string gameNumber)
- {
- int randomPerson = Random.Range(0, personCardImages.Count);
- personCard.texture = personCardImages[randomPerson];
- personaCardView.texture = personCardImages[randomPerson];
- int personCardID = personCardIDs[personCard.texture.name];
- Debug.Log("person card ID: " + personCardID);
-
- //int range = 0;
- //int min = 0;
-
- /* if(finalPlayerNumber == "1")
- {
- range = 6;
- }
- if(finalPlayerNumber == "2")
- {
- min = 6;
- range = 12;
- }
- if(finalPlayerNumber == "3")
- {
- min = 12;
- range = 18;
- }
- if(finalPlayerNumber == "4")
- {
- min = 18;
- range = 24;
- }
- if(finalPlayerNumber == "5")
- {
- min = 24;
- range = 30;
- }
- if(finalPlayerNumber == "6")
- {
- min = 30;
- range = 36;
- }
- int randomGoal = Random.Range(min, range); */
-
- List<int> feasibleGoalCardIDs = personToGoalCardMap[personCardID]; //feasible goal card id for the selected character card
- // randomly select the goal cards from whole list
- int randomGoalIndex = Random.Range(0, feasibleGoalCardIDs.Count);
- int randomGoalID = feasibleGoalCardIDs[randomGoalIndex];
- Debug.Log("current feasible goal cards: " + randomGoalID);
- //Debug.Log("current feasible goal cards list: " + feasibleGoalCardIDs);
- Debug.Log("Current feasible goal cards list: " + string.Join(", ", feasibleGoalCardIDs));
- //get the texture of the seleccted goal cards
- string selectedGoalCardName = goalCardIDs.FirstOrDefault(x => x.Value == randomGoalID).Key;
- Texture selectedGoalCardTexture = goalCardImages.FirstOrDefault(x => x.name == selectedGoalCardName);
-
- // TELL THE SERVER THAT THE CARD IS TAKEN
- //goalCard.texture = goalCardImages[randomGoal];
- //goalCardView.texture = goalCardImages[randomGoal];
- goalCard.texture = selectedGoalCardTexture;
- goalCardView.texture = selectedGoalCardTexture;
- int goalCardID = goalCardIDs[goalCard.texture.name];
- Debug.Log("goal card ID: " + goalCardID);
- // Send the selected cards to the server
- StartCoroutine(UploadCharacterCard(gameNumber, personCardID));
- StartCoroutine(UploadGoalCard(gameNumber, goalCardID));
- nextPanel.SetActive(true);
- }
-
- // mapping character cards to goal cards
- private void InitializePersonToGoalCardMap()
- {
- personToGoalCardMap = new Dictionary<int, List<int>>
- {
- { 1, new List<int> { 1, 4, 6, 10, 12, 14, 15, 16, 17, 19, 20, 22, 23, 24, 26, 27, 29, 30, 31, 33, 34, 36, 37, 39, 40 } },
- { 2, new List<int> { 3, 6, 10, 22, 24, 29, 39, 40 } },
- { 3, new List<int> { 1, 4, 6, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 36, 37, 39, 40 } },
- { 4, new List<int> { 1, 3, 4, 6, 10, 11, 12, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 30, 31, 33, 39, 40 } },
- { 5, new List<int> { 1, 3, 6, 10, 12, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 36, 37, 39, 40 } },
- { 6, new List<int> { 1, 4, 6, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 33, 34, 36, 37, 39, 40 } },
- { 7, new List<int> { 3, 10, 11, 12, 14, 15, 16, 17, 18, 20, 21, 23, 28, 30, 31, 36, 37, 39, 40 } },
- { 8, new List<int> { 1, 3, 4, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 36, 37, 39, 40 } },
- { 9, new List<int> { 4, 6, 10, 11, 14, 15, 16, 17, 19, 20, 21, 23, 26, 27, 28, 29, 31, 33, 34, 36, 37, 39, 40 } },
- { 10, new List<int> { 4, 6, 10, 11, 15, 16, 20, 23, 24, 26, 27, 29, 30, 31, 33, 36, 37, 39, 40 } },
- { 11, new List<int> { 3, 10, 11, 16, 23, 24, 27, 29, 30, 31, 36, 37, 40 } }
- };
- Debug.Log("constrains between character and goal");
- }
-
- public IEnumerator AvaliablePlayers(string serverUrl, string player)
- {
- UnityWebRequest www = UnityWebRequest.Get(serverUrl);
- yield return www.SendWebRequest();
- if (www.result != UnityWebRequest.Result.Success)
- {
- //Debug.Log(www.error);
- }
- else
- {
- if(www.downloadHandler.text == "False")
- {
- GameObject[] playaz = GameObject.FindGameObjectsWithTag("pl");
- foreach(GameObject playa in playaz)
- {
- if(playa.name.Contains(player))
- {
- playa.SetActive(false);
- }
- }
- }
- }
- }
- public void choosePlayer(string playerNumber)
- {
- StartCoroutine(ChoosePlayer1(playerNumber));
- }
- public IEnumerator ChoosePlayer1(string playerNumber)
- {
- string currentGame = serverManager.GetComponent<CurrentGameConnect>().GetGameNumber();
- string serverUrl_check = "https://smarthubs.media.tuwien.ac.at/api/is_player_available/"+ currentGame+ "/" + playerNumber;
- UnityWebRequest www = UnityWebRequest.Get(serverUrl_check);
- yield return www.SendWebRequest();
- if (www.result != UnityWebRequest.Result.Success)
- {
- Debug.Log(www.error);
- errorPanel.SetActive(true);
- Debug.Log("choose player1 EPanel.");
- }
- else
- {
- if(www.downloadHandler.text == "False")
- {
- Debug.Log(www.error);
- sorryTaken.SetActive(true);
- }
- else
- {
- StartCoroutine(ChoosePlayer2(playerNumber, currentGame));
- }
- }
- }
- public IEnumerator ChoosePlayer2(string playerNumber, string gameNumber)
- {
- string serverUrl = "https://smarthubs.media.tuwien.ac.at/api/select_player";
- WWWForm form = new WWWForm();
-
- form.AddField("game", gameNumber);
- form.AddField("player", playerNumber);
- using (UnityWebRequest www = UnityWebRequest.Post(serverUrl, form))
- {
- yield return www.SendWebRequest();
- if (www.result != UnityWebRequest.Result.Success)
- {
- Debug.Log(www.error);
- // PROMPT ERROR
- errorPanel.SetActive(true);
- Debug.Log("choose player2 EPanel.");
- }
- else
- {
- Debug.Log("Form upload complete!");
-
- // CLOSE THE PANEL
- selectionComplete = true;
- this.finalPlayerNumber = playerNumber;
- this.textfield.text = "Player " + playerNumber;
- UpdatePlayerTexture(playerNumber);
- // SUCCESS YOU CHOSE YOUR PLAYER
- SelectCards(playerNumber, gameNumber);
- // DIACTIVATE THE PANEL
- this.selectionPanel.SetActive(false);
- }
- }
-
- }
- public string GetPlayerNumber()
- {
- return this.finalPlayerNumber;
- }
- //transfer the charatcer card and goal cards to server
- private IEnumerator UploadCharacterCard(string gameNumber, int personCardID) //upload the character cards
- {
- string serverUrl = "https://smarthubs.media.tuwien.ac.at/api/add_char_card_to_player";
- WWWForm form = new WWWForm();
- Debug.Log("charCard gameNumber: " + gameNumber);
- Debug.Log("charCard playerNumber: " + finalPlayerNumber);
- Debug.Log("charCard ID: " + personCardID);
- form.AddField("game", gameNumber);
- form.AddField("player", finalPlayerNumber);
- form.AddField("charid", personCardID);
- // Convert the person card texture to a byte array
- //byte[] personCardBytes = GetTextureBytes(personCard.texture as Texture2D);
- //form.AddBinaryData("characterCard", personCardBytes, "characterCard.png", "image/png");
- using (UnityWebRequest www = UnityWebRequest.Post(serverUrl, form))
- {
- yield return www.SendWebRequest();
- if (www.result != UnityWebRequest.Result.Success)
- {
- Debug.Log(www.error);
- errorPanel.SetActive(true);
- Debug.Log("character card EPanel.");
- }
- else
- {
- Debug.Log("Character card uploaded.");
- }
- }
- }
- private IEnumerator UploadGoalCard(string gameNumber, int goalCardID) //upload the goal cards
- {
- string serverUrl = "https://smarthubs.media.tuwien.ac.at/api/add_card_to_player";
- WWWForm form = new WWWForm();
- Debug.Log("goalCard gameNumber: " + gameNumber);
- Debug.Log("goalCard playerNumber: " + finalPlayerNumber);
- Debug.Log("goalCard ID: " + goalCardID);
- form.AddField("game", gameNumber);
- form.AddField("player", finalPlayerNumber);
- form.AddField("cid", goalCardID);
- // Convert the goal card texture to a byte array
- //byte[] goalCardBytes = GetTextureBytes(goalCard.texture as Texture2D);
- //form.AddBinaryData("goalCard", goalCardBytes, "goalCard.png", "image/png");
- using (UnityWebRequest www = UnityWebRequest.Post(serverUrl, form))
- {
- yield return www.SendWebRequest();
- if (www.result != UnityWebRequest.Result.Success)
- {
- Debug.Log(www.error);
- errorPanel.SetActive(true);
- Debug.Log("goal card EPanel.");
- }
- else
- {
- Debug.Log("Goal card uploaded.");
- }
- }
- }
- /*private byte[] GetTextureBytes(Texture2D texture)
- {
- return texture.EncodeToPNG();
- }*/
- // Action card selection
- public void SelectActionCard()
- {
- actionCardView.gameObject.SetActive(true);
- int randomAction = Random.Range(0, actionCardImages.Count);
- actionCard.texture = actionCardImages[randomAction];
- int actionCardID = actionCardIDs[actionCard.texture.name];
- Debug.Log("Selected action card texture: " + actionCard.texture.name);
- Debug.Log("Action card ID: " + actionCardID);
- // Send the selected action card to the server
- StartCoroutine(UploadActionCard(actionCardID));
-
- }
- // Transfer the action card to server (server should be able to adding multiple action card IDs)
- private IEnumerator UploadActionCard(int actionCardID)
- {
- string serverUrl = "https://smarthubs.media.tuwien.ac.at/api/add_action_card_to_player";
- WWWForm form = new WWWForm();
- form.AddField("game", serverManager.GetComponent<CurrentGameConnect>().GetGameNumber());
- form.AddField("player", finalPlayerNumber);
- form.AddField("actionCardID", actionCardID.ToString());
- using (UnityWebRequest www = UnityWebRequest.Post(serverUrl, form))
- {
- yield return www.SendWebRequest();
- if (www.result != UnityWebRequest.Result.Success)
- {
- Debug.Log(www.error);
- errorPanel.SetActive(true);
- Debug.Log("action card EPanel.");
- }
- else
- {
- Debug.Log("Action card uploaded.");
- }
- }
- }
-
- }
-
|