missile_base.gd 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. extends Area2D
  2. # base guided missile script
  3. var type = 1
  4. var dt = 1
  5. var dmg = 5.0
  6. var disable = 2.0
  7. var heat = 2.0
  8. var hp = 5.0
  9. var faction = 0
  10. var dir = Vector2(0,0)
  11. var lv = Vector2(0,0)
  12. var a = 0.0
  13. var damping = 0.0
  14. var target
  15. var disabled = false
  16. func disable():
  17. if (disabled):
  18. return
  19. disabled = true
  20. get_node("/root/Main").missiles.erase(self)
  21. #clear_shapes()
  22. get_node("Anim").play("fade_out")
  23. func damage(pos,type,dmg,disable,heat):
  24. hp -= dmg
  25. if (hp<=0):
  26. disable()
  27. func get_lv():
  28. return lv
  29. func _on_body_enter(body):
  30. if (!Factions.is_enemy(faction,body.faction)):
  31. return
  32. if (body.has_method("damage")):
  33. body.damage(global_position,dt,dmg,disable,heat)
  34. lv = body.get_lv()
  35. var pi = Equipment.outfits[type]["particles_impact"].instance()
  36. body.add_child(pi)
  37. pi.global_position = global_position
  38. disable()
  39. func _physics_process(delta):
  40. if (!disabled && target!=null):
  41. if !(target in get_node("/root/Main").ships):
  42. target = null
  43. else:
  44. var pos = global_position
  45. var tpos = target.global_position
  46. var tlv = target.get_lv()
  47. var d = (tpos-pos).length()
  48. var v = (lv-tlv).dot((tpos-pos)/d)
  49. var t = d/max(v,d/10.0)
  50. if (v<0):
  51. t += abs(v)/a
  52. var target_lv = tpos-pos-10.0*t*(lv-tlv-abs(v)*(tpos-pos)/d)
  53. var dir = target_lv.normalized()
  54. lv += delta*a*dir
  55. set_rotation(PI+dir.angle())
  56. get_node("Particles").set_param(Particles2D.PARAM_INITIAL_ANGLE,rad2deg(Vector2(0,0).angle_to_point(lv)))
  57. get_node("Particles").set_initial_velocity(lv)
  58. lv *= 1.0-damping*delta
  59. position += delta*lv
  60. func _ready():
  61. get_node("Particles").set_param(Particles2D.PARAM_INITIAL_ANGLE,rad2deg(Vector2(0,0).angle_to_point(lv)))
  62. get_node("Particles").set_initial_velocity(lv)
  63. set_physics_process(true)
  64. get_node("/root/Main").missiles.push_back(self)