kurushake.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. class KuruShake
  2. {
  3. const float RANDOM_RANGE_POINT = 1;
  4. const float RANDOM_RANGE_DEVIATION = 0.50;
  5. const float SHAKE_DURATION_PHASE1 = 0.01;
  6. const float SHAKE_STRENGTH_MIN = 1;
  7. const float SHAKE_STRENGTH_MAX = 5;
  8. PlayerBase m_Player;
  9. float m_Time;
  10. float m_Time2;
  11. float m_RelativeTime;
  12. float m_RelativeTime2;
  13. float m_ShakeStrength;
  14. ref array<vector> m_Curve = new array<vector>;
  15. void KuruShake(PlayerBase player, float amount)
  16. {
  17. vector pos1;
  18. int seed = Math.Randomize(player.GetRandomGeneratorSyncManager().GetRandomInRange(RandomGeneratorSyncUsage.RGSGeneric,0,10000));
  19. Math.RandomFloat(-RANDOM_RANGE_POINT,RANDOM_RANGE_POINT);//throw away
  20. m_ShakeStrength = Math.Lerp(SHAKE_STRENGTH_MIN, SHAKE_STRENGTH_MAX, amount);
  21. pos1[0] = Math.RandomFloat(-RANDOM_RANGE_POINT,RANDOM_RANGE_POINT);
  22. pos1[1] = Math.RandomFloat(-RANDOM_RANGE_POINT,RANDOM_RANGE_POINT);
  23. pos1.Normalize();
  24. pos1 = pos1 * m_ShakeStrength;
  25. vector pos2;
  26. pos2[0] = pos1[0] + Math.RandomFloat(-RANDOM_RANGE_DEVIATION,RANDOM_RANGE_DEVIATION) + pos1[0];
  27. pos2[1] = pos1[1] + Math.RandomFloat(-RANDOM_RANGE_DEVIATION,RANDOM_RANGE_DEVIATION) + pos1[1];
  28. m_Curve.Insert("0 0 0");
  29. m_Curve.Insert(pos1);
  30. m_Curve.Insert(pos2);
  31. /*
  32. Print("==========================");
  33. for(int i = 0; i < m_Curve.Count(); i++)
  34. {
  35. Print(m_Curve[i]);
  36. }
  37. Print("==========================");
  38. */
  39. }
  40. void Update(float delta_time, out float pos_x, out float pos_y )
  41. {
  42. if(m_RelativeTime < 0.99)
  43. {
  44. m_Time += delta_time;
  45. m_RelativeTime = Math.InverseLerp(0, SHAKE_DURATION_PHASE1, m_Time);
  46. //m_RelativeTime = m_RelativeTime - 0.01;
  47. m_RelativeTime = Easing.EaseInQuint(m_RelativeTime);
  48. vector pos = Math3D.Curve(ECurveType.CatmullRom, m_RelativeTime, m_Curve);
  49. pos_x = pos[0];
  50. pos_y = pos[1];
  51. }
  52. else
  53. {
  54. m_Time2 += delta_time * 1;
  55. m_RelativeTime2 = 1 - m_Time2;
  56. m_RelativeTime2 = Easing.EaseInQuint(m_RelativeTime2);
  57. vector pos2 = Math3D.Curve(ECurveType.CatmullRom, m_RelativeTime2, m_Curve);
  58. pos_x = pos2[0];
  59. pos_y = pos2[1];
  60. }
  61. if(m_Time2 >= 0.99)
  62. {
  63. delete this;
  64. }
  65. }
  66. }