shot_seeker.gd 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. extends Area2D
  2. var type = 1
  3. var dt = 1
  4. var dmg = 5.0
  5. var disable = 2.0
  6. var heat = 2.0
  7. var faction = 0
  8. var lv = Vector2(0,0)
  9. var a = 0.0
  10. var dir = Vector2(0,0)
  11. var disabled = false
  12. var missile = true
  13. var target
  14. func disable():
  15. if (disabled):
  16. return
  17. disabled = true
  18. #clear_shapes()
  19. get_node("Anim").play("fade_out")
  20. func _on_body_enter(body):
  21. if (Factions.is_enemy(faction,body.faction)):
  22. if (body.has_method("damage")):
  23. body.damage(global_position,dt,dmg,disable,heat)
  24. lv = body.get_lv()
  25. var pi = Equipment.outfits[type]["particles_impact"].instance()
  26. body.add_child(pi)
  27. pi.global_position = global_position
  28. disable()
  29. func search_target():
  30. var dist = 100000000
  31. for t in get_node("/root/Main").ships:
  32. if (Factions.is_enemy(faction,t.faction) && t.faction!=Factions.NEUTRAL):
  33. var dist2 = global_position.distance_squared_to(t.global_position)*(0.5+Vector2(0,-1.0).rotated(rotation).angle_to(t.global_position-global_position))
  34. if (dist2<dist):
  35. dist2 = dist
  36. target = t
  37. func _physics_process(delta):
  38. if (not disabled and target!=null):
  39. if !(target in get_node("/root/Main").ships):
  40. target = null
  41. else:
  42. var dir = (Vector2(-1,0).rotated(rotation))
  43. var s = sign((target.global_position+target.get_lv()-global_position-lv).dot(dir))
  44. lv += delta*a*s*dir
  45. get_node("Particles").set_param(Particles2D.PARAM_INITIAL_ANGLE,(Vector2(0,0)).angle_to_point(Vector2(0,-1).rotated(rotation)+0.05*s*dir)*180.0/PI)
  46. position += delta*lv
  47. func _ready():
  48. get_node("Particles").set_initial_velocity(lv-Vector2(0,-600.0).rotated(rotation))
  49. get_node("Particles").set_param(Particles2D.PARAM_INITIAL_ANGLE,rotation*180.0/PI)
  50. search_target()
  51. set_physics_process(true)