WarpObject.gd 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. @tool
  2. extends Area2D
  3. class_name WarpObject
  4. @export var destinationMap : String = ""
  5. @export var destinationPos : Vector2 = Vector2.ZERO
  6. @export var polygon : PackedVector2Array = []
  7. @export var autoWarp : bool = true
  8. @export var areaSize : float = 1.0
  9. @export var randomPoints : PackedVector2Array = []
  10. var hasPlayerWithin : bool = false
  11. var contextDisplayed : bool = false
  12. const defaultParticlesCount : int = 12
  13. const WarpFx : PackedScene = preload("res://presets/effects/particles/WarpLocation.tscn")
  14. #
  15. func bodyEntered(body : CollisionObject2D):
  16. if body and body == Launcher.Player:
  17. hasPlayerWithin = true
  18. func bodyExited(body : CollisionObject2D):
  19. if body and body == Launcher.Player:
  20. hasPlayerWithin = false
  21. HideLabel()
  22. func getDestinationPos(_actor : Actor) -> Vector2:
  23. return destinationPos
  24. func _physics_process(_delta):
  25. if hasPlayerWithin:
  26. var newPos : Vector2 = Launcher.Player.get_global_position() + Launcher.Player.entityPosOffset
  27. var canWarp : bool = Geometry2D.is_point_in_polygon(newPos - get_global_position(), polygon)
  28. if autoWarp:
  29. if canWarp:
  30. ConfirmWarp()
  31. else:
  32. if canWarp and (not contextDisplayed or not Launcher.GUI.choiceContext.is_visible()):
  33. DisplayLabel()
  34. elif not canWarp and contextDisplayed:
  35. HideLabel()
  36. func ConfirmWarp():
  37. Network.TriggerWarp()
  38. func DisplayLabel():
  39. Launcher.GUI.choiceContext.Clear()
  40. Launcher.GUI.choiceContext.Push(ContextData.new("gp_interact", destinationMap, ConfirmWarp.bind()))
  41. Launcher.GUI.choiceContext.FadeIn()
  42. contextDisplayed = true
  43. func HideLabel():
  44. Launcher.GUI.choiceContext.FadeOut()
  45. contextDisplayed = false
  46. #
  47. func _ready():
  48. collision_mask = 2
  49. self.body_entered.connect(bodyEntered)
  50. self.body_exited.connect(bodyExited)
  51. var particle : CPUParticles2D = WarpFx.instantiate()
  52. particle.emission_shape = CPUParticles2D.EmissionShape.EMISSION_SHAPE_POINTS
  53. particle.emission_points = randomPoints
  54. add_child.call_deferred(particle)
  55. var areaRatio : float = areaSize / (32*32)
  56. particle.amount = int(float(defaultParticlesCount) * areaRatio)