Dev Beta 1.1

* Ajout d'une météo aléatoire (pluie, brouillard, vent)
* Ajour d'un bouton pour un formulaire de playtest
This commit is contained in:
2026-05-03 17:19:15 +02:00
parent 3a4c62694a
commit e7da19cb15
25 changed files with 394 additions and 121 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://lftiiulpc8kl"
path="res://.godot/imported/rain.png-9298487e51a029fd96f65e149e8bf87c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://stages/terrain/region/assets/textures/rain.png"
dest_files=["res://.godot/imported/rain.png-9298487e51a029fd96f65e149e8bf87c.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

View File

@@ -2,8 +2,10 @@
[ext_resource type="Script" uid="uid://d1mp5sguc0b6u" path="res://stages/terrain/region/scripts/region.gd" id="1_441sk"]
[ext_resource type="Shader" uid="uid://cfj18vc04cgkg" path="res://common/vfx/materials/shaders/blur_vignette.gdshader" id="2_ktnx3"]
[ext_resource type="Script" uid="uid://dgjyhbndd4all" path="res://stages/terrain/region/scripts/post_process/region_meteo.gd" id="2_mlppq"]
[ext_resource type="PackedScene" uid="uid://yk78ubpu5ghq" path="res://gui/game/pass_day/pass_day.tscn" id="3_ktnx3"]
[ext_resource type="Shader" uid="uid://btgk5l0a6ii44" path="res://common/vfx/materials/shaders/screen_fog.gdshader" id="3_qdnee"]
[ext_resource type="Script" uid="uid://cyvfeyg2wynq" path="res://stages/terrain/region/scripts/post_process/meteo.gd" id="3_r4e5h"]
[ext_resource type="Script" uid="uid://bi8fo6yp25su7" path="res://stages/terrain/region/scripts/screen_post_process.gd" id="4_ovqi1"]
[ext_resource type="PackedScene" uid="uid://12nak7amd1uq" path="res://gui/game/game_gui.tscn" id="4_qdnee"]
[ext_resource type="Shader" uid="uid://doceegdvj0pp3" path="res://common/vfx/materials/shaders/screen_clouds.gdshader" id="5_2w03p"]
@@ -13,6 +15,38 @@
[ext_resource type="PackedScene" uid="uid://dj7gp3crtg2yt" path="res://entities/camera/camera.tscn" id="8_fwgig"]
[ext_resource type="PackedScene" uid="uid://fnv0qhkh40mv" path="res://gui/game/announce/announce.tscn" id="8_mlppq"]
[ext_resource type="Texture2D" uid="uid://rdrhi3r11ey6" path="res://common/icons/square-rounded.svg" id="10_ktnx3"]
[ext_resource type="Texture2D" uid="uid://lftiiulpc8kl" path="res://stages/terrain/region/assets/textures/rain.png" id="12_6d8m3"]
[ext_resource type="Script" uid="uid://dple0sunrpauc" path="res://stages/terrain/region/scripts/post_process/rain.gd" id="13_fwgig"]
[sub_resource type="Resource" id="Resource_r4e5h"]
script = ExtResource("3_r4e5h")
cloud_value = 0.93
wind_direction = Vector2(-0.9519732, -0.30618128)
wind_force = 0.039
type = 3
[sub_resource type="FastNoiseLite" id="FastNoiseLite_2w03p"]
noise_type = 2
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_6d8m3"]
noise = SubResource("FastNoiseLite_2w03p")
seamless = true
[sub_resource type="ShaderMaterial" id="ShaderMaterial_6d8m3"]
shader = ExtResource("5_2w03p")
shader_parameter/camera_position = Vector2(0, 0)
shader_parameter/camera_zoom = Vector2(1, 1)
shader_parameter/viewport_size = Vector2(1920, 1080)
shader_parameter/noise_texture = SubResource("NoiseTexture2D_6d8m3")
shader_parameter/cloud_speed = 0.11699999999999999
shader_parameter/cloud_delay = 1.0
shader_parameter/cloud_dir = Vector2(-0.9519732, -0.30618128)
shader_parameter/cloud_color = Color(0.59428054, 0.8206175, 0.899937, 1)
shader_parameter/cloud_alpha = 1.0
shader_parameter/cloud_size = 80.0000037525
shader_parameter/cloud_distorsion_speed = 0.4150000197125
shader_parameter/density = 0.4910000233225
shader_parameter/blur_amount = 0.0400000019
[sub_resource type="FastNoiseLite" id="FastNoiseLite_ovqi1"]
noise_type = 2
@@ -37,35 +71,12 @@ shader_parameter/camera_offset_speed = 0.0
shader_parameter/noise_texture_1 = SubResource("NoiseTexture2D_2w03p")
shader_parameter/noise_texture_2 = SubResource("NoiseTexture2D_fwgig")
shader_parameter/noise_blend = 0.50000002375
shader_parameter/noise_speed_1 = 0.10000000475
shader_parameter/noise_speed_1 = 0.039
shader_parameter/noise_speed_2 = 0.010000000475
shader_parameter/noise_dir_1 = Vector2(1, 1)
shader_parameter/noise_dir_1 = Vector2(-0.9519732, -0.30618128)
shader_parameter/noise_dir_2 = Vector2(1, -1)
shader_parameter/smoke_color = Color(1, 1, 1, 1)
shader_parameter/density = 0.070000003325
[sub_resource type="FastNoiseLite" id="FastNoiseLite_2w03p"]
noise_type = 2
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_6d8m3"]
noise = SubResource("FastNoiseLite_2w03p")
seamless = true
[sub_resource type="ShaderMaterial" id="ShaderMaterial_6d8m3"]
shader = ExtResource("5_2w03p")
shader_parameter/camera_position = Vector2(0, 0)
shader_parameter/camera_zoom = Vector2(1, 1)
shader_parameter/viewport_size = Vector2(1920, 1080)
shader_parameter/noise_texture = SubResource("NoiseTexture2D_6d8m3")
shader_parameter/cloud_speed = 0.10000000475
shader_parameter/cloud_delay = 1.0
shader_parameter/noise_dir = Vector2(1, 1)
shader_parameter/cloud_color = Color(0.59428054, 0.8206175, 0.899937, 1)
shader_parameter/cloud_alpha = 1.0
shader_parameter/cloud_size = 87.48400410799
shader_parameter/cloud_distorsion_speed = 0.10000000475
shader_parameter/density = 0.3610000171475
shader_parameter/blur_amount = 0.0400000019
shader_parameter/density = 0.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qdnee"]
shader = ExtResource("2_ktnx3")
@@ -74,6 +85,19 @@ shader_parameter/blur_amount = 1.0000000475
shader_parameter/blur_inner = 0.4950000235125
shader_parameter/blur_outer = 0.7810000370975
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_fwgig"]
particles_animation = true
particles_anim_h_frames = 8
particles_anim_v_frames = 1
particles_anim_loop = false
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_r4e5h"]
emission_shape = 3
emission_box_extents = Vector3(2000, 2000, 1)
gravity = Vector3(0, 0, 0)
anim_speed_min = 1.0
anim_speed_max = 1.0
[sub_resource type="Curve" id="Curve_qdnee"]
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.4883721, 1), 0.037164874, 0.037164874, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 3
@@ -81,26 +105,22 @@ point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_ovqi1"]
curve = SubResource("Curve_qdnee")
[sub_resource type="Curve" id="Curve_2w03p"]
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="Curve" id="Curve_6d8m3"]
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.25581396, 1), 0.0, 0.0, 0, 0, Vector2(0.5023256, 0), 0.0, 0.0, 0, 0, Vector2(0.75348836, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 5
[sub_resource type="CurveXYZTexture" id="CurveXYZTexture_fwgig"]
curve_x = SubResource("Curve_2w03p")
curve_y = SubResource("Curve_6d8m3")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_mlppq"]
emission_shape = 3
emission_box_extents = Vector3(1000, 1000, 1)
emission_box_extents = Vector3(2000, 2000, 1)
direction = Vector3(0.9519732, 0.30618128, 0)
spread = 10.0
initial_velocity_min = 100.0
initial_velocity_max = 200.0
directional_velocity_min = -100.000015
directional_velocity_max = 99.999985
initial_velocity_min = 35.1
initial_velocity_max = 39.0
directional_velocity_min = -1.0000161
directional_velocity_max = 0.9999839
directional_velocity_curve = SubResource("CurveXYZTexture_fwgig")
gravity = Vector3(0, 0, 0)
scale_min = 0.049999997
@@ -112,21 +132,18 @@ alpha_curve = SubResource("CurveTexture_ovqi1")
script = ExtResource("1_441sk")
entity_container = NodePath("Entities")
[node name="RegionMeteo" type="Node" parent="." unique_id=2027305269 node_paths=PackedStringArray("wind_particles", "rain_particles", "fog", "clouds", "region")]
script = ExtResource("2_mlppq")
meteo = SubResource("Resource_r4e5h")
wind_particles = NodePath("../Camera/WindParticles")
rain_particles = NodePath("../Entities/Rain")
fog = NodePath("../PostProcess/Fog")
clouds = NodePath("../PostProcess/Clouds")
region = NodePath("..")
[node name="PostProcess" type="CanvasLayer" parent="." unique_id=729471745]
layer = 0
[node name="Fog" type="ColorRect" parent="PostProcess" unique_id=1487713892 node_paths=PackedStringArray("camera")]
visible = false
material = SubResource("ShaderMaterial_mlppq")
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("4_ovqi1")
camera = NodePath("../../Camera")
[node name="Clouds" type="ColorRect" parent="PostProcess" unique_id=1053740484 node_paths=PackedStringArray("camera", "region")]
material = SubResource("ShaderMaterial_6d8m3")
anchors_preset = 15
@@ -139,6 +156,17 @@ script = ExtResource("5_6d8m3")
camera = NodePath("../../Camera")
region = NodePath("../..")
[node name="Fog" type="ColorRect" parent="PostProcess" unique_id=1487713892 node_paths=PackedStringArray("camera")]
material = SubResource("ShaderMaterial_mlppq")
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("4_ovqi1")
camera = NodePath("../../Camera")
[node name="Vignette" type="ColorRect" parent="PostProcess" unique_id=2057271511]
material = SubResource("ShaderMaterial_qdnee")
anchors_preset = 15
@@ -150,7 +178,6 @@ mouse_filter = 2
[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
@@ -169,14 +196,27 @@ y_sort_enabled = true
unique_name_in_owner = true
position = Vector2(-405, -151)
[node name="Rain" type="GPUParticles2D" parent="Entities" unique_id=968834731 node_paths=PackedStringArray("camera")]
visible = false
material = SubResource("CanvasItemMaterial_fwgig")
position = Vector2(-67, -194)
amount = 1
texture = ExtResource("12_6d8m3")
lifetime = 0.5
trail_sections = 16
process_material = SubResource("ParticleProcessMaterial_r4e5h")
script = ExtResource("13_fwgig")
camera = NodePath("../../Camera")
[node name="Camera" parent="." unique_id=1399042986 node_paths=PackedStringArray("following") instance=ExtResource("8_fwgig")]
following = NodePath("../Entities/Player")
[node name="WindParticles" type="GPUParticles2D" parent="Camera" unique_id=1897174931]
position = Vector2(2, 7)
amount = 100
texture = ExtResource("10_ktnx3")
lifetime = 8.0
trail_enabled = true
trail_lifetime = 0.1
trail_lifetime = 0.2
trail_sections = 16
process_material = SubResource("ParticleProcessMaterial_mlppq")

View File

@@ -3,7 +3,7 @@ extends ColorRect
@export var camera : Camera
@export var region : Region
const PASSING_DAY_CLOUD_SPEED = 5
const PASSING_DAY_CLOUD_SPEED = 1
const CLOUD_DELAY_ACC_LERP = 0.2
var in_passing_day := false
@@ -25,12 +25,12 @@ func _ready():
func _process(_delta: float) -> void:
if is_node_ready():
if region and region.data.in_passing_day_animation:
cloud_delay_acc = lerp(cloud_delay_acc,1.,CLOUD_DELAY_ACC_LERP)
else:
cloud_delay_acc = lerp(cloud_delay_acc,0.,CLOUD_DELAY_ACC_LERP)
# if region and region.data.in_passing_day_animation:
# cloud_delay_acc = lerp(cloud_delay_acc,1.,CLOUD_DELAY_ACC_LERP)
# else:
# cloud_delay_acc = lerp(cloud_delay_acc,0.,CLOUD_DELAY_ACC_LERP)
cloud_delay += cloud_delay_acc * PASSING_DAY_CLOUD_SPEED
# cloud_delay += cloud_delay_acc * PASSING_DAY_CLOUD_SPEED
if visible:
if camera:

View File

@@ -0,0 +1,64 @@
@tool
extends Resource
class_name Meteo
enum Type {RAINY,FOGGY,CALM,WINDY}
const ALL_TYPES = [Type.CALM,Type.RAINY,Type.FOGGY,Type.WINDY]
var rng : RandomNumberGenerator
@export var rain_value : float = 0.
@export var cloud_value : float = 0.
@export var wind_direction : Vector2 = Vector2(1,0)
@export var wind_force : float = 0.
@export var fog_value : float = 0.
@export var ambiance_name : String = "Exterior"
@export var type : Type :
set(v):
type = v
generate()
func _init(meteo_seed : int = randi()):
rng = RandomNumberGenerator.new()
rng.seed = meteo_seed
type = ALL_TYPES[rng.randi_range(0, len(ALL_TYPES) - 1)]
func generate():
wind_direction = Vector2(1,0).rotated(rng.randf_range(PI, -PI))
match type:
Type.CALM:
generate_calm()
Type.RAINY:
generate_rainy()
Type.FOGGY:
generate_foggy()
Type.WINDY:
generate_windy()
func generate_calm() -> void:
print("generate_calm")
cloud_value = rng.randf_range(0.1,0.4)
wind_force = rng.randf_range(0.,0.2)
func generate_rainy() -> void:
print("generate_rainy")
rain_value = rng.randf_range(0.3,1.)
cloud_value = rng.randf_range(0.5,0.9)
ambiance_name = "ExteriorRaining"
if rng.randi() % 2 == 0:
wind_force = rng.randf_range(0.,0.7)
else:
fog_value = max(0, 0.5)
func generate_foggy() -> void:
print("generate_foggy")
fog_value = rng.randf_range(0.5,1.)
ambiance_name = "ExteriorFoggy"
func generate_windy() -> void:
print("generate_windy")
cloud_value = rng.randf_range(0.2,0.5)
wind_force = rng.randf_range(0.8,1.)

View File

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

View File

@@ -0,0 +1,7 @@
extends GPUParticles2D
@export var camera : Camera
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_d):
global_position = camera.global_position

View File

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

View File

@@ -0,0 +1,46 @@
@tool
extends Node
@export_tool_button("New Meteo", "Callable") var new_meteo_action = func ():
meteo = Meteo.new()
@export_tool_button("Apply Meteo", "Callable") var apply_meteo_action = apply_meteo
@export var meteo: Meteo :
set(v):
meteo = v
if is_node_ready():
apply_meteo()
@export var wind_particles : GPUParticles2D
@export var rain_particles : GPUParticles2D
@export var fog : ColorRect
@export var clouds : ColorRect
@export var region : Region
func _ready():
meteo = Meteo.new(region.data.region_name.hash() + region.data.charges)
region.data.pass_day_proceeded.connect(
func(data : RegionData):
meteo = Meteo.new(data.region_name.hash() + data.charges)
wind_particles.restart()
)
func apply_meteo():
rain_particles.amount = max(1,int(1000 * meteo.rain_value))
rain_particles.visible = meteo.rain_value != 0.
rain_particles.scale.x = -1 if meteo.wind_direction.x > 0 else 1
var wind_particle_material : ParticleProcessMaterial = wind_particles.process_material as ParticleProcessMaterial
wind_particle_material.direction = Vector3(-meteo.wind_direction.x,-meteo.wind_direction.y,0.)
wind_particle_material.initial_velocity_max = 1000 * meteo.wind_force
wind_particle_material.initial_velocity_min = 900 * meteo.wind_force
clouds.material.set_shader_parameter("density", meteo.cloud_value)
clouds.material.set_shader_parameter("cloud_speed", meteo.wind_force * 3)
clouds.material.set_shader_parameter("cloud_dir", meteo.wind_direction)
fog.material.set_shader_parameter("density", meteo.fog_value * 0.3)
fog.material.set_shader_parameter("noise_speed_1", meteo.wind_force)
fog.material.set_shader_parameter("noise_dir_1", meteo.wind_direction)
AudioManager.play_ambiance_alone(meteo.ambiance_name, true, 1.0)

View File

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

View File

@@ -59,28 +59,29 @@ const PLAYER_ROCK_HOLE_RADIUS = 5
var in_passing_day_animation := false
func _init(
parameter : RegionParameter = RegionParameter.new()
parameter : RegionParameter = null
):
charges = parameter.get_charge()
objective = parameter.get_objective()
region_name = parameter.get_region_name()
region_seed = parameter.get_region_seed()
rock_threshold = parameter.get_rock_threshold()
decontamination_threshold = parameter.get_decontamination_threshold()
cristal_threshold = parameter.get_cristal_threshold()
start_decontamination_hole_radius = parameter.get_start_decontamination_zone_radius()
seed_rarity_pool = parameter.get_seed_rarity_pool()
modifiers = parameter.modifiers
if parameter:
charges = parameter.get_charge()
objective = parameter.get_objective()
region_name = parameter.get_region_name()
region_seed = parameter.get_region_seed()
rock_threshold = parameter.get_rock_threshold()
decontamination_threshold = parameter.get_decontamination_threshold()
cristal_threshold = parameter.get_cristal_threshold()
start_decontamination_hole_radius = parameter.get_start_decontamination_zone_radius()
seed_rarity_pool = parameter.get_seed_rarity_pool()
modifiers = parameter.modifiers
player_spawn = get_random_spawn_position()
player_position = player_spawn
player_spawn = get_random_spawn_position()
player_position = player_spawn
objective_disabled = parameter.is_objective_disabled()
objective_disabled = parameter.is_objective_disabled()
rock_tiles_data = TilesDiffData.new()
decontamination_tiles_data = TilesDiffData.new()
rock_tiles_data = TilesDiffData.new()
decontamination_tiles_data = TilesDiffData.new()
edit_map_origin()
edit_map_origin()
func update():
if not in_passing_day_animation and not objective_disabled: