GirlMobNPC.gd 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. class_name GirlMobNPC
  2. extends GirlMob
  3. onready var player = $"../../Player"
  4. onready var jump_collider_ground = $"JumpColliderG"
  5. onready var jump_collider_block = $"JumpColliderB"
  6. onready var jump_collider_block_stair = $"StairColliderJCB"
  7. onready var collider_line = $"ColliderLine"
  8. export var alternate_hair: bool = false
  9. var timer = 0.0
  10. func flip(toggle: bool):
  11. .flip(toggle)
  12. if jump_collider_ground != null:
  13. if toggle:
  14. jump_collider_ground.set_position(Vector2(12, 24))
  15. jump_collider_block.set_position(Vector2(32, 0))
  16. jump_collider_block_stair.set_position(Vector2(32, 0))
  17. else:
  18. jump_collider_ground.set_position(Vector2(-12, 24))
  19. jump_collider_block.set_position(Vector2(-32, 0))
  20. jump_collider_block_stair.set_position(Vector2(-32, 0))
  21. func _ready():
  22. lightning = $"../../Lightning"
  23. navmap = get_world_2d().get_navigation_map()
  24. collider_line.set_visible(false)
  25. if alternate_hair:
  26. hair.set_sprite_frames(preload("res://asset/hair_black.tres"))
  27. jump_burst *= 1.5
  28. frozen = true
  29. func _physics_process(delta: float):
  30. timer += delta
  31. if timer < 0.168:
  32. pass
  33. #return
  34. else:
  35. timer = 0.0
  36. if frozen:
  37. return
  38. var pathx = Navigation2DServer.map_get_path(
  39. navmap,
  40. get_position(),
  41. player.get_position(),
  42. false)
  43. if pathx.size() < 2:
  44. return
  45. var path
  46. var used_next = false
  47. if pathx.size() < 3 or abs(position.x - pathx[1].x) > 50.0:
  48. path = pathx[1]
  49. else:
  50. path = pathx[2]
  51. used_next = true
  52. if abs(position.x - path.x) < 5.0 and used_next:
  53. jump_grace_timer.start()
  54. if DEBUG:
  55. collider_line.clear_points()
  56. for point in pathx:
  57. collider_line.add_point(point - get_position())
  58. collider_line.set_visible(true)
  59. if path.x > position.x:
  60. velocity.x += speed
  61. flip(true)
  62. else:
  63. velocity.x -= speed
  64. flip(false)
  65. if abs(real_velocity.y) < 0.01:
  66. if jump_collider_ground.get_overlapping_bodies().size() == 0:
  67. jump_grace_timer.start()
  68. if jump_collider_block.get_overlapping_bodies().size() == 1 and\
  69. jump_collider_block_stair.get_overlapping_areas().size() == 0 and\
  70. stair_collider_up.get_overlapping_areas().size() == 0 and\
  71. stair_collider_down.get_overlapping_areas().size() == 0:
  72. jump_grace_timer.start()
  73. #print(str(get_position()) + " " + str(navigation_agent.get_next_location()))
  74. func _kill_the_player(_body):
  75. if !frozen:
  76. player.lives -= 1
  77. frozen = true
  78. lightning.play()