ajout du camion #87

* changements des objectifs, donnent juste des graines, sprite moins gros et objectifs plus nombreux
* changement de la probabilité de mutation
* refactor du code terrain et planet
This commit is contained in:
2025-10-12 19:59:53 +02:00
parent ef392595de
commit d90d4c5df6
52 changed files with 627 additions and 346 deletions

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=13 format=3 uid="uid://d28cp7a21kwou"]
[gd_scene load_steps=15 format=3 uid="uid://d28cp7a21kwou"]
[ext_resource type="PackedScene" uid="uid://12nak7amd1uq" path="res://gui/game/game_gui.tscn" id="1_yy1uy"]
[ext_resource type="PackedScene" uid="uid://csiacsndm62ll" path="res://gui/game/pause/pause.tscn" id="2_bt4fd"]
@@ -8,8 +8,10 @@
[ext_resource type="Script" uid="uid://dedg615xudpoq" path="res://entities/interactables/item_object/script/item_object.gd" id="5_kgrdw"]
[ext_resource type="PackedScene" uid="uid://dt6mptqg80dew" path="res://gui/game/tutorial/tutorial.tscn" id="5_orelw"]
[ext_resource type="Script" uid="uid://dya38x1h1uiyg" path="res://common/inventory/scripts/items/shovel.gd" id="7_fbkgs"]
[ext_resource type="PackedScene" uid="uid://d324mlmgls4fs" path="res://entities/interactables/machines/recharge_station/recharge_station.tscn" id="7_h4bgy"]
[ext_resource type="PackedScene" uid="uid://tsi5j1uxppa4" path="res://stages/terrain/planet/planet.tscn" id="8_t31p7"]
[ext_resource type="PackedScene" uid="uid://cg1visg52i21a" path="res://entities/interactables/truck/ladder/truck_ladder.tscn" id="9_gisiu"]
[ext_resource type="PackedScene" uid="uid://d324mlmgls4fs" path="res://entities/interactables/truck/recharge/truck_recharge.tscn" id="10_cnjsq"]
[ext_resource type="PackedScene" uid="uid://ceplumcunebag" path="res://stages/terrain/truck/truck_interior.tscn" id="13_cnjsq"]
[ext_resource type="PackedScene" uid="uid://dj7gp3crtg2yt" path="res://entities/camera/camera.tscn" id="16_m18ms"]
[sub_resource type="Resource" id="Resource_orelw"]
@@ -48,8 +50,13 @@ script = ExtResource("5_kgrdw")
item = SubResource("Resource_orelw")
metadata/_custom_type_script = "uid://dedg615xudpoq"
[node name="RechargeStation" parent="Entities" instance=ExtResource("7_h4bgy")]
position = Vector2(0, -187)
[node name="TruckLadder" parent="Entities" node_paths=PackedStringArray("truck_interior", "planet_camera") instance=ExtResource("9_gisiu")]
position = Vector2(33, -139)
truck_interior = NodePath("../../TruckInterior")
planet_camera = NodePath("../../Camera")
[node name="TruckRecharge" parent="Entities" instance=ExtResource("10_cnjsq")]
position = Vector2(-36, -154)
[node name="Planet" parent="." node_paths=PackedStringArray("import_entities_from_node") instance=ExtResource("8_t31p7")]
loot_number = Array[int]([1])
@@ -62,6 +69,9 @@ import_entities_from_node = NodePath("../Entities")
position = Vector2(2.22, 0)
following = NodePath("../Entities/Player")
[node name="TruckInterior" parent="." instance=ExtResource("13_cnjsq")]
position = Vector2(-372, -4191)
[connection signal="pause_asked" from="CanvasLayer/RootGui" to="CanvasLayer/Pause" method="_on_root_gui_pause_asked"]
[connection signal="player_updated" from="Entities/Player" to="CanvasLayer/RootGui" method="_on_player_updated"]
[connection signal="upgraded" from="Entities/Player" to="CanvasLayer/RootGui" method="_on_player_upgraded"]

View File

@@ -14,16 +14,14 @@ const DEFAULT_DAY_LIMIT : int = 7
const PLANET_TEXTURE_SCALE : float = 5.0
const OBJECTIVE_MAX_LEVEL : int = 10
const OBJECTIVE_MIN_ANGLE_DIFF = PI/2
const OBJECTIVE_FIRST_DISTANCE = 200
const OBJECTIVE_BETWEEN_DISTANCE = 50
@export_group("Loot")
@export var first_loot_number : int = 3
@export var loot_number : Array[int] = [0,1,2]
@export var loot_item_number : Array[int] = [1,2]
@export_group("Objectives")
@export var objective_first_distance : int = 200
@export var objective_between_distance : int = 200
@export_group("Textures")
@export var background_texture : Texture2D
@export var contamination_material : ShaderMaterial
@@ -34,6 +32,14 @@ var decontamination_surface : float
var garden_score : int
@onready var objective_scene : PackedScene = preload("res://entities/objectives/objective.tscn")
var terrain_size = Vector2.ONE * 1000 :
set(v):
terrain_size = v
if border_limit:
border_limit.queue_free()
border_limit = create_border_limit()
@onready var border_limit : StaticBody2D = create_border_limit()
var planet_data : PlanetData
@@ -43,7 +49,6 @@ var day_limit = DEFAULT_DAY_LIMIT
var days_on_last_quota : int = 0
var last_quota : float = 0
var next_quota : float
var player : Player
func _ready():
planet_data = GameInfo.game_data.current_planet_data if GameInfo.game_data.current_planet_data else PlanetData.new()
@@ -103,18 +108,6 @@ func instantiate_machine(m_type : MachineType, level, machine_position : Vector2
machine.global_position = machine_position
func add_entity(e : Node2D, container : Node2D = entity_container):
if e.get_parent():
e.get_parent().remove_child(e)
if "planet" in e:
e.planet = self
if e is Player:
player = e
container.add_child(e)
func generate_polygon_sprite(order : int = 0) -> Polygon2D:
var sprite = Polygon2D.new()
var size = terrain_size
@@ -156,6 +149,29 @@ func generate_contamination_terrain_sprite() -> Polygon2D:
return sprite
func create_border_limit() -> StaticBody2D:
var static_body = StaticBody2D.new()
var static_body_collision = CollisionPolygon2D.new()
add_child(static_body)
static_body.add_child(static_body_collision)
var size = terrain_size
static_body_collision.polygon = PackedVector2Array([
Vector2(0,0),
Vector2(0, size.y),
Vector2(size.x, size.y),
Vector2(size.x, 0),
Vector2(0,0),
Vector2(-BORDER_WIDTH, -BORDER_WIDTH),
Vector2(size.x + BORDER_WIDTH, -BORDER_WIDTH),
Vector2(size.x + BORDER_WIDTH, size.y + BORDER_WIDTH),
Vector2(- BORDER_WIDTH, size.y + BORDER_WIDTH),
Vector2(-BORDER_WIDTH, -BORDER_WIDTH)
])
return static_body
#endregion
#region ------------------ Usage ------------------
@@ -221,7 +237,7 @@ func pass_day():
func generate_loot(number : int = loot_number.pick_random()):
for i in range(number):
var loot = UndergroundLoot.new(self)
var loot = UndergroundLoot.new()
for j in range(loot_item_number.pick_random()):
loot.loot.append(
Seed.new(GameInfo.game_data.unlocked_plant_types.pick_random())
@@ -249,7 +265,7 @@ func generate_objectives():
last_objective_angle = objective_angle
generate_objective(
objective_first_distance + objective_between_distance * i,
OBJECTIVE_FIRST_DISTANCE + OBJECTIVE_BETWEEN_DISTANCE * i,
objective_angle,
objective_reward,
)

View File

@@ -3,24 +3,28 @@ class_name Terrain
const BORDER_WIDTH = 100
var player : Player
@export var import_entities_from_node : Node2D = null
var terrain_size = Vector2.ONE * 1000 :
set(v):
terrain_size = v
if border_limit:
border_limit.queue_free()
border_limit = create_border_limit()
@onready var border_limit : StaticBody2D = create_border_limit()
@onready var entity_container : Node2D = create_entity_container()
func add_entity(e : Node2D, container : Node2D = entity_container):
if e.get_parent():
e.get_parent().remove_child(e)
if "terrain" in e:
e.terrain = self
if e is Player:
player = e
container.add_child(e)
func remove_entity(e : Node2D, container : Node2D = entity_container):
if e.get_parent() == entity_container:
container.remove_child(e)
func create_entity_container() -> Node2D:
var container = Node2D.new()
container.y_sort_enabled = true
@@ -51,25 +55,3 @@ func drop_item(item: Item, item_position : Vector2, random_displacement_factor =
return item_object
func create_border_limit() -> StaticBody2D:
var static_body = StaticBody2D.new()
var static_body_collision = CollisionPolygon2D.new()
add_child(static_body)
static_body.add_child(static_body_collision)
var size = terrain_size
static_body_collision.polygon = PackedVector2Array([
Vector2(0,0),
Vector2(0, size.y),
Vector2(size.x, size.y),
Vector2(size.x, 0),
Vector2(0,0),
Vector2(-BORDER_WIDTH, -BORDER_WIDTH),
Vector2(size.x + BORDER_WIDTH, -BORDER_WIDTH),
Vector2(size.x + BORDER_WIDTH, size.y + BORDER_WIDTH),
Vector2(- BORDER_WIDTH, size.y + BORDER_WIDTH),
Vector2(-BORDER_WIDTH, -BORDER_WIDTH)
])
return static_body

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -0,0 +1,6 @@
extends Node2D
class_name TruckEntrance
var terrain : Terrain
var planet : Planet :
get(): return terrain if terrain is Planet else null

View File

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

View File

@@ -0,0 +1,10 @@
extends Terrain
class_name TruckInterior
signal player_exited(player : Player)
@onready var spawn_position : Node2D = %SpawnPosition
@onready var camera : Camera = %Camera
func _on_exit_interacted(p: Player):
player_exited.emit(p)

View File

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

View File

@@ -0,0 +1,62 @@
[gd_scene load_steps=7 format=3 uid="uid://ceplumcunebag"]
[ext_resource type="Texture2D" uid="uid://d2p7h0aga85tn" path="res://stages/terrain/truck/assets/sprite/truck_interior.png" id="1_5c5ey"]
[ext_resource type="Script" uid="uid://d0gmkwebxdptk" path="res://stages/terrain/truck/scripts/truck_interior.gd" id="1_fk6sc"]
[ext_resource type="Script" uid="uid://dyprcd68fjstf" path="res://entities/interactables/scripts/interactable.gd" id="3_fk6sc"]
[ext_resource type="Texture2D" uid="uid://dex283rx00fjb" path="res://common/icons/logout.svg" id="3_v18jm"]
[ext_resource type="Script" uid="uid://d1nsr56bh1a1y" path="res://entities/camera/scripts/camera.gd" id="4_5di8w"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_wi5be"]
radius = 69.76956
height = 376.0
[node name="TruckInterior" type="Node2D"]
position = Vector2(-40, -469)
script = ExtResource("1_fk6sc")
metadata/_custom_type_script = "uid://dfl1ijmbmw57r"
[node name="Sprite" type="Sprite2D" parent="."]
modulate = Color(0.67495143, 0.69801295, 0.68495274, 1)
position = Vector2(292, 376)
scale = Vector2(0.5, 0.5)
texture = ExtResource("1_5c5ey")
[node name="StaticBody2D" type="StaticBody2D" parent="."]
scale = Vector2(0.5, 0.5)
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="StaticBody2D"]
position = Vector2(112.00001, 670)
scale = Vector2(0.8064369, 0.8064369)
polygon = PackedVector2Array(141.36256, -138.8825, 1616.9894, -111.60202, 1656.67, 461.2884, 389.36707, 466.24847, 386.88702, 545.6099, -173.60316, 533.2097, -141.36258, -57.041016, -2.480053, -89.28162, 109.12198, -106.64194, 131, -327, -487, -326, -465, 841, 2150.1992, 815.9348, 2110.5183, -825.855, -521, -732, -482, -327, 133, -331)
[node name="SpawnPosition" type="Node2D" parent="."]
unique_name_in_owner = true
position = Vector2(52, 473.00003)
scale = Vector2(0.5539248, 0.5539248)
[node name="Exit" type="Area2D" parent="."]
position = Vector2(47, 497.00003)
scale = Vector2(0.5539248, 0.5539248)
script = ExtResource("3_fk6sc")
default_interact_text = "Exit the truck"
default_info_title = "Exit"
default_info_desc = "A good old ladder."
metadata/_custom_type_script = "uid://dyprcd68fjstf"
[node name="Bolt" type="Sprite2D" parent="Exit"]
position = Vector2(10.831797, -16.24775)
scale = Vector2(1.8052993, 1.8052993)
texture = ExtResource("3_v18jm")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Exit"]
position = Vector2(9.026497, 81.2384)
shape = SubResource("CapsuleShape2D_wi5be")
[node name="Camera" type="Camera2D" parent="."]
unique_name_in_owner = true
position = Vector2(316, 340)
zoom = Vector2(1.18, 1.18)
script = ExtResource("4_5di8w")
metadata/_custom_type_script = "uid://d1nsr56bh1a1y"
[connection signal="interacted" from="Exit" to="." method="_on_exit_interacted"]