using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using TNet;
public class MultiplayerManager : TNBehaviour {
public enum GameState
{
Setup,
GameLobby,
CharacterSelect,
Loading,
Playing,
BetweenLevels,
EndGame
}
public GameState matchState = GameState.Setup;
public bool playerReady = false;
private string _matchName = "" ;
// private string _matchPassword = "" ;
private int _matchMaxUsers = 3 ;
public static MultiplayerManager instance ;
public System.Collections.Generic.List<MPPlayer
> playerList
= new System.Collections.Generic.List<MPPlayer
>(); public System.Collections.Generic.List<GameObject> NetworkedPlayerPrefabs;
public System.Collections.Generic.List<SceneSettings
> sceneList
= new System.Collections.Generic.List<SceneSettings
>();
public GameObject playerCharacterPrefab;
public SceneSettings currentScene;
public int oldPrefix ;
public bool isMatchStarted = false;
// public TNObject tno;
public int NumberOfConnectedPlayers;
void Start()
{
TNObject tno = gameObject.GetComponent<TNObject>();
GameReference.multiplayerManagerScript = this;
DontDestroyOnLoad(gameObject);
instance = this;
// playerName = PlayerPrefs.GetString("PlayerName");
currentScene = sceneList[0];
}
void Update()
{
NumberOfConnectedPlayers = TNManager.players.size;
if (Input.GetKeyDown(KeyCode.S)) tno.Send("NotifyNetwork", Target.All);
}
void FixedUpdate()
{
instance = this;
}
// Starts local server using TNet Networking
public void StartServer(string serverName, string serverPassword, int maxUsers)
{
_matchName = serverName ;
_matchMaxUsers = maxUsers ;
TNServerInstance.Start(5127, 5128);
TNManager.playerName = GameReference.gameSettingsScript.characterName;
//AddPlayerToClientList(TNManager.playerName, TNManager.playerID);
ConnectToServer("127.0.0.1");
}
// TNET Networking Setup; connects to server using provided IP
public void ConnectToServer(string IP2Connect)
{
Debug.Log ("Attempting to Connect to Server at -" + IP2Connect + "-.");
TNManager.Connect(IP2Connect);
}
void OnNetworkError(string error)
{
Debug.LogError("Network Error: " + error);
}
void OnNetworkConnect (bool success, string message)
{
Debug.Log("Joining Network: Success? " + success + " Message:" + message);
// Join Channel
TNManager.JoinChannel(123, null);
// Add Player to List of Clients
//TNManager.playerName = GameReference.gameSettingsScript.characterName;
//AddPlayerToClientList(TNManager.playerName, TNManager.playerID);
}
void OnNetworkJoinChannel(bool success, string message)
{
Debug.Log("Joining Network Channel: Success? " + success + " Message:" + message);
// Let All Users Know I'm Here
Debug.Log ("Calling Notify Network...");
tno.Send("NotifyNetwork", TNet.Target.All);
}
void OnNetworkPlayerJoin(Player newPlayer)
{
Debug.Log("ID "+ newPlayer.id + ", " + newPlayer.name + " Joined Network.");
}
void AddPlayerToClientList(string newPlayerName, int playerID)
{
MPPlayer tempPlayer
= new MPPlayer
(); tempPlayer.playerName = newPlayerName;
// tempPlayer.playerNetwork = view ;
playerList.Add(tempPlayer);
}
[RFC]
void NotifyNetwork()
{
Debug.Log ("Calling Notify Network!");
}
// OLD NETWORKING FUNCTIONS BELOW
/*
void OnServerInitialized()
{
Server_PlayerJoinRequest(GameReference.gameSettingsScript.characterName, Network.player);
}
*/
void OnConnectedToServer()
{
//networkView.RPC("Server_PlayerJoinRequest", RPCMode.Server, playerName, Network.player);
}
void OnPlayerDisconnected(NetworkPlayer networkPlayerID)
{
networkView.RPC("Client_RemovePlayer", RPCMode.All, networkPlayerID);
}
void OnDisconnectedFromServer()
{
playerList.Clear();
}
void OnPlayerConnected(NetworkPlayer networkPlayerID)
{
foreach(MPPlayer pl in playerList)
{
// networkView.RPC("Client_AddPlayerToList", networkPlayerID, pl.playerName, pl.playerNetwork);
}
networkView.RPC("Client_GetMultiplayerMatchSettings", networkPlayerID, currentScene.sceneName, "", "");
}
void Client_RemovePlayer(NetworkPlayer view)
{
MPPlayer temppl = null;
foreach(MPPlayer pl in playerList)
{
// if(pl.playerNetwork == view)
// {
// temppl = pl;
// }
}
if(temppl != null)
{
playerList.Remove(temppl);
}
}
void Client_GetMultiplayerMatchSettings(string scene, string mode, string others)
{
currentScene = GetScene(scene);
}
void Client_LoadMultiplayerScene(string scene, int prefix)
{
// Spawn Player
// Client_SpawnPlayer();
// So we only recieve messages for new prefix
Network.SetLevelPrefix(prefix);
Application.LoadLevel(scene);
}
public void Client_SpawnPlayer(Vector3 spawnPoint)
{
Debug.Log ("Spawning Local Player");
// Create Player Prefab
// GameReference.localPlayerObject = Network.Instantiate(playerCharacterPrefab, Vector3.zero, Quaternion.identity, 0) as GameObject;
TNManager.Create(playerCharacterPrefab, spawnPoint, Quaternion.identity);
// GameReference.localPlayerObject.name = GameReference.playerCharacterScript.Name;
//GameReference.localPlayerObject.transform.localScale = new Vector3(1,1,1);
}
public SceneSettings GetScene(string name)
{
SceneSettings get = null;
foreach(SceneSettings st in sceneList)
{
if(st.sceneName == name)
{
get = st;
break;
}
}
return get;
}
}
[System.Serializable]
public class MPPlayer
{
public int playerID ;
public string playerName = "";
}
[System.Serializable]
public class SceneSettings
{
public string sceneName;
public string sceneLoadName;
public Texture sceneLoadTexture;
}