extends Node2D @export var STARRY_SKY_LAYER: PackedScene @export_group("Visual Settings") @export var Parallax_2d: Parallax2D #@export var Node_2d: Node2D @export var Star_Count: int = 6000: set = set_star_count @export var Background_Image_Size: Vector2 = Vector2(4096, 4096): set = set_Background_Image_Size @export var Background_Layers: Array [StarrySkyLayer] var Stars_by_Layers: Dictionary = {} const BACKGROUND_COLOR: Color = Color.BLACK const STAR_COLOR_DISTRIBUTION = [ [700, '#8FA8FFFF', 0 ], [1700, '#8FA8FFD8', 0 ], [3400, '#8FA8FFA0', 0 ], [6000, '#A0B5FFFF', 0 ], [9900, '#A0B5FFD0', 0 ], [16400, '#A0B5FF90', 0 ], [17300, '#B0C5FFFF', 0 ], [18600, '#B0C5FFC8', 0 ], [20800, '#B0C5FF88', 0 ], [26000, '#D0DBFFFF', 0 ], [33800, '#D0DBFFC0', 0 ], [46800, '#D0DBFF80', 0 ], [57200, '#F8F7FFE0', 1 ], [72900, '#F8F7FFA8', 1 ], [99000, '#F8F7FF70', 1 ], [114700, '#FFF4EAD0', 1 ], [138200, '#FFF4EA98', 1 ], [177400, '#FFF4EA60', 1 ], [180000, '#FFD280F0', 1 ], [183000, '#FFD280B8', 1 ], [189000, '#FFD28078', 1 ], [191000, '#FFA64DF8', 1 ], [194000, '#FFA64DC0', 1 ], [199000, '#FFA64D80', 1 ], [225000, '#FFE4B5C0', 2 ], [264000, '#FFE4B588', 2 ], [309000, '#FFE4B550', 2 ], [364000, '#FFCC99A0', 2 ], [441000, '#FFCC9968', 2 ], [604000, '#FFCC9940', 2 ], [658000, '#FFB36690', 2 ], [753000, '#FFB3665C', 2 ], [893000, '#FFB36630', 2 ], [914000, '#E8F4FF80', 2 ], [946000, '#E8F4FF50', 2 ], [1_000_000, '#E8F4FF28', 2 ], ] var x_offset: int = 20 var y_offset: int = 20 var _random func _ready() -> void: _random = RandomNumberGenerator.new() x_offset = _random_offset_x() * _random_sign() y_offset = _random_offset_y() * _random_sign() Parallax_2d.autoscroll = Vector2(x_offset, y_offset) initiate_layers() generate_layers() #layer.queue_redraw() func _process(delta: float) -> void: #Parallax_2d.scroll_offset.x += x_offset * delta #Parallax_2d.scroll_offset.y += y_offset * delta if _random.randi_range(0, 2096) == 0: if _random_sign() == 1: x_offset = _random_offset_x() * _random_sign() else: y_offset = _random_offset_y() * _random_sign() Parallax_2d.autoscroll = Vector2(x_offset, y_offset) func generate_layers(): var max_rnd_seed = STAR_COLOR_DISTRIBUTION[-1][0] for ind1 in range(Star_Count): var star_coords = Vector2(randi_range(0, Background_Image_Size.x), randi_range(0, Background_Image_Size.y)) var rnd_seed = randi_range(0, max_rnd_seed) for item:Array in STAR_COLOR_DISTRIBUTION: var item_seed = item[0] if rnd_seed <= item_seed: var star_color = Color.html(item[1]) var star_layer = item[2] Background_Layers[star_layer].Stars.append({ "coords": star_coords, "color": star_color, }) break #draw_circle(star_coords, 1, star_color) for it1 in Background_Layers: print(len(it1.Stars)) it1.queue_redraw() func initiate_layers(): var layer_count = 0 for item:Array in STAR_COLOR_DISTRIBUTION: if item[2] > layer_count: layer_count = item[2] for ind in range(layer_count + 1): var new_star_layer:StarrySkyLayer = STARRY_SKY_LAYER.instantiate() Parallax_2d.add_child(new_star_layer) new_star_layer.Background_Image_Size = Background_Image_Size Background_Layers.append(new_star_layer) func draw_layer(layer): print(layer) pass #region Random offset func _random_offset_x() -> int: return _random.randi_range(15, 25) func _random_offset_y() -> int: return _random.randi_range(5, 10) func _random_sign() -> int: if _random.randi_range(1, 2) == 1: return 1 else: return -1 #endregion #region Сеттеры для автоматического обновления func set_Background_Image_Size(value: Vector2): Background_Image_Size = value queue_redraw() func set_star_count(value: int): Star_Count = value queue_redraw() #endregion