Online Function With Room Codes
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
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});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user