You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.9 KiB

7 years ago
7 years ago
7 years ago
7 years ago
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityStandardAssets.CinematicEffects;
  5. public class ScreenEffects : MonoBehaviour
  6. {
  7. public DepthOfField depthOfField;
  8. public float strength = 0f;
  9. public CanvasGroup flashCanvas;
  10. public float alertFlashAlpha = 0f;
  11. private float baseFlashAlpha;
  12. private float originalNearRadius;
  13. private float originalFarRadius;
  14. private int flashID;
  15. void Start ()
  16. {
  17. depthOfField = GetComponent<DepthOfField>();
  18. if (depthOfField == null)
  19. depthOfField = gameObject.AddComponent<DepthOfField>();
  20. originalNearRadius = depthOfField.focus.nearBlurRadius;
  21. originalFarRadius = depthOfField.focus.farBlurRadius;
  22. NotificationServer.register("show GameUI", showGame);
  23. NotificationServer.register("hide GameUI", hideGame);
  24. NotificationServer.register("flash damage", flashDamage);
  25. NotificationServer.register("statechange Searchlight", searchlightStateChanged);
  26. }
  27. public void showGame()
  28. {
  29. LeanTween.cancel(gameObject, false);
  30. float startNear = depthOfField.focus.nearBlurRadius;
  31. float startFar = depthOfField.focus.farBlurRadius;
  32. DepthOfField.FocusSettings focus = depthOfField.focus;
  33. LeanTween.value(gameObject, 1f, 1f*strength, 0.5f).setEaseInOutQuad().setOnUpdate((float val)=>{
  34. focus.nearBlurRadius = startNear * val;
  35. focus.farBlurRadius = startFar * val;
  36. }).setOnComplete(()=>{
  37. if (strength == 0f)
  38. depthOfField.enabled = false;
  39. }).setIgnoreTimeScale(true);
  40. float target = 0f;
  41. if (Searchlight.state == Searchlight.SearchState.Chasing)
  42. target = alertFlashAlpha;
  43. LeanTween.cancel(flashID);
  44. flashID = LeanTween.alphaCanvas(flashCanvas, target, 0.5f).setEaseInOutCubic().setIgnoreTimeScale(true).uniqueId;
  45. }
  46. public void hideGame()
  47. {
  48. LeanTween.cancel(gameObject, false);
  49. depthOfField.enabled = true;
  50. float startNear = depthOfField.focus.nearBlurRadius;
  51. float startFar = depthOfField.focus.farBlurRadius;
  52. DepthOfField.FocusSettings focus = depthOfField.focus;
  53. LeanTween.value(gameObject, 1f*strength, 1f, 0.5f).setEaseInOutQuad().setOnUpdate((float val)=>{
  54. focus.nearBlurRadius = startNear + (originalNearRadius-startNear) * val;
  55. focus.farBlurRadius = startFar + (originalFarRadius-startFar) * val;
  56. }).setIgnoreTimeScale(true);
  57. }
  58. public void flashDamage()
  59. {
  60. LeanTween.cancel(flashID);
  61. flashID = LeanTween.alphaCanvas(flashCanvas, 1f, 0.2f).setEaseInOutCubic().setOnComplete(()=>{
  62. float target = 0f;
  63. if (Searchlight.state == Searchlight.SearchState.Chasing)
  64. target = alertFlashAlpha;
  65. flashID = LeanTween.alphaCanvas(flashCanvas, target, 0.8f).setEaseInOutCubic().uniqueId;
  66. }).uniqueId;
  67. }
  68. public void searchlightStateChanged()
  69. {
  70. float target = 0f;
  71. if (Searchlight.state == Searchlight.SearchState.Chasing)
  72. target = alertFlashAlpha;
  73. LeanTween.cancel(flashID);
  74. flashID = LeanTween.alphaCanvas(flashCanvas, target, 0.5f).setEaseInOutCubic().uniqueId;
  75. }
  76. }