From dbe8f03531132317ed09c1800003f59d0a683959 Mon Sep 17 00:00:00 2001 From: Zacharie Guet Date: Fri, 14 Nov 2025 16:43:52 +0100 Subject: [PATCH] fix post-proto MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ajout d'un fondu de musique au changement de phase * résolution de bugs en tout genre --- Translation/localization.csv | 4 +- common/music/music.tscn | 2 +- common/music/scripts/music.gd | 45 ++++---- common/vfx/particles/particles.tscn | 1 + entities/plants/scripts/plant.gd | 5 +- .../plants/scripts/plant_influence_zone.gd | 2 +- entities/plants/scripts/plant_mutation.gd | 2 +- .../plant_mutation/elitist_mutation.gd | 1 - .../scripts/plant_mutation/strong_mutation.gd | 2 +- .../inventory/scripts/items/blueprint.gd | 2 +- entities/player/scripts/player.gd | 25 +++-- export_presets.cfg | 68 ++++++++++++ gui/game/card/card_visualiser.tscn | 102 +++++++++--------- gui/game/card/scripts/card_visualiser.gd | 15 +-- .../inventory_item/inventory_gui_item.tscn | 13 +++ .../scripts/inventory_gui_item.gd | 8 +- gui/game/quota_reward/scripts/quota_reward.gd | 2 + gui/game/scripts/game_gui.gd | 2 +- gui/game/win/scripts/win.gd | 4 +- gui/game/win/win.tscn | 1 + gui/pointer/assets/cursors/pointer.svg | 49 ++++++++- gui/pointer/assets/cursors/pointer.svg.import | 6 ++ gui/pointer/pointer.tscn | 41 ++++++- gui/pointer/scripts/pointer.gd | 8 +- icon.png | Bin 28752 -> 12559 bytes icon.png.import | 6 ++ project.godot | 2 +- push-to-itch.sh | 6 +- stages/planet_run/planet_run.tscn | 4 +- stages/terrain/planet/scripts/garden.gd | 8 +- stages/terrain/planet/scripts/planet.gd | 4 +- stages/terrain/truck/scripts/truck_data.gd | 3 +- .../terrain/truck/scripts/truck_interior.gd | 41 +++++-- stages/title_screen/assets/textures/title.png | Bin 0 -> 29070 bytes .../assets/textures/title.png.import | 40 +++++++ stages/title_screen/scripts/planet_3d.gd | 22 ++-- stages/title_screen/title_screen.tscn | 12 +-- 37 files changed, 411 insertions(+), 147 deletions(-) create mode 100644 stages/title_screen/assets/textures/title.png create mode 100644 stages/title_screen/assets/textures/title.png.import diff --git a/Translation/localization.csv b/Translation/localization.csv index db8f8a2..be155cb 100644 --- a/Translation/localization.csv +++ b/Translation/localization.csv @@ -57,7 +57,7 @@ PRODUCE_%s_SEEDS,Produce %s seeds,Produit %s graines DAY_%d,Day [b]%d[/b],Jour [b]%d[/b] MATURE_ON_DAY_%d,Mature on day [b]%d[/b],Mature au jour [b]%d[/b] %d_SCORE_WHEN_MATURE,Grants [b]%d[/b] garden points when mature,Donne [b]%d[/b] points de jardin une fois mature -ABSURD,[rainbow]Absurd[/rainbow],[rainbow]Absurde[rainbow] +ABSURD,[rainbow]Absurd[/rainbow],[rainbow]Absurde[/rainbow] GROW_IN_%d,Grow in [b]%d[/b] days,Mature dans [b]%d[/b] jours %s_SCORE_WHEN_MATURE,Grants [b]%s[/b] garden points when mature,Donne [b]%s[/b] points de jardin une fois mature DISCOVER_%s,Discover %s,Découvre %s @@ -82,7 +82,7 @@ QUICK_EFFECT_TEXT_LEVEL_%d,Reduce the growing time by %d,Réduit le temps de mat SOCIABLE,Outgoing,Sociable SOCIABLE_EFFECT_TEXT_LEVEL_%d,"When mature, grants [b]%d[/b] garden points if it is nearby %d other plants","Une fois mature, donne [b]%d[/b] points de jardin si elle est à côté de %d autres plantes" STRONG,Strong,Fort -STRONG_EFFECT_TEXT_LEVEL_%d,Plus [b]%d[/b] % of the score,Augmente le score de [b]%d[/b] % +STRONG_EFFECT_TEXT_LEVEL_%d,Plus [b]%d[/b]%% of the score,Augmente le score de [b]%d[/b]%% COST_%d_ENERGY,Cost %d energy,Coûte %d d’énergie ONE_TIME_USE,Single use,Usage unique BUILD_%s,Build %s,Construit %s diff --git a/common/music/music.tscn b/common/music/music.tscn index b7c73dc..bd3c62b 100644 --- a/common/music/music.tscn +++ b/common/music/music.tscn @@ -36,7 +36,7 @@ stream_0/volume = -60.0 process_mode = 3 script = ExtResource("1_ji160") ambiance_volume = -3.0 -garden_phases_scores = Array[int]([0, 10, 30]) +garden_phases_scores = Array[int]([0, 1, 30]) playing_ambiances = [NodePath("Ambiance/Default")] [node name="Ambiance" type="Node" parent="."] diff --git a/common/music/scripts/music.gd b/common/music/scripts/music.gd index 39f0599..1cd2447 100644 --- a/common/music/scripts/music.gd +++ b/common/music/scripts/music.gd @@ -27,32 +27,41 @@ func _ready(): is_ready = true func setup_volume(): - for c in %Ambiance.get_children(): - var player = c as AudioStreamPlayer - player.volume_db = ambiance_volume if playing_ambiances.find(player) != -1 else MIN_VOLUME - - for c in %Musics.get_children(): - var player = c as AudioStreamPlayer - player.volume_db = music_volume if playing_musics.find(player) != -1 else MIN_VOLUME - - for player in get_all_audio_stream(): + for player in get_all_audio_streams(): + player.volume_db = get_volume_from_parent(player) if playing_ambiances.find(player) != -1 else MIN_VOLUME player.play() setup_phase(player) +func get_volume_from_parent(player : AudioStreamPlayer) -> float: + if player.get_parent() == %Ambiance: + return ambiance_volume + return music_volume + func update_phase(): - for player in get_all_audio_stream(): + for player in get_all_audio_streams(): + var playing : bool = player.volume_db != MIN_VOLUME + if playing: + await set_volume(player, MIN_VOLUME).finished setup_phase(player) + if playing: + set_volume(player, get_volume_from_parent(player)) -func get_all_audio_stream() -> Array[AudioStreamPlayer]: +func get_all_audio_streams() -> Array[AudioStreamPlayer]: var all_audio_stream : Array[AudioStreamPlayer] = [] - var all_children = %Ambiance.get_children() - all_children.append_array(%Musics.get_children()) + all_audio_stream.append_array(get_audio_streams_from_node(%Musics)) + all_audio_stream.append_array(get_audio_streams_from_node(%Ambiance)) - for c in all_children: - if c is AudioStreamPlayer: - all_audio_stream.append(c) return all_audio_stream +func get_audio_streams_from_node(node : Node) -> Array[AudioStreamPlayer]: + var streams : Array[AudioStreamPlayer] = [] + + for c in node.get_children(): + if c is AudioStreamPlayer: + streams.append(c) + return streams + + func _on_current_planet_data_updated(planet_data : PlanetData): if planet_data: update_garden_phase(planet_data) @@ -64,7 +73,8 @@ func update_garden_phase(planet_data : PlanetData): if planet_data.garden_score >= garden_phases_scores[i] and i > garden_phase: phase = i - update_phase() + if garden_phase != phase: + update_phase() garden_phase = phase @@ -95,7 +105,6 @@ func setup_phase(music : AudioStreamPlayer): 0. if i == phase_stream_id else MIN_VOLUME ) - func set_volume(music : AudioStreamPlayer, to : float, fade_time = default_fade_time) -> Tween: var fade_tween : Tween = get_tree().create_tween() diff --git a/common/vfx/particles/particles.tscn b/common/vfx/particles/particles.tscn index 2dd70e7..3a5c399 100644 --- a/common/vfx/particles/particles.tscn +++ b/common/vfx/particles/particles.tscn @@ -19,6 +19,7 @@ colors = PackedColorArray(1, 1, 1, 0.65882355, 1, 1, 1, 0.72156864, 1, 1, 1, 0) [node name="Particles" type="CPUParticles2D"] amount = 1 texture = ExtResource("1_88fy1") +randomness = 0.3 emission_shape = 1 emission_sphere_radius = 30.0 gravity = Vector2(0, -20) diff --git a/entities/plants/scripts/plant.gd b/entities/plants/scripts/plant.gd index 05391d5..282e69b 100644 --- a/entities/plants/scripts/plant.gd +++ b/entities/plants/scripts/plant.gd @@ -54,9 +54,12 @@ func pointer_text() -> String: return plant_type.name func inspect(is_inspected : bool = true): - modulate = MODULATE_INSPECTED_COLOR if is_inspected else default_modulate + plant_sprite.modulate = MODULATE_INSPECTED_COLOR if is_inspected else default_modulate influence_zone.show_influence = is_inspected +func affect_preview(is_affected : bool = true): + plant_sprite.modulate = MODULATE_AFFECTED_COLOR if is_affected else default_modulate + func generate_sprite() -> PlantSprite: var sprite_object : PlantSprite = SPRITE_SCENE.instantiate() diff --git a/entities/plants/scripts/plant_influence_zone.gd b/entities/plants/scripts/plant_influence_zone.gd index 8ba3435..c6f870f 100644 --- a/entities/plants/scripts/plant_influence_zone.gd +++ b/entities/plants/scripts/plant_influence_zone.gd @@ -19,7 +19,7 @@ func _ready(): sprite.radius = 100 sprite.fill = false sprite.width = 1 - sprite.opacity = 0.2 + sprite.opacity = 0.5 sprite.visible = show_influence add_child(sprite) diff --git a/entities/plants/scripts/plant_mutation.gd b/entities/plants/scripts/plant_mutation.gd index 78b71b8..e5f5dd0 100644 --- a/entities/plants/scripts/plant_mutation.gd +++ b/entities/plants/scripts/plant_mutation.gd @@ -59,7 +59,7 @@ static func get_rarity_text(rarity) -> String: if rarity < len(rarity_text): return rarity_text[rarity] else : - return rarity_text[len(rarity_text) - 1] + " " + str(rarity - len(rarity_text) + 2) + return rarity_text[len(rarity_text) - 1] static func get_rarity_color(rarity : int) -> Color: var rarity_colors : Array[Color] = [ diff --git a/entities/plants/scripts/plant_mutation/elitist_mutation.gd b/entities/plants/scripts/plant_mutation/elitist_mutation.gd index 67338ad..dc10395 100644 --- a/entities/plants/scripts/plant_mutation/elitist_mutation.gd +++ b/entities/plants/scripts/plant_mutation/elitist_mutation.gd @@ -19,7 +19,6 @@ func mutate_score(plant_state : Plant.State, plant : Plant, score) -> int: if plant_state != Plant.State.MATURE: return score var plant_count = 0 - for area in plant.influence_zone.get_overlapping_areas(): if area is Plant and area != plant and area.plant_type.name == plant.plant_type.name: plant_count += 1 diff --git a/entities/plants/scripts/plant_mutation/strong_mutation.gd b/entities/plants/scripts/plant_mutation/strong_mutation.gd index 2713f11..0e551de 100644 --- a/entities/plants/scripts/plant_mutation/strong_mutation.gd +++ b/entities/plants/scripts/plant_mutation/strong_mutation.gd @@ -11,7 +11,7 @@ func get_mutation_name() -> String: return tr("STRONG") func get_mutation_description() -> String: - return tr("STRONG_EFFECT_TEXT_LEVEL_%d") % roundi(get_score_multiplier() * 100) + return tr("STRONG_EFFECT_TEXT_LEVEL_%d") % [roundi(get_score_multiplier() * 100)] func get_score_multiplier(): return float(level)/2. diff --git a/entities/player/inventory/scripts/items/blueprint.gd b/entities/player/inventory/scripts/items/blueprint.gd index 900fdaf..d3d997a 100644 --- a/entities/player/inventory/scripts/items/blueprint.gd +++ b/entities/player/inventory/scripts/items/blueprint.gd @@ -26,7 +26,7 @@ func get_icon() -> Texture2D: func use_text() -> String: if machine_type: - return tr("BUILD_%s") % machine_type.name + return tr("BUILD_%s") % tr(machine_type.name) return "" func is_one_time_use(): diff --git a/entities/player/scripts/player.gd b/entities/player/scripts/player.gd index 1101278..3b2ee46 100644 --- a/entities/player/scripts/player.gd +++ b/entities/player/scripts/player.gd @@ -1,6 +1,7 @@ extends CharacterBody2D class_name Player +const ACTION_AREA_UPDATE_TIME=0.05 # When creating an action_zone, we make sure that the area setup correctly by waiting a little const MAX_REACH = 100 const HOLDING_ITEM_SPRITE_SIZE = 20. @@ -12,9 +13,8 @@ var planet : Planet : get(): return terrain if terrain is Planet else null @export var speed = 350 -var has_just_received_instruction : bool = false # pour récupérer les zones dans les action_area, une frame doit être passée depuis la création de la zone - var data : PlayerData +var last_action_area_movement_timer : float = 100. var controlling_player : bool = true : set(v): @@ -54,18 +54,20 @@ func _pass_day(): func _end_pass_day(): controlling_player = true -func _process(_delta): +func _process(delta): + last_action_area_movement_timer += delta if controlling_player: var old_velocity=velocity calculate_direction() - if instruction and instruction.can_be_done(self) and not has_just_received_instruction: + if ( + last_action_area_movement_timer >= ACTION_AREA_UPDATE_TIME + and instruction and instruction.can_be_done(self) + ): instruction.do(self) instruction = null move_preview_zone(get_global_mouse_position()) - has_just_received_instruction = false - # Sound if old_velocity.length()==0 and velocity.length()!=0: play_sfx("move") @@ -94,7 +96,7 @@ func calculate_direction(): if input_direction.length() != 0: instruction = null - if instruction: + if instruction and instruction.position.distance_to(global_position) > (MAX_REACH - 1.): input_direction = self.global_position.direction_to(instruction.position) velocity = input_direction * speed @@ -112,7 +114,6 @@ func can_interact(interactable : Interactable): func try_interact(interactable : Interactable): if interactable: - has_just_received_instruction = true instruction = InteractableInstruction.new( interactable ) @@ -148,7 +149,6 @@ func delete_item(item: Item): data.inventory.remove_item(item) func try_use_item(item : Item, use_position : Vector2): - has_just_received_instruction = true setup_action_zone(use_position, item) instruction = ItemActionInstruction.new( use_position, @@ -224,6 +224,7 @@ func setup_action_zone(zone_position : Vector2, item: Item) -> ActionZone: action_zone.destroy() action_zone = generate_action_zone(item) action_zone.move_to_position(zone_position) + last_action_area_movement_timer = 0. return action_zone func move_preview_zone(zone_position : Vector2): @@ -251,7 +252,7 @@ class Instruction: position = _pos func can_be_done(player : Player): - return player.global_position.distance_to(position) < 10 + return player.global_position.distance_to(position) < player.MAX_REACH func do(_player : Player): pass @@ -267,7 +268,9 @@ class ItemActionInstruction extends Instruction: item = _item func can_be_done(player : Player): - return player.global_position.distance_to(position) < player.MAX_REACH + return ( + player.global_position.distance_to(position) < player.MAX_REACH + ) func do(player : Player): player.use_item(item) diff --git a/export_presets.cfg b/export_presets.cfg index 20d9dd9..008e1ef 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -43,3 +43,71 @@ progressive_web_app/icon_512x512="" progressive_web_app/background_color=Color(0, 0, 0, 1) threads/emscripten_pool_size=8 threads/godot_pool_size=4 + +[preset.1] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +advanced_options=false +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path=".export/win/stw.exe" +patches=PackedStringArray() +encryption_include_filters="" +encryption_exclude_filters="" +seed=0 +encrypt_pck=false +encrypt_directory=false +script_export_mode=2 + +[preset.1.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_wrapper=1 +binary_format/embed_pck=true +texture_format/s3tc_bptc=true +texture_format/etc2_astc=false +shader_baker/enabled=false +binary_format/architecture="x86_64" +codesign/enable=false +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" +application/export_angle=0 +application/export_d3d12=0 +application/d3d12_agility_sdk_multiarch=true +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" diff --git a/gui/game/card/card_visualiser.tscn b/gui/game/card/card_visualiser.tscn index 0539f1f..772dd92 100644 --- a/gui/game/card/card_visualiser.tscn +++ b/gui/game/card/card_visualiser.tscn @@ -1,60 +1,55 @@ -[gd_scene load_steps=22 format=3 uid="uid://3ss8pvhsackj"] +[gd_scene load_steps=21 format=3 uid="uid://3ss8pvhsackj"] [ext_resource type="PackedScene" uid="uid://753270jjxmfg" path="res://gui/game/card/card.tscn" id="1_we78f"] [ext_resource type="Shader" uid="uid://bqjwmomh851lc" path="res://common/vfx/materials/shaders/skew.gdshader" id="1_x54se"] +[ext_resource type="Texture2D" uid="uid://0hbdgalf04e" path="res://common/icons/wood.svg" id="2_bw03i"] [ext_resource type="Script" uid="uid://dj5pld5ragrjp" path="res://gui/game/card/scripts/card_visualiser.gd" id="2_ntbk8"] [ext_resource type="Script" uid="uid://dj2pv1hiwjfv0" path="res://gui/game/card/scripts/card_info.gd" id="3_5yk1o"] -[ext_resource type="Texture2D" uid="uid://bd6qddv5ihkjr" path="res://common/icons/bucket.svg" id="3_r0jrf"] [ext_resource type="Script" uid="uid://dgbh38j13g5kn" path="res://gui/game/card/scripts/card_section_info.gd" id="4_7xkgc"] [ext_resource type="Script" uid="uid://b4tkium34c831" path="res://gui/game/card/scripts/card_stat_info.gd" id="5_1et8x"] +[ext_resource type="Texture2D" uid="uid://cgefjpkvs8noj" path="res://common/icons/copy.svg" id="5_lj1tr"] [ext_resource type="Texture2D" uid="uid://bsvxhafoxwmw0" path="res://common/icons/cube-3d-sphere.svg" id="7_1et8x"] [ext_resource type="Texture2D" uid="uid://df0y0s666ui4h" path="res://icon.png" id="7_6vah0"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_r0jrf"] -shader = ExtResource("1_x54se") -shader_parameter/fov = 90.0 -shader_parameter/cull_back = true -shader_parameter/y_rot = -6e-45 -shader_parameter/x_rot = -6e-45 -shader_parameter/inset = 0.0 - -[sub_resource type="Resource" id="Resource_r0jrf"] -script = ExtResource("4_7xkgc") -metadata/_custom_type_script = "uid://dgbh38j13g5kn" - -[sub_resource type="Resource" id="Resource_6vah0"] -script = ExtResource("4_7xkgc") -metadata/_custom_type_script = "uid://dgbh38j13g5kn" - -[sub_resource type="Resource" id="Resource_jjqcm"] -script = ExtResource("4_7xkgc") -metadata/_custom_type_script = "uid://dgbh38j13g5kn" - -[sub_resource type="Resource" id="Resource_lj1tr"] -script = ExtResource("4_7xkgc") -metadata/_custom_type_script = "uid://dgbh38j13g5kn" - -[sub_resource type="Resource" id="Resource_vabmf"] -script = ExtResource("4_7xkgc") -metadata/_custom_type_script = "uid://dgbh38j13g5kn" - -[sub_resource type="Resource" id="Resource_1vjtn"] -script = ExtResource("4_7xkgc") -metadata/_custom_type_script = "uid://dgbh38j13g5kn" +[ext_resource type="Texture2D" uid="uid://baaujfw8piywi" path="res://common/icons/dna.svg" id="7_vabmf"] +[ext_resource type="Texture2D" uid="uid://bt3g5bmar0icf" path="res://common/icons/growth.svg" id="8_1vjtn"] [sub_resource type="Resource" id="Resource_l3vvu"] script = ExtResource("4_7xkgc") +title_text = "Very nice section" +title_icon = ExtResource("5_lj1tr") +text = "It's a very nice section with a very nice text" metadata/_custom_type_script = "uid://dgbh38j13g5kn" -[sub_resource type="Resource" id="Resource_bw03i"] +[sub_resource type="Resource" id="Resource_biqg7"] +script = ExtResource("5_1et8x") +text = "Dna" +icon = ExtResource("7_vabmf") +metadata/_custom_type_script = "uid://b4tkium34c831" + +[sub_resource type="Resource" id="Resource_gskac"] +script = ExtResource("5_1et8x") +text = "Growth" +icon = ExtResource("8_1vjtn") +metadata/_custom_type_script = "uid://b4tkium34c831" + +[sub_resource type="Resource" id="Resource_eb1v6"] script = ExtResource("3_5yk1o") title = "Hello" texture = ExtResource("7_6vah0") -important_stat_text = "6" -important_stat_icon = ExtResource("3_r0jrf") -sections = Array[ExtResource("4_7xkgc")]([SubResource("Resource_r0jrf"), SubResource("Resource_6vah0"), SubResource("Resource_jjqcm"), SubResource("Resource_lj1tr"), SubResource("Resource_vabmf"), SubResource("Resource_1vjtn"), SubResource("Resource_l3vvu")]) +important_stat_text = "5" +important_stat_icon = ExtResource("2_bw03i") +stats = Array[ExtResource("5_1et8x")]([SubResource("Resource_biqg7"), SubResource("Resource_gskac")]) +sections = Array[ExtResource("4_7xkgc")]([SubResource("Resource_l3vvu")]) metadata/_custom_type_script = "uid://dj2pv1hiwjfv0" +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bw03i"] +shader = ExtResource("1_x54se") +shader_parameter/fov = 90.0 +shader_parameter/cull_back = true +shader_parameter/y_rot = 0.00018062632 +shader_parameter/x_rot = -0.00042293756 +shader_parameter/inset = 0.0 + [sub_resource type="Animation" id="Animation_1et8x"] length = 0.3 @@ -68,27 +63,35 @@ _data = { &"appear": SubResource("Animation_7xkgc") } -[node name="CardVisualiser" type="SubViewportContainer"] -material = SubResource("ShaderMaterial_r0jrf") +[node name="CardVisualiser" type="MarginContainer"] anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -246.0 -offset_top = -134.0 -offset_right = 54.0 -offset_bottom = -24.0 +offset_left = -125.0 +offset_top = -30.0 +offset_right = 125.0 +offset_bottom = 30.0 grow_horizontal = 2 grow_vertical = 2 scale = Vector2(1.0000002, 1.0000002) size_flags_horizontal = 0 size_flags_vertical = 4 mouse_filter = 2 +theme_override_constants/margin_left = -25 +theme_override_constants/margin_top = -25 +theme_override_constants/margin_right = -25 +theme_override_constants/margin_bottom = -25 script = ExtResource("2_ntbk8") -card_info = SubResource("Resource_bw03i") +card_info = SubResource("Resource_eb1v6") -[node name="SubViewport" type="SubViewport" parent="."] +[node name="SubViewportContainer" type="SubViewportContainer" parent="."] +unique_name_in_owner = true +material = SubResource("ShaderMaterial_bw03i") +layout_mode = 2 + +[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] unique_name_in_owner = true transparent_bg = true handle_input_locally = false @@ -96,7 +99,7 @@ size = Vector2i(300, 110) size_2d_override_stretch = true render_target_update_mode = 4 -[node name="CardContainer" type="MarginContainer" parent="SubViewport"] +[node name="CardContainer" type="MarginContainer" parent="SubViewportContainer/SubViewport"] unique_name_in_owner = true offset_right = 300.0 offset_bottom = 110.0 @@ -105,15 +108,14 @@ theme_override_constants/margin_top = 25 theme_override_constants/margin_right = 25 theme_override_constants/margin_bottom = 25 -[node name="Card" parent="SubViewport/CardContainer" instance=ExtResource("1_we78f")] +[node name="Card" parent="SubViewportContainer/SubViewport/CardContainer" instance=ExtResource("1_we78f")] unique_name_in_owner = true self_modulate = Color(1, 1, 1, 0) layout_mode = 2 -size_flags_horizontal = 4 mouse_filter = 2 small_mode = true down_arrow = true -info = SubResource("Resource_bw03i") +info = SubResource("Resource_eb1v6") [node name="AnimationPlayer" type="AnimationPlayer" parent="."] unique_name_in_owner = true diff --git a/gui/game/card/scripts/card_visualiser.gd b/gui/game/card/scripts/card_visualiser.gd index e7bd8c2..a06facd 100644 --- a/gui/game/card/scripts/card_visualiser.gd +++ b/gui/game/card/scripts/card_visualiser.gd @@ -1,5 +1,5 @@ @tool -extends SubViewportContainer +extends MarginContainer class_name CardVisualiser signal clicked(c: CardVisualiser) @@ -7,6 +7,8 @@ signal clicked(c: CardVisualiser) const MAX_ROT = 15 const ZOOM_SCALE = 1.2 +const MARGIN = 25 + var wanted_rot : Vector2 = Vector2.ZERO var real_rot : Vector2 = Vector2.ZERO @@ -51,7 +53,7 @@ func _input(event): clicked.emit(self) func _ready(): - material = material.duplicate() + %SubViewportContainer.material = %SubViewportContainer.material.duplicate() update() is_ready = true @@ -69,13 +71,14 @@ func _process(_d): real_rot = real_rot.lerp(wanted_rot, 0.1) - material.set_shader_parameter("y_rot", - real_rot.x) - material.set_shader_parameter("x_rot", real_rot.y) + %SubViewportContainer.material.set_shader_parameter("y_rot", - real_rot.x) + %SubViewportContainer.material.set_shader_parameter("x_rot", real_rot.y) %Card.custom_minimum_size.x = card_width - %CardContainer.size.y = 0 + %CardContainer.size = Vector2.ZERO %SubViewport.size = %CardContainer.size - size = %SubViewport.size + %SubViewportContainer.size = %SubViewport.size + size = %SubViewportContainer.size - (Vector2.ONE * MARGIN * 2) func is_mouse_over() -> bool: diff --git a/gui/game/inventory_gui/inventory_item/inventory_gui_item.tscn b/gui/game/inventory_gui/inventory_item/inventory_gui_item.tscn index f020b05..88f1e70 100644 --- a/gui/game/inventory_gui/inventory_item/inventory_gui_item.tscn +++ b/gui/game/inventory_gui/inventory_item/inventory_gui_item.tscn @@ -165,6 +165,19 @@ texture = ExtResource("3_m0ja8") expand_mode = 1 stretch_mode = 4 +[node name="ParticleTexture2" type="TextureRect" parent="CenterContainer/ItemTexture"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -22.0 +offset_right = 22.0 +grow_vertical = 0 +texture = ExtResource("3_m0ja8") +expand_mode = 1 +stretch_mode = 4 + [node name="BottomSpace" type="Control" parent="."] layout_mode = 2 diff --git a/gui/game/inventory_gui/inventory_item/scripts/inventory_gui_item.gd b/gui/game/inventory_gui/inventory_item/scripts/inventory_gui_item.gd index 8ce98a4..dd7e08c 100644 --- a/gui/game/inventory_gui/inventory_item/scripts/inventory_gui_item.gd +++ b/gui/game/inventory_gui/inventory_item/scripts/inventory_gui_item.gd @@ -39,12 +39,16 @@ func update(_item: Item, selected : bool): if item and item.icon: %ItemTexture.texture = item.icon var particles = item.get_particles() - if len(particles): + if len(particles) > 0: %ParticleTexture.texture = particles[0].texture %ParticleTexture.modulate = particles[0].color + if len(particles) > 1: + %ParticleTexture2.texture = particles[1].texture + %ParticleTexture2.modulate = particles[1].color %ItemTexture.visible = item != null %NoItemTextureRect.visible = item == null - %ParticleTexture.visible = item and len(item.get_particles()) + %ParticleTexture.visible = item and len(item.get_particles())>0 + %ParticleTexture2.visible = item and len(item.get_particles())>1 current_item = item diff --git a/gui/game/quota_reward/scripts/quota_reward.gd b/gui/game/quota_reward/scripts/quota_reward.gd index 402d783..aee0f04 100644 --- a/gui/game/quota_reward/scripts/quota_reward.gd +++ b/gui/game/quota_reward/scripts/quota_reward.gd @@ -15,10 +15,12 @@ func _ready(): func show_rewards(): showing_rewards = true + get_tree().paused = true %AnimationPlayer.play("show") func hide_rewards(): showing_rewards = false + get_tree().paused = false %AnimationPlayer.play_backwards("show") func generate_rewards(nb : int = 3): diff --git a/gui/game/scripts/game_gui.gd b/gui/game/scripts/game_gui.gd index 85af332..33c357e 100644 --- a/gui/game/scripts/game_gui.gd +++ b/gui/game/scripts/game_gui.gd @@ -70,7 +70,7 @@ func _on_plant_gaining_score(plant: Plant, amount : int): 0.8 ) - await get_tree().create_timer(0.3).timeout + await get_tree().create_timer(0.3 / max(1,i)).timeout func spawn_score_particle( from_position, diff --git a/gui/game/win/scripts/win.gd b/gui/game/win/scripts/win.gd index 955c93c..dcc8e2a 100644 --- a/gui/game/win/scripts/win.gd +++ b/gui/game/win/scripts/win.gd @@ -1,6 +1,6 @@ extends Control -const PLANET_RUN_SCENE = preload("res://stages/planet_run/planet_run.tscn") +@export_file var game_scene_path : String func _ready(): visible = false @@ -13,7 +13,7 @@ func win(planet : Planet): func _on_restart_pressed(): GameInfo.game_data.reset_all() get_tree().paused = false - get_tree().change_scene_to_packed(PLANET_RUN_SCENE) + get_tree().change_scene_to_file(game_scene_path) func _on_quit_pressed(): get_tree().quit() diff --git a/gui/game/win/win.tscn b/gui/game/win/win.tscn index 010aa25..0e7de4c 100644 --- a/gui/game/win/win.tscn +++ b/gui/game/win/win.tscn @@ -27,6 +27,7 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_sehw2") +game_scene_path = "uid://d28cp7a21kwou" [node name="ColorRect" type="ColorRect" parent="."] material = SubResource("ShaderMaterial_8p3aj") diff --git a/gui/pointer/assets/cursors/pointer.svg b/gui/pointer/assets/cursors/pointer.svg index 15cd6c1..e91a777 100644 --- a/gui/pointer/assets/cursors/pointer.svg +++ b/gui/pointer/assets/cursors/pointer.svg @@ -1 +1,48 @@ - \ No newline at end of file + + + + + + + + diff --git a/gui/pointer/assets/cursors/pointer.svg.import b/gui/pointer/assets/cursors/pointer.svg.import index 9f17eef..47d69aa 100644 --- a/gui/pointer/assets/cursors/pointer.svg.import +++ b/gui/pointer/assets/cursors/pointer.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/pointer.svg-7e9852b8fc87e59d7ede00033ef3f170. compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/gui/pointer/pointer.tscn b/gui/pointer/pointer.tscn index e198ace..60478f6 100644 --- a/gui/pointer/pointer.tscn +++ b/gui/pointer/pointer.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=15 format=3 uid="uid://0yr6b2jtuttm"] +[gd_scene load_steps=23 format=3 uid="uid://0yr6b2jtuttm"] [ext_resource type="Script" uid="uid://vhumsfntpqcl" path="res://gui/pointer/scripts/pointer.gd" id="1_1pe2k"] [ext_resource type="Texture2D" uid="uid://bspffyprdywgc" path="res://gui/pointer/assets/cursors/pointer.svg" id="2_q4bvb"] @@ -8,21 +8,51 @@ [ext_resource type="Script" uid="uid://c60a1bjcuj4hd" path="res://common/vfx/circle/scripts/circle.gd" id="5_b4uwv"] [ext_resource type="PackedScene" uid="uid://3ss8pvhsackj" path="res://gui/game/card/card_visualiser.tscn" id="6_7j4mj"] [ext_resource type="Shader" uid="uid://bqjwmomh851lc" path="res://common/vfx/materials/shaders/skew.gdshader" id="7_wgcdp"] +[ext_resource type="Texture2D" uid="uid://0hbdgalf04e" path="res://common/icons/wood.svg" id="8_tdpeg"] [ext_resource type="Script" uid="uid://dj2pv1hiwjfv0" path="res://gui/game/card/scripts/card_info.gd" id="8_xb313"] [ext_resource type="Script" uid="uid://dgbh38j13g5kn" path="res://gui/game/card/scripts/card_section_info.gd" id="9_s1ym6"] [ext_resource type="Script" uid="uid://b4tkium34c831" path="res://gui/game/card/scripts/card_stat_info.gd" id="10_d4v46"] [ext_resource type="Texture2D" uid="uid://bsvxhafoxwmw0" path="res://common/icons/cube-3d-sphere.svg" id="11_s1ym6"] +[ext_resource type="Texture2D" uid="uid://cgefjpkvs8noj" path="res://common/icons/copy.svg" id="11_tof6i"] +[ext_resource type="Texture2D" uid="uid://baaujfw8piywi" path="res://common/icons/dna.svg" id="13_mw4ws"] +[ext_resource type="Texture2D" uid="uid://bt3g5bmar0icf" path="res://common/icons/growth.svg" id="14_efnoc"] +[ext_resource type="Texture2D" uid="uid://df0y0s666ui4h" path="res://icon.png" id="15_dtmaq"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_6eft6"] shader = ExtResource("7_wgcdp") shader_parameter/fov = 90.0 shader_parameter/cull_back = true -shader_parameter/y_rot = -6e-45 -shader_parameter/x_rot = -6e-45 +shader_parameter/y_rot = -5.999999999999999e-45 +shader_parameter/x_rot = -5.999999999999999e-45 shader_parameter/inset = 0.0 -[sub_resource type="Resource" id="Resource_mrxa2"] +[sub_resource type="Resource" id="Resource_l3vvu"] +script = ExtResource("9_s1ym6") +title_text = "Very nice section" +title_icon = ExtResource("11_tof6i") +text = "It's a very nice section with a very nice text" +metadata/_custom_type_script = "uid://dgbh38j13g5kn" + +[sub_resource type="Resource" id="Resource_biqg7"] +script = ExtResource("10_d4v46") +text = "Dna" +icon = ExtResource("13_mw4ws") +metadata/_custom_type_script = "uid://b4tkium34c831" + +[sub_resource type="Resource" id="Resource_gskac"] +script = ExtResource("10_d4v46") +text = "Growth" +icon = ExtResource("14_efnoc") +metadata/_custom_type_script = "uid://b4tkium34c831" + +[sub_resource type="Resource" id="Resource_mbe2a"] script = ExtResource("8_xb313") +title = "Hello" +texture = ExtResource("15_dtmaq") +important_stat_text = "5" +important_stat_icon = ExtResource("8_tdpeg") +stats = Array[ExtResource("10_d4v46")]([SubResource("Resource_biqg7"), SubResource("Resource_gskac")]) +sections = Array[ExtResource("9_s1ym6")]([SubResource("Resource_l3vvu")]) metadata/_custom_type_script = "uid://dj2pv1hiwjfv0" [node name="Pointer" type="Node"] @@ -123,8 +153,9 @@ modulate = Color(1, 1, 1, 0.5003133) material = SubResource("ShaderMaterial_6eft6") layout_mode = 2 size_flags_horizontal = 4 +size_flags_vertical = 8 mouse_filter = 0 -card_info = SubResource("Resource_mrxa2") +card_info = SubResource("Resource_mbe2a") [node name="Audio" type="Node" parent="."] diff --git a/gui/pointer/scripts/pointer.gd b/gui/pointer/scripts/pointer.gd index 7a74a29..c6da612 100644 --- a/gui/pointer/scripts/pointer.gd +++ b/gui/pointer/scripts/pointer.gd @@ -8,7 +8,7 @@ const ZONE_ACTIVATED_COLOR = Color.TURQUOISE const ZONE_DEACTIVATED_COLOR = Color.REBECCA_PURPLE const CARD_VISUALISATION_TIME = 0.5 -const CARD_UP_PADDING = 20 +const CARD_UP_PADDING = 50 @export var default_cursor : Texture2D @@ -101,7 +101,11 @@ func inspect(node : Node): update_inspector() func update_card(): - if not inspected or inspected_card_info == null or time_last_inspected > CARD_VISUALISATION_TIME: + if ( + not inspected or inspected_card_info == null + or time_last_inspected > CARD_VISUALISATION_TIME + or get_tree().paused + ): %CardVisualiser.hide() elif inspected != null and ( diff --git a/icon.png b/icon.png index f471bfa4c3bb6441a4549569765cd9c15dd355c0..9a0723d22d37fe36badc90630a72aba5322e2863 100644 GIT binary patch literal 12559 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 E1H@P!;s5{u diff --git a/icon.png.import b/icon.png.import index 391a373..34a10c2 100644 --- a/icon.png.import +++ b/icon.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.cte compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/project.godot b/project.godot index 76a0658..79de977 100644 --- a/project.godot +++ b/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="Seeding Planets" config/description="Seeding planets is a survival, managment and cosy game in which you play a little gardener robot." -config/version="proto-3.0" +config/version="proto-3.1" run/main_scene="uid://c5bruelvqbm1k" config/features=PackedStringArray("4.5", "Forward Plus") config/icon="uid://df0y0s666ui4h" diff --git a/push-to-itch.sh b/push-to-itch.sh index ee28d30..af02aff 100644 --- a/push-to-itch.sh +++ b/push-to-itch.sh @@ -1,4 +1,4 @@ VERSION=$(grep config/version project.godot | cut -d'"' -f2 ) -cd .export/web -zip web.zip * -butler push web.zip zink-exe/seeding-the-wasteland-prototype:web --userversion $VERSION \ No newline at end of file +cd .export/win +zip win.zip * +butler push web.zip zink-exe/seeding-the-wasteland-prototype:win --userversion $VERSION \ No newline at end of file diff --git a/stages/planet_run/planet_run.tscn b/stages/planet_run/planet_run.tscn index 693a206..5fde303 100644 --- a/stages/planet_run/planet_run.tscn +++ b/stages/planet_run/planet_run.tscn @@ -45,10 +45,10 @@ y_sort_enabled = true position = Vector2(33, -75) [node name="TruckLadder" parent="Entities" instance=ExtResource("9_gisiu")] -position = Vector2(33, -139) +position = Vector2(50, -135) [node name="TruckRecharge" parent="Entities" instance=ExtResource("10_cnjsq")] -position = Vector2(-36, -154) +position = Vector2(-46, -152) [node name="Planet" parent="." node_paths=PackedStringArray("quota_reward", "import_entities_from_node") instance=ExtResource("8_t31p7")] loot_item_number = Array[int]([1]) diff --git a/stages/terrain/planet/scripts/garden.gd b/stages/terrain/planet/scripts/garden.gd index 0ed98a7..b215325 100644 --- a/stages/terrain/planet/scripts/garden.gd +++ b/stages/terrain/planet/scripts/garden.gd @@ -64,14 +64,11 @@ func plant( type, plant_mutations ) - plants.append(new_plant) planet_data.score_by_plant.append(0) new_plant.harvested.connect(_on_plant_harvested) new_plant.state_changed.connect(_on_plant_state_changed) - new_plant.ready.connect( - func(): update_garden_score() - ) + get_tree().create_timer(0.05).timeout.connect(update_garden_score) return new_plant func _on_plant_state_changed(_p: Plant): @@ -85,7 +82,8 @@ func remove_plant(p: Plant): if id >= 0: plants.remove_at(id) planet_data.score_by_plant.remove_at(id) - update_garden_score() + + get_tree().create_timer(0.05).timeout.connect(update_garden_score) func update_garden_score(): diff --git a/stages/terrain/planet/scripts/planet.gd b/stages/terrain/planet/scripts/planet.gd index 31e8af8..f0e0a53 100644 --- a/stages/terrain/planet/scripts/planet.gd +++ b/stages/terrain/planet/scripts/planet.gd @@ -116,7 +116,6 @@ func plant( if garden.is_in_garden(plant_position): var new_plant = garden.plant(type, plant_mutations) add_entity(new_plant, plant_position) - garden.update_garden_score() return true return false @@ -142,8 +141,7 @@ func pass_day(): if data.garden_score >= data.get_quota_score(): reach_quota() - - if data.quota_days <= 0: + elif data.quota_days <= 0: day_limit_exceed.emit(self) save() diff --git a/stages/terrain/truck/scripts/truck_data.gd b/stages/terrain/truck/scripts/truck_data.gd index bef3bd8..3231845 100644 --- a/stages/terrain/truck/scripts/truck_data.gd +++ b/stages/terrain/truck/scripts/truck_data.gd @@ -1,7 +1,8 @@ extends Resource class_name TruckData +@export var rewards_given : Array[Reward] = [] @export var rewards : Array[Reward] = [] @export var rewarded_times : int = 0 @export var compost_containing_seeds : Array[int] = [] -@export var entities_saved_data : Array[EntityData] = [] \ No newline at end of file +@export var entities_saved_data : Array[EntityData] = [] diff --git a/stages/terrain/truck/scripts/truck_interior.gd b/stages/terrain/truck/scripts/truck_interior.gd index 972f36f..31e7317 100644 --- a/stages/terrain/truck/scripts/truck_interior.gd +++ b/stages/terrain/truck/scripts/truck_interior.gd @@ -21,7 +21,10 @@ func _ready(): for i in range(len(composts)): var compost = composts[i] compost.containing_seed = data.compost_containing_seeds[i] - compost.filled.connect(func (c: Compost): data.compost_containing_seeds[i] = c.containing_seed) + compost.filled.connect( + func (c: Compost): + data.compost_containing_seeds[i] = c.containing_seed + ) if i < len(data.rewards): compost.reward = data.rewards[i] @@ -35,6 +38,7 @@ func _ready(): func _on_compost_rewarded(c: Compost): data.rewarded_times += 1 + data.rewards_given.append(c.reward) c.reward = generate_reward() func get_compost_rewards() -> Array[Reward]: @@ -45,26 +49,41 @@ func get_compost_rewards() -> Array[Reward]: return rewards func get_random_reward_cost() -> int: - return randi_range(1 + data.rewarded_times * 2, 2 + data.rewarded_times * 2) + return randi_range(data.rewarded_times + 1, data.rewarded_times + 2) func get_possible_rewards() -> Array[Reward]: - return [ + var possible_rewards : Array[Reward] = [ UpgradeMaxEnergyReward.new(get_random_reward_cost() + 2), UpgradeMaxInventoryReward.new(get_random_reward_cost()), GiveItemReward.new( get_random_reward_cost(), Blueprint.new(preload("res://entities/interactables/machines/solar_pannel/solar_pannel.tres")) ), - GiveItemReward.new( - get_random_reward_cost(), - Knife.new() - ), - GiveItemReward.new( - get_random_reward_cost(), - Trowel.new() - ) ] + if data.rewards_given.find_custom( + func(r : Reward): + return r is GiveItemReward and r.item is Trowel + ) == -1: + possible_rewards.append( + GiveItemReward.new( + get_random_reward_cost(), + Knife.new() + ) + ) + if data.rewards_given.find_custom( + func(r : Reward): + return r is GiveItemReward and r.item is Knife + ) == -1: + possible_rewards.append( + GiveItemReward.new( + get_random_reward_cost(), + Trowel.new() + ) + ) + + return possible_rewards + func generate_reward() -> Reward: var max_tries = 3 var reward = get_possible_rewards().pick_random() diff --git a/stages/title_screen/assets/textures/title.png b/stages/title_screen/assets/textures/title.png new file mode 100644 index 0000000000000000000000000000000000000000..906930011081cffeaa583eb9a49909c055ac047b GIT binary patch literal 29070 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 c%p53^AW%f2B}xCy!HS95cf$$ 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 literal 0 HcmV?d00001 diff --git a/stages/title_screen/assets/textures/title.png.import b/stages/title_screen/assets/textures/title.png.import new file mode 100644 index 0000000..d261a93 --- /dev/null +++ b/stages/title_screen/assets/textures/title.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cdpqg3pkjcw2h" +path="res://.godot/imported/title.png-d45063d896f6ee3d177f9178ce51f6b0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://stages/title_screen/assets/textures/title.png" +dest_files=["res://.godot/imported/title.png-d45063d896f6ee3d177f9178ce51f6b0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/stages/title_screen/scripts/planet_3d.gd b/stages/title_screen/scripts/planet_3d.gd index 1b68ba9..b239003 100644 --- a/stages/title_screen/scripts/planet_3d.gd +++ b/stages/title_screen/scripts/planet_3d.gd @@ -7,12 +7,14 @@ class_name Planet3D @export var radius : float = 8.0 : set(v): radius = maxf(1.0, v) - update_terrain() - update_water() + if is_node_ready(): + update_terrain() + update_water() @export var details : int = 64: set(v): details = maxi(1,v) - update_terrain() + if is_node_ready(): + update_terrain() @export_group("Terrain") @@ -24,8 +26,9 @@ class_name Planet3D @export var height : float = 1.0 : set(v): height = maxf(0.0, v) - update_terrain() - update_water() + if is_node_ready(): + update_terrain() + update_water() @export var terrain_material : Material: set(v): terrain_material = v @@ -34,17 +37,20 @@ class_name Planet3D @export_tool_button("Random Noise", "Callable") var update_action = func(): noise = generate_noise() - update_terrain() + if is_node_ready(): + update_terrain() @export_group("Water") @export_range(0.0,1.0,0.05) var water_level := 0.: set(v): water_level = v - update_water() + if is_node_ready(): + update_water() @export var water_detail := 64: set(v): water_detail = maxi(1, v) - update_water() + if is_node_ready(): + update_water() @export var water_material : Material: set(v): water_material = v diff --git a/stages/title_screen/title_screen.tscn b/stages/title_screen/title_screen.tscn index b9f5d98..b25fa6e 100644 --- a/stages/title_screen/title_screen.tscn +++ b/stages/title_screen/title_screen.tscn @@ -2,8 +2,8 @@ [ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/default_theme.tres" id="1_4ph5l"] [ext_resource type="Script" uid="uid://cwmp2une7hobe" path="res://stages/title_screen/scripts/title_screen.gd" id="1_6yuhi"] -[ext_resource type="Texture2D" uid="uid://nx4wxpr6mk8l" path="res://gui/menu/assets/texture/SeedingPlanetsLogo.png" id="2_qnk88"] [ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="3_6yuhi"] +[ext_resource type="Texture2D" uid="uid://cdpqg3pkjcw2h" path="res://stages/title_screen/assets/textures/title.png" id="3_y6tw6"] [ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="4_y6tw6"] [ext_resource type="PackedScene" uid="uid://cm5b7w7j6527f" path="res://stages/title_screen/planet_3d.tscn" id="5_7a1qq"] [ext_resource type="Shader" uid="uid://bv2rghn44mrrf" path="res://stages/title_screen/resources/shaders/stars.gdshader" id="7_y6tw6"] @@ -11,8 +11,8 @@ [sub_resource type="ViewportTexture" id="ViewportTexture_6yuhi"] viewport_path = NodePath("SubViewport") -[sub_resource type="FastNoiseLite" id="FastNoiseLite_6yuhi"] -seed = 263046432 +[sub_resource type="FastNoiseLite" id="FastNoiseLite_7a1qq"] +seed = -856983584 frequency = 1.0 [sub_resource type="ShaderMaterial" id="ShaderMaterial_7a1qq"] @@ -87,7 +87,7 @@ alignment = 1 layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 4 -theme_override_constants/separation = 20 +theme_override_constants/separation = 40 alignment = 1 [node name="Logo" type="TextureRect" parent="MarginContainer/GridContainer/VBoxContainer"] @@ -96,7 +96,7 @@ custom_minimum_size = Vector2(400, 0) layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 0 -texture = ExtResource("2_qnk88") +texture = ExtResource("3_y6tw6") expand_mode = 5 stretch_mode = 5 @@ -168,7 +168,7 @@ size = Vector2i(1980, 1080) [node name="Planet3d" parent="SubViewport" instance=ExtResource("5_7a1qq")] unique_name_in_owner = true -noise = SubResource("FastNoiseLite_6yuhi") +noise = SubResource("FastNoiseLite_7a1qq") [node name="Camera3D" type="Camera3D" parent="SubViewport"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 64.323425)