mana.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. mana
  3. A Magic Component
  4. Version: 1.0
  5. Docs:
  6. - mana(maximum=0)
  7. - add()
  8. - mp() number
  9. - setMP(mp=0)
  10. - maxMP() number
  11. - setMaxMP(mp=0)
  12. - gain(mp=1)
  13. - cast(mp=1)
  14. - canCast(mp=1) bool
  15. - tryCast(mp=1) bool
  16. - onGain(function)
  17. - onCast(function)
  18. > mana renders information in debug.inspect mode
  19. */
  20. function mana(max_mana=0) {
  21. let val = 0
  22. let max_val = max_mana
  23. return {
  24. id: "mana",
  25. add() {
  26. val = max_val;
  27. },
  28. mp() {
  29. return val;
  30. },
  31. setMP(mp=0) {
  32. val = mp;
  33. if (val > max_val) {
  34. val = max_val;
  35. }
  36. if (val < 0) {
  37. val = 0;
  38. }
  39. },
  40. maxMP() {
  41. return max_val;
  42. },
  43. setMaxMP(mp=0) {
  44. max_val = mp;
  45. if (max_val < 0) {
  46. max_val = 0;
  47. }
  48. if (val > max_val) {
  49. val = max_val;
  50. }
  51. },
  52. gain(mp=1) {
  53. if (this.mp() >= this.maxMP()) {
  54. return;
  55. } else if (this.mp() + mp <= this.maxMP()) {
  56. this.setMP(this.mp()+mp);
  57. this.trigger("gain", mp);
  58. } else {
  59. let diff = this.maxMP() - (this.mp()+mp);
  60. this.setMP(this.mp()+mp);
  61. this.trigger("gain", diff);
  62. }
  63. },
  64. cast(mp=1) {
  65. if (this.mp() - mp >= 0) {
  66. this.setMP(this.mp()-mp);
  67. this.trigger("cast", mp);
  68. }
  69. },
  70. canCast(mp=1) {
  71. return (this.mp() >= mp);
  72. },
  73. tryCast(mp=1) {
  74. if (this.canCast(mp)) {
  75. this.cast(mp);
  76. return true;
  77. } else {
  78. return false;
  79. }
  80. },
  81. onGain(func) {
  82. this.on("gain", func);
  83. },
  84. onCast(func) {
  85. this.on("cast", func);
  86. },
  87. inspect() {
  88. return "MP: " + this.mp() + "/" + this.maxMP();
  89. }
  90. }
  91. }