void SpawnDisk(string name, int player) { Vector3 position = Vector3.zero; switch (player) { case 1: position = _player1Spawn.position; break; case 2: position = _player2Spawn.position; break; } position.y = Disk.THICKNESS; DiskJson json = _diskJsons.First(d => d.name == name); Disk disk = new Disk { ID = _nextDiskID++, Player = player, Name = json.name, Diameter = json.diameter, Position = position, MaxMoves = json.moves, RemainingMoves = json.moves }; while (HasCollisions(disk, disk.Position)) { disk.Position.y += Disk.THICKNESS; } GameObject actor = Instantiate(_diskPrefab); actor.name = disk.Name; actor.transform.position = disk.Position; actor.transform.localScale = new Vector3( disk.Diameter, Disk.THICKNESS / 2f, disk.Diameter); Texture2D texture = _textureLookup[json.texture]; actor.GetComponent <Renderer>().material.mainTexture = texture; _disks.Add(disk); _idByActor.Add(actor, disk.ID); _actorByID.Add(disk.ID, actor); }
public static DiskJson[] LoadDisks() { string[] jsonFiles = Directory.GetFiles(DisksPath, "*.json"); DiskJson[] disks = new DiskJson[jsonFiles.Length]; for (int i = 0; i < jsonFiles.Length; i++) { string file = jsonFiles[i]; string text = File.ReadAllText(file); DiskJson disk = JsonUtility.FromJson <DiskJson>(text); disks[i] = disk; } return(disks); }
IEnumerator StartServer() { _server = new TcpListener(IPAddress.Any, 7777); _server.Start(); bool connected = false; Thread connectThread = new Thread(() => { _connectedClient = _server.AcceptTcpClient(); _networkStream = _connectedClient.GetStream(); connected = true; }); connectThread.Start(); while (connected == false) { yield return(null); } Debug.Log("connected!"); _networkListening = true; ReadClientMessagesAsync(); NetworkMessage message = new NetworkMessage(); message.type = NetworkMessage.Type.Chat; message.chat.message = "hello!"; SendNetworkMessage(message); message.type = NetworkMessage.Type.InitializeClient; message.initializeClient.playerID = 2; _playerID = 1; SendNetworkMessage(message); message.type = NetworkMessage.Type.DiskSpawn; for (int i = 0; i < _diskJsons.Length; i++) { int player = (i % 2) + 1; DiskJson disk = _diskJsons[i]; SpawnDisk(disk.name, player); message.diskSpawn.player = player; message.diskSpawn.diskName = disk.name; SendNetworkMessage(message); } _currentPlayer = 1; _currentPlayerDisplay.text = _currentPlayer == _playerID ? "It's your turn!" : $"Player {_currentPlayer}'s turn"; if (_currentPlayer == _playerID) { _diskGhost.SetActive(true); } message.type = NetworkMessage.Type.PlayerTurnUpdateMessage; message.playerTurnUpdate.currentPlayer = _currentPlayer; SendNetworkMessage(message); _endTurnButton.onClick.AddListener(EndTurnServer); }