using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine; using UnityEngine.SceneManagement; public class Client : MonoBehaviour { private TcpClient client; private Stream stream; [SerializeField] private GameObject playerPrefab; private Player[] players = new Player[4]; private Queue jobs = new Queue(); [SerializeField] private GameObject dice; [SerializeField] private Field nextField; [SerializeField] private GameObject cam; private void Start() { client = new TcpClient("185.245.96.48", 8051); stream = client.GetStream(); stream.Write(new byte[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 10); string roomCode = PlayerPrefs.GetString("roomcode"); stream.Write(Encoding.ASCII.GetBytes(roomCode)); new Thread(Read).Start(); } private void Update() { if (jobs.Count > 0) { Job job = jobs.Dequeue(); switch (job.data[0]) { //-----Create A new player----- case 1: //player is playable if (job.data[1] == 1) { GameObject player = Instantiate(playerPrefab); player.transform.position = new Vector3(job.data[2], job.data[3] + 0.5f, job.data[4]); PlayablePlayer script = player.AddComponent(); players[job.data[5]] = script; script.client = this; script.nextField = nextField; script.dice = dice; script.camera = cam; script.Init(); } //player is not playable else { GameObject player = Instantiate(playerPrefab); player.transform.position = new Vector3(job.data[2], job.data[3] + 0.5f, job.data[4]); NoPlayablePlayer script = player.AddComponent(); players[job.data[5]] = script; script.nextField = nextField; script.dice = dice; script.camera = cam; script.Init(); } break; //--------------------------------------------------------- //-----Activate a Player case 2: Activate(job.data[1]); break; //Jemand hat gewürfelt case 3: ((NoPlayablePlayer)players[job.data[1]]).Wurfeln(job.data[2]); break; //Jemand hat den Pfeil geklickt case 4: ((NoPlayablePlayer)players[job.data[1]]).ArrowSelect(job.data[2]); break; case 127: client.Close(); SceneManager.LoadScene(0, LoadSceneMode.Single); break; } } } private void Activate(int player) { for (int i = 0; i < players.Length; i++) { if (players[i] != null) { if (i == player) { players[i].Activate(); } else { players[i].DeActivate(); } } } // cam.transform.parent = players[player].transform; // cam.transform.localPosition = new Vector3(-3, 8, 7); } private void Read() { while (true) { byte[] read = new byte[10]; stream.Read(read, 0, 10); jobs.Enqueue(new Job(read)); } } //0 3 wurfeln //1 x, x = zahl public void SendWurfeln(int zahl) { stream.Write(new byte[]{3, (byte)zahl, 0, 0, 0, 0, 0, 0, 0, 0}); } //0 4 arrow selected //1 x, x = arrow idx public void SendArrowSelected(int idx) { stream.Write(new byte[]{4, (byte)idx, 0, 0, 0, 0, 0, 0, 0, 0}); } //0 5 public void SendFinished() { stream.Write(new byte[]{5, 0, 0, 0, 0, 0, 0, 0, 0, 0}); } }