127 lines
4.5 KiB
C#
127 lines
4.5 KiB
C#
using Photon.Pun;
|
|
using Photon.Realtime;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class PartyFramesController : MonoBehaviour
|
|
{
|
|
[SerializeField] private GameObject partyFrameButtonPrefab;
|
|
[SerializeField] private GameObject partyFrameVotePrefab;
|
|
[SerializeField] private Transform parentGrid;
|
|
[SerializeField] private Transform voteParentGrid;
|
|
[SerializeField] private GameEventListener_Player onPlayerJoinedParty;
|
|
[SerializeField] private GameEventListener_Player onPlayerLeftParty;
|
|
[SerializeField] private GameEventListener_Player onPlayerVoted;
|
|
[SerializeField] private GameEventListener_Player onPlayerVoteCanceled;
|
|
[SerializeField] private GameEventListener_PhotonView onPlayerSpawned;
|
|
[SerializeField] private List<Sprite> classImages = new List<Sprite>();
|
|
[SerializeField] private List<GameTag> classTags = new List<GameTag>();
|
|
|
|
public Dictionary<Player, PartyFrameButton> partyFrameButtons = new Dictionary<Player, PartyFrameButton>();
|
|
public Dictionary<Player, PartyVoteFrame> partyVoteFrames = new Dictionary<Player, PartyVoteFrame>();
|
|
|
|
GameObject buttonGO;
|
|
PartyFrameButton button;
|
|
PartyVoteFrame frame;
|
|
RiftPlayer riftPlayer;
|
|
|
|
private void Awake()
|
|
{
|
|
onPlayerJoinedParty.Response.AddListener(AddNewPartyMemberFrame);
|
|
onPlayerLeftParty.Response.AddListener(RemovePartyMemberFrame);
|
|
onPlayerSpawned.Response.AddListener(UpdatePartyMemberFrame);
|
|
onPlayerVoted.Response.AddListener(UpdateVoteCheckmark);
|
|
onPlayerVoteCanceled.Response.AddListener((x) => CancelAllVotes());
|
|
}
|
|
|
|
public void AddNewPartyMemberFrame(Player player)
|
|
{
|
|
if (partyFrameButtons.ContainsKey(player)) return;
|
|
|
|
buttonGO = Instantiate(partyFrameButtonPrefab, parentGrid);
|
|
button = buttonGO.GetComponent<PartyFrameButton>();
|
|
button.playerName.text = player.NickName;
|
|
partyFrameButtons.Add(player, button);
|
|
|
|
AddVoteAvatarFrame(player);
|
|
}
|
|
private void AddVoteAvatarFrame(Player player)
|
|
{
|
|
buttonGO = Instantiate(partyFrameVotePrefab, voteParentGrid);
|
|
frame = buttonGO.GetComponent<PartyVoteFrame>();
|
|
frame.playerName.text = player.NickName;
|
|
partyVoteFrames.Add(player, frame);
|
|
}
|
|
|
|
public void RemovePartyMemberFrame(Player player)
|
|
{
|
|
if(partyFrameButtons.ContainsKey(player))
|
|
{
|
|
Destroy(partyFrameButtons[player].gameObject);
|
|
partyFrameButtons.Remove(player);
|
|
}
|
|
if(partyVoteFrames.ContainsKey(player))
|
|
{
|
|
Destroy(partyVoteFrames[player].gameObject);
|
|
partyVoteFrames.Remove(player);
|
|
}
|
|
}
|
|
public void UpdatePartyMemberFrame(PhotonView photonView)
|
|
{
|
|
if(partyFrameButtons.ContainsKey(photonView.Owner))
|
|
{
|
|
riftPlayer = photonView.GetComponentInParent<RiftPlayer>();
|
|
if (riftPlayer == null)
|
|
{
|
|
Debug.Log("Sujou");
|
|
return;
|
|
}
|
|
Debug.Log("Player Class: " + riftPlayer.classTag.name);
|
|
|
|
for (int i = 0; i < classTags.Count; i++)
|
|
{
|
|
if (riftPlayer.classTag == classTags[i])
|
|
{
|
|
partyFrameButtons[photonView.Owner].button.image.sprite = classImages[i];
|
|
partyFrameButtons[photonView.Owner].playerName.text = photonView.Owner.NickName;
|
|
partyVoteFrames[photonView.Owner].avatarIcon.sprite = classImages[i];
|
|
partyVoteFrames[photonView.Owner].votedCheck.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AddNewPartyMemberFrame(photonView.Owner);
|
|
UpdatePartyMemberFrame(photonView);
|
|
}
|
|
}
|
|
|
|
private void UpdateVoteCheckmark(Player player)
|
|
{
|
|
if(partyVoteFrames.ContainsKey(player))
|
|
{
|
|
partyVoteFrames[player].votedCheck.gameObject.SetActive(true);
|
|
}
|
|
}
|
|
private void CancelVoteCheckmark(Player player)
|
|
{
|
|
if (partyVoteFrames.ContainsKey(player))
|
|
{
|
|
partyVoteFrames[player].votedCheck.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
private void CancelAllVotes()
|
|
{
|
|
if (GameStateController.Instance.CurrentState != GameState.GameScene) return;
|
|
|
|
List<Player> keys = new List<Player>(partyVoteFrames.Keys);
|
|
|
|
for (int i = 0; i < keys.Count; i++)
|
|
{
|
|
partyVoteFrames[keys[i]].votedCheck.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|