Block.gd 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. extends TimeLord
  2. var _i = 0
  3. var _j = 0
  4. var wave_offset = 0
  5. var moving_offset = 0
  6. var color = Color8(0,0,0,255)
  7. var shader = load('res://shaders/block_shader.shader')
  8. var margin = 0.07
  9. var Mat
  10. var RISE_TIME = 0.2
  11. var OVERALL_TIME = 0.5
  12. var FALL_TIME = OVERALL_TIME - RISE_TIME
  13. var EXPANDED_MARGIN = 0.3
  14. var HIGHLIGHTED_COLOR = Color8(255,0,255,255)
  15. const BLOCK_MOVE_ANITIME = 0.3 #this is to be referenced even if MOVE_ANITIME is overriden
  16. var MOVE_ANITIME = BLOCK_MOVE_ANITIME
  17. class_name Block
  18. export var inert = true
  19. onready var Grid = find_parent("GRID")
  20. func _ready():
  21. Mat=ShaderMaterial.new()
  22. Mat.shader=shader
  23. Mat.set_shader_param("color",color)
  24. Mat.set_shader_param("margin",margin)
  25. $TextureRect.material = Mat
  26. func _process(delta):
  27. if inert:
  28. var residual = _i - floor(_i)
  29. if (residual != 0):
  30. var dy = Grid.displacement[ceil(_i)] - Grid.displacement[floor(_i)]
  31. wave_offset = Grid.displacement[floor(_i)] + residual*dy
  32. else:
  33. if _i in range(len(Grid.displacement)):
  34. wave_offset = Grid.displacement[_i]
  35. else:
  36. wave_offset = Grid.displacement[0]
  37. position = Vector2(0, wave_offset) + Vector2(_i,-_j)*Grid.BLOCKSIZE
  38. func move_to(i,j, delay=0, time=MOVE_ANITIME, easing = Tween.EASE_OUT):
  39. _prepare_action()
  40. var tw1 = SDTween.new()
  41. tw1.interpolate_property(self,"_i",_i,i,time,Tween.TRANS_CUBIC,easing,delay)
  42. add_child(tw1)
  43. tw1.start()
  44. var tw2 = SDTween.new(self,"_prepare_action")
  45. tw2.interpolate_property(self,"_j",_j,j,time,Tween.TRANS_CUBIC,easing,delay)
  46. add_child(tw2)
  47. tw2.start()
  48. func destructing_sound():
  49. var p = SDRandPitch2D.new("res://sounds/erasure.ogg")
  50. p.position = position
  51. get_parent().add_child(p)
  52. p.play()
  53. func erase(with_sound = false):
  54. if with_sound:
  55. destructing_sound()
  56. Grid.Blocks.erase(self)
  57. queue_free()
  58. func _prepare_action():
  59. _i = round(_i)
  60. _j = round(_j)
  61. rotation = 0
  62. func block_pulsate():
  63. var ani_progress = 0
  64. var colortw1 = SDTween.new()
  65. colortw1.interpolate_property($TextureRect,"material:shader_param/color",$TextureRect.material.get_shader_param("color"),HIGHLIGHTED_COLOR,RISE_TIME,Tween.TRANS_CUBIC,Tween.EASE_OUT)
  66. add_child(colortw1)
  67. colortw1.start()
  68. var margintw1 = SDTween.new()
  69. margintw1.interpolate_property($TextureRect,"material:shader_param/margin",$TextureRect.material.get_shader_param("margin"),EXPANDED_MARGIN,RISE_TIME,Tween.TRANS_CUBIC,Tween.EASE_OUT)
  70. add_child(margintw1)
  71. margintw1.start()
  72. ani_progress+=RISE_TIME
  73. var colortw2 = SDTween.new()
  74. colortw2.interpolate_property($TextureRect,"material:shader_param/color",HIGHLIGHTED_COLOR,color,FALL_TIME,Tween.TRANS_CUBIC,Tween.EASE_OUT,ani_progress)
  75. add_child(colortw2)
  76. colortw2.start()
  77. var margintw2 = SDTween.new()
  78. margintw2.interpolate_property($TextureRect,"material:shader_param/margin",EXPANDED_MARGIN,margin,FALL_TIME,Tween.TRANS_CUBIC,Tween.EASE_OUT,ani_progress)
  79. add_child(margintw2)
  80. margintw2.start()