Pedro Gomes c458ae4e8f Job Update
- refactored job information and what selecting a job means in terms of code/data
- job templates
- networked job selection & job activation state
2024-06-12 22:07:33 +01:00

102 lines
3.2 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_JobInstance onJobSelected;
[SerializeField] private GameEventListener onJobsBoardReleased;
[SerializeField] private GameEventListener_Player onPlayerVoted;
JobInstance networkJobInstance;
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(JobInstance jobData, bool showPanel)
{
if (jobData.showJobTitlePrefix)
title.text = $"Job Title: {jobData.title}";
else
title.text = $"{jobData.title}";
description.text = jobData.description;
coinReward.text = jobData.coinReward.ToString();
experienceReward.text = jobData.experienceReward.ToString();
reputationReward.text = jobData.reputationReward.ToString();
if (showPanel)
ToggleInfoPanel(true);
}
public void ToggleInfoPanel(bool visible)
{
infoPanel.SetActive(visible);
}
private void Send_Others_OnJobSelected(JobInstance jobInstance)
{
//if (PhotonNetwork.CurrentRoom.PlayerCount <= 1) return;
networkJobInstance = jobInstance;
string jsonJobData = JsonUtility.ToJson(networkJobInstance);
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<JobInstance>(jsonJobData), false);
JobManager.Instance.UpdateJobSelection(JsonUtility.FromJson<JobInstance>(jsonJobData));
}
}
public void OnEnable()
{
PhotonNetwork.AddCallbackTarget(this);
}
public void OnDisable()
{
PhotonNetwork.RemoveCallbackTarget(this);
}
}