1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- extends KinematicBody2D
- var player
- var motion = Vector2()
- export var speed = 150
- export var attackrange = 64
- export var reactiontime = 1
- var active = false
- export var detectionzone = 128
- export var exppt = 15
- onready var initspeed = Vector2(sin(rand_range(0,TAU)),cos(rand_range(0,TAU)))
- var dict = {
- 'ovomonstro' : 20,
- 'besourodourado' : 10,
- 'escorpiao' : 10,
- }
- func _ready():
- # $CollisionShape2D.get_coll
- player = get_tree().get_nodes_in_group('player')[0]
- var array = []
- for x in $types.get_animation_list():
- if dict.has(x):
- # print(x)
- if dict[x] < player.lv:
- array.append(x)
- else:
- array.append(x)
- array.shuffle()
- while array[0] == 'RESET':
- array.shuffle()
- # print(array)
- $types.play(array[0])
- name = array[0]
- yield(Timergen.createtime(self,0.1),'timeout')
- $Health.health = $Health.health_max
- $types.queue_free()
- yield(Timergen.createtime(self,30.0),'timeout')
- queue_free()
- pass # Replace with function body.
- var delete_buff = 600
- func _physics_process(delta):
- if player:
- for x in range(-1,1):
- for y in range(-1,1):
- if checkapproxpos(Vector2(x,y)):
- active = true
- if active:
- reactiontime -= 1
- if reactiontime == 0:
- motion = (player.global_position - global_position).normalized()
- reactiontime = 180
- $hitbox.position = motion * attackrange
- move_and_slide(motion * speed)
- $Sprite.rotation = atan2(motion.y * speed,motion.x * speed)
- else:
- move_and_slide(initspeed * speed)
- $Sprite.rotation = atan2(initspeed.y * speed,initspeed.x * speed)
- # delete_buff -= 1
- # if delete_buff < 0:
- # if not $VisibilityNotifier2D.is_visible_in_tree():
- # queue_free()
- # delete_buff = 600
- func checkapproxpos(var offset = Vector2()):
- var pos1 = Vector2(int(player.global_position.x/detectionzone), int(player.global_position.y/detectionzone))
- var pos2 = Vector2(int(global_position.x/detectionzone), int(global_position.y/detectionzone))
- if pos1.y+offset.y == pos2.y+offset.y and pos1.x+offset.x == pos2.x+offset.x:
- return true
- func _on_VisibilityNotifier2D_screen_exited():
- if not active: queue_free()
- pass # Replace with function body.
|