Feature pour l'alpha 1.3

* Ajout d'un mode infini (pour nos hard core gamers)
* Ajout d'un message de découverte d'un nouvel outil
* Séparation de la pelle en deux outils : la pioche et la fourche
* Amélioration de la lisibilité des capsules d'énergies
* Changement léger des texture du sol et de la pierre
* Correction d'un bug lors du clic frénétique sur le porte de sortie du vaisseau
* Ajout d'un icône de recharge
* Fix de la mutation Ancien qui ne s'améliorait pas au niveau 4

+ début de dev des artefacts avec un distributeur
This commit is contained in:
2026-03-27 17:28:20 +01:00
parent 28dfc94da6
commit d45fab6a3d
90 changed files with 1896 additions and 577 deletions

View File

@@ -2,24 +2,40 @@
[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/hud.tres" id="1_0ssee"]
[ext_resource type="Script" uid="uid://bvb4v66bqteuc" path="res://gui/game/announce/scripts/announce.gd" id="1_4evne"]
[ext_resource type="FontFile" uid="uid://cpnsnrqhfkj3k" path="res://gui/ressources/fonts/spincycle_ot.otf" id="2_yrhd4"]
[ext_resource type="Shader" uid="uid://cuni3ggtw2uuy" path="res://common/vfx/materials/shaders/blur.gdshader" id="2_b6hac"]
[ext_resource type="Texture2D" uid="uid://bi5jo6pf0acjb" path="res://common/icons/carambola.svg" id="2_iwcrn"]
[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="3_7nrno"]
[ext_resource type="FontFile" uid="uid://qt80w6o01q5s" path="res://gui/ressources/fonts/TitanOne-Regular.ttf" id="4_aao0q"]
[ext_resource type="Environment" uid="uid://bxyp24f85p0xf" path="res://gui/game/assets/gui_3d_environment.tres" id="4_yjj5u"]
[ext_resource type="Script" uid="uid://bqisp5hjs06rj" path="res://gui/game/announce/scripts/announce_inspectable.gd" id="6_aao0q"]
[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="9_b6hac"]
[sub_resource type="LabelSettings" id="LabelSettings_vbart"]
font = ExtResource("2_yrhd4")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_f0v68"]
shader = ExtResource("2_b6hac")
shader_parameter/strength = 5.00000023424012
shader_parameter/mix_percentage = 0.3
[sub_resource type="ViewportTexture" id="ViewportTexture_huxc5"]
viewport_path = NodePath("Particles/SubViewport")
[sub_resource type="Curve" id="Curve_iwcrn"]
_limits = [-200.0, 200.0, 0.0, 1.0]
_data = [Vector2(0, -200), 0.0, 560.0, 0, 0, Vector2(0.08235294, 92.384125), 1336.3082, 1336.3082, 0, 0, Vector2(0.34901965, 200), 0.0, 0.0, 0, 0, Vector2(0.854902, -200), 0.0, 0.0, 0, 0]
point_count = 4
[sub_resource type="Gradient" id="Gradient_oh30d"]
offsets = PackedFloat32Array(0, 0.8689956, 0.98253274)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
[sub_resource type="LabelSettings" id="LabelSettings_6qyp1"]
font = ExtResource("4_aao0q")
font_size = 50
font_color = Color(1, 0.6509804, 0.09019608, 1)
[sub_resource type="Gradient" id="Gradient_id0t5"]
interpolation_mode = 1
offsets = PackedFloat32Array(0, 0.115169, 0.41573, 0.620786, 0.924157)
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1)
[sub_resource type="ViewportTexture" id="ViewportTexture_aao0q"]
viewport_path = NodePath("AnnounceContainer/ObjectVisualiser/SubViewport")
[sub_resource type="GradientTexture2D" id="GradientTexture2D_mnweq"]
gradient = SubResource("Gradient_id0t5")
fill_to = Vector2(1, 1)
repeat = 1
[sub_resource type="Animation" id="Animation_ok3ge"]
[sub_resource type="Animation" id="Animation_aao0q"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
@@ -31,36 +47,48 @@ tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
"values": [true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("VBoxContainer/AnnounceTexture:custom_minimum_size")
tracks/1/path = NodePath("AnnounceContainer:theme_override_constants/separation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
"update": 1,
"values": [4]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("VBoxContainer:modulate")
tracks/2/path = NodePath("Particles:modulate")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
"values": [Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("AnnounceContainer:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_871vo"]
resource_name = "pass"
length = 4.0
[sub_resource type="Animation" id="Animation_b6hac"]
resource_name = "appear"
length = 0.8
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
@@ -68,93 +96,159 @@ tracks/0/path = NodePath(".:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0333333, 3.96667, 4),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.03333333, 0.16666669),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true, true, false]
"values": [false, true]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("VBoxContainer/AnnounceTexture:custom_minimum_size")
tracks/1/interp = 1
tracks/1/path = NodePath("AnnounceContainer:theme_override_constants/separation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.0666667, 0.433333, 3.5, 3.96667),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.23333333, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(0, 0), Vector2(0, 65), Vector2(0, 65), Vector2(0, 0)]
"values": [480, 4]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("VBoxContainer:modulate")
tracks/2/interp = 1
tracks/2/path = NodePath("Particles:modulate")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.0666667, 0.133333, 3.86667, 3.96667),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.5, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("AnnounceContainer:modulate")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.2, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_dvva5"]
[sub_resource type="AnimationLibrary" id="AnimationLibrary_6qyp1"]
_data = {
&"RESET": SubResource("Animation_ok3ge"),
&"pass": SubResource("Animation_871vo")
&"RESET": SubResource("Animation_aao0q"),
&"appear": SubResource("Animation_b6hac")
}
[node name="Announce" type="Control" unique_id=509404832]
visible = false
clip_contents = true
layout_mode = 3
[node name="Announce" type="CanvasLayer" unique_id=1659074958]
script = ExtResource("1_4evne")
[node name="MarginContainer" type="MarginContainer" parent="." unique_id=1463847780]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("1_4evne")
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=1385456888]
modulate = Color(1, 1, 1, 0)
clip_contents = true
layout_mode = 1
anchors_preset = 14
[node name="BlurRect" type="ColorRect" parent="MarginContainer" unique_id=1271832904]
material = SubResource("ShaderMaterial_f0v68")
layout_mode = 2
color = Color(0.0352941, 0.0196078, 0.12549, 0.705882)
[node name="Particles" type="TextureRect" parent="." unique_id=691167186]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 1.0
anchor_right = 0.5
anchor_bottom = 0.5
offset_top = -73.5
offset_bottom = 73.5
offset_left = -500.0
offset_top = -500.0
offset_right = 500.0
offset_bottom = 500.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
theme = ExtResource("1_0ssee")
texture = SubResource("ViewportTexture_huxc5")
[node name="SubViewport" type="SubViewport" parent="Particles" unique_id=1750661995]
transparent_bg = true
size = Vector2i(1000, 1000)
[node name="GPUParticles2D" type="CPUParticles2D" parent="Particles/SubViewport" unique_id=486255573]
position = Vector2(500, 500)
amount = 20
texture = ExtResource("2_iwcrn")
preprocess = 1.0
spread = 180.0
gravity = Vector2(0, 0)
initial_velocity_min = 2.0
initial_velocity_max = 2.0
linear_accel_min = 5.0
linear_accel_max = 5.0
linear_accel_curve = SubResource("Curve_iwcrn")
color_ramp = SubResource("Gradient_oh30d")
[node name="AnnounceContainer" type="VBoxContainer" parent="." unique_id=2136389163]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 4
alignment = 1
[node name="AnnounceTitle" type="Label" parent="VBoxContainer" unique_id=2048669092]
[node name="AnnounceTitle" type="Label" parent="AnnounceContainer" unique_id=988493009]
unique_name_in_owner = true
layout_mode = 2
text = "New Quota"
label_settings = SubResource("LabelSettings_vbart")
horizontal_alignment = 1
[node name="AnnounceTexture" type="TextureRect" parent="VBoxContainer" unique_id=1523197516]
unique_name_in_owner = true
modulate = Color(0.886275, 0.623529, 0.196078, 1)
layout_mode = 2
mouse_filter = 2
texture = SubResource("GradientTexture2D_mnweq")
expand_mode = 1
stretch_mode = 1
[node name="AnnounceText" type="Label" parent="VBoxContainer" unique_id=147253395]
unique_name_in_owner = true
layout_mode = 2
text = "Decontaminate 50 unit in 10 days"
text = "NEW_TOOL"
label_settings = ExtResource("3_7nrno")
horizontal_alignment = 1
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=357490739]
[node name="AnnounceText" type="Label" parent="AnnounceContainer" unique_id=1537255164]
unique_name_in_owner = true
libraries/ = SubResource("AnimationLibrary_dvva5")
layout_mode = 2
text = "Pelle"
label_settings = SubResource("LabelSettings_6qyp1")
horizontal_alignment = 1
[node name="ObjectVisualiser" type="TextureRect" parent="AnnounceContainer" unique_id=1529068201]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
mouse_filter = 0
texture = SubResource("ViewportTexture_aao0q")
stretch_mode = 5
script = ExtResource("6_aao0q")
[node name="SubViewport" type="SubViewport" parent="AnnounceContainer/ObjectVisualiser" unique_id=403959884]
own_world_3d = true
transparent_bg = true
size = Vector2i(300, 300)
[node name="AnnouceObject" type="Node3D" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=986671004]
unique_name_in_owner = true
transform = Transform3D(0.8788874, 0.4667406, 0.09817754, -0.45027143, 0.74415994, 0.4933552, 0.15722138, -0.47777224, 0.8642758, 0, 0, 0)
[node name="Camera3D" type="Camera3D" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=1788331074]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1)
keep_aspect = 0
current = true
fov = 20.0
[node name="WorldEnvironment" type="WorldEnvironment" parent="AnnounceContainer/ObjectVisualiser/SubViewport" unique_id=296795988]
environment = ExtResource("4_yjj5u")
[node name="OkButton" type="Button" parent="AnnounceContainer" unique_id=56162930]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 4
theme = ExtResource("1_0ssee")
text = "OK"
icon = ExtResource("9_b6hac")
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=878057487]
unique_name_in_owner = true
libraries/ = SubResource("AnimationLibrary_6qyp1")

View File

@@ -0,0 +1,13 @@
@abstract
extends Resource
class_name AnnouceObject
@abstract func get_3d_object() -> Node3D
@abstract func get_title() -> String
@abstract func get_text() -> String
@abstract func get_card_info() -> CardInfo
@abstract func _on_dismiss()

View File

@@ -0,0 +1 @@
uid://yprrjw1yrcx6

View File

@@ -0,0 +1,30 @@
@tool
extends AnnouceObject
class_name AnnounceTool
const ITEM_3D_SCENE = preload("res://gui/game/inventory_gui/inventory_item/inventory_item_3d.tscn")
@export var tool_item : Item
func _init(_tool_item : Item):
tool_item = _tool_item
func get_3d_object() -> Node3D:
var new_object = ITEM_3D_SCENE.instantiate() as InventoryItem3D
new_object.item = tool_item
new_object.state = InventoryItem3D.State.TOOL
return new_object
func get_title() -> String:
return "NEW_TOOL"
func get_text() -> String:
return tool_item.get_item_name()
func get_card_info() -> CardInfo:
return tool_item.card_info()
func _on_dismiss():
pass
# GameInfo.game_data.player_data.tool_discovered.append(tool_item.get_item_name())

View File

@@ -0,0 +1 @@
uid://cp40tddq85p6o

View File

@@ -1,12 +1,89 @@
extends Control
@tool
extends CanvasLayer
class_name Announce
const DEFAULT_OBJECT_ACCELERATION = Vector2(3,0)
@export var announce_object : AnnouceObject = null : set = set_announce_object
@export_tool_button("Update", "Callable") var update_action = set_announce_object
var announce_objects : Array[AnnouceObject] = []
var object_acceleration := Vector2(0,0)
var rotating := false
var prev_mouse_pos : Vector2
var next_mouse_pos : Vector2
const YELLOW_COLOR = Color("e29f32")
const RED_COLOR = Color("f20058")
func announce(title : String, text : String, band_color : Color = YELLOW_COLOR):
%AnnounceTitle.text = title
%AnnounceText.text = text
%AnnounceTexture.modulate = band_color
%AnimationPlayer.play("pass")
AudioManager.play_sfx("Announce")
func _ready():
set_announce_object()
%OkButton.button_down.connect(_on_ok_button_down)
hide()
GameInfo.game_data.player_data.inventory.tool_added.connect(
func (i : Item):
announce_objects.append(AnnounceTool.new(i))
)
func _process(delta):
if announce_object == null and not visible and len(announce_objects) > 0:
announce_object = announce_objects.pop_front()
update_rotation(delta)
func update_rotation(delta):
if visible:
next_mouse_pos = get_viewport().get_mouse_position()
if Input.is_action_just_pressed("action"):
rotating = true
prev_mouse_pos = get_viewport().get_mouse_position()
if Input.is_action_just_released("action"):
rotating = false
object_acceleration = Vector2(
float(next_mouse_pos.x - prev_mouse_pos.x),
float(next_mouse_pos.y - prev_mouse_pos.y)
)
var object_rotation = object_acceleration
if rotating:
object_rotation = Vector2(
float(next_mouse_pos.x - prev_mouse_pos.x),
float(next_mouse_pos.y - prev_mouse_pos.y)
)
prev_mouse_pos = next_mouse_pos
else :
object_acceleration = object_acceleration.lerp(DEFAULT_OBJECT_ACCELERATION, 0.1)
%AnnouceObject.rotate(Vector3.UP, object_rotation.x * delta)
%AnnouceObject.rotate(Vector3.RIGHT, object_rotation.y * delta)
func set_announce_object(object := announce_object):
if is_node_ready() and object:
for children in %AnnouceObject.get_children():
children.queue_free()
%AnnouceObject.add_child(object.get_3d_object())
%AnnouceObject.rotation = Vector3.ZERO
%AnnounceTitle.text = object.get_title()
%AnnounceText.text = object.get_text()
%ObjectVisualiser.info = object.get_card_info()
if not visible:
%AnimationPlayer.play("appear")
AudioManager.play_sfx("Ship_reveal")
elif object == null and visible:
%AnimationPlayer.play_backwards("appear")
announce_object = object
func _on_ok_button_down():
if announce_object:
announce_object._on_dismiss()
announce_object = null

View File

@@ -0,0 +1,14 @@
extends TextureRect
@export var info: CardInfo = null
func _ready():
mouse_entered.connect(
func(): Pointer.inspect(self)
)
mouse_exited.connect(
func(): Pointer.stop_inspect(self)
)
func card_info() -> CardInfo:
return info

View File

@@ -0,0 +1 @@
uid://bqisp5hjs06rj