LetterHuntPlant.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. class LetterHuntPlant extends Object2D
  2. {
  3. constructor(name)
  4. {
  5. super(name);
  6. /** @type {String} */
  7. this.letter = "";
  8. /** @type {Area2D} */
  9. this.area = null;
  10. /** @type {Boolean} */
  11. this.mouseOver = false;
  12. /** @type {Boolean} */
  13. this.mosueIsDown = false;
  14. /** @type {Boolean} */
  15. this.selected = false;
  16. /** @type {Boolean} */
  17. this.selectable = true;
  18. /** @type {Number} */
  19. this.growSpeed = 2;
  20. }
  21. _initSignals()
  22. {
  23. this.addSignal("selected");
  24. }
  25. _setup()
  26. {
  27. this.area = new Area2D("Area2D", SHAPES.ELLIPSE, new Ellipse(40), true, false);
  28. this.area.connect("mouseEntered", this, "_onAreaMouseEntered");
  29. this.area.connect("mouseExited", this, "_onAreaMouseExited");
  30. this.addChild(this.area);
  31. this.setScale(0, 0);
  32. }
  33. _update( /** @type {Number} */ delta)
  34. {
  35. if (this.selectable && this.mouseOver)
  36. {
  37. if (InputHandler.mouseIsPressed)
  38. this.mosueIsDown = true;
  39. if (this.mosueIsDown)
  40. {
  41. this.scale.x = max(this.scale.x -= this.growSpeed * delta, 0.95);
  42. this.scale.y = max(this.scale.y -= this.growSpeed * delta, 0.95);
  43. if (InputHandler.mouseIsClicked)
  44. {
  45. this.selected = true;
  46. this.emitSignal("selected", this);
  47. }
  48. }
  49. else
  50. {
  51. this.scale.x = min(this.scale.x += this.growSpeed * delta, 1.3);
  52. this.scale.y = min(this.scale.y += this.growSpeed * delta, 1.3);
  53. }
  54. }
  55. else
  56. {
  57. if (this.scale.x >= 1)
  58. {
  59. this.scale.x = max(this.scale.x -= this.growSpeed * delta, 1);
  60. this.scale.y = max(this.scale.y -= this.growSpeed * delta, 1);
  61. }
  62. else
  63. {
  64. this.scale.x = min(this.scale.x += 2 * this.growSpeed * delta, 1);
  65. this.scale.y = min(this.scale.y += 2 * this.growSpeed * delta, 1);
  66. }
  67. this.mosueIsDown = false;
  68. }
  69. }
  70. _draw( /** @type {number} */ delta, /** @type {p5.Graphics} */ db)
  71. {
  72. db.fill(255);
  73. db.ellipse(0, 0, 80);
  74. if (this.selectable)
  75. {
  76. db.fill(0);
  77. db.textAlign(CENTER, CENTER);
  78. db.textSize(40);
  79. db.text(this.letter, 0, 0);
  80. }
  81. else
  82. {
  83. db.fill(0, 200);
  84. db.ellipse(0, 0, 80);
  85. }
  86. }
  87. _onAreaMouseEntered()
  88. {
  89. this.mouseOver = true;
  90. }
  91. _onAreaMouseExited()
  92. {
  93. this.mouseOver = false;
  94. }
  95. }