invitePlayer.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using DG.Tweening;
  5. using Mirror;
  6. using TMPro;
  7. public class invitePlayer : NetworkBehaviour
  8. {
  9. [Header("UI References")]
  10. [SerializeField] private GameObject inviteUI, beingInviteUI;
  11. [SerializeField] private GameObject inPartyUI;
  12. [SerializeField] private TMP_Text inPartyOwnerNameTxt;
  13. [SerializeField] private TextMesh charPartyText;
  14. [SerializeField] private GameObject charPartyUI;
  15. [SerializeField] private TMP_Text inPartyPlayersTxt;
  16. [SerializeField] private TMP_Text inviteOwnerNameTxt;
  17. [SerializeField] private CanvasGroup uiCanvasGroup, bUiCanvasGroup;
  18. [SerializeField] private RectTransform uiRectTransform, panelRect;
  19. [Header("Animation Settings")]
  20. [SerializeField] private float appearDuration = 0.3f;
  21. [SerializeField] private float disappearDuration = 0.2f;
  22. [SerializeField] private Ease appearEase = Ease.OutBack;
  23. [SerializeField] private Ease disappearEase = Ease.InBack;
  24. [SerializeField] private Vector2 offScreenPosition = new Vector2(1200, -140);
  25. [SerializeField] private Vector2 onScreenPosition = new Vector2(1300, -140);
  26. private void Start()
  27. {
  28. uiRectTransform.localScale = Vector3.zero;
  29. uiCanvasGroup.alpha = 0;
  30. inviteUI.SetActive(false);
  31. inPartyUI.SetActive(false);
  32. // charPartyUI.SetActive(false);
  33. charPartyText.text = "";
  34. beingInviteUI.SetActive(false);
  35. onScreenPosition = panelRect.anchoredPosition;
  36. offScreenPosition = new Vector2(
  37. +Screen.width, // Use screen width for consistent off-screen positioning
  38. onScreenPosition.y
  39. );
  40. panelRect.anchoredPosition = offScreenPosition;
  41. }
  42. void Update()
  43. {
  44. if (Input.GetKeyDown(KeyCode.L))
  45. {
  46. ShowInvite("keyBoard");
  47. }
  48. }
  49. private void OnMouseDown() //clicking on collider
  50. //ToDo exclude owner
  51. {
  52. Debug.Log("OnMouseDown on invitePlayer " + GetComponent<playerNetwork>().playerName);
  53. ShowInviteUI();
  54. }
  55. public void ShowInviteUI()
  56. {
  57. inviteUI.SetActive(true);
  58. uiCanvasGroup.alpha = 0;
  59. uiRectTransform.localScale = Vector3.zero;
  60. Sequence showSequence = DOTween.Sequence();
  61. showSequence.Append(uiRectTransform.DOScale(1, appearDuration).SetEase(appearEase))
  62. .Join(uiCanvasGroup.DOFade(1, appearDuration))
  63. .SetUpdate(true);
  64. Camera.main.DOShakePosition(0.2f, 0.1f, 1, 90f, false);
  65. }
  66. public void CloseInviteUI()
  67. {
  68. Sequence hideSequence = DOTween.Sequence();
  69. hideSequence.Append(uiRectTransform.DOScale(0, disappearDuration).SetEase(disappearEase))
  70. .Join(uiCanvasGroup.DOFade(0, disappearDuration))
  71. .OnComplete(() => inviteUI.SetActive(false));
  72. }
  73. public void InvitePlayer()
  74. {
  75. string thisPlayerName = GetComponent<playerNetwork>().playerName;
  76. playerNetwork.localPlayer.CmdInvitePlayer(thisPlayerName);
  77. CloseInviteUI();
  78. }
  79. public string InviteOwner = "";
  80. public void ShowInvite(string ownerName)
  81. {
  82. InviteOwner = ownerName;
  83. inviteOwnerNameTxt.text = "You are being invited to a Party by " + ownerName;
  84. Debug.Log("ShowPanel called");
  85. beingInviteUI.SetActive(true);
  86. panelRect.DOAnchorPos(onScreenPosition, 0.5f)
  87. .SetEase(Ease.OutBack);
  88. }
  89. public void AcceptInvite()
  90. {
  91. playerNetwork.localPlayer.CmdAcceptInvite(InviteOwner);
  92. HidePanel();
  93. }
  94. public void DeclineInvite()
  95. {
  96. HidePanel();
  97. }
  98. public void HidePanel()
  99. {
  100. panelRect.DOAnchorPos(offScreenPosition, 0.5f)
  101. .SetEase(Ease.OutBack)
  102. .OnComplete(() => beingInviteUI.SetActive(false));
  103. }
  104. public void InParty(string ownerName)
  105. {
  106. if (ownerName.Length == 0)
  107. {
  108. inPartyUI.SetActive(false);
  109. charPartyText.text = "";
  110. charPartyUI.SetActive(false);
  111. }
  112. else
  113. {
  114. inPartyUI.SetActive(true);
  115. inPartyOwnerNameTxt.text = $"{ownerName}'s Party";
  116. charPartyText.text = $"in {ownerName}'s party";
  117. charPartyUI.SetActive(true);
  118. playerNetwork[] players = FindObjectsOfType<playerNetwork>();
  119. List<string> playerNames = new List<string>();
  120. foreach (playerNetwork player in players)
  121. {
  122. if (player.myPartyOwner == ownerName)
  123. {
  124. playerNames.Add(player.playerName);
  125. }
  126. }
  127. inPartyPlayersTxt.text = string.Join(", ", playerNames);
  128. }
  129. }
  130. public void LeaveParty(){
  131. playerNetwork.localPlayer.CmdLeaveParty();
  132. inPartyUI.SetActive(false);
  133. // charPartyUI.SetActive(false);
  134. // charPartyText.text = "";
  135. }
  136. }