Advertisement
Guest User

Untitled

a guest
Mar 30th, 2022
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extends Node2D
  2.  
  3. signal swap_starfields(matrix_pos)
  4.  
  5. var rng = RandomNumberGenerator.new()
  6. var star = preload("res://src/bg/star.tscn")
  7. var light = preload("res://src/light/light.tscn")
  8. var npc = preload("res://src/npc/NPC.tscn")
  9. onready var screen_size = get_viewport_rect().size
  10. onready var Game = $"/root/Game"  # NOTE: IS THIS BAD?
  11. var current_npc
  12. var starfield_npc = null
  13. var num_stars = 100
  14. var width
  15. var height
  16. var coords = []  # the location in the night sky
  17.  
  18. onready var max_w = screen_size.x / 2
  19. onready var max_h = screen_size.y / 2
  20. onready var is_foreground = get_scene_parent() == "sky_fg"
  21.  
  22.  
  23. # Called when the node enters the scene tree for the first time.
  24. func _ready():
  25.     # rng.randomize()  # this not working?
  26.     create_stars()
  27.     if coords != [0, 0] and is_foreground:
  28.         spawn_npc()
  29.         create_light()
  30.     set_initial_pos()
  31.  
  32.  
  33. # we need to determine if the starfield is in the background or
  34. # fg, (because we might have several sky matrixes- and not all of them
  35. # have to spawn stuff.)
  36. func get_scene_parent():
  37.     var scene_name = get_parent().get_parent().get_parent().name
  38.     assert(scene_name == "sky_fg" || scene_name == "sky_bg", "The starfield parent scene has been renamed from sky_fg or sky_bg")
  39.     return scene_name
  40.  
  41. func rand_col():
  42.     rng.randomize()
  43.     var r = rng.randf_range(0.5, 1.0)
  44.     var g = rng.randf_range(0.5, 1.0)
  45.     var b = rng.randf_range(0.5, 1.0)
  46.     return Color(r, g, b)
  47.  
  48.  
  49. func create_light():
  50.     var percent = randf()
  51.     if percent > 0.20:
  52.         var l = light.instance()
  53.         l.init(Util.rand_pos(0, max_w, 0, max_h))
  54.         add_child(l)
  55.  
  56.  
  57. func spawn_npc():
  58.     var percent = randf()
  59.     if percent > 0.5:
  60.         current_npc = Game.npc_get_next()
  61.         if current_npc:
  62.             var sf_pos = self.position
  63.             var npc_pos = Util.rand_pos(
  64.                 sf_pos.x, sf_pos.x + max_w,
  65.                 sf_pos.y, sf_pos.y + max_h)
  66.             npc_pos.x += max_w
  67.             current_npc.set_position(npc_pos)
  68.  
  69.  
  70. func remove_npc():
  71.     if current_npc:
  72.         Game.npc_remove_from_tree(current_npc)
  73.  
  74.  
  75. func create_stars():
  76.     # for some reason this has to be divided by two?
  77.     for _i in range(num_stars):
  78.         var s = star.instance()
  79.         s.init(Util.rand_pos(0, max_w, 0, max_h))
  80.         add_child(s)
  81.  
  82.  
  83. func set_initial_pos():
  84.     position.x -= screen_size.x / 2
  85.     position.y -= screen_size.y / 2
  86.  
  87.  
  88. func set_pos_by_coords():
  89.     var x_coord = coords[0]
  90.     var y_coord = coords[1]
  91.     self.position.x = width * x_coord
  92.     self.position.y = height * y_coord
  93.  
  94.  
  95. func init(_coords, bg_size, _num_stars: int):
  96.     self.num_stars = _num_stars
  97.     self.coords = _coords
  98.     self.width = bg_size.x
  99.     self.height = bg_size.y
  100.     set_pos_by_coords()
  101.  
  102.  
  103. func _on_starfieldArea2D_area_entered(area: Area2D):
  104.     if area.get_name() == "PlayerCenterArea":
  105.         # only swap the starfields once game has started / player is moving
  106.         if area.get_parent().has_started_moving:
  107.             emit_signal("swap_starfields", self.coords)
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement