Scoreboard | FEP
Fri May 27 2022 09:54:35 GMT+0000 (Coordinated Universal Time)
Saved by @DanDHenshaw
using System; using System.Collections.Generic; using ExitGames.Client.Photon; using Photon.Pun; using UnityEngine; using Photon.Realtime; using Photon.Pun; using Hashtable = ExitGames.Client.Photon.Hashtable; public class Scoreboard : MonoBehaviourPunCallbacks { private Controls _controls; [SerializeField] private GameObject ScoreboardObject; [SerializeField] private Transform container; [SerializeField] private GameObject scoreboardItemPrefab; private Dictionary<Player, ScoreboardItem> scoreboardItems = new Dictionary<Player, ScoreboardItem>(); private void Awake() { _controls = new Controls(); _controls.Player.Scoreboard.started += _ => EnableScoreboard(); _controls.Player.Scoreboard.canceled += _ => DisableScoreboard(); } private void Start() { foreach (Player player in PhotonNetwork.PlayerList) { AddScoreboardItem(player); } } private void EnableScoreboard() { ScoreboardObject.SetActive(true); } private void DisableScoreboard() { ScoreboardObject.SetActive(false); } public override void OnPlayerEnteredRoom(Player newPlayer) { AddScoreboardItem(newPlayer); } public override void OnPlayerLeftRoom(Player player) { RemoveScoreboardItem(player); } void AddScoreboardItem(Player player) { ScoreboardItem item = Instantiate(scoreboardItemPrefab, container).GetComponent<ScoreboardItem>(); item.Initialize(player); scoreboardItems[player] = item; } void RemoveScoreboardItem(Player player) { Destroy(scoreboardItems[player].gameObject); scoreboardItems.Remove(player); } public const byte KillDeathEvent = 10; private void OnEvent(EventData photonEvent) { byte eventCode = photonEvent.Code; if (eventCode == KillDeathEvent) { object[] data = (object[])photonEvent.CustomData; Player killer = (Player) data[0]; Debug.Log("Killer: " + killer); Player dead = (Player) data[1]; Debug.Log("Dead: " + dead); scoreboardItems[killer].gameObject.GetComponent<ScoreboardItem>().AddKill(); scoreboardItems[dead].gameObject.GetComponent<ScoreboardItem>().AddDeath(); } } private void OnEnable() { _controls.Player.Scoreboard.Enable(); PhotonNetwork.NetworkingClient.EventReceived += OnEvent; } private void OnDisable() { _controls.Player.Scoreboard.Disable(); PhotonNetwork.NetworkingClient.EventReceived -= OnEvent; } }
Comments