OnClickRpc.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // --------------------------------------------------------------------------------------------------------------------
  2. // <copyright file="OnClickInstantiate.cs" company="Exit Games GmbH">
  3. // Part of: Photon Unity Utilities
  4. // </copyright>
  5. // <summary>A compact script for prototyping.</summary>
  6. // <author>developer@exitgames.com</author>
  7. // --------------------------------------------------------------------------------------------------------------------
  8. using System.Collections;
  9. namespace Photon.Pun.UtilityScripts
  10. {
  11. using UnityEngine;
  12. using UnityEngine.EventSystems;
  13. /// <summary>
  14. /// This component will instantiate a network GameObject when in a room and the user click on that component's GameObject.
  15. /// Uses PhysicsRaycaster for positioning.
  16. /// </summary>
  17. public class OnClickRpc : MonoBehaviourPun, IPointerClickHandler
  18. {
  19. public PointerEventData.InputButton Button;
  20. public KeyCode ModifierKey;
  21. public RpcTarget Target;
  22. void IPointerClickHandler.OnPointerClick(PointerEventData eventData)
  23. {
  24. if (!PhotonNetwork.InRoom || (this.ModifierKey != KeyCode.None && !Input.GetKey(this.ModifierKey)) || eventData.button != this.Button)
  25. {
  26. return;
  27. }
  28. this.photonView.RPC("ClickRpc", this.Target);
  29. }
  30. #region RPC Implementation
  31. private Material originalMaterial;
  32. private Color originalColor;
  33. private bool isFlashing;
  34. [PunRPC]
  35. public void ClickRpc()
  36. {
  37. //Debug.Log("ClickRpc Called");
  38. this.StartCoroutine(this.ClickFlash());
  39. }
  40. public IEnumerator ClickFlash()
  41. {
  42. if (isFlashing)
  43. {
  44. yield break;
  45. }
  46. isFlashing = true;
  47. this.originalMaterial = GetComponent<Renderer>().material;
  48. if (!this.originalMaterial.HasProperty("_EmissionColor"))
  49. {
  50. Debug.LogWarning("Doesn't have emission, can't flash " + gameObject);
  51. yield break;
  52. }
  53. bool wasEmissive = this.originalMaterial.IsKeywordEnabled("_EMISSION");
  54. this.originalMaterial.EnableKeyword("_EMISSION");
  55. this.originalColor = this.originalMaterial.GetColor("_EmissionColor");
  56. this.originalMaterial.SetColor("_EmissionColor", Color.white);
  57. for (float f = 0.0f; f <= 1.0f; f += 0.08f)
  58. {
  59. Color lerped = Color.Lerp(Color.white, this.originalColor, f);
  60. this.originalMaterial.SetColor("_EmissionColor", lerped);
  61. yield return null;
  62. }
  63. this.originalMaterial.SetColor("_EmissionColor", this.originalColor);
  64. if (!wasEmissive) this.originalMaterial.DisableKeyword("_EMISSION");
  65. isFlashing = false;
  66. }
  67. #endregion
  68. }
  69. }