// Sets the instance reference private void Awake() { if (instance != null) { return; } instance = this; DontDestroyOnLoad(gameObject); }
/// <summary> /// Called after disconnecting from the Photon server. /// </summary> public override void OnDisconnectedFromPhoton() { //switch from the online to the offline scene after connection is closed if (SceneManager.GetActiveScene().buildIndex != 0) { SceneManager.LoadScene(0); } DatabaseRequester.Logout(); }
private void WinnerRPC(int id) { if (!PhotonNetwork.isMasterClient) { return; } //check if there is only one player if (GameManagerScript.GetInstance().alivePlayers.Count == 1) { DatabaseRequester.SetPlayerStat(photonView.GetKills(), 1, GameManagerScript.GetInstance().dbTokens[id]); } }
private void BuySkin(string skin_id, GameObject row) { int status; string response; DatabaseRequester.Buy(skin_id, out status, out response); if (status == 200) { row.SetActive(false); var cost = System.Int32.Parse(((Text)row.transform.GetChild(1).GetComponent("Text")).text); int currentCurrency = UpdateCurrency(cost); UpdateBuyButton(currentCurrency); } }
private void Start() { //player add itself to the dictionnary of alive player using his player ID GameManagerScript.GetInstance().alivePlayers.Add(playerID, gameObject); //intialization of the pause counter for all players GameManagerScript.GetInstance().pauseCounter.Add(playerID, 3); //called only for this client if (!photonView.isMine) { return; } //activate the player UI playerUI.SetActive(true); //activate camera only for this player playerCamera.enabled = true; playerCameraAudio.enabled = true; //set name in the UI uiScript.playerNameText.text = photonView.GetName(); //update health, shield and fuel uiScript.UpdateHealth(photonView.GetHealth()); uiScript.UpdateShield(photonView.GetShield()); uiScript.UpdateKillsText(photonView.GetKills()); uiScript.UpdateAliveText(GameManagerScript.alivePlayerNumber); Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; thrusters.SetActive(false); //set a global reference to the local player GameManagerScript.GetInstance().localPlayer = this; photonView.RPC("SendDBTokenRPC", PhotonTargets.All, playerID, DatabaseRequester.GetDBToken()); for (int i = 0; i < playerSkinedMesh.Length; i++) { playerSkinedMesh[i].shadowCastingMode = ShadowCastingMode.ShadowsOnly; } }
private void FillSkin() { int status; string response; DatabaseRequester.Skin(out status, out response); // - leaderboard is loaded successfully if (status == 200) { var csv_text = response; var rows = csv_text.Split('\n'); for (int i = 0; i < skinRows.Count; i++) { GameObject skinRow = skinRows[i]; Text idText = (Text)skinRow.transform.GetChild(0).GetComponent("Text"); Text nameText = (Text)skinRow.transform.GetChild(1).GetComponent("Text"); Button skinButton = (Button)skinRow.transform.GetChild(2).GetComponent("Button"); if (i == 0) { skinButton.onClick.AddListener(delegate { SetSkin("0"); }); if (PlayerPrefs.GetInt("prefab") == 0) { idText.color = playerColor; nameText.color = playerColor; skinButton.interactable = false; } else { idText.color = Color.white; nameText.color = Color.white; skinButton.interactable = true; } } else { var j = i - 1; // - no more skin to buy if (j >= rows.Length || string.Equals(rows[j], "")) { skinRows[i].SetActive(false); continue; } skinRows[i].SetActive(true); var row = rows[j].Split(','); nameText.text = row[1]; skinButton.onClick.AddListener(delegate { SetSkin(row[0]); }); if (row[0] == PlayerPrefs.GetInt("prefab").ToString()) { idText.color = playerColor; nameText.color = playerColor; skinButton.interactable = false; } else { idText.color = Color.white; nameText.color = Color.white; skinButton.interactable = true; } } } } }
private void FillMarket() { int status; string response; int currency; // - get player currency DatabaseRequester.Currency(out status, out response); if (status == 200) { currency = System.Int32.Parse(response); playerCurrency.text = currency.ToString(); } else { return; } DatabaseRequester.Market(out status, out response); // - leaderboard is loaded successfully if (status == 200) { var csv_text = response; var rows = csv_text.Split('\n'); // - Disable all rows by default for (int i = 0; i < marketRows.Count; i++) { marketRows[i].SetActive(false); } for (int i = 0; i < rows.Length; i++) { var row = rows[i].Split(','); if (row[0].Equals("")) { continue; } Debug.Log(row[0] + " " + row[1] + " " + row[2]); int id = (System.Int32.Parse(row[0]) - 1) % 3; marketRows[id].SetActive(true); GameObject marketRow = marketRows[id]; Text nameText = (Text)marketRow.transform.GetChild(0).GetComponent("Text"); Text costText = (Text)marketRow.transform.GetChild(1).GetComponent("Text"); Button buyButton = (Button)marketRow.transform.GetChild(2).GetComponent("Button"); nameText.text = row[1]; costText.text = row[2]; buyButton.onClick.AddListener(delegate { BuySkin(row[0], marketRow); }); buyButton.interactable = currency >= System.Int32.Parse(row[2]); } } }
private void FillLeaderboard() { int status; string response; bool hasFoundPlayer = false; DatabaseRequester.Leaderboard(out status, out response); // - leaderboard is loaded successfully if (status == 200) { var csv_text = response; var rows = csv_text.Split('\n'); for (int i = 0; i < rows.Length; i++) { var row = rows[i].Split(','); if (row.Length == 5 && i < leaderboardRows.Count) { GameObject leaderboardRow = leaderboardRows[i]; Text rankText = (Text)leaderboardRow.transform.GetChild(0).GetComponent("Text"); Text playerText = (Text)leaderboardRow.transform.GetChild(1).GetComponent("Text"); Text killText = (Text)leaderboardRow.transform.GetChild(2).GetComponent("Text"); Text winText = (Text)leaderboardRow.transform.GetChild(3).GetComponent("Text"); Text playedText = (Text)leaderboardRow.transform.GetChild(4).GetComponent("Text"); Text scoreText = (Text)leaderboardRow.transform.GetChild(5).GetComponent("Text"); playerText.text = row[0]; killText.text = row[1]; winText.text = row[2]; playedText.text = row[3]; scoreText.text = row[4]; if (System.String.Equals(row[0], DatabaseRequester.GetPlayerPseudo(), System.StringComparison.OrdinalIgnoreCase)) { rankText.color = playerColor; playerText.color = playerColor; winText.color = playerColor; killText.color = playerColor; playedText.color = playerColor; scoreText.color = playerColor; hasFoundPlayer = true; } } } if (hasFoundPlayer) { leaderboardRows[10].SetActive(false); } else { leaderboardRows[10].SetActive(true); var row = rows[10].Split(','); GameObject leaderboardRow = leaderboardRows[10]; Text rankText = (Text)leaderboardRow.transform.GetChild(0).GetComponent("Text"); Text playerText = (Text)leaderboardRow.transform.GetChild(1).GetComponent("Text"); Text killText = (Text)leaderboardRow.transform.GetChild(2).GetComponent("Text"); Text winText = (Text)leaderboardRow.transform.GetChild(3).GetComponent("Text"); Text playedText = (Text)leaderboardRow.transform.GetChild(4).GetComponent("Text"); Text scoreText = (Text)leaderboardRow.transform.GetChild(5).GetComponent("Text"); rankText.text = row[0]; playerText.text = row[1]; killText.text = row[2]; winText.text = row[3]; playedText.text = row[4]; scoreText.text = row[5]; rankText.color = playerColor; playerText.color = playerColor; winText.color = playerColor; killText.color = playerColor; playedText.color = playerColor; scoreText.color = playerColor; hasFoundPlayer = true; } } }
/// <summary> /// Server only: calculate damage to be taken by the Player, /// triggers kills increase and workflow on death. /// </summary> public void TakeDamage(int hitPoint, int killerID = -1) { if (!PhotonNetwork.isMasterClient || GameManagerScript.GetInstance().IsGamePause()) { return; } int damage = (int)(hitPoint * damageMultiplicator); //store network variables temporary int health = playerPhotonView.GetHealth(); int shield = playerPhotonView.GetShield(); //reduce shield on hit if (shield > 0 && killerID != -1) { var shieldDamage = shield - damage; if (shieldDamage < 0) { playerPhotonView.SetShield(0); playerPhotonView.SetHealth(health + shieldDamage); } else { playerPhotonView.SetShield(shieldDamage); } } // //if player is already dead, but we can still shoot him... don't ask me why // if (health <= 0) // { // return; // } //substract health by damage //locally for now, to only have one update later on else { health -= damage; } //the player is dead if (health <= 0) { //if we took damage from another player if (killerID != -1) { //get killer and increase kills for that player playerPhotonView.RPC("UpdateKillsRPC", PhotonTargets.MasterClient, killerID); } //set the player current rank playerPhotonView.SetRank(GameManagerScript.alivePlayerNumber); // set dead player stats DatabaseRequester.SetPlayerStat(playerPhotonView.GetKills(), 0, GameManagerScript.GetInstance().dbTokens[playerPhotonView.owner.ID]); //tell all clients that the player is dead playerPhotonView.RPC("IsDeadRPC", PhotonTargets.All, playerPhotonView.owner.ID); } else { //we didn't die, set health to new value playerPhotonView.SetHealth(health); } }
/// <summary> /// Quit the game /// </summary> public void Quit() { DatabaseRequester.Logout(); Application.Quit(); }