diff --git a/world.tscn b/world.tscn index 88df903..ab7a63c 100644 --- a/world.tscn +++ b/world.tscn @@ -1,19 +1,21 @@ -[gd_scene load_steps=3 format=3 uid="uid://bv384dpmvjv8o"] +[gd_scene load_steps=4 format=3 uid="uid://bv384dpmvjv8o"] [ext_resource type="Script" uid="uid://d2wrwichuoncd" path="res://world/Background/background.gd" id="1_fj7yv"] +[ext_resource type="PackedScene" uid="uid://icbk3la71t7h" path="res://world/Background/starry_sky_layer.tscn" id="3_aqk2v"] [ext_resource type="Script" uid="uid://b823gkreu47t3" path="res://world/Background/starry_sky_dynamic_bg.gd" id="3_tlwt5"] [node name="World" type="Node2D"] -[node name="BackgroundLayer" type="Node2D" parent="." node_paths=PackedStringArray("Parallax_2d", "Node_2d")] +[node name="BackgroundLayer" type="Node2D" parent="." node_paths=PackedStringArray("Parallax_2d")] script = ExtResource("1_fj7yv") +STARRY_SKY_LAYER = ExtResource("3_aqk2v") Parallax_2d = NodePath("Parallax2D") -Node_2d = NodePath("Parallax2D/StarrySkyDynamicBG") [node name="Parallax2D" type="Parallax2D" parent="BackgroundLayer"] repeat_size = Vector2(2048, 2048) [node name="StarrySkyDynamicBG" type="Node2D" parent="BackgroundLayer/Parallax2D"] +visible = false script = ExtResource("3_tlwt5") Star_Count = 2000 Background_Image_Size = Vector2(2048, 2048) diff --git a/world/Background/background.gd b/world/Background/background.gd index 7616a2a..0ea818a 100644 --- a/world/Background/background.gd +++ b/world/Background/background.gd @@ -1,11 +1,62 @@ extends Node2D +@export var STARRY_SKY_LAYER: PackedScene +@export_group("Visual Settings") @export var Parallax_2d: Parallax2D -@export var Node_2d: Node2D +#@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 -var x_offset: int = 40 -var y_offset: int = 40 +@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 @@ -13,22 +64,68 @@ 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 + #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(30, 50) + return _random.randi_range(15, 25) func _random_offset_y() -> int: - return _random.randi_range(5, 15) + return _random.randi_range(5, 10) func _random_sign() -> int: if _random.randi_range(1, 2) == 1: @@ -36,3 +133,15 @@ func _random_sign() -> int: 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 diff --git a/world/Background/starry_sky_dynamic_bg.gd b/world/Background/starry_sky_dynamic_bg.gd index 0607b70..bfc9536 100644 --- a/world/Background/starry_sky_dynamic_bg.gd +++ b/world/Background/starry_sky_dynamic_bg.gd @@ -1,52 +1,14 @@ extends Node2D -const STAR_COLOR_DISTRIBUTION = [ - [700, '#8FA8FFFF'], - [1700, '#8FA8FFD8'], - [3400, '#8FA8FFA0'], - [6000, '#A0B5FFFF'], - [9900, '#A0B5FFD0'], - [16400, '#A0B5FF90'], - [17300, '#B0C5FFFF'], - [18600, '#B0C5FFC8'], - [20800, '#B0C5FF88'], - [26000, '#D0DBFFFF'], - [33800, '#D0DBFFC0'], - [46800, '#D0DBFF80'], - [57200, '#F8F7FFE0'], - [72900, '#F8F7FFA8'], - [99000, '#F8F7FF70'], - [114700, '#FFF4EAD0'], - [138200, '#FFF4EA98'], - [177400, '#FFF4EA60'], - [180000, '#FFD280F0'], - [183000, '#FFD280B8'], - [189000, '#FFD28078'], - [191000, '#FFA64DF8'], - [194000, '#FFA64DC0'], - [199000, '#FFA64D80'], - [225000, '#FFE4B5C0'], - [264000, '#FFE4B588'], - [309000, '#FFE4B550'], - [364000, '#FFCC99A0'], - [441000, '#FFCC9968'], - [604000, '#FFCC9940'], - [658000, '#FFB36690'], - [753000, '#FFB3665C'], - [893000, '#FFB36630'], - [914000, '#E8F4FF80'], - [946000, '#E8F4FF50'], - [1000000, '#E8F4FF28'], - ] - @export_group("Visual Settings") @export var Star_Count: int = 5000: set = set_star_count -@export var Background_Image_Size: Vector2 = Vector2(4096, 4096): set = set_Background_Image_Size +@export var Background_Image_Size: Vector2 = Vector2(4096, 4096): + set = set_Background_Image_Size @export var background_color: Color = Color.BLACK -@export_group("Animation") -@export var auto_rotate: bool = false -@export var rotation_speed: float = 0.1 +#@export_group("Animation") +#@export var auto_rotate: bool = false +#@export var rotation_speed: float = 0.1 var rotation_angle: float = 0.0 @@ -66,24 +28,19 @@ func draw_galaxy(): 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 star_color = get_star_color() - draw_circle(star_coords, 1, star_color) + #draw_star(star_coords) func _process(delta): - if auto_rotate: - rotation_angle += rotation_speed * delta - queue_redraw() - if Engine.is_editor_hint(): queue_redraw() -func get_star_color() -> Color: - #var star_color = {"rgb": Colo, "alpha": 0} - var rnd_seed = randi_range(0, STAR_COLOR_DISTRIBUTION[-1][0]) - for item:Array in STAR_COLOR_DISTRIBUTION: - if rnd_seed <= item[0]: - return Color.html(item[1]) - return Color.BLACK +#func draw_star(star_coords: Vector2): + #var rnd_seed = randi_range(0, STAR_COLOR_DISTRIBUTION[-1][0]) + #for item:Array in STAR_COLOR_DISTRIBUTION: + #if rnd_seed <= item[0]: + #var star_color = Color.html(item[1]) + #draw_circle(star_coords, 1, star_color) + #region Сеттеры для автоматического обновления func set_Background_Image_Size(value: Vector2): diff --git a/world/Background/starry_sky_layer.gd b/world/Background/starry_sky_layer.gd new file mode 100644 index 0000000..7c33cd8 --- /dev/null +++ b/world/Background/starry_sky_layer.gd @@ -0,0 +1,21 @@ +class_name StarrySkyLayer extends Node2D + +var Background_Image_Size: Vector2 = Vector2.ZERO +var Stars: Array = [] + +const BACKGROUND_COLOR: Color = Color.BLACK + + +func _ready(): + pass + #queue_redraw() + + +func _draw(): + draw_rect(Rect2(Vector2.ZERO, Background_Image_Size), BACKGROUND_COLOR) + for star in Stars: + draw_circle(star.coords, 4, star.color) + + + #draw_rect(Rect2(Vector2.ZERO, Background_Image_Size), background_color) + print("Drawn: ", len(Stars)) diff --git a/world/Background/starry_sky_layer.gd.uid b/world/Background/starry_sky_layer.gd.uid new file mode 100644 index 0000000..c3e2ab3 --- /dev/null +++ b/world/Background/starry_sky_layer.gd.uid @@ -0,0 +1 @@ +uid://bq7xkdvq4iejn diff --git a/world/Background/starry_sky_layer.tscn b/world/Background/starry_sky_layer.tscn new file mode 100644 index 0000000..0c52e36 --- /dev/null +++ b/world/Background/starry_sky_layer.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://icbk3la71t7h"] + +[ext_resource type="Script" uid="uid://bq7xkdvq4iejn" path="res://world/Background/starry_sky_layer.gd" id="1_st4ay"] + +[node name="StarrySkyLayer" type="Node2D"] +script = ExtResource("1_st4ay")