Files
flufflparty-/FlufflParty/Assets/Scripts/Client.cs
T

145 lines
4.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
public class Client : MonoBehaviour
{
private TcpClient client;
private Stream stream;
[SerializeField] private GameObject playerPrefab;
private Player[] players = new Player[4];
private Queue<Job> jobs = new Queue<Job>();
[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<PlayablePlayer>();
players[job.data[5]] = script;
script.client = this;
script.nextField = nextField;
script.dice = dice;
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<NoPlayablePlayer>();
players[job.data[5]] = script;
script.nextField = nextField;
script.dice = dice;
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;
}
}
}
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});
}
}