From 4a46492598557f02c693c0993d83002720fbaacf Mon Sep 17 00:00:00 2001 From: Zacharie Guet Date: Sat, 21 Mar 2026 18:59:39 +0100 Subject: [PATCH] =?UTF-8?q?Equilibrage,=20am=C3=A9lioration=20du=20tutorie?= =?UTF-8?q?l=20et=20de=20la=20clart=C3=A9=20des=20=C3=A9l=C3=A9ments=20de?= =?UTF-8?q?=20gameplay?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Rajout d'une région supplémentaire pour finir le jeu, et renommage de la dernière map en "Base Borea" * Amélioration de la clarté du détecteur * Les objectifs du tutoriel et les indications de jeu apparaissent désormais en haut de l'écran * Changement des étapes du tutoriel * Amélioration de la lisibilité du voyage dans le vaisseau (avec un décompte de distance jusqu'à la fin du jeu) * Changement de la génération de map : la zone fertile est désormais uniquement au centre de la carte, les chunks sont également plus petits * Changement des objectifs à réaliser ainsi que des recharges, seule 8 par région désormais * Les modificateurs de région n'évoluent plus --- common/game_data/scripts/game_data.gd | 2 +- common/game_data/scripts/run/run_data.gd | 32 +++-- common/game_data/scripts/settings_data.gd | 2 +- common/icons/clock.svg.import | 2 +- .../scripts/items/utils/detector_signal.gd | 40 ++++-- gui/game/game_gui.tscn | 98 +++++++++++--- gui/game/pass_day/pass_day.tscn | 11 +- gui/game/scripts/game_gui.gd | 46 +++---- gui/game/tutorial/scripts/tutorial.gd | 19 ++- gui/tools/control_animation_player.gd | 1 + stages/3d_scenes/cockpit_scene/dashboard.tscn | 122 +++++------------- .../3d_scenes/cockpit_scene/holo_content.tscn | 81 ++++++++++++ .../cockpit_scene/scripts/cockpit.gd | 57 ++++---- .../cockpit_scene/scripts/dashboard.gd | 111 ++++++++-------- .../cockpit_scene/scripts/holo_content.gd | 39 ++++++ .../cockpit_scene/scripts/holo_content.gd.uid | 1 + stages/terrain/region/region.tscn | 4 +- stages/terrain/region/scripts/chunk.gd | 13 +- .../region/scripts/modifiers/arid_modifier.gd | 4 +- .../scripts/modifiers/harsh_modifier.gd | 2 +- .../scripts/modifiers/humid_modifier.gd | 2 +- .../region/scripts/modifiers/poor_modifier.gd | 2 +- stages/terrain/region/scripts/region.gd | 6 +- .../region/scripts/region_parameter.gd | 15 ++- stages/terrain/region/test_chunk.tscn | 9 ++ translation/game/gui.csv | 20 ++- 26 files changed, 470 insertions(+), 271 deletions(-) create mode 100644 stages/3d_scenes/cockpit_scene/holo_content.tscn create mode 100644 stages/3d_scenes/cockpit_scene/scripts/holo_content.gd create mode 100644 stages/3d_scenes/cockpit_scene/scripts/holo_content.gd.uid diff --git a/common/game_data/scripts/game_data.gd b/common/game_data/scripts/game_data.gd index 4918bf1..9de17f1 100644 --- a/common/game_data/scripts/game_data.gd +++ b/common/game_data/scripts/game_data.gd @@ -49,7 +49,7 @@ func start_tutorial(): current_region_data = RegionData.new( RegionParameter.new( 0, - tr("TUTORIAL"), + tr("ASTRA_BASE"), ["tutorial"], [], randi() diff --git a/common/game_data/scripts/run/run_data.gd b/common/game_data/scripts/run/run_data.gd index d77f915..8cd941f 100644 --- a/common/game_data/scripts/run/run_data.gd +++ b/common/game_data/scripts/run/run_data.gd @@ -3,10 +3,8 @@ class_name RunData enum State {STARTED, IN_PROGRESS, FINISHED} -const RUN_POINT_POSITION_DERIVATION = 100 -const DIFFICULTY_INCREASE_BY_LEVEL = 3 const RUN_POINTS_NEXT_NUMBER : int = 2 -const RUN_POINT_MAX_LEVEL = 4 # TODO +const RUN_POINT_MAX_LEVEL = 5 # TODO signal current_run_point_changed @@ -26,6 +24,11 @@ func generate_next_run_points(level = 0) -> Array[RunPoint]: next_run_points = [] + if level == RUN_POINT_MAX_LEVEL: + return [ + generate_borea_base_run_point() + ] + for i in range(RUN_POINTS_NEXT_NUMBER): next_run_points.append( generate_next_run_point(level) @@ -38,13 +41,24 @@ func generate_next_run_point(level = 0) -> RunPoint: var region_parameter = RegionParameter.new() region_parameter.level = level region_parameter.region_flags = get_region_flags(region_parameter) - region_parameter.modifiers = get_region_modifiers(level + 1) + region_parameter.modifiers = get_region_modifiers() return RunPoint.new( level, region_parameter ) +func generate_borea_base_run_point() -> RunPoint: + var region_parameter = RegionParameter.new() + region_parameter.level = RUN_POINT_MAX_LEVEL + region_parameter.region_flags = get_region_flags(region_parameter) + region_parameter.region_name = tr("BOREA_BASE") + + return RunPoint.new( + RUN_POINT_MAX_LEVEL, + region_parameter + ) + #endregion func get_state() -> State: @@ -78,12 +92,12 @@ func get_region_flags(region_parameter : RegionParameter) -> Array[String]: return flags -func get_region_modifiers(level : int) -> Array[RegionModifier]: +func get_region_modifiers() -> Array[RegionModifier]: var possible_modifiers : Array[RegionModifier] = [ - AridModifier.new(level), - HumidModifier.new(level), - PoorModifier.new(level), - HarshModifier.new(level) + AridModifier.new(), + HumidModifier.new(), + PoorModifier.new(), + HarshModifier.new() ] possible_modifiers = possible_modifiers.filter( diff --git a/common/game_data/scripts/settings_data.gd b/common/game_data/scripts/settings_data.gd index 610a3c1..93c607d 100644 --- a/common/game_data/scripts/settings_data.gd +++ b/common/game_data/scripts/settings_data.gd @@ -58,7 +58,7 @@ const AVAILABLE_LANGUAGES_LABEL = [ #region ------------------ Game ------------------ const MAX_ZOOM = 1.8 -const MIN_ZOOM = 0.9 +const MIN_ZOOM = 0.8 # Not in settings pannel @export var zoom : float = 1. : diff --git a/common/icons/clock.svg.import b/common/icons/clock.svg.import index 5542982..fa83bda 100644 --- a/common/icons/clock.svg.import +++ b/common/icons/clock.svg.import @@ -38,6 +38,6 @@ process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 detect_3d/compress_to=1 -svg/scale=1.0 +svg/scale=2.0 editor/scale_with_editor_scale=false editor/convert_colors_with_editor_theme=false diff --git a/entities/player/inventory/scripts/items/utils/detector_signal.gd b/entities/player/inventory/scripts/items/utils/detector_signal.gd index 5ace89d..61f1501 100644 --- a/entities/player/inventory/scripts/items/utils/detector_signal.gd +++ b/entities/player/inventory/scripts/items/utils/detector_signal.gd @@ -2,8 +2,12 @@ extends Node2D class_name DetectorSignal -const SIGNAL_DURATION = 1 -const PARTICLES_DISTANCE = 100 +const SIGNAL_DURATION = 1.2 +const PARTICLES_DISTANCE = 180 +const ICON_SIZE = 40 +const POINT_ICON_SIZE = 30 +const POINT_ICON_SHIFT = 0.2 +const POINT_ICON = preload("res://common/icons/caret-down.svg") const DEFAULT_ICON = preload("res://common/icons/north-star.svg") const ENERGY_ICON = preload("res://common/icons/bolt.svg") const DOOR_ICON = preload("res://common/icons/logout.svg") @@ -21,15 +25,17 @@ func _init(region : Region, pos : Vector2): signals.append( DetectorSignalIndividual.new( (pos - e.global_position).normalized().angle(), - ENERGY_ICON + ENERGY_ICON, + Color("ffa617ff") ) ) if e is Door and e.available: signals.append( DetectorSignalIndividual.new( (pos - e.global_position).normalized().angle(), - DOOR_ICON - ) + DOOR_ICON, + Color("ffa617ff") + ), ) if e is Plant: signals.append( @@ -49,11 +55,26 @@ func _draw(): 5. ) for s in signals: - draw_texture( + draw_texture_rect( s.icon, - Vector2.ZERO - DEFAULT_ICON.get_size()/2 + Vector2.LEFT.rotated(s.angle) * started_time/SIGNAL_DURATION * PARTICLES_DISTANCE, + Rect2( + Vector2.ZERO - (Vector2.ONE * ICON_SIZE)/2 + Vector2.LEFT.rotated(s.angle) * started_time/SIGNAL_DURATION * PARTICLES_DISTANCE, + Vector2.ONE * ICON_SIZE + ), + false, + Color(s.color.r,s.color.g,s.color.b,1-started_time/SIGNAL_DURATION) + ) + draw_set_transform(Vector2.ZERO,s.angle + PI/2, Vector2.ONE) + draw_texture_rect( + POINT_ICON, + Rect2( + Vector2.ZERO - (Vector2.ONE * POINT_ICON_SIZE)/2 + Vector2.DOWN * (started_time/SIGNAL_DURATION + POINT_ICON_SHIFT) * PARTICLES_DISTANCE, + Vector2.ONE * POINT_ICON_SIZE + ), + false, Color(1.,1.,1.,1-started_time/SIGNAL_DURATION) ) + draw_set_transform(Vector2.ZERO,0., Vector2.ONE) func _process(delta): if started_time < SIGNAL_DURATION: @@ -65,11 +86,14 @@ func _process(delta): class DetectorSignalIndividual: var angle : float var icon : Texture + var color : Color func _init( _angle : float = 0., - _icon : Texture = DEFAULT_ICON + _icon : Texture = DEFAULT_ICON, + _color : Color = Color.WHITE, ): angle = _angle icon = _icon + color = _color diff --git a/gui/game/game_gui.tscn b/gui/game/game_gui.tscn index 89a00ea..ac8fdf8 100644 --- a/gui/game/game_gui.tscn +++ b/gui/game/game_gui.tscn @@ -4,10 +4,8 @@ [ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="2_nq5i2"] [ext_resource type="PackedScene" uid="uid://edxmvtvtipwq" path="res://gui/game/alert/alert.tscn" id="2_ykapk"] [ext_resource type="PackedScene" uid="uid://brfsapvj2quxm" path="res://gui/game/energy_info/energy_info.tscn" id="4_2wykm"] -[ext_resource type="PackedScene" uid="uid://fnv0qhkh40mv" path="res://gui/game/announce/announce.tscn" id="4_h6540"] [ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="6_2wykm"] [ext_resource type="PackedScene" uid="uid://df0eop555wfj5" path="res://gui/game/objective_progress_bar/objective_progress_bar.tscn" id="6_dr1y2"] -[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="6_h6540"] [ext_resource type="Texture2D" uid="uid://bt3g5bmar0icf" path="res://common/icons/growth.svg" id="6_id0t5"] [ext_resource type="Texture2D" uid="uid://b43thuq8piv18" path="res://common/icons/skull.svg" id="7_dr1y2"] [ext_resource type="PackedScene" uid="uid://clicjf8ts51h8" path="res://gui/game/inventory_gui/inventory_gui.tscn" id="9_id0t5"] @@ -36,6 +34,43 @@ fill_to = Vector2(1.5, 0.5) font = ExtResource("6_2wykm") font_size = 40 +[sub_resource type="Animation" id="Animation_rcm5b"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("%ObjectiveLabel/..:theme_override_constants/margin_top") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} + +[sub_resource type="Animation" id="Animation_ajf5p"] +resource_name = "bump" +length = 0.4 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("%ObjectiveLabel/..:theme_override_constants/margin_top") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.23333333, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [0, 20, 0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_jomh8"] +_data = { +&"RESET": SubResource("Animation_rcm5b"), +&"bump": SubResource("Animation_ajf5p") +} + [sub_resource type="LabelSettings" id="LabelSettings_rcm5b"] font = ExtResource("6_2wykm") font_size = 20 @@ -68,9 +103,6 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Announce" parent="." unique_id=94658910 instance=ExtResource("4_h6540")] -unique_name_in_owner = true - [node name="MarginContainer" type="MarginContainer" parent="." unique_id=2054297293] anchors_preset = 15 anchor_right = 1.0 @@ -89,7 +121,7 @@ mouse_filter = 2 layout_mode = 2 size_flags_horizontal = 4 mouse_filter = 2 -theme_override_constants/separation = 0 +theme_override_constants/separation = 10 [node name="ObjectiveProgressBar" parent="MarginContainer/VBoxContainer" unique_id=2043451865 instance=ExtResource("6_dr1y2")] unique_name_in_owner = true @@ -114,26 +146,56 @@ text = "0 Plant Point" label_settings = SubResource("LabelSettings_id0t5") horizontal_alignment = 1 -[node name="RechargesLeftLabel" type="Label" parent="MarginContainer/VBoxContainer" unique_id=1254074923] +[node name="ObjectiveContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer" unique_id=946367772] +layout_mode = 2 +mouse_filter = 2 +theme_override_constants/margin_left = 0 +theme_override_constants/margin_top = 0 +theme_override_constants/margin_right = 0 +theme_override_constants/margin_bottom = 0 + +[node name="ObjectiveLabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/ObjectiveContainer" unique_id=2044989003] +unique_name_in_owner = true +custom_minimum_size = Vector2(600, 0) +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 0 +theme_override_colors/default_color = Color(1, 0.6509804, 0.09019608, 1) +theme_override_colors/font_shadow_color = Color(0.0627451, 0.05882353, 0.16862746, 1) +theme_override_constants/shadow_outline_size = 8 +theme_override_constants/shadow_offset_x = 0 +theme_override_constants/shadow_offset_y = 0 +theme_override_fonts/normal_font = ExtResource("6_2wykm") +theme_override_fonts/bold_font = ExtResource("6_2wykm") +theme_override_fonts/bold_italics_font = ExtResource("6_2wykm") +theme_override_fonts/italics_font = ExtResource("6_2wykm") +theme_override_font_sizes/normal_font_size = 30 +theme_override_font_sizes/bold_font_size = 30 +theme_override_font_sizes/bold_italics_font_size = 30 +theme_override_font_sizes/italics_font_size = 30 +theme_override_font_sizes/mono_font_size = 30 +bbcode_enabled = true +text = "Action en cours Action en cours Action en cours Action en cours Action en cours " +fit_content = true +horizontal_alignment = 1 + +[node name="ObjectiveAnimationPlayer" type="AnimationPlayer" parent="MarginContainer/VBoxContainer/ObjectiveContainer/ObjectiveLabel" unique_id=31675045] +unique_name_in_owner = true +libraries/ = SubResource("AnimationLibrary_jomh8") + +[node name="GiveUpButton" type="Button" parent="MarginContainer/VBoxContainer" unique_id=1128310884] unique_name_in_owner = true layout_mode = 2 -text = "9 charges left" -label_settings = ExtResource("6_h6540") -horizontal_alignment = 1 +size_flags_horizontal = 4 +size_flags_vertical = 8 +text = "GIVE_UP" +icon = ExtResource("7_dr1y2") [node name="Inventory" parent="MarginContainer" unique_id=1178590658 instance=ExtResource("9_id0t5")] layout_mode = 2 size_flags_horizontal = 1 size_flags_vertical = 8 -[node name="GiveUpButton" type="Button" parent="MarginContainer" unique_id=1128310884] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 8 -size_flags_vertical = 8 -text = "GIVE_UP" -icon = ExtResource("7_dr1y2") - [node name="Help" type="VBoxContainer" parent="MarginContainer" unique_id=645268912] layout_mode = 2 size_flags_horizontal = 8 diff --git a/gui/game/pass_day/pass_day.tscn b/gui/game/pass_day/pass_day.tscn index 8f68e4a..471597a 100644 --- a/gui/game/pass_day/pass_day.tscn +++ b/gui/game/pass_day/pass_day.tscn @@ -11,8 +11,8 @@ [sub_resource type="ShaderMaterial" id="ShaderMaterial_27lg1"] shader = ExtResource("1_v570a") -shader_parameter/strength = 5.45500025585262 -shader_parameter/mix_percentage = 0.02400000114 +shader_parameter/strength = 0.0 +shader_parameter/mix_percentage = 0.0 [sub_resource type="ViewportTexture" id="ViewportTexture_h2bel"] viewport_path = NodePath("NightAnimation/SubViewport") @@ -55,12 +55,12 @@ _data = { [node name="PassDay" type="CanvasLayer" unique_id=335255544] layer = 3 +visible = false script = ExtResource("1_0pm4g") [node name="Blur" type="ColorRect" parent="." unique_id=546890405] unique_name_in_owner = true physics_interpolation_mode = 0 -visible = false material = SubResource("ShaderMaterial_27lg1") anchors_preset = 15 anchor_right = 1.0 @@ -72,6 +72,7 @@ script = ExtResource("2_bhfpo") [node name="PassDayInfo" type="VBoxContainer" parent="." unique_id=833110506] unique_name_in_owner = true +visible = false anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 @@ -139,3 +140,7 @@ theme_override_constants/margin_bottom = 15 [node name="EnergyPassDayInfo" parent="MarginContainer" unique_id=2044341204 instance=ExtResource("2_feyaf")] unique_name_in_owner = true layout_mode = 2 +theme_override_constants/margin_left = 15 +theme_override_constants/margin_top = 15 +theme_override_constants/margin_right = 15 +theme_override_constants/margin_bottom = 15 diff --git a/gui/game/scripts/game_gui.gd b/gui/game/scripts/game_gui.gd index b29e017..6bd5888 100644 --- a/gui/game/scripts/game_gui.gd +++ b/gui/game/scripts/game_gui.gd @@ -10,16 +10,15 @@ var score_mirror : score_mirror = v score_update(true) +var objective_text : String = "" : set = set_objective_text + func _ready(): GameInfo.game_data.current_region_data.updated.connect(_on_region_updated) GameInfo.game_data.player_data.updated.connect(_on_player_updated) - GameInfo.game_data.current_region_data.pass_day_ended.connect(_on_region_pass_day_ended) - %ObjectiveProgressBar.visible = not "tutorial" in GameInfo.game_data.current_region_data.flags %SimplePlantPointScore.visible = "tutorial" in GameInfo.game_data.current_region_data.flags - charge_update(GameInfo.game_data.current_region_data) state_update(GameInfo.game_data.current_region_data) player_update(GameInfo.game_data.player_data, false) %EnergyInfo.reset_size() @@ -28,6 +27,7 @@ func _ready(): score_mirror = GameInfo.game_data.current_region_data.get_score() for p : PlantData in GameInfo.game_data.current_region_data.plants: score_by_plant[str(p.random_seed)] = p.get_score() + set_objective_text() func _on_player_updated(player_data : PlayerData): player_update(player_data) @@ -48,8 +48,6 @@ func player_update(player_data : PlayerData, with_animation = true): else: %NoEnergyVignette.modulate.a = 1. if player_data.energy == 0 else 0. - - func _on_region_updated(region_data : RegionData): await get_tree().create_timer(0.1).timeout if score_mirror != region_data.get_score(): @@ -70,23 +68,19 @@ func _on_region_updated(region_data : RegionData): score_mirror -= score_by_plant[key] score_by_plant.erase(key) - charge_update(region_data) state_update(region_data) func _on_give_up_pressed(): GameInfo.game_data.give_up() SceneManager.change_to_scene_id('ASTRA') -func charge_update(region_data : RegionData): - %RechargesLeftLabel.text = tr("%d_CHARGE_LEFT") % (region_data.charges) - func score_update(with_animation = true): var objective_progression : float + var objective = GameInfo.game_data.current_region_data.objective if GameInfo.game_data.current_region_data.state == RegionData.State.SUCCEEDED: objective_progression = 1. - %ObjectiveProgressBar.text = tr("FULL") + %ObjectiveProgressBar.text = tr("FULL") + " %d" % [score_mirror] else: - var objective = GameInfo.game_data.current_region_data.objective objective_progression = (float(score_mirror) / max(float(objective), 1)) %ObjectiveProgressBar.text = "%d/%d" % [score_mirror, objective] @@ -107,17 +101,11 @@ func score_update(with_animation = true): func state_update(region_data : RegionData): if region_data.state == RegionData.State.SUCCEEDED: - %Alert.text = "SHIP_IS_READY_TO_TAKE_OFF" + objective_text = "SHIP_IS_READY_TO_TAKE_OFF" if "tutorial" in region_data.flags: - %Alert.text = "TUTORIAL_FINISHED" - %Alert.modulate = Color("ffa617ff") - %Alert.appear() + objective_text = "PASS_THE_MYSTERIOUS_DOOR" elif region_data.state == RegionData.State.FAILED: - %Alert.text = "NO_RECHARGE_LEFT" - %Alert.modulate = Color("FF006E") - %Alert.appear() - else: - %Alert.disappear() + objective_text = "NO_RECHARGE_LEFT" %GiveUpButton.visible = region_data.state == RegionData.State.FAILED func plant_changing_score(plant_data: PlantData, amount : int): @@ -167,16 +155,16 @@ func spawn_score_particle( sprite_particle.queue_free() +func set_objective_text(v : String = objective_text): + objective_text = v + if is_node_ready(): + if (objective_text != "" and objective_text != %ObjectiveLabel.text): + %ObjectiveAnimationPlayer.play("bump") + AudioManager.play_sfx("Screen_interaction") + %ObjectiveLabel.text = v + func _on_player_action_tried_without_energy(): $AnimationPlayer.play("no_energy_left") func _on_player_upgraded(): - $EffectAnimation.play("upgrade") - -func _on_region_pass_day_ended(region:Region): - if region.data.charges == 1: - %Announce.announce( - tr("LAST_RECHARGE"), - tr("%d_GARDEN_SCORE_LEFT") % [region.data.objective - region.garden.get_score()], - Announce.RED_COLOR - ) + $EffectAnimation.play("upgrade") \ No newline at end of file diff --git a/gui/game/tutorial/scripts/tutorial.gd b/gui/game/tutorial/scripts/tutorial.gd index 020e4ea..d794474 100644 --- a/gui/game/tutorial/scripts/tutorial.gd +++ b/gui/game/tutorial/scripts/tutorial.gd @@ -8,6 +8,7 @@ signal succeded var indicators : Array[InGameIndicator] @export var player : Player @export var region : Region +@export var game_gui : GameGui @onready var steps : Array[Step] = [ Step.new( @@ -15,6 +16,11 @@ var indicators : Array[InGameIndicator] (func (): return player.global_position.distance_to(region.data.player_spawn) > 30) ), + Step.new( + "CHANGE_ZOOM_WITH_Z_X", + (func (): + return GameInfo.settings_data.zoom != 1.) + ), Step.new( "SELECT_ITEM_WITH_SCROLL_CLICK_OR_NUMBER", (func (): @@ -23,13 +29,18 @@ var indicators : Array[InGameIndicator] Step.new( "LEFT_CLICK_TO_USE_ITEMS", (func (): - return player.data.inventory.get_item() and Input.is_action_just_pressed("action")) + return player.instruction is Player.ItemActionInstruction) ), Step.new( "USE_YOUR_DETECTOR_TO_FIND_THE_BATTERY", (func (): return player.position.distance_to(Vector2.ZERO) < 600) ), + Step.new( + "RECHARGE_IN_THE_RECHARGE_STATION", + (func (): + return region and region.data and region.data.charges != 10) + ), Step.new( "DIG_A_TALION_VEIN_WITH_SHOVEL", (func (): @@ -60,11 +71,6 @@ var indicators : Array[InGameIndicator] return true return false) ), - Step.new( - "RECHARGE_TO_PASS_DAYS", - (func (): - return region and region.data and region.data.charges != 10) - ), Step.new( "GAIN_FIRST_PLANT_POINT", (func (): @@ -112,6 +118,7 @@ func _process(_d): return step_gui.suceeded = step.succeeded if not step.succeeded: + game_gui.objective_text = step.text success = false if success: finish_tutorial() diff --git a/gui/tools/control_animation_player.gd b/gui/tools/control_animation_player.gd index de73241..3ca48fd 100644 --- a/gui/tools/control_animation_player.gd +++ b/gui/tools/control_animation_player.gd @@ -159,6 +159,7 @@ func bounce( direction : Vector2 = Vector2.UP, transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_BOUNCE, ): + setup_default_values() start_anim() await add_tween( "position", diff --git a/stages/3d_scenes/cockpit_scene/dashboard.tscn b/stages/3d_scenes/cockpit_scene/dashboard.tscn index 90db721..4cbb398 100644 --- a/stages/3d_scenes/cockpit_scene/dashboard.tscn +++ b/stages/3d_scenes/cockpit_scene/dashboard.tscn @@ -6,46 +6,17 @@ [ext_resource type="Script" uid="uid://bj4d1x8n8ina" path="res://entities/interactable_3d/interactable_3d.gd" id="1_vlkbw"] [ext_resource type="PackedScene" uid="uid://cdvegfgvp7053" path="res://stages/3d_scenes/cockpit_scene/assets/3d/furnitures/screen_1.blend" id="2_awdc5"] [ext_resource type="Texture2D" uid="uid://cgmxjom200bej" path="res://common/icons/chevrons-up.svg" id="2_vlkbw"] -[ext_resource type="Script" uid="uid://ccb06rayqowp3" path="res://stages/terrain/region/scripts/modifiers/region_modifier.gd" id="3_xy0a5"] -[ext_resource type="Script" uid="uid://ddk7j5b8p51dk" path="res://stages/terrain/region/scripts/region_parameter.gd" id="4_2d2u0"] -[ext_resource type="Script" uid="uid://3o33x8mesgrn" path="res://stages/terrain/region/scripts/modifiers/arid_modifier.gd" id="4_v8ur5"] -[ext_resource type="Script" uid="uid://b4eimt3v08jhc" path="res://common/game_data/scripts/run/run_point.gd" id="5_v8ur5"] -[ext_resource type="Texture2D" uid="uid://l2xplg72hs6j" path="res://common/icons/map-pin.svg" id="6_qbi61"] [ext_resource type="Texture2D" uid="uid://bt3g5bmar0icf" path="res://common/icons/growth.svg" id="7_2ofl5"] +[ext_resource type="PackedScene" uid="uid://cs5gir1u8jbrg" path="res://stages/3d_scenes/cockpit_scene/holo_content.tscn" id="7_f7ho8"] [ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="8_f5peh"] [ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="9_2kujw"] -[ext_resource type="PackedScene" uid="uid://cm5b7w7j6527f" path="res://stages/title_screen/planet_3d.tscn" id="12_stoj6"] [ext_resource type="Texture2D" uid="uid://bsgmxvuphn73c" path="res://common/icons/arrow-narrow-down.svg" id="13_5d7hc"] [ext_resource type="PackedScene" uid="uid://crbjmwumboelw" path="res://gui/game/inventory_gui/inventory_3d.tscn" id="17_inbnt"] [ext_resource type="Script" uid="uid://bq7admu4ahs5r" path="res://entities/player/inventory/scripts/item.gd" id="18_qm808"] [ext_resource type="Script" uid="uid://fnu2d6wna4yc" path="res://entities/player/inventory/scripts/inventory.gd" id="19_kh1yg"] -[sub_resource type="Resource" id="Resource_f7ho8"] -script = ExtResource("4_v8ur5") -metadata/_custom_type_script = "uid://3o33x8mesgrn" - -[sub_resource type="Resource" id="Resource_inbnt"] -script = ExtResource("4_2d2u0") -region_name = "Uwoqos" -region_seed = 1461307588 -modifiers = Array[ExtResource("3_xy0a5")]([SubResource("Resource_f7ho8")]) - -[sub_resource type="Resource" id="Resource_qm808"] -script = ExtResource("5_v8ur5") -region_parameter = SubResource("Resource_inbnt") -position = 0.00886304526180577 -metadata/_custom_type_script = "uid://b4eimt3v08jhc" - [sub_resource type="ViewportTexture" id="ViewportTexture_cvt2p"] -viewport_path = NodePath("DestinationScreen/SubViewport") - -[sub_resource type="FastNoiseLite" id="FastNoiseLite_gbmux"] -frequency = 1.0 - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5d7hc"] -transparency = 1 -shading_mode = 0 -albedo_color = Color(0.8566341, 0.5852838, 1.1551381e-06, 0.6431373) +viewport_path = NodePath("Holo/SubViewport") [sub_resource type="ViewportTexture" id="ViewportTexture_5d7hc"] viewport_path = NodePath("StatusScreen/SubViewport") @@ -205,77 +176,46 @@ metadata/_custom_type_script = "uid://fnu2d6wna4yc" [node name="Dashboard" type="Node3D" unique_id=1374334508] script = ExtResource("1_2q8cl") main_screen_icon = ExtResource("2_vlkbw") -main_screen_label = "Take Off" -destination_label = "South" -destination_title_label = "DESTINATION" -left_destination = SubResource("Resource_qm808") -right_destination = SubResource("Resource_qm808") +main_screen_text = null +stop_name = null +stop_title = null +destination_title = "TO_BOREA_BASE" -[node name="DestinationScreen" type="Sprite3D" parent="." unique_id=1067303692] +[node name="Holo" type="Sprite3D" parent="." unique_id=1067303692] unique_name_in_owner = true -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 0.76403993, 0.9382038) -pixel_size = 0.002 +transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 0.83082896, 0.33655214) +pixel_size = 0.004 texture = SubResource("ViewportTexture_cvt2p") -[node name="Planet3dHolo" parent="DestinationScreen" unique_id=866166298 instance=ExtResource("12_stoj6")] -transform = Transform3D(-0.1, 0, 8.742278e-09, 0, 0.09999998, 0, -8.742278e-09, 0, -0.1, -1.8938096e-10, 0.24558258, 0.0021662712) -radius = 1.0 -details = 32 -noise = SubResource("FastNoiseLite_gbmux") -height = 0.625 -terrain_material = SubResource("StandardMaterial3D_5d7hc") -water_level = 0.0 -water_detail = 32 - -[node name="Planet3dHoloArrow" type="Sprite3D" parent="DestinationScreen/Planet3dHolo" unique_id=254165077] -unique_name_in_owner = true -transform = Transform3D(9.996528, -0.1669313, -0.20388591, 0.1532331, 9.977292, -0.65587914, 0.21437156, 0.65252686, 9.976385, 0, 1.6, -1.3) -pixel_size = 0.001 -billboard = 1 -double_sided = false -texture = ExtResource("6_qbi61") - -[node name="SubViewport" type="SubViewport" parent="DestinationScreen" unique_id=471832787] +[node name="SubViewport" type="SubViewport" parent="Holo" unique_id=471832787] transparent_bg = true -size = Vector2i(300, 70) +size = Vector2i(365, 68) -[node name="VBoxContainer" type="VBoxContainer" parent="DestinationScreen/SubViewport" unique_id=599842808] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 +[node name="HoloContent" parent="Holo/SubViewport" unique_id=668915500 instance=ExtResource("7_f7ho8")] +unique_name_in_owner = true +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -162.0 +offset_top = -28.0 +offset_right = 162.0 +offset_bottom = 28.0 grow_horizontal = 2 grow_vertical = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 -theme_override_constants/separation = -10 -alignment = 1 - -[node name="DestinationTitleLabel" type="Label" parent="DestinationScreen/SubViewport/VBoxContainer" unique_id=1315386326] -unique_name_in_owner = true -layout_mode = 2 -text = "DESTINATION" -label_settings = ExtResource("1_sp2xx") -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="DestinationLabel" type="Label" parent="DestinationScreen/SubViewport/VBoxContainer" unique_id=348899780] -unique_name_in_owner = true -layout_mode = 2 -text = "South" -label_settings = ExtResource("1_sp2xx") -horizontal_alignment = 1 -vertical_alignment = 1 +stop_name = "" [node name="StatusScreen" type="Sprite3D" parent="." unique_id=1257606535] unique_name_in_owner = true -transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 0.8631269, 0.18221188) +transform = Transform3D(-1, 0, -8.742278e-08, 0, 1.0000002, 0, 8.742278e-08, 0, -1, 0, 1.0703605, 0.35432142) modulate = Color(1, 0, 0.43137255, 1) pixel_size = 0.003 texture = SubResource("ViewportTexture_5d7hc") [node name="SubViewport" type="SubViewport" parent="StatusScreen" unique_id=1357189828] transparent_bg = true -size = Vector2i(500, 70) +size = Vector2i(435, 98) [node name="VBoxContainer" type="VBoxContainer" parent="StatusScreen/SubViewport" unique_id=2076282975] anchors_preset = 15 @@ -291,9 +231,11 @@ alignment = 1 [node name="StatusLabel" type="Label" parent="StatusScreen/SubViewport/VBoxContainer" unique_id=86551380] unique_name_in_owner = true layout_mode = 2 +text = "Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla Bla " label_settings = ExtResource("1_sp2xx") horizontal_alignment = 1 vertical_alignment = 1 +autowrap_mode = 3 [node name="MainScreen" type="Area3D" parent="." unique_id=874806978 node_paths=PackedStringArray("hover_animation_player")] unique_name_in_owner = true @@ -367,7 +309,7 @@ texture = SubResource("ViewportTexture_2ofl5") [node name="SubViewport" type="SubViewport" parent="RightScreen/RightScreenAction" unique_id=837587699] transparent_bg = true -size = Vector2i(150, 150) +size = Vector2i(150, 180) [node name="VBoxContainer" type="VBoxContainer" parent="RightScreen/RightScreenAction/SubViewport" unique_id=536772063] anchors_preset = 15 @@ -391,10 +333,11 @@ stretch_mode = 5 [node name="RightScreenActionLabel" type="Label" parent="RightScreen/RightScreenAction/SubViewport/VBoxContainer" unique_id=2019588267] unique_name_in_owner = true layout_mode = 2 -text = "Uwoqos" +text = "Uwoqos Uwoqos " label_settings = ExtResource("1_sp2xx") horizontal_alignment = 1 vertical_alignment = 1 +autowrap_mode = 3 [node name="RightScreenStats" type="Sprite3D" parent="RightScreen" unique_id=282782621] unique_name_in_owner = true @@ -524,7 +467,7 @@ texture = SubResource("ViewportTexture_2kujw") [node name="SubViewport" type="SubViewport" parent="LeftScreen/LeftScreenAction" unique_id=1596245800] transparent_bg = true -size = Vector2i(150, 150) +size = Vector2i(150, 180) [node name="VBoxContainer" type="VBoxContainer" parent="LeftScreen/LeftScreenAction/SubViewport" unique_id=306736368] anchors_preset = 15 @@ -548,10 +491,11 @@ stretch_mode = 5 [node name="LeftScreenActionLabel" type="Label" parent="LeftScreen/LeftScreenAction/SubViewport/VBoxContainer" unique_id=1631525309] unique_name_in_owner = true layout_mode = 2 -text = "Ujuqyt" +text = "Ujuqyt Ujuqyt" label_settings = ExtResource("1_sp2xx") horizontal_alignment = 1 vertical_alignment = 1 +autowrap_mode = 3 [node name="LeftScreenStats" type="Sprite3D" parent="LeftScreen" unique_id=2023558675] unique_name_in_owner = true diff --git a/stages/3d_scenes/cockpit_scene/holo_content.tscn b/stages/3d_scenes/cockpit_scene/holo_content.tscn new file mode 100644 index 0000000..d3196c0 --- /dev/null +++ b/stages/3d_scenes/cockpit_scene/holo_content.tscn @@ -0,0 +1,81 @@ +[gd_scene format=3 uid="uid://cs5gir1u8jbrg"] + +[ext_resource type="Script" uid="uid://d1t0br6cacipb" path="res://stages/3d_scenes/cockpit_scene/scripts/holo_content.gd" id="1_30o21"] +[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="1_bw0fn"] +[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="1_wkgid"] + +[sub_resource type="LabelSettings" id="LabelSettings_30o21"] +font = ExtResource("1_wkgid") +font_size = 37 + +[sub_resource type="LabelSettings" id="LabelSettings_xsjq0"] +font = ExtResource("1_wkgid") +font_size = 12 + +[sub_resource type="StyleBoxLine" id="StyleBoxLine_f7ho8"] +color = Color(1, 1, 1, 1) +thickness = 2 +vertical = true + +[sub_resource type="LabelSettings" id="LabelSettings_rc8f3"] +font = ExtResource("1_wkgid") +font_size = 20 + +[sub_resource type="LabelSettings" id="LabelSettings_m4m7o"] +font = ExtResource("1_wkgid") +font_size = 15 + +[node name="HoloContent" type="HBoxContainer" unique_id=668915500] +offset_right = 40.0 +offset_bottom = 40.0 +alignment = 1 +script = ExtResource("1_30o21") +distance = 0 +stop_name = "Blatava" + +[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=1324145322] +layout_mode = 2 +theme_override_constants/separation = -2 +alignment = 1 + +[node name="DistanceLabel" type="Label" parent="VBoxContainer" unique_id=414512188] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +text = "0" +label_settings = SubResource("LabelSettings_30o21") + +[node name="DistanceTitleLabel" type="Label" parent="VBoxContainer" unique_id=216163419] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +text = "Jusqu'à la Base Boréa" +label_settings = SubResource("LabelSettings_xsjq0") + +[node name="VSeparator" type="VSeparator" parent="." unique_id=124655802] +layout_mode = 2 +theme = ExtResource("1_bw0fn") +theme_override_styles/separator = SubResource("StyleBoxLine_f7ho8") + +[node name="DetailsContainer" type="VBoxContainer" parent="." unique_id=597548757] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_constants/separation = 2 +alignment = 1 + +[node name="NextStopTitleLabel" type="Label" parent="DetailsContainer" unique_id=578206390] +unique_name_in_owner = true +layout_mode = 2 +text = "Prochain arrêt" +label_settings = SubResource("LabelSettings_rc8f3") +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="NextStopLabel" type="Label" parent="DetailsContainer" unique_id=1819876983] +unique_name_in_owner = true +layout_mode = 2 +text = "Blatava" +label_settings = SubResource("LabelSettings_m4m7o") +horizontal_alignment = 1 +vertical_alignment = 1 diff --git a/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd b/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd index 78120b5..0c2f8f3 100644 --- a/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd +++ b/stages/3d_scenes/cockpit_scene/scripts/cockpit.gd @@ -30,6 +30,7 @@ func _ready(): dashboard.left_screen_activated.connect(_on_left_screen_activated) dashboard.right_screen_activated.connect(_on_right_screen_activated) %Exit.clicked.connect(_on_exit_clicked) + %Exit.interactable = can_exit() handle_dialogs() @@ -58,20 +59,26 @@ func move_to_choosen_run_point(): GameInfo.game_data.current_run.choose_next_run_point(choosen_run_point) %Gauge3D.progress = 0. +func can_exit() -> bool: + return ( + not GameInfo.game_data.ship_in_space + and GameInfo.game_data.current_region_data != null + and not "tutorial" in GameInfo.game_data.current_region_data.flags + ) + func _on_main_screen_activated(): if GameInfo.game_data.ship_in_space: if GameInfo.game_data.current_run and choosen_run_point: move_to_choosen_run_point() land.emit() - %Exit.interactable = GameInfo.game_data.current_region_data != null GameInfo.game_data.ship_in_space = false else : take_off.emit() - %Exit.interactable = false GameInfo.game_data.ship_in_space = true if GameInfo.game_data.current_run == null: GameInfo.game_data.start_run() GameInfo.game_data.player_data.energy = GameInfo.game_data.player_data.max_energy + %Exit.interactable = can_exit() update_dashboard() func _on_left_screen_activated(): @@ -88,12 +95,19 @@ func _on_right_screen_activated(): func _on_exit_clicked(): AudioManager.play_sfx("Ship_exit") - if not GameInfo.game_data.ship_in_space and GameInfo.game_data.current_region_data != null: + if (can_exit()): SceneManager.change_to_scene_id('REGION') func update_dashboard(): var current_region_data = GameInfo.game_data.current_region_data + + if current_region_data and not "tutorial" in current_region_data.flags: + dashboard.destination_distance = RunData.RUN_POINT_MAX_LEVEL * 1000 - current_region_data.region_level * 1000 + else : + dashboard.destination_distance = (RunData.RUN_POINT_MAX_LEVEL + 1) * 1000 + dashboard.destination_title = "TO_BOREA_BASE" + var current_run = GameInfo.game_data.current_run var can_take_off : bool = ( @@ -106,43 +120,40 @@ func update_dashboard(): if GameInfo.game_data.ship_in_space: dashboard.main_screen_icon = LAND_ICON - dashboard.main_screen_label = tr("LAND_SHIP") - dashboard.main_screen_interactable = choosen_run_point != null or GameInfo.game_data.current_run == null + dashboard.main_screen_text = tr("LAND_SHIP") + dashboard.main_screen_interactable = choosen_run_point != null - dashboard.destination_visible = choosen_run_point != null if choosen_run_point: - dashboard.destination_title_label = tr("DESTINATION") - dashboard.destination_longitude = float(choosen_run_point.level) / RunData.RUN_POINT_MAX_LEVEL - dashboard.destination_label = choosen_run_point.region_parameter.region_name + dashboard.stop_title = tr("NEXT_STOP") + dashboard.stop_name = choosen_run_point.region_parameter.region_name dashboard.status_text = "" else: - dashboard.status_text = tr("CHOOSE_DESTINATION") + dashboard.stop_title = tr("LOCATION") + dashboard.stop_name = tr("ORBIT") + dashboard.status_text = tr("CHOOSE_NEXT_STOP") + dashboard.stop_name = "" if GameInfo.game_data.current_run: var next_run_points = GameInfo.game_data.current_run.next_run_points if len(next_run_points) > 0: - dashboard.left_destination = next_run_points[0] + dashboard.left_stop = next_run_points[0] else: - dashboard.left_destination = null + dashboard.left_stop = null if len(next_run_points) > 1: - dashboard.right_destination = next_run_points[1] + dashboard.right_stop = next_run_points[1] else: - dashboard.right_destination = null + dashboard.right_stop = null else : - - dashboard.destination_visible = false dashboard.main_screen_icon = TAKE_OFF_ICON - dashboard.main_screen_label = tr("TAKE_OFF") + dashboard.main_screen_text = tr("TAKE_OFF") dashboard.main_screen_interactable = can_take_off - dashboard.left_destination = null - dashboard.right_destination = null + dashboard.left_stop = null + dashboard.right_stop = null - dashboard.destination_visible = current_region_data != null if current_region_data: - dashboard.destination_title_label = tr("LOCATION") - dashboard.destination_label = current_region_data.region_name - dashboard.destination_longitude = float(current_region_data.region_level) / RunData.RUN_POINT_MAX_LEVEL + dashboard.stop_title = tr("LOCATION") + dashboard.stop_name = current_region_data.region_name dashboard.status_text = "" if can_take_off else tr("NO_MORE_ENERGY") diff --git a/stages/3d_scenes/cockpit_scene/scripts/dashboard.gd b/stages/3d_scenes/cockpit_scene/scripts/dashboard.gd index ea75a0b..6b3f90a 100644 --- a/stages/3d_scenes/cockpit_scene/scripts/dashboard.gd +++ b/stages/3d_scenes/cockpit_scene/scripts/dashboard.gd @@ -13,19 +13,18 @@ signal right_screen_activated signal left_screen_activated @export var main_screen_icon : Texture : set = set_main_screen_icon -@export var main_screen_label : String : set = set_main_screen_label +@export var main_screen_text : String : set = set_main_screen_label @export var main_screen_interactable : bool : set = set_main_screen_interactable -@export var destination_label : String : set = set_destination_label -@export var destination_title_label : String : set = set_destination_title_label -@export var destination_visible : bool : set = set_destination_visible - -@export var destination_longitude : float : set = set_destination_longitude +@export var stop_name : String : set = set_stop_label +@export var stop_title : String : set = set_stop_title_label +@export var destination_distance : int +@export var destination_title : String : set = set_destination_title @export var status_text : String : set = set_status_text -@export var left_destination : RunPoint = null : set = set_left_destination -@export var right_destination : RunPoint = null : set = set_right_destination +@export var left_stop : RunPoint = null : set = set_left_stop +@export var right_stop : RunPoint = null : set = set_right_stop func _ready(): %MainScreen.clicked.connect(func(): main_screen_activated.emit()) @@ -35,24 +34,30 @@ func _ready(): set_main_screen_icon() set_main_screen_label() set_main_screen_interactable() - set_destination_label() - set_destination_title_label() - set_destination_visible() - set_destination_longitude() + set_stop_label() + set_stop_title_label() + set_destination_title() set_status_text() - set_left_destination() - set_right_destination() + set_left_stop() + set_right_stop() + %HoloContent.distance = destination_distance if not Engine.is_editor_hint() and GameInfo.game_data.player_data: %Inventory3D.update(GameInfo.game_data.player_data.inventory) +func _process(_d): + if %HoloContent.distance < destination_distance: + %HoloContent.distance = ceili(lerp(float(%HoloContent.distance), float(destination_distance), 0.05)) + else: + %HoloContent.distance = floori(lerp(float(%HoloContent.distance), float(destination_distance), 0.05)) + func set_main_screen_icon(v : Texture = main_screen_icon): main_screen_icon = v if is_node_ready(): %MainScreenIcon.texture = v -func set_main_screen_label(v : String = main_screen_label): - main_screen_label = v +func set_main_screen_label(v : String = main_screen_text): + main_screen_text = v if is_node_ready(): %MainScreenLabel.text = v @@ -62,74 +67,66 @@ func set_main_screen_interactable(v : bool = main_screen_interactable): %MainScreenSprite.visible = v %MainScreen.interactable = v -func set_destination_label(v := destination_label): - destination_label = v +func set_stop_label(v := stop_name): + stop_name = v if is_node_ready(): - %DestinationLabel.text = v + %HoloContent.stop_name = v -func set_destination_title_label(v := destination_title_label): - destination_title_label = v +func set_stop_title_label(v := stop_title): + stop_title = v if is_node_ready(): - %DestinationTitleLabel.text = v + %HoloContent.stop_title = v -func set_destination_visible(v := destination_visible): - destination_visible = v +func set_destination_title(v := destination_title): + destination_title = v if is_node_ready(): - %DestinationScreen.visible = v - -func set_destination_longitude(v := destination_longitude): - destination_longitude = v - if is_node_ready(): - %Planet3dHoloArrow.position = ( - Vector3.DOWN * (PLANET_3D_HOLO_RADIUS * 2 * destination_longitude - PLANET_3D_HOLO_RADIUS - PLANET_3D_HOLO_ARROW_SIZE) - + Vector3.FORWARD * PLANET_3D_HOLO_RADIUS - ) + %HoloContent.distance_title = v func set_status_text(v := status_text): status_text = v if is_node_ready(): %StatusLabel.text = v -func set_left_destination(v := left_destination): - left_destination = v +func set_left_stop(v := left_stop): + left_stop = v if is_node_ready(): - %LeftScreenAction.visible = left_destination != null - %LeftScreen.interactable = left_destination != null - %LeftScreenStats.visible = left_destination != null - %LeftScreenInfos.visible = left_destination and len(left_destination.region_parameter.modifiers) > 0 - if left_destination: + %LeftScreenAction.visible = left_stop != null + %LeftScreen.interactable = left_stop != null + %LeftScreenStats.visible = left_stop != null + %LeftScreenInfos.visible = left_stop and len(left_stop.region_parameter.modifiers) > 0 + if left_stop: %LeftScreenActionIcon.texture = LAND_ICON - %LeftScreenActionLabel.text = left_destination.region_parameter.get_region_name() + %LeftScreenActionLabel.text = left_stop.region_parameter.get_region_name() %LeftScreenStat1Icon.texture = GROWTH_ICON - %LeftScreenStat1Label.text = str(left_destination.region_parameter.get_objective()) + %LeftScreenStat1Label.text = str(left_stop.region_parameter.get_objective()) %LeftScreenStat2Icon.texture = CHARGE_ICON - %LeftScreenStat2Label.text = str(left_destination.region_parameter.get_charge()) + %LeftScreenStat2Label.text = str(left_stop.region_parameter.get_charge()) - if len(left_destination.region_parameter.modifiers) > 0: - var modifier : RegionModifier = left_destination.region_parameter.modifiers[0] + if len(left_stop.region_parameter.modifiers) > 0: + var modifier : RegionModifier = left_stop.region_parameter.modifiers[0] %LeftScreenInfoTitle.text = "%s %d" % [ modifier.get_modifier_name(), modifier.level ] %LeftScreenInfoText.text = modifier.get_description() -func set_right_destination(v := right_destination): - right_destination = v +func set_right_stop(v := right_stop): + right_stop = v if is_node_ready(): - %RightScreenAction.visible = right_destination != null - %RightScreen.interactable = right_destination != null - %RightScreenStats.visible = right_destination != null - %RightScreenInfos.visible = right_destination and len(right_destination.region_parameter.modifiers) > 0 - if right_destination: + %RightScreenAction.visible = right_stop != null + %RightScreen.interactable = right_stop != null + %RightScreenStats.visible = right_stop != null + %RightScreenInfos.visible = right_stop and len(right_stop.region_parameter.modifiers) > 0 + if right_stop: %RightScreenActionIcon.texture = LAND_ICON - %RightScreenActionLabel.text = right_destination.region_parameter.get_region_name() + %RightScreenActionLabel.text = right_stop.region_parameter.get_region_name() %RightScreenStat1Icon.texture = GROWTH_ICON - %RightScreenStat1Label.text = str(right_destination.region_parameter.get_objective()) + %RightScreenStat1Label.text = str(right_stop.region_parameter.get_objective()) %RightScreenStat2Icon.texture = CHARGE_ICON - %RightScreenStat2Label.text = str(right_destination.region_parameter.get_charge()) + %RightScreenStat2Label.text = str(right_stop.region_parameter.get_charge()) - if len(right_destination.region_parameter.modifiers) > 0: - var modifier : RegionModifier = right_destination.region_parameter.modifiers[0] + if len(right_stop.region_parameter.modifiers) > 0: + var modifier : RegionModifier = right_stop.region_parameter.modifiers[0] %RightScreenInfoTitle.text = "%s %d" % [ modifier.get_modifier_name(), modifier.level ] %RightScreenInfoText.text = modifier.get_description() diff --git a/stages/3d_scenes/cockpit_scene/scripts/holo_content.gd b/stages/3d_scenes/cockpit_scene/scripts/holo_content.gd new file mode 100644 index 0000000..1a49d84 --- /dev/null +++ b/stages/3d_scenes/cockpit_scene/scripts/holo_content.gd @@ -0,0 +1,39 @@ +@tool +extends HBoxContainer + +@export var distance : int = 20000 : set = set_distance +@export var distance_title : String = "TO_BOREA_BASE" : set = set_distance_title +@export var stop_name : String = "" : set = set_stop_name +@export var stop_title : String = "NEXT_STOP" : set = set_stop_title + +func _ready(): + set_distance() + set_stop_name() + set_stop_title() + +func set_distance(v : int = distance): + distance = v + if is_node_ready(): + var str_distance = str(distance) + var nb_len = len(str_distance) + var shift = 0 + for i in range(nb_len): + if i%3 == 0: + shift += 1 + str_distance = str_distance.insert(len(str_distance) - i - 2 - shift," ") + %DistanceLabel.text = str_distance + +func set_stop_name(v : String = stop_name): + stop_name = v + if is_node_ready(): + %NextStopLabel.text = tr(str(v)) + +func set_stop_title(v : String = stop_title): + stop_title = v + if is_node_ready(): + %NextStopTitleLabel.text = tr(str(v)) + +func set_distance_title(v : String = distance_title): + distance_title = v + if is_node_ready(): + %DistanceTitleLabel.text = tr(str(v)) diff --git a/stages/3d_scenes/cockpit_scene/scripts/holo_content.gd.uid b/stages/3d_scenes/cockpit_scene/scripts/holo_content.gd.uid new file mode 100644 index 0000000..0154a8b --- /dev/null +++ b/stages/3d_scenes/cockpit_scene/scripts/holo_content.gd.uid @@ -0,0 +1 @@ +uid://d1t0br6cacipb diff --git a/stages/terrain/region/region.tscn b/stages/terrain/region/region.tscn index d29cbc1..01370be 100644 --- a/stages/terrain/region/region.tscn +++ b/stages/terrain/region/region.tscn @@ -115,14 +115,16 @@ camera = NodePath("../../Camera") [node name="PassDay" parent="." unique_id=1144772570 instance=ExtResource("3_ktnx3")] unique_name_in_owner = true +visible = false [node name="RegionGui" type="CanvasLayer" parent="." unique_id=2024485651] layer = 2 -[node name="Tutorial" parent="RegionGui" unique_id=762436685 node_paths=PackedStringArray("player", "region") instance=ExtResource("2_2f6js")] +[node name="Tutorial" parent="RegionGui" unique_id=762436685 node_paths=PackedStringArray("player", "region", "game_gui") instance=ExtResource("2_2f6js")] unique_name_in_owner = true player = NodePath("../../Entities/Player") region = NodePath("../..") +game_gui = NodePath("../../GameGui") [node name="GameGui" parent="." unique_id=1970837239 instance=ExtResource("4_qdnee")] diff --git a/stages/terrain/region/scripts/chunk.gd b/stages/terrain/region/scripts/chunk.gd index c23c85e..50785c5 100644 --- a/stages/terrain/region/scripts/chunk.gd +++ b/stages/terrain/region/scripts/chunk.gd @@ -5,12 +5,13 @@ const GENERATION_NUMBER = 4 const NOISE_IMAGE_SIZE := 150 -const MAX_DECONTAMINATION_DISTANCE=2 -const MAX_TALION_DISTANCE=3 +const MAX_DECONTAMINATION_DISTANCE=0 +const MAX_TALION_DISTANCE=2 const RANDOM_PADDING_NOISE_FREQUENCY := 0.01 -const ROCK_NOISE_FREQUENCY := 0.01 -const DECONTAMINATION_NOISE_FREQUENCY := 0.01 +const ROCK_NOISE_FREQUENCY := 0.005 +const CRISTAL_NOISE_FREQUENCY := 0.008 +const DECONTAMINATION_NOISE_FREQUENCY := 0.008 const CHUNK_RANDOM_PADDING := 2 @@ -71,7 +72,7 @@ func setup_position(): func generate(): rock_noise_image = generate_noise(region_data.region_seed + 1, ROCK_NOISE_FREQUENCY) decontamination_noise_image = generate_noise(region_data.region_seed + 2, DECONTAMINATION_NOISE_FREQUENCY) - cristal_noise_image = generate_noise(region_data.region_seed + 3, ROCK_NOISE_FREQUENCY) + cristal_noise_image = generate_noise(region_data.region_seed + 3, CRISTAL_NOISE_FREQUENCY) random_padding_noise = generate_noise(region_data.region_seed + 10, RANDOM_PADDING_NOISE_FREQUENCY) all_tiles = calculate_all_tiles() @@ -169,7 +170,7 @@ func generate_noise( var noise: FastNoiseLite = FastNoiseLite.new() noise.seed = noise_seed noise.noise_type = FastNoiseLite.TYPE_SIMPLEX - noise.frequency = 0.01 + noise.frequency = frequency noise.fractal_type = FastNoiseLite.FRACTAL_NONE noise.fractal_weighted_strength = 1.0 noise.offset = Vector3( diff --git a/stages/terrain/region/scripts/modifiers/arid_modifier.gd b/stages/terrain/region/scripts/modifiers/arid_modifier.gd index 61265aa..dd9b200 100644 --- a/stages/terrain/region/scripts/modifiers/arid_modifier.gd +++ b/stages/terrain/region/scripts/modifiers/arid_modifier.gd @@ -8,7 +8,7 @@ func get_description() -> String: return tr("ARID_MODIFIER_DESC_TEXT") func modify_decontamination_threshold(decontamination_threshold : float) -> float: - return decontamination_threshold * (1. - 0.2*level) + return decontamination_threshold * (0.5) func modify_start_decontamination_zone_radius(start_decontamination_zone_radius : int) -> int: - return max(1,roundi(start_decontamination_zone_radius * (1. - 0.2*level))) \ No newline at end of file + return max(1,roundi(start_decontamination_zone_radius * (0.5))) \ No newline at end of file diff --git a/stages/terrain/region/scripts/modifiers/harsh_modifier.gd b/stages/terrain/region/scripts/modifiers/harsh_modifier.gd index cf75a55..07ab239 100644 --- a/stages/terrain/region/scripts/modifiers/harsh_modifier.gd +++ b/stages/terrain/region/scripts/modifiers/harsh_modifier.gd @@ -8,4 +8,4 @@ func get_description() -> String: return tr("HARSH_MODIFIER_DESC_TEXT") func modify_objective(objective : int) -> int: - return roundi(objective * (1. + 0.2*level)) \ No newline at end of file + return roundi(objective * 1.5) \ No newline at end of file diff --git a/stages/terrain/region/scripts/modifiers/humid_modifier.gd b/stages/terrain/region/scripts/modifiers/humid_modifier.gd index af9ed98..06c3739 100644 --- a/stages/terrain/region/scripts/modifiers/humid_modifier.gd +++ b/stages/terrain/region/scripts/modifiers/humid_modifier.gd @@ -8,4 +8,4 @@ func get_description() -> String: return tr("HUMID_MODIFIER_DESC_TEXT") func modify_charge(charge : int) -> int: - return charge - level \ No newline at end of file + return charge - 2 \ No newline at end of file diff --git a/stages/terrain/region/scripts/modifiers/poor_modifier.gd b/stages/terrain/region/scripts/modifiers/poor_modifier.gd index 568d93c..f56911d 100644 --- a/stages/terrain/region/scripts/modifiers/poor_modifier.gd +++ b/stages/terrain/region/scripts/modifiers/poor_modifier.gd @@ -8,4 +8,4 @@ func get_description() -> String: return tr("POOR_MODIFIER_DESC_TEXT") func modify_cristal_threshold(cristal_threshold : float) -> float: - return cristal_threshold * (1. - 0.2*level) \ No newline at end of file + return cristal_threshold * 0.5 \ No newline at end of file diff --git a/stages/terrain/region/scripts/region.gd b/stages/terrain/region/scripts/region.gd index 23377e0..6ecdaac 100644 --- a/stages/terrain/region/scripts/region.gd +++ b/stages/terrain/region/scripts/region.gd @@ -10,10 +10,10 @@ const TILE_SCALE = 1 const TILE_SIZE : int = roundi(TILE_SET.tile_size.x * TILE_SCALE) const SPAWN_OBJECT_RANDOM_MOVEMENT = 200 -const CHUNK_TILE_SIZE : int = 20 +const CHUNK_TILE_SIZE : int = 10 const CHUNK_SIZE = CHUNK_TILE_SIZE * TILE_SIZE -const CHUNK_LOAD_DISTANCE : int = 1 -const CHUNK_UNLOAD_DISTANCE : int = 2 +const CHUNK_LOAD_DISTANCE : int = 2 +const CHUNK_UNLOAD_DISTANCE : int = 3 const MAX_GENERATION_THREAD = 1 # Crash when superior to 1 diff --git a/stages/terrain/region/scripts/region_parameter.gd b/stages/terrain/region/scripts/region_parameter.gd index 3a3d666..c048ea2 100644 --- a/stages/terrain/region/scripts/region_parameter.gd +++ b/stages/terrain/region/scripts/region_parameter.gd @@ -2,9 +2,9 @@ extends Resource class_name RegionParameter const DEFAULT_ROCK_THRESHOLD = 0.3 -const DEFAULT_DECONTAMINATION_THRESHOLD = 0.15 -const DEFAULT_CRISTAL_THRESHOLD = 0.06 -const DEFAULT_CHARGE = 10 +const DEFAULT_DECONTAMINATION_THRESHOLD = 0.4 +const DEFAULT_CRISTAL_THRESHOLD = 0.1 +const DEFAULT_CHARGE = 8 const DEFAULT_START_DECONTAMINATION_ZONE_RADIUS = 3 @export var region_name : String @@ -14,7 +14,14 @@ const DEFAULT_START_DECONTAMINATION_ZONE_RADIUS = 3 @export var modifiers : Array[RegionModifier] static func get_objective_by_level(l : int) -> int: - return 10 + 5 * l + match l: + 0: return 5 + 1: return 8 + 2: return 10 + 3: return 15 + 4: return 20 + 5: return 30 + _: return get_objective_by_level(l-1) + (l-3) * 5 func _init( _level = 0, diff --git a/stages/terrain/region/test_chunk.tscn b/stages/terrain/region/test_chunk.tscn index 3614f55..a5b6ebd 100644 --- a/stages/terrain/region/test_chunk.tscn +++ b/stages/terrain/region/test_chunk.tscn @@ -23,6 +23,12 @@ rock_tiles_data = SubResource("Resource_ame7t") decontamination_tiles_data = SubResource("Resource_0rtv3") metadata/_custom_type_script = "uid://cx30nvq8b34lj" +[sub_resource type="FastNoiseLite" id="FastNoiseLite_ct7cr"] +frequency = 0.0071 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_0rtv3"] +noise = SubResource("FastNoiseLite_ct7cr") + [node name="TestChunk" type="Node2D" unique_id=990498648] [node name="Chunk" type="Node2D" parent="." unique_id=709095052] @@ -50,3 +56,6 @@ script = ExtResource("1_mhr83") region_data = SubResource("Resource_tiw8g") chunk_coord = Vector2i(1, 1) metadata/_custom_type_script = "uid://d2ixbaa2uqlv4" + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1962434767] +texture = SubResource("NoiseTexture2D_0rtv3") diff --git a/translation/game/gui.csv b/translation/game/gui.csv index 481f8fd..0036fa3 100644 --- a/translation/game/gui.csv +++ b/translation/game/gui.csv @@ -84,7 +84,7 @@ PURE_EFFECT_TEXT,Multiplies {score_icon} by [b]{score_multiplier}[/b] if the all GENEROUS,Generous,Généreux GENEROUS_EFFECT_TEXT,"When mature, add [b]{score_buff}[/b]{score_icon} to all nearby plants, but no longer make point","Si mature, ajoute [b]{score_buff}[/b]{score_icon} à toutes les plantes à proximité, mais ne génère plus de points" PROTECTIVE,Protective,Protecteur -PROTECTIVE_EFFECT_TEXT,"Ajoute [b]{lifetime_buff}[/b]{lifetime_icon} to all nearby plants","Ajoute [b]{lifetime_buff}[/b]{score_icon} à toutes les plantes à proximité, mais ne génère plus de points" +PROTECTIVE_EFFECT_TEXT,"Ajoute [b]{lifetime_buff}[/b]{lifetime_icon} to all nearby plants","Ajoute [b]{lifetime_buff}[/b]{lifetime_icon} à toutes les plantes à proximité" COST_%d_ENERGY,Cost %d energy,Coûte %d d'énergie ONE_TIME_USE,Single use,Usage unique BUILD_%s,Build %s,Construit %s @@ -111,15 +111,16 @@ OPEN,Open,Ouvrir PLANT_%s_MUST_BE_USED_IN_DECONTAMINATED_ZONE,Plant [b]%s[/b]. Must be used in the fertile zone.,Plante [b]%s[/b]. Doit être utilisée dans la zone fertile. PLANT_%s,Plant [b]%s[/b],Planter [b]%s[/b] MOVE_WITH_RIGHT_CLICK_OR_WASD,"Move with right click or WASD","Déplace-toi avec le clic droit ou ZQSD" +CHANGE_ZOOM_WITH_Z_X,"Change the zoom with Z and X","Changez le zoom avec W et X" SELECT_ITEM_WITH_SCROLL_CLICK_OR_NUMBER,"Select an item in your toolbar with the mouse wheel or by clicking on it","Sélectionne un item dans ta barre d'outil en utilisant la molette ou en cliquant dessus" LEFT_CLICK_TO_USE_ITEMS,"Use an item with left click","Utilise un item avec le clic gauche" DROP_SEED_WITH_KEY,"Drop current item with Q","Lâche l'item sélectionné avec A" USE_YOUR_DETECTOR_TO_FIND_THE_BATTERY,Use your [b]Detector[/b] to find the [b]Recharge station[/b],Utilise ton [b]Détecteur[/b] pour trouver la [b]Station de recharge[/b] +RECHARGE_IN_THE_RECHARGE_STATION,Recharge on the [b]Recharge station[/b] to pass the day,Se recharger sur la [b]Station de recharge[/b] pour passer la journée TAKE_A_SEED_BY_CLICKING_ON_IT,Take a [b]Seed[/b] by clicking on it,Prend une [b]Graine[/b] en cliquant dessus DIG_A_TALION_VEIN_WITH_SHOVEL,Dig a [b]Talion Vein[/b] with the [b]Shovel[/b],Creuser un [b]Filon de Talion[/b] avec la [b]Pelle[/b] PLANT_SEED_IN_FERTILE_ZONE,Plant a [b]Seed[/b] in the [b]Fertile Zone[/b],Planter une [b]Graine[/b] dans la [b]Zone Fertile[/b] -RECHARGE_TO_PASS_DAYS,Recharge on the [b]Recharge station[/b] to pass the day,Se recharger sur la [b]Station de recharge[/b] pour passer la journée -GAIN_FIRST_PLANT_POINT,Earn your first [b]Plant Point[/b] while waiting for a plant to [b]Mature[/b],Gagnez votre premier [b]Point de Plante[/b] en attendant qu'une plante soit [b]Mature[/b] +GAIN_FIRST_PLANT_POINT,Earn your first [b]Plant Point[/b] while waiting for a plant to [b]Mature[/b] (recharging will pass days),Gagnez votre premier [b]Point de Plante[/b] en attendant qu'une plante soit [b]Mature[/b] (se recharger fera passer les jours) HARVEST_A_MATURE_PLANT,Harvest a [b]Mature Plant[/b] using your [b]Shovel[/b],Récoltez une [b]Plante Mature[/b] en utilisant votre [b]Pelle[/b] %d_PLANT_POINT,%d Plant Point,%d Point de plante %d_PLANT_POINTS,%d Plant Points,%d Points de plante @@ -192,11 +193,11 @@ LOCATION,Location,Location LAND_SHIP,Land Ship,Atterrir TAKE_OFF,Take Off,Décoller NO_MORE_ENERGY,No more energy,Plus assez d'énergie -NO_RECHARGE_LEFT,No recharge left,Pas de recharge restante +NO_RECHARGE_LEFT,"No recharge left, give up to try again","Pas de recharge restante, abandonnez pour recommencer" SHIP_IS_READY_TO_TAKE_OFF,Ship is ready to take off,Le vaisseau est prêt à partir TUTORIAL_FINISHED,Tutorial finished,Tutoriel terminé -CHOOSE_DESTINATION,Choose destination,Choisissez la destination -THANKS_FOR_PLAYING,Thanks for playing to the demo!,Merci d’avoir joué à la démo ! +CHOOSE_NEXT_STOP,Choose next stop,Choisissez le prochain arrêt +THANKS_FOR_PLAYING,Thanks for playing to the demo!,Merci d'avoir joué à la démo ! JOIN_OUR_INSTAGRAM,Join our Instagram,Rejoins-nous sur Instagram WHISHLIST_THE_GAME,Whishlist the game on Steam,Ajoutez le jeu à votre liste de souhait ART,Art,Art @@ -212,7 +213,9 @@ ASTRA_FACTORY,Astra Factory,Usine Astra ASTRA_FACTORY_TEXT,Production factory of Astra base,Usine de production de la base Astra MYSTERIOUS_DOOR,Mysterious Door,Porte mystérieuse MYSTERIOUS_DOOR_TEXT,"This door has a space ship logo on it... What could it be ?","Cette porte à un logo de vaisseau marqué dessus... Que peut-il y avoir à l'intérieur ?" +ASTRA_BASE,Astra Base,Base Astra BOREA_BASE,Borea Base,Base Boréa +TO_BOREA_BASE,To Borea Base,Jusqu'à la Base Boréa BOREA_BASE_DESC_TEXT,Base where demeter is located,La base où se trouve Demeter ARID,Arid,Aride ARID_MODIFIER_DESC_TEXT,Reduce base [b]Fertile Zone[/b] in this region,Réduit la [b]Zone Fertile[/b] de base de la région @@ -221,4 +224,7 @@ HARSH_MODIFIER_DESC_TEXT,Increases the [b]Plant Points[/b] needed,Augmente le no HUMID,Humid,Humide HUMID_MODIFIER_DESC_TEXT,Reduce the number of [b]Recharge[/b],Réduit le nombre de [b]Recharge[/b] POOR,Poor,Pauvre -POOR_MODIFIER_DESC_TEXT,Reduce the number of [b]Talion Veins[/b],Réduit le nombre de [b]Veine de Talion[/b] \ No newline at end of file +POOR_MODIFIER_DESC_TEXT,Reduce the number of [b]Talion Veins[/b],Réduit le nombre de [b]Veine de Talion[/b] +PASS_THE_MYSTERIOUS_DOOR,Go through the mysterious door,Franchissez la porte mystérieuse +NEXT_STOP,Next Stop,Prochain arrêt +ORBIT,Orbit,Orbite \ No newline at end of file