Health.gd 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. export var xpparticles = false
  14. var xp = preload("res://effects/xp.tscn")
  15. var xporbs = 5
  16. var once = true
  17. var chance = 0.0
  18. var invutime = 2.5
  19. var vulnerable = true
  20. func _physics_process(delta):
  21. $Label.text = str(health)
  22. buff += 1
  23. if fmod(buff,regen_time*60) == 00:
  24. _damage(-regen * health_max ,'',self)
  25. func _damage(dmg, effect, caller):
  26. if health > health_max: health = health_max
  27. if vulnerable:
  28. health -= dmg * hpmult
  29. health = min(health,health_max)
  30. emit_signal('damage', dmg)
  31. if health <= 0 and once:
  32. once = false
  33. emit_signal('die')
  34. if xpparticles: xpanim(caller)
  35. yield(Timergen.createtime(self,1.0),'timeout')
  36. caller._expgain(get_parent().exppt)
  37. effect_processor(effect)
  38. if has_node(progressbar):
  39. get_node(progressbar).set_value( health )
  40. get_node(progressbar).set_max( health_max )
  41. get_node(text).set_text( str(int(health)) )
  42. if dmg > 0 :
  43. invutime()
  44. print(get_parent().name + ' entity health is : ' + str(health))
  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. func invutime():
  52. if randf() < chance:
  53. vulnerable = false
  54. print('invunerability')
  55. get_parent().modulate.b = 10
  56. yield(Timergen.createtime(self,invutime),'timeout')
  57. print('vunerability')
  58. vulnerable = true
  59. get_parent().modulate.b = 1
  60. else:
  61. get_parent().modulate = Color(10,10,10)
  62. yield(Timergen.createtime(self,0.1),'timeout')
  63. get_parent().modulate = Color(1,1,1)
  64. func _expgain(arg):
  65. pass
  66. func _ready():
  67. if has_node(progressbar):
  68. get_node(progressbar).set_value( health )
  69. get_node(progressbar).set_max( health_max )
  70. get_node(text).set_text( str(health_max) )
  71. func effect_processor(effect):
  72. pass