Pedro Gomes 494330fa1f Double fix
- Ability projectiles now properly visually disables on remotes
- network job data class created to generate json string from jobdata, workaround for scriptable object serialization
2024-05-13 22:39:36 +01:00

117 lines
3.7 KiB
C#

using ExitGames.Client.Photon;
using Photon.Pun;
using Photon.Realtime;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class JobInfoPanel : MonoBehaviour, IOnEventCallback
{
[Header("Components:")]
[SerializeField] private TMP_Text title;
[SerializeField] private TMP_Text description;
[SerializeField] private TMP_Text coinReward;
[SerializeField] private TMP_Text experienceReward;
[SerializeField] private TMP_Text reputationReward;
[SerializeField] private GameObject infoPanel;
[SerializeField] private Button closeButton;
[Header("Listeners:")]
[SerializeField] private GameEventListener_JobData onJobSelected;
[SerializeField] private GameEventListener onJobsBoardReleased;
[SerializeField] private GameEventListener_Player onPlayerVoted;
NetworkJobData networkJobData;
private void Awake()
{
onJobSelected.Response.AddListener((job) => SetupJobInfoPanel(job, true));
onJobSelected.Response.AddListener(Send_Others_OnJobSelected);
onJobsBoardReleased.Response.AddListener(() => ToggleInfoPanel(false));
onPlayerVoted.Response.AddListener((player) =>
{
if (player != PhotonNetwork.LocalPlayer)
ToggleInfoPanel(true);
});
closeButton.onClick.AddListener(() => ToggleInfoPanel(false));
}
private void SetupJobInfoPanel(JobData jobData, bool showPanel)
{
if (jobData.jobDescription.showJobTitlePrefix)
title.text = $"Job Title: {jobData.jobDescription.title}";
else
title.text = $"{jobData.jobDescription.title}";
description.text = jobData.jobDescription.description;
coinReward.text = jobData.coinFinalReward.ToString();
experienceReward.text = jobData.experienceFinalReward.ToString();
reputationReward.text = jobData.reputationFinalReward.ToString();
if (showPanel)
ToggleInfoPanel(true);
}
private void SetupJobInfoPanel(NetworkJobData jobData, bool showPanel)
{
if (jobData.showJobTitlePrefix)
title.text = $"Job Title: {jobData.title}";
else
title.text = $"{jobData.title}";
description.text = jobData.description;
coinReward.text = jobData.coinFinalReward.ToString();
experienceReward.text = jobData.experienceFinalReward.ToString();
reputationReward.text = jobData.reputationFinalReward.ToString();
if (showPanel)
ToggleInfoPanel(true);
}
public void ToggleInfoPanel(bool visible)
{
infoPanel.SetActive(visible);
}
private void Send_Others_OnJobSelected(JobData jobData)
{
//if (PhotonNetwork.CurrentRoom.PlayerCount <= 1) return;
networkJobData = new NetworkJobData(jobData);
string jsonJobData = JsonUtility.ToJson(networkJobData);
Debug.Log($"JobData: {jsonJobData}");
RaiseEventOptions raiseEventOptions = new RaiseEventOptions { Receivers = ReceiverGroup.Others };
PhotonNetwork.RaiseEvent(GameConstants.NetworkEventCodes.JobSelection, jsonJobData, raiseEventOptions, SendOptions.SendReliable);
}
public void OnEvent(EventData photonEvent)
{
if (photonEvent.Code == GameConstants.NetworkEventCodes.JobSelection)
{
string jsonJobData = (string)photonEvent.CustomData;
Debug.Log("Job selected: " + jsonJobData);
SetupJobInfoPanel(JsonUtility.FromJson<NetworkJobData>(jsonJobData), false);
}
}
public void OnEnable()
{
PhotonNetwork.AddCallbackTarget(this);
}
public void OnDisable()
{
PhotonNetwork.RemoveCallbackTarget(this);
}
}