Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Sync player text color

Discussion in 'Multiplayer' started by scarffy, Nov 2, 2020.

  1. scarffy

    scarffy

    Joined:
    Jan 15, 2013
    Posts:
    25
    Hi,

    I am still new to photon PUN2 and I want to understand if I do this correctly,

    I want to make when the player is idle for x time, the player's text will first greyed out and when time pass y time, player will be disconnect from the room.

    Can someone please help pointing me to the right direction.

    Code (CSharp):
    1.  public class PlayerIdle : MonoBehaviour
    2.     {
    3.         /// <summary>
    4.         /// 900 is 15min
    5.         /// </summary>
    6.         public int timeIdle = 0;
    7.         public int curTime;
    8.         public int lastInputTime;
    9.  
    10.         // Date Time
    11.         DateTime curDateTime;
    12.  
    13.         [Space(10)]
    14.         public bool isIdle = false;
    15.         public bool sent = false;
    16.  
    17.         public TextMeshProUGUI displayName;
    18.  
    19.         public PlayerMain pMain;
    20.  
    21.         ExitGames.Client.Photon.Hashtable _customProperties = new ExitGames.Client.Photon.Hashtable();
    22.  
    23.         public Player player { get;set;}
    24.  
    25.         // Start is called before the first frame update
    26.         void Start()
    27.         {
    28.             //curDateTime = DateTime.Now;
    29.             //curTime = curDateTime.Minute;
    30.             lastInputTime = curDateTime.Minute;
    31.         }
    32.  
    33.         void Update()
    34.         {
    35.             if (!Input.anyKey)
    36.             {
    37.                 curDateTime = DateTime.Now;
    38.                 //======================//
    39.  
    40.                 curTime = curDateTime.Second;
    41.  
    42.                 timeIdle = curTime - lastInputTime;
    43.  
    44.                 if (timeIdle >= 15 && PhotonNetwork.InRoom)
    45.                 {
    46.                     // Grey out the name
    47.  
    48.                     isIdle = true;
    49.                     setIdle();
    50.                 }
    51.                 else if (!PhotonNetwork.InRoom)
    52.                 {
    53.                     isIdle = false;
    54.                     timeIdle = 0;
    55.                     sent = false;
    56.                 }
    57.  
    58.                 if(timeIdle >= 30)
    59.                 {
    60.                     // Kick player
    61.                     sent = false;
    62.  
    63.                     if (PhotonNetwork.InRoom)
    64.                     {
    65.                         PhotonNetwork.Disconnect();
    66.                        
    67.                     }
    68.                 }
    69.             }
    70.             else
    71.             {
    72.                 timeIdle = 0;
    73.                 lastInputTime = curDateTime.Minute;
    74.                 isIdle = false;
    75.                 sent = false;
    76.                 //setIdle();
    77.             }
    78.  
    79.  
    80.         }
    81.  
    82.         void setIdle()
    83.         {
    84.             if(isIdle && !sent)
    85.             {
    86.                 _customProperties["charIdle"] = isIdle;
    87.                 pMain.Player.SetCustomProperties(_customProperties);
    88.                 PhotonNetwork.LocalPlayer.CustomProperties = _customProperties;
    89.                 displayName.color = Color.grey;
    90.                 SetPlayerText(PhotonNetwork.CurrentRoom.GetPlayer(pMain.Player.ActorNumber));
    91.                 sent = true;
    92.             }
    93.             if(!isIdle && !sent)
    94.             {
    95.                 _customProperties["charIdle"] = isIdle;
    96.                 pMain.Player.SetCustomProperties(_customProperties);
    97.                 PhotonNetwork.LocalPlayer.CustomProperties = _customProperties;
    98.                 SetPlayerText(PhotonNetwork.CurrentRoom.GetPlayer(pMain.Player.ActorNumber));
    99.                 displayName.color = Color.white;
    100.                 sent = true;
    101.             }
    102.         }
    103.  
    104.         void SetPlayerText(Player player)
    105.         {
    106.             bool result;
    107.             if (player.CustomProperties.ContainsKey("charIdle"))
    108.             {
    109.                 result = (bool)player.CustomProperties["charIdle"];
    110.                 if(result)
    111.                     displayName.color = Color.grey;
    112.                 else
    113.                     displayName.color = Color.white;
    114.             }
    115.         }
    116.  
    117.        
    118.     }
     
  2. scarffy

    scarffy

    Joined:
    Jan 15, 2013
    Posts:
    25
    Ok. I got it working by using [PunRPC]