1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- extends Area2D
- var type = 1
- var dt = 1
- var dmg = 5.0
- var disable = 2.0
- var heat = 2.0
- var faction = 0
- var lv = Vector2(0,0)
- var a = 0.0
- var dir = Vector2(0,0)
- var disabled = false
- var missile = true
- var target
- func disable():
- if (disabled):
- return
-
- disabled = true
- #clear_shapes()
- get_node("Anim").play("fade_out")
- func _on_body_enter(body):
- if (Factions.is_enemy(faction,body.faction)):
- if (body.has_method("damage")):
- body.damage(global_position,dt,dmg,disable,heat)
- lv = body.get_lv()
- var pi = Equipment.outfits[type]["particles_impact"].instance()
- body.add_child(pi)
- pi.global_position = global_position
- disable()
- func search_target():
- var dist = 100000000
- for t in get_node("/root/Main").ships:
- if (Factions.is_enemy(faction,t.faction) && t.faction!=Factions.NEUTRAL):
- 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))
- if (dist2<dist):
- dist2 = dist
- target = t
- func _physics_process(delta):
- if (not disabled and target!=null):
- if !(target in get_node("/root/Main").ships):
- target = null
- else:
- var dir = (Vector2(-1,0).rotated(rotation))
- var s = sign((target.global_position+target.get_lv()-global_position-lv).dot(dir))
- lv += delta*a*s*dir
- 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)
-
- position += delta*lv
- func _ready():
- get_node("Particles").set_initial_velocity(lv-Vector2(0,-600.0).rotated(rotation))
- get_node("Particles").set_param(Particles2D.PARAM_INITIAL_ANGLE,rotation*180.0/PI)
- search_target()
-
- set_physics_process(true)
|