weapons.gd 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. extends Node
  2. # create shots, missiles and particles
  3. # data #
  4. var cm = preload("res://scenes/cm.tscn")
  5. var hook = preload("res://scenes/grappling_hook.tscn")
  6. # functions #
  7. func shoot(type,node,spread,dir,rot,lv,faction):
  8. for k in range(Equipment.outfits[type]["rays"]):
  9. var sp = spread*rand_range(-1.0,1.0)*deg2rad(Equipment.outfits[type]["spread"])
  10. var si = Equipment.outfits[type]["projectile"].instance()
  11. si.type = type
  12. si.dmg = Equipment.outfits[type]["damage"]
  13. si.dt = Equipment.outfits[type]["dmg_type"]
  14. si.disable = Equipment.outfits[type]["disable"]
  15. si.heat = Equipment.outfits[type]["impact_heat"]
  16. si.get_node("Timer").set_wait_time(Equipment.outfits[type]["life_time"])
  17. si.get_node("Timer").start()
  18. si.faction = faction
  19. if !(Equipment.outfits[type].has("beam") && Equipment.outfits[type]["beam"]):
  20. dir = dir.rotated(sp)
  21. si.set_rotation(rot+sp)
  22. si.lv = dir*Equipment.outfits[type]["speed"]+lv
  23. if (Equipment.outfits[type].has("acceleration")):
  24. si.a = Equipment.outfits[type]["acceleration"]
  25. si.dir = dir
  26. si.position = node.global_position
  27. get_node("/root/Main").add_child(si)
  28. else:
  29. node.add_child(si)
  30. var fi = Equipment.outfits[type]["muzzle_flash"].instance()
  31. node.add_child(fi)
  32. fi.get_node("Sound").play(Equipment.outfits[type]["sound"])
  33. func launch(type,node,dir,rot,lv,faction,target):
  34. for k in range(Equipment.outfits[type]["rays"]):
  35. var sp = rand_range(-1.0,1.0)*deg2rad(Equipment.outfits[type]["spread"])
  36. var si = Equipment.outfits[type]["projectile"].instance()
  37. si.type = type
  38. si.dmg = Equipment.outfits[type]["damage"]
  39. si.dt = Equipment.outfits[type]["dmg_type"]
  40. si.disable = Equipment.outfits[type]["disable"]
  41. si.heat = Equipment.outfits[type]["impact_heat"]
  42. si.hp = Equipment.outfits[type]["armor"]
  43. si.get_node("Timer").set_wait_time(Equipment.outfits[type]["life_time"])
  44. si.get_node("Timer").start()
  45. si.faction = faction
  46. dir = dir.rotated(sp)
  47. si.set_rotation(rot+sp)
  48. si.lv = dir*Equipment.outfits[type]["speed"]+lv
  49. si.a = Equipment.outfits[type]["acceleration"]
  50. si.dir = dir
  51. if (Equipment.outfits[type].has("damping")):
  52. si.damping = Equipment.outfits[type]["damping"]
  53. si.position = node.global_position
  54. si.target = target
  55. get_node("/root/Main").add_child(si)
  56. var fi = Equipment.outfits[type]["muzzle_flash"].instance()
  57. node.add_child(fi)
  58. fi.get_node("Sound").play(Equipment.outfits[type]["sound"])
  59. func grappling_hook(node,ship,pos,rot,dir,rest_length,max_length,speed,faction):
  60. var hi = hook.instance()
  61. hi.set_rotation(rot)
  62. hi.position = pos
  63. # hi.get_node("Joint").set_rest_length(rest_length)
  64. # hi.get_node("Joint").set_length(max_length)
  65. # hi.get_node("Joint").set_node_a(node.get_parent().get_path())
  66. hi.speed = speed
  67. hi.dir = dir
  68. hi.max_length = max_length
  69. hi.rest_length = rest_length
  70. hi.faction = faction
  71. hi.ship = ship
  72. node.add_child(hi)
  73. # get_node("/root/Main").add_child(hi)
  74. func create_cm(type,pos,faction,lv):
  75. var ci = cm.instance()
  76. ci.position = pos
  77. ci.lv = lv
  78. ci.faction = faction
  79. get_node("/root/Main").add_child(ci)