Health.gd 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. extends Node2D
  2. export var health_max = 0
  3. onready var health = health_max
  4. signal die
  5. signal damage(dmg)
  6. export(NodePath) var progressbar
  7. export(NodePath) var text
  8. var regen = 0.0
  9. var regen_time = 7
  10. var reactive_dmg = 0.0
  11. var hpmult = 1.0
  12. var buff = 0
  13. func _physics_process(delta):
  14. $Label.text = str(health)
  15. buff += 1
  16. if fmod(buff,regen_time*60) == 00:
  17. # print('regen')
  18. _damage(-regen * health_max ,'',self)
  19. var vulnerable = true
  20. func _damage(dmg, effect, caller):
  21. if health > health_max: health = health_max
  22. if vulnerable:
  23. health -= dmg * hpmult
  24. health = min(health,health_max)
  25. emit_signal('damage', dmg)
  26. # print('dmg to ' + str(get_path()) + " : " + str(health) + " : " +str(dmg))
  27. if health <= 0 and once:
  28. once = false
  29. emit_signal('die')
  30. if xpparticles: xpanim(caller)
  31. yield(Timergen.createtime(self,1.0),'timeout')
  32. caller._expgain(get_parent().exppt)
  33. effect_processor(effect)
  34. if has_node(progressbar):
  35. get_node(progressbar).set_value( health )
  36. get_node(progressbar).set_max( health_max )
  37. get_node(text).set_text( str(int(health)) )
  38. if dmg > 0 :
  39. invutime()
  40. print(get_parent().name + ' entity health is : ' + str(health))
  41. export var xpparticles = false
  42. var xp = preload("res://effects/xp.tscn")
  43. var xporbs = 5
  44. var once = true
  45. func xpanim(caller):
  46. for x in xporbs:
  47. var new = xp.instance()
  48. new.caller = caller.get_parent()
  49. get_parent().get_parent().add_child(new)
  50. new.glob_pos = global_position
  51. var chance = 0.0
  52. var invutime = 2.5
  53. func invutime():
  54. if randf() < chance:
  55. vulnerable = false
  56. print('invunerability')
  57. get_parent().modulate.b = 10
  58. yield(Timergen.createtime(self,invutime),'timeout')
  59. print('vunerability')
  60. vulnerable = true
  61. get_parent().modulate.b = 1
  62. else:
  63. get_parent().modulate = Color(10,10,10)
  64. yield(Timergen.createtime(self,0.1),'timeout')
  65. get_parent().modulate = Color(1,1,1)
  66. func _expgain(arg):
  67. pass
  68. func _ready():
  69. if has_node(progressbar):
  70. get_node(progressbar).set_value( health )
  71. get_node(progressbar).set_max( health_max )
  72. get_node(text).set_text( str(health_max) )
  73. func effect_processor(effect):
  74. pass