diff --git a/common/game_data/scripts/game_data.gd b/common/game_data/scripts/game_data.gd
index 74b4dab..5e66410 100644
--- a/common/game_data/scripts/game_data.gd
+++ b/common/game_data/scripts/game_data.gd
@@ -1,5 +1,11 @@
extends Resource
class_name GameData
-@export var currentTerrainData : TerrainData
+@export var current_terrain_data : TerrainData
+@export var unlocked_plant_types_path : Array[PlantType] = [
+ preload("res://entities/plants/resources/plant_types/champ.tres"),
+ preload("res://entities/plants/resources/plant_types/chardi.tres"),
+ preload("res://entities/plants/resources/plant_types/maias.tres"),
+ preload("res://entities/plants/resources/plant_types/pili.tres"),
+]
\ No newline at end of file
diff --git a/common/game_data/scripts/terrain_data.gd b/common/game_data/scripts/terrain_data.gd
index 7a4b866..e4ef364 100644
--- a/common/game_data/scripts/terrain_data.gd
+++ b/common/game_data/scripts/terrain_data.gd
@@ -1,24 +1,31 @@
extends Resource
class_name TerrainData
-const TERRAIN_IMAGE_GAME_FACTOR = 40
-const DEFAULT_CONTAMINATION_CENTRAL_ZONE_MAX_SIZE = 300
-const DEFAULT_CONTAMINATION_CENTRAL_ZONE_MIN_SIZE = 50
+const TERRAIN_IMAGE_GAME_FACTOR = 40.
+const DEFAULT_CONTAMINATION_CENTRAL_ZONE_MAX_SIZE = 400.
+const DEFAULT_CONTAMINATION_CENTRAL_ZONE_MIN_SIZE = 100.
+const DEFAULT_TERRAIN_SIZE = Vector2(2000,2000)
-@export var terrainSize : Vector2 = Vector2(1000,1000)
+@export var terrain_size : Vector2
+
+func _init(size : Vector2 = DEFAULT_TERRAIN_SIZE):
+ terrain_size = size
+ generate_default_contamination()
+
+#region ------------------ Contamination ------------------
@export var contamination : Image = null
func generate_default_contamination(
- central_zone_max_size : int = DEFAULT_CONTAMINATION_CENTRAL_ZONE_MAX_SIZE,
- central_zone_min_size : int = DEFAULT_CONTAMINATION_CENTRAL_ZONE_MIN_SIZE,
+ central_zone_max_size : float = DEFAULT_CONTAMINATION_CENTRAL_ZONE_MAX_SIZE,
+ central_zone_min_size : float = DEFAULT_CONTAMINATION_CENTRAL_ZONE_MIN_SIZE,
):
var noise: Noise = FastNoiseLite.new()
noise.seed = randi()
noise.noise_type = FastNoiseLite.TYPE_CELLULAR
noise.frequency = 0.005 * TERRAIN_IMAGE_GAME_FACTOR
- var imageSize = terrainSize / TERRAIN_IMAGE_GAME_FACTOR;
+ var imageSize = terrain_size / TERRAIN_IMAGE_GAME_FACTOR;
var noise_image = noise.get_image(
imageSize.x,
@@ -68,19 +75,42 @@ func is_in_image(pixel_point : Vector2, image : Image):
and pixel_point.y < image.get_height())
func get_contamination(point : Vector2) -> float:
- var pixel_point : Vector2 = get_pixel_point(point)
+ var pixel_point : Vector2i = get_pixel_point(point)
if (is_in_image(pixel_point, contamination)):
return contamination.get_pixel(
- int(round(pixel_point.x)),
- int(round(pixel_point.y))
+ pixel_point.x,
+ pixel_point.y
).r
return 0
func get_decontamination_coverage() -> float:
return ImageTools.get_color_coverage(contamination)
-func get_pixel_point(point : Vector2) -> Vector2:
- return (
+func get_decontamination_surface() -> float:
+ return ImageTools.get_color_pixel_count(contamination)/TERRAIN_IMAGE_GAME_FACTOR * 10
+
+func get_pixel_point(point : Vector2) -> Vector2i:
+ return Vector2i(
Vector2(point) / float(TERRAIN_IMAGE_GAME_FACTOR)
- - Vector2.ONE / 2
)
+#endregion
+
+#region ------------------ Objectives ------------------
+func generate_objective_rewards(level = 1, amount = 1) -> Array[ObjectiveReward]:
+ var possible_objective_rewards_path : Array[ObjectiveReward] = [
+ IncreaseDayLimitReward.new(randi_range(level + 1, level + 3)),
+ LootItemReward.new(load("res://common/inventory/resources/items/compost.tres")),
+ UpgradePlayerMaxEnergyReward.new(),
+ ]
+
+ var objectives_reward : Array[ObjectiveReward] = []
+
+ var i = 0
+ while i < amount and len(possible_objective_rewards_path) > 0:
+ var r = possible_objective_rewards_path.pick_random()
+ possible_objective_rewards_path.erase(r)
+ objectives_reward.append(r)
+ i += 1
+
+ return objectives_reward
+
diff --git a/common/game_info/game_info.gd b/common/game_info/game_info.gd
new file mode 100644
index 0000000..8126840
--- /dev/null
+++ b/common/game_info/game_info.gd
@@ -0,0 +1,7 @@
+extends Node
+
+var game_data : GameData
+
+func _init():
+ if not game_data:
+ game_data = GameData.new()
diff --git a/common/game_info/game_info.gd.uid b/common/game_info/game_info.gd.uid
new file mode 100644
index 0000000..cda682c
--- /dev/null
+++ b/common/game_info/game_info.gd.uid
@@ -0,0 +1 @@
+uid://dcamb3xjyfqm1
diff --git a/gui/game/assets/icons/bolt.svg b/common/icons/bolt.svg
similarity index 100%
rename from gui/game/assets/icons/bolt.svg
rename to common/icons/bolt.svg
diff --git a/gui/game/assets/icons/bolt.svg.import b/common/icons/bolt.svg.import
similarity index 73%
rename from gui/game/assets/icons/bolt.svg.import
rename to common/icons/bolt.svg.import
index cb66393..bb83d2e 100644
--- a/gui/game/assets/icons/bolt.svg.import
+++ b/common/icons/bolt.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dcgnamu7sb3ov"
-path="res://.godot/imported/bolt.svg-71cbe0c7c38f15f305dc23930d585037.ctex"
+path="res://.godot/imported/bolt.svg-a559d5e701996c7d105fc68102331434.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://gui/game/assets/icons/bolt.svg"
-dest_files=["res://.godot/imported/bolt.svg-71cbe0c7c38f15f305dc23930d585037.ctex"]
+source_file="res://common/icons/bolt.svg"
+dest_files=["res://.godot/imported/bolt.svg-a559d5e701996c7d105fc68102331434.ctex"]
[params]
@@ -32,6 +32,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/common/icons/hourglass-empty.svg b/common/icons/hourglass-empty.svg
new file mode 100644
index 0000000..59f2585
--- /dev/null
+++ b/common/icons/hourglass-empty.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/icons/hourglass-empty.svg.import b/common/icons/hourglass-empty.svg.import
new file mode 100644
index 0000000..afe680e
--- /dev/null
+++ b/common/icons/hourglass-empty.svg.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cxkmn71f8d2hy"
+path="res://.godot/imported/hourglass-empty.svg-e7568d697204ad5aa1416ea495c59e73.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://common/icons/hourglass-empty.svg"
+dest_files=["res://.godot/imported/hourglass-empty.svg-e7568d697204ad5aa1416ea495c59e73.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+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/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
+svg/scale=2.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/gui/pointer/assets/icons/left_click.svg b/common/icons/left_click.svg
similarity index 100%
rename from gui/pointer/assets/icons/left_click.svg
rename to common/icons/left_click.svg
diff --git a/gui/pointer/assets/icons/left_click.svg.import b/common/icons/left_click.svg.import
similarity index 72%
rename from gui/pointer/assets/icons/left_click.svg.import
rename to common/icons/left_click.svg.import
index 2963be5..c282cf8 100644
--- a/gui/pointer/assets/icons/left_click.svg.import
+++ b/common/icons/left_click.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://djb52fosgmv4j"
-path="res://.godot/imported/left_click.svg-163ab642e0d1ce655b5b40384b3f1392.ctex"
+path="res://.godot/imported/left_click.svg-f515b89b9c254e1eacbc2bef4d187a50.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://gui/pointer/assets/icons/left_click.svg"
-dest_files=["res://.godot/imported/left_click.svg-163ab642e0d1ce655b5b40384b3f1392.ctex"]
+source_file="res://common/icons/left_click.svg"
+dest_files=["res://.godot/imported/left_click.svg-f515b89b9c254e1eacbc2bef4d187a50.ctex"]
[params]
@@ -32,6 +32,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/gui/game/pause/assets/icons/logout.svg b/common/icons/logout.svg
similarity index 100%
rename from gui/game/pause/assets/icons/logout.svg
rename to common/icons/logout.svg
diff --git a/gui/game/pause/assets/icons/logout.svg.import b/common/icons/logout.svg.import
similarity index 72%
rename from gui/game/pause/assets/icons/logout.svg.import
rename to common/icons/logout.svg.import
index f40d0a8..43f19a5 100644
--- a/gui/game/pause/assets/icons/logout.svg.import
+++ b/common/icons/logout.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dex283rx00fjb"
-path="res://.godot/imported/logout.svg-adb7b7ff1fadfa9220dcf694870580b9.ctex"
+path="res://.godot/imported/logout.svg-15891d2f0d875a13ef182339fdbc6039.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://gui/game/pause/assets/icons/logout.svg"
-dest_files=["res://.godot/imported/logout.svg-adb7b7ff1fadfa9220dcf694870580b9.ctex"]
+source_file="res://common/icons/logout.svg"
+dest_files=["res://.godot/imported/logout.svg-15891d2f0d875a13ef182339fdbc6039.ctex"]
[params]
@@ -32,6 +32,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/common/inventory/assets/icons/package.svg b/common/icons/package.svg
similarity index 100%
rename from common/inventory/assets/icons/package.svg
rename to common/icons/package.svg
diff --git a/common/inventory/assets/icons/package.svg.import b/common/icons/package.svg.import
similarity index 72%
rename from common/inventory/assets/icons/package.svg.import
rename to common/icons/package.svg.import
index 832e572..297a1d7 100644
--- a/common/inventory/assets/icons/package.svg.import
+++ b/common/icons/package.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://0xg54agef5gh"
-path="res://.godot/imported/package.svg-a9602fd424cfb199cd9405d02663e7df.ctex"
+path="res://.godot/imported/package.svg-0d0e7de2f6c04b754487a1f6252ee2a1.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://common/inventory/assets/icons/package.svg"
-dest_files=["res://.godot/imported/package.svg-a9602fd424cfb199cd9405d02663e7df.ctex"]
+source_file="res://common/icons/package.svg"
+dest_files=["res://.godot/imported/package.svg-0d0e7de2f6c04b754487a1f6252ee2a1.ctex"]
[params]
@@ -32,6 +32,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/gui/game/pause/assets/icons/player-pause.svg b/common/icons/player-pause.svg
similarity index 100%
rename from gui/game/pause/assets/icons/player-pause.svg
rename to common/icons/player-pause.svg
diff --git a/gui/game/pause/assets/icons/player-pause.svg.import b/common/icons/player-pause.svg.import
similarity index 71%
rename from gui/game/pause/assets/icons/player-pause.svg.import
rename to common/icons/player-pause.svg.import
index 9472fc9..e8af822 100644
--- a/gui/game/pause/assets/icons/player-pause.svg.import
+++ b/common/icons/player-pause.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b5cuxgisrsfgt"
-path="res://.godot/imported/player-pause.svg-cb8236066c72679196b716c41226079f.ctex"
+path="res://.godot/imported/player-pause.svg-8c388309845b649483858ace29fdf914.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://gui/game/pause/assets/icons/player-pause.svg"
-dest_files=["res://.godot/imported/player-pause.svg-cb8236066c72679196b716c41226079f.ctex"]
+source_file="res://common/icons/player-pause.svg"
+dest_files=["res://.godot/imported/player-pause.svg-8c388309845b649483858ace29fdf914.ctex"]
[params]
@@ -32,6 +32,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/gui/game/pause/assets/icons/player-play.svg b/common/icons/player-play.svg
similarity index 100%
rename from gui/game/pause/assets/icons/player-play.svg
rename to common/icons/player-play.svg
diff --git a/gui/game/pause/assets/icons/player-play.svg.import b/common/icons/player-play.svg.import
similarity index 71%
rename from gui/game/pause/assets/icons/player-play.svg.import
rename to common/icons/player-play.svg.import
index 970299a..318f9dc 100644
--- a/gui/game/pause/assets/icons/player-play.svg.import
+++ b/common/icons/player-play.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://vmsn54d1ptih"
-path="res://.godot/imported/player-play.svg-25043c6a392478c90f845ddfdfb35372.ctex"
+path="res://.godot/imported/player-play.svg-230ff7b9a6c52930be11873163a0e7de.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://gui/game/pause/assets/icons/player-play.svg"
-dest_files=["res://.godot/imported/player-play.svg-25043c6a392478c90f845ddfdfb35372.ctex"]
+source_file="res://common/icons/player-play.svg"
+dest_files=["res://.godot/imported/player-play.svg-230ff7b9a6c52930be11873163a0e7de.ctex"]
[params]
@@ -32,6 +32,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/gui/pointer/assets/icons/right_click.svg b/common/icons/right_click.svg
similarity index 100%
rename from gui/pointer/assets/icons/right_click.svg
rename to common/icons/right_click.svg
diff --git a/gui/pointer/assets/icons/right_click.svg.import b/common/icons/right_click.svg.import
similarity index 71%
rename from gui/pointer/assets/icons/right_click.svg.import
rename to common/icons/right_click.svg.import
index 2c0c48e..13508f7 100644
--- a/gui/pointer/assets/icons/right_click.svg.import
+++ b/common/icons/right_click.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://y3083o1fhgn0"
-path="res://.godot/imported/right_click.svg-89ed358ede3244ca5dababdd0f091dae.ctex"
+path="res://.godot/imported/right_click.svg-1adb207c34017f29e28afdeafbacdd7f.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://gui/pointer/assets/icons/right_click.svg"
-dest_files=["res://.godot/imported/right_click.svg-89ed358ede3244ca5dababdd0f091dae.ctex"]
+source_file="res://common/icons/right_click.svg"
+dest_files=["res://.godot/imported/right_click.svg-1adb207c34017f29e28afdeafbacdd7f.ctex"]
[params]
@@ -32,6 +32,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/gui/game/pause/assets/icons/rotate.svg b/common/icons/rotate.svg
similarity index 100%
rename from gui/game/pause/assets/icons/rotate.svg
rename to common/icons/rotate.svg
diff --git a/gui/game/pause/assets/icons/rotate.svg.import b/common/icons/rotate.svg.import
similarity index 72%
rename from gui/game/pause/assets/icons/rotate.svg.import
rename to common/icons/rotate.svg.import
index 536f717..6c7e24a 100644
--- a/gui/game/pause/assets/icons/rotate.svg.import
+++ b/common/icons/rotate.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bewr0t1wi8pff"
-path="res://.godot/imported/rotate.svg-af6a45b9d3420200a268c1390881e44f.ctex"
+path="res://.godot/imported/rotate.svg-8b3d996ae2422076b9f55d10f0455aa8.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://gui/game/pause/assets/icons/rotate.svg"
-dest_files=["res://.godot/imported/rotate.svg-af6a45b9d3420200a268c1390881e44f.ctex"]
+source_file="res://common/icons/rotate.svg"
+dest_files=["res://.godot/imported/rotate.svg-8b3d996ae2422076b9f55d10f0455aa8.ctex"]
[params]
@@ -32,6 +32,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/common/inventory/assets/icons/scuba-diving-tank.svg b/common/icons/scuba-diving-tank.svg
similarity index 100%
rename from common/inventory/assets/icons/scuba-diving-tank.svg
rename to common/icons/scuba-diving-tank.svg
diff --git a/common/inventory/assets/icons/scuba-diving-tank.svg.import b/common/icons/scuba-diving-tank.svg.import
similarity index 71%
rename from common/inventory/assets/icons/scuba-diving-tank.svg.import
rename to common/icons/scuba-diving-tank.svg.import
index b6f8eef..443c5a9 100644
--- a/common/inventory/assets/icons/scuba-diving-tank.svg.import
+++ b/common/icons/scuba-diving-tank.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bo3o2qf3i20ke"
-path="res://.godot/imported/scuba-diving-tank.svg-d6c94087bb8fe7a9f788baf1911a56a2.ctex"
+path="res://.godot/imported/scuba-diving-tank.svg-2724f573f5956cc7af7dbc8616ac0aa4.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://common/inventory/assets/icons/scuba-diving-tank.svg"
-dest_files=["res://.godot/imported/scuba-diving-tank.svg-d6c94087bb8fe7a9f788baf1911a56a2.ctex"]
+source_file="res://common/icons/scuba-diving-tank.svg"
+dest_files=["res://.godot/imported/scuba-diving-tank.svg-2724f573f5956cc7af7dbc8616ac0aa4.ctex"]
[params]
diff --git a/common/icons/seedling.svg b/common/icons/seedling.svg
new file mode 100644
index 0000000..9fdba63
--- /dev/null
+++ b/common/icons/seedling.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/common/icons/seedling.svg.import b/common/icons/seedling.svg.import
new file mode 100644
index 0000000..d0cda3d
--- /dev/null
+++ b/common/icons/seedling.svg.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0wy3dbpxbnt7"
+path="res://.godot/imported/seedling.svg-86222438bce7bb2a4f266ea315728eb5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://common/icons/seedling.svg"
+dest_files=["res://.godot/imported/seedling.svg-86222438bce7bb2a4f266ea315728eb5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+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/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
+svg/scale=2.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/common/inventory/assets/icons/shovel.svg b/common/icons/shovel.svg
similarity index 100%
rename from common/inventory/assets/icons/shovel.svg
rename to common/icons/shovel.svg
diff --git a/common/inventory/assets/icons/shovel.svg.import b/common/icons/shovel.svg.import
similarity index 74%
rename from common/inventory/assets/icons/shovel.svg.import
rename to common/icons/shovel.svg.import
index b7761dc..5b6a8d8 100644
--- a/common/inventory/assets/icons/shovel.svg.import
+++ b/common/icons/shovel.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bf6nw4onkhavr"
-path="res://.godot/imported/shovel.svg-f17d484b3a88170abdf08077458176fb.ctex"
+path="res://.godot/imported/shovel.svg-094c34e330000cc8ea425d6acf7556bd.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://common/inventory/assets/icons/shovel.svg"
-dest_files=["res://.godot/imported/shovel.svg-f17d484b3a88170abdf08077458176fb.ctex"]
+source_file="res://common/icons/shovel.svg"
+dest_files=["res://.godot/imported/shovel.svg-094c34e330000cc8ea425d6acf7556bd.ctex"]
[params]
diff --git a/gui/menu/assets/icons/users-group.svg b/common/icons/users-group.svg
similarity index 100%
rename from gui/menu/assets/icons/users-group.svg
rename to common/icons/users-group.svg
diff --git a/gui/menu/assets/icons/users-group.svg.import b/common/icons/users-group.svg.import
similarity index 72%
rename from gui/menu/assets/icons/users-group.svg.import
rename to common/icons/users-group.svg.import
index 41a5fa7..4ae5eb8 100644
--- a/gui/menu/assets/icons/users-group.svg.import
+++ b/common/icons/users-group.svg.import
@@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b38hdpsvqcwg8"
-path="res://.godot/imported/users-group.svg-65aad5cfa47be548675b81fab7ab9db6.ctex"
+path="res://.godot/imported/users-group.svg-e8465fccc5e5f0e575fcbdabcdf52e8b.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://gui/menu/assets/icons/users-group.svg"
-dest_files=["res://.godot/imported/users-group.svg-65aad5cfa47be548675b81fab7ab9db6.ctex"]
+source_file="res://common/icons/users-group.svg"
+dest_files=["res://.godot/imported/users-group.svg-e8465fccc5e5f0e575fcbdabcdf52e8b.ctex"]
[params]
@@ -32,6 +32,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/common/inventory/resources/items/compost.tres b/common/inventory/resources/items/compost.tres
index 57b409f..a97382d 100644
--- a/common/inventory/resources/items/compost.tres
+++ b/common/inventory/resources/items/compost.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="Package" load_steps=4 format=3 uid="uid://bya8sm6rm6747"]
-[ext_resource type="Texture2D" uid="uid://0xg54agef5gh" path="res://common/inventory/assets/icons/package.svg" id="1_lhhdv"]
+[ext_resource type="Texture2D" uid="uid://0xg54agef5gh" path="res://common/icons/package.svg" id="1_lhhdv"]
[ext_resource type="Script" uid="uid://b6kubqgq0k7vj" path="res://common/inventory/scripts/items/package.gd" id="1_x02bb"]
[ext_resource type="PackedScene" uid="uid://bkwh1ntvgkkrt" path="res://entities/interactables/machines/compost/compost.tscn" id="2_uulso"]
@@ -8,7 +8,7 @@
script = ExtResource("1_x02bb")
scene = ExtResource("2_uulso")
name = "Compost"
-description = "The compost allow you to upgrade your max energy when putting in it a certain amount of seeds."
+description = "The compost allow you to generate one energy for a certain amount of seeds."
icon = ExtResource("1_lhhdv")
use_zone_radius = 5
use_energy = 1
diff --git a/common/inventory/resources/items/default_seed.tres b/common/inventory/resources/items/default_seed.tres
index a5cdb61..9da5143 100644
--- a/common/inventory/resources/items/default_seed.tres
+++ b/common/inventory/resources/items/default_seed.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="Seed" load_steps=3 format=3 uid="uid://lrl2okkhyxmx"]
-[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://gui/game/assets/icons/bolt.svg" id="1_dy25s"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="1_dy25s"]
[ext_resource type="Script" uid="uid://bypjcvlc15gsm" path="res://common/inventory/scripts/items/seed.gd" id="2_mgcdi"]
[resource]
diff --git a/common/inventory/resources/items/default_shovel.tres b/common/inventory/resources/items/default_shovel.tres
index ef749ce..a9cd28d 100644
--- a/common/inventory/resources/items/default_shovel.tres
+++ b/common/inventory/resources/items/default_shovel.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="Shovel" load_steps=3 format=3 uid="uid://ddqalo1k30i5x"]
-[ext_resource type="Texture2D" uid="uid://bf6nw4onkhavr" path="res://common/inventory/assets/icons/shovel.svg" id="1_7g3xd"]
+[ext_resource type="Texture2D" uid="uid://bf6nw4onkhavr" path="res://common/icons/shovel.svg" id="1_7g3xd"]
[ext_resource type="Script" uid="uid://dya38x1h1uiyg" path="res://common/inventory/scripts/items/shovel.gd" id="1_28h2r"]
[resource]
diff --git a/common/inventory/resources/items/water_can.tres b/common/inventory/resources/items/water_can.tres
index 6d48c93..8b1d67e 100644
--- a/common/inventory/resources/items/water_can.tres
+++ b/common/inventory/resources/items/water_can.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="Item" load_steps=3 format=3 uid="uid://dbja8xm7ehw1v"]
-[ext_resource type="Texture2D" uid="uid://bo3o2qf3i20ke" path="res://common/inventory/assets/icons/scuba-diving-tank.svg" id="1_sy4rh"]
+[ext_resource type="Texture2D" uid="uid://bo3o2qf3i20ke" path="res://common/icons/scuba-diving-tank.svg" id="1_sy4rh"]
[ext_resource type="Script" uid="uid://bq7admu4ahs5r" path="res://common/inventory/scripts/item.gd" id="2_aikyk"]
[resource]
diff --git a/common/tools/scripts/image_tools.gd b/common/tools/scripts/image_tools.gd
index 1112702..fc76baa 100644
--- a/common/tools/scripts/image_tools.gd
+++ b/common/tools/scripts/image_tools.gd
@@ -1,13 +1,15 @@
class_name ImageTools
-static func get_color_coverage(image: Image, color: Color = Color.WHITE):
+static func get_color_coverage(image: Image, color: Color = Color.WHITE) -> float:
+ return float(get_color_pixel_count(image, color))/(image.get_width()*image.get_height())
+
+static func get_color_pixel_count(image: Image, color: Color = Color.WHITE) -> int:
var pixel_color_count = 0.
for x in range(image.get_width()):
for y in range(image.get_height()):
if image.get_pixel(x, y) == color:
pixel_color_count += 1.
- return pixel_color_count/(image.get_width()*image.get_height())
-
+ return pixel_color_count
static func draw_circle(image: Image, center: Vector2i, length: int, color: Color = Color.WHITE):
for x in range(image.get_width()):
diff --git a/entities/interactables/item_object/item_object_sprite.tscn b/entities/interactables/item_object/item_object_sprite.tscn
index c399a11..cd7a07b 100644
--- a/entities/interactables/item_object/item_object_sprite.tscn
+++ b/entities/interactables/item_object/item_object_sprite.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=7 format=3 uid="uid://bcj812ox8xv2t"]
[ext_resource type="Script" uid="uid://reliyx2pg7kf" path="res://entities/interactables/item_object/script/item_object_sprite.gd" id="1_wing4"]
-[ext_resource type="Texture2D" uid="uid://bo3o2qf3i20ke" path="res://common/inventory/assets/icons/scuba-diving-tank.svg" id="2_ng3e4"]
+[ext_resource type="Texture2D" uid="uid://bo3o2qf3i20ke" path="res://common/icons/scuba-diving-tank.svg" id="2_ng3e4"]
[ext_resource type="Texture2D" uid="uid://c1eiu5ag7lcp8" path="res://entities/interactables/item_object/assets/sprites/shadow.svg" id="2_ng201"]
[sub_resource type="Animation" id="Animation_wing4"]
diff --git a/entities/interactables/item_object/script/item_object.gd b/entities/interactables/item_object/script/item_object.gd
index 7a27cf3..582d338 100644
--- a/entities/interactables/item_object/script/item_object.gd
+++ b/entities/interactables/item_object/script/item_object.gd
@@ -68,9 +68,10 @@ func generate_sprite() -> ItemObjectSprite:
var spriteNode = SPRITE_SCENE.instantiate() as ItemObjectSprite
add_child(spriteNode)
- spriteNode.apply_texture_to_sprite(
- item.icon,
- ITEM_SPRITE_SIZE
- )
+ if item:
+ spriteNode.apply_texture_to_sprite(
+ item.icon,
+ ITEM_SPRITE_SIZE
+ )
return spriteNode
diff --git a/entities/interactables/machines/compost/compost.tscn b/entities/interactables/machines/compost/compost.tscn
index 595b1c8..dc23b90 100644
--- a/entities/interactables/machines/compost/compost.tscn
+++ b/entities/interactables/machines/compost/compost.tscn
@@ -1,7 +1,11 @@
-[gd_scene load_steps=10 format=3 uid="uid://bkwh1ntvgkkrt"]
+[gd_scene load_steps=11 format=3 uid="uid://bkwh1ntvgkkrt"]
[ext_resource type="Script" uid="uid://dw6jgsasb2fe1" path="res://entities/interactables/machines/compost/scripts/compost.gd" id="1_c0pig"]
[ext_resource type="Texture2D" uid="uid://f2rte5jc0psp" path="res://entities/interactables/machines/compost/assets/sprites/compost.svg" id="2_r6435"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="3_akkx7"]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_akkx7"]
+size = Vector2(66, 84)
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_etofw"]
bg_color = Color(0.260098, 0.11665, 0.0419712, 0.231373)
@@ -95,14 +99,14 @@ _data = {
&"fill": SubResource("Animation_etofw")
}
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_akkx7"]
-size = Vector2(66, 84)
-
[node name="Compost" type="Area2D"]
script = ExtResource("1_c0pig")
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_akkx7")
+
[node name="Compost" type="Sprite2D" parent="."]
-modulate = Color(0.615686, 0.501961, 0.270588, 1)
+self_modulate = Color(0.729698, 0.588265, 0.105405, 1)
scale = Vector2(0.291262, 0.291262)
texture = ExtResource("2_r6435")
@@ -117,10 +121,13 @@ theme_override_styles/fill = SubResource("StyleBoxFlat_3ao1n")
fill_mode = 3
show_percentage = false
+[node name="Bolt" type="Sprite2D" parent="Compost"]
+z_index = 1
+position = Vector2(0, 54.9334)
+scale = Vector2(2.00278, 2.00278)
+texture = ExtResource("3_akkx7")
+
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_etofw")
}
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-shape = SubResource("RectangleShape2D_akkx7")
diff --git a/entities/interactables/machines/compost/scripts/compost.gd b/entities/interactables/machines/compost/scripts/compost.gd
index 3d31541..6ac1aae 100644
--- a/entities/interactables/machines/compost/scripts/compost.gd
+++ b/entities/interactables/machines/compost/scripts/compost.gd
@@ -1,22 +1,24 @@
extends Machine
class_name Compost
-var value_per_seed : float = 0.5
-var fill_value : float = 0.
+@export var seed_needed : int = 2
+@export var energy_production : int = 1
+var containing_seed : int = 0
+
func _process(_delta):
- %ProgressBar.value = lerp(%ProgressBar.value, fill_value * 100, 0.5)
+ %ProgressBar.value = lerp(%ProgressBar.value, float(containing_seed) / float(seed_needed) * 100, 0.5)
func pointer_text():
return "Compost"
func interact_text():
- return "Put a seed ("+str(roundi((1-fill_value)/value_per_seed))+" left)"
+ return "Put a seed ("+str(seed_needed - containing_seed)+" left)"
func inspector_info() -> Inspector.Info:
return Inspector.Info.new(
pointer_text(),
- "The compost allow you to upgrade your max energy when putting in it a certain amount of seeds."
+ "The compost allow you to generate one energy for " + str(seed_needed) + " seeds."
)
func can_interact(p : Player) -> bool:
@@ -31,12 +33,11 @@ func interact(p : Player) -> bool:
p.play_sfx("harvest")
p.delete_item(p.inventory.get_item())
- fill_value += value_per_seed
- if fill_value >= 1.:
+ containing_seed += 1
+ if containing_seed >= seed_needed:
$AnimationPlayer.play("empty")
- fill_value = 0
- p.upgrade()
- value_per_seed /= 1.5
+ containing_seed = 0
+ p.recharge(energy_production)
else:
$AnimationPlayer.play("fill")
return true
diff --git a/entities/interactables/machines/recharge_station/recharge_station.tscn b/entities/interactables/machines/recharge_station/recharge_station.tscn
index 2b908ed..6b66168 100644
--- a/entities/interactables/machines/recharge_station/recharge_station.tscn
+++ b/entities/interactables/machines/recharge_station/recharge_station.tscn
@@ -1,23 +1,29 @@
-[gd_scene load_steps=4 format=3 uid="uid://d324mlmgls4fs"]
+[gd_scene load_steps=5 format=3 uid="uid://d324mlmgls4fs"]
[ext_resource type="Script" uid="uid://bsrn3gd2a532q" path="res://entities/interactables/machines/recharge_station/scripts/recharge_station.gd" id="1_2ffjo"]
[ext_resource type="Texture2D" uid="uid://c82ljr3in67am" path="res://entities/interactables/machines/recharge_station/assets/sprites/recharge_station.svg" id="2_58ax0"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="3_3xua0"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_bjhct"]
radius = 15.0
height = 72.0
[node name="RechargeStation" type="Area2D"]
-modulate = Color(0.615686, 0.501961, 0.270588, 1)
script = ExtResource("1_2ffjo")
metadata/_custom_type_script = "uid://dyprcd68fjstf"
-[node name="RechargeStation" type="Sprite2D" parent="."]
-position = Vector2(0, -17)
-scale = Vector2(0.3, 0.3)
-texture = ExtResource("2_58ax0")
-
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(1, -1)
rotation = -1.5708
shape = SubResource("CapsuleShape2D_bjhct")
+
+[node name="RechargeStation" type="Sprite2D" parent="."]
+self_modulate = Color(0.729412, 0.588235, 0.105882, 1)
+position = Vector2(0, -17)
+scale = Vector2(0.3, 0.3)
+texture = ExtResource("2_58ax0")
+
+[node name="Bolt" type="Sprite2D" parent="."]
+position = Vector2(0, -40)
+scale = Vector2(0.375, 0.375)
+texture = ExtResource("3_3xua0")
diff --git a/entities/objectives/assets/sprites/arbre_mort.png b/entities/objectives/assets/sprites/arbre_mort.png
new file mode 100644
index 0000000..c945b23
Binary files /dev/null and b/entities/objectives/assets/sprites/arbre_mort.png differ
diff --git a/entities/objectives/assets/sprites/arbre_mort.png.import b/entities/objectives/assets/sprites/arbre_mort.png.import
new file mode 100644
index 0000000..6287260
--- /dev/null
+++ b/entities/objectives/assets/sprites/arbre_mort.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dbednu7eygtrf"
+path="res://.godot/imported/arbre_mort.png-eea217ee3fbf6520e6fbde71f18bbeef.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://entities/objectives/assets/sprites/arbre_mort.png"
+dest_files=["res://.godot/imported/arbre_mort.png-eea217ee3fbf6520e6fbde71f18bbeef.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+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/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/entities/objectives/assets/sprites/little_plant.png b/entities/objectives/assets/sprites/little_plant.png
new file mode 100644
index 0000000..6ee7a08
Binary files /dev/null and b/entities/objectives/assets/sprites/little_plant.png differ
diff --git a/entities/objectives/assets/sprites/little_plant.png.import b/entities/objectives/assets/sprites/little_plant.png.import
new file mode 100644
index 0000000..d954e55
--- /dev/null
+++ b/entities/objectives/assets/sprites/little_plant.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c4pv2o7crchc0"
+path="res://.godot/imported/little_plant.png-e9ed84e9420c629c3911ff755b194643.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://entities/objectives/assets/sprites/little_plant.png"
+dest_files=["res://.godot/imported/little_plant.png-e9ed84e9420c629c3911ff755b194643.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+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/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/entities/objectives/objective.tscn b/entities/objectives/objective.tscn
new file mode 100644
index 0000000..f109562
--- /dev/null
+++ b/entities/objectives/objective.tscn
@@ -0,0 +1,281 @@
+[gd_scene load_steps=11 format=3 uid="uid://djl2le58ckgdx"]
+
+[ext_resource type="Script" uid="uid://j8fpi8rd8eyy" path="res://entities/objectives/scripts/objective.gd" id="1_3hqw5"]
+[ext_resource type="Texture2D" uid="uid://dbednu7eygtrf" path="res://entities/objectives/assets/sprites/arbre_mort.png" id="2_3hqw5"]
+[ext_resource type="Texture2D" uid="uid://c4pv2o7crchc0" path="res://entities/objectives/assets/sprites/little_plant.png" id="3_dulsb"]
+[ext_resource type="FontFile" uid="uid://cpnsnrqhfkj3k" path="res://gui/ressources/fonts/spincycle_ot.otf" id="4_6uhem"]
+[ext_resource type="Texture2D" uid="uid://bo3o2qf3i20ke" path="res://common/icons/scuba-diving-tank.svg" id="5_6uhem"]
+
+[sub_resource type="Animation" id="Animation_v08i5"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("ArbreMort:modulate")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Color(0.443137, 0.443137, 0.443137, 1)]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("LittlePlant:visible")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [false]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("LittlePlant:scale")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Vector2(0.094358, 0.094358)]
+}
+tracks/3/type = "value"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("LittlePlant2:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [false]
+}
+tracks/4/type = "value"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("LittlePlant2:scale")
+tracks/4/interp = 1
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Vector2(0.094358, 0.094358)]
+}
+tracks/5/type = "value"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("LittlePlant3:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [false]
+}
+tracks/6/type = "value"
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/path = NodePath("LittlePlant3:scale")
+tracks/6/interp = 1
+tracks/6/loop_wrap = true
+tracks/6/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Vector2(0.094358, 0.094358)]
+}
+tracks/7/type = "value"
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/path = NodePath("ArbreMort:scale")
+tracks/7/interp = 1
+tracks/7/loop_wrap = true
+tracks/7/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Vector2(0.162791, 0.162791)]
+}
+
+[sub_resource type="Animation" id="Animation_6uhem"]
+resource_name = "activate"
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("ArbreMort:modulate")
+tracks/0/interp = 2
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 0.266667),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Color(0.443137, 0.443137, 0.443137, 1), Color(1, 1, 1, 1)]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("LittlePlant:visible")
+tracks/1/interp = 2
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0.0333333),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [true]
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath("LittlePlant:scale")
+tracks/2/interp = 2
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0.433333, 0.6),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Vector2(0, 0), Vector2(0.094358, 0.094358)]
+}
+tracks/3/type = "value"
+tracks/3/imported = false
+tracks/3/enabled = true
+tracks/3/path = NodePath("LittlePlant2:visible")
+tracks/3/interp = 1
+tracks/3/loop_wrap = true
+tracks/3/keys = {
+"times": PackedFloat32Array(0.0333333),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [true]
+}
+tracks/4/type = "value"
+tracks/4/imported = false
+tracks/4/enabled = true
+tracks/4/path = NodePath("LittlePlant2:scale")
+tracks/4/interp = 2
+tracks/4/loop_wrap = true
+tracks/4/keys = {
+"times": PackedFloat32Array(0.6, 0.8),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Vector2(0, 0), Vector2(0.094358, 0.094358)]
+}
+tracks/5/type = "value"
+tracks/5/imported = false
+tracks/5/enabled = true
+tracks/5/path = NodePath("LittlePlant3:visible")
+tracks/5/interp = 1
+tracks/5/loop_wrap = true
+tracks/5/keys = {
+"times": PackedFloat32Array(0.0333333),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [true]
+}
+tracks/6/type = "value"
+tracks/6/imported = false
+tracks/6/enabled = true
+tracks/6/path = NodePath("LittlePlant3:scale")
+tracks/6/interp = 2
+tracks/6/loop_wrap = true
+tracks/6/keys = {
+"times": PackedFloat32Array(0.4, 0.533333),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Vector2(0, 0), Vector2(0.094358, 0.094358)]
+}
+tracks/7/type = "value"
+tracks/7/imported = false
+tracks/7/enabled = true
+tracks/7/path = NodePath("ArbreMort:scale")
+tracks/7/interp = 2
+tracks/7/loop_wrap = true
+tracks/7/keys = {
+"times": PackedFloat32Array(0, 0.1, 0.266667, 0.4),
+"transitions": PackedFloat32Array(1, 1, 1, 1),
+"update": 0,
+"values": [Vector2(0.162791, 0.162791), Vector2(0.183, 0.093), Vector2(0.123, 0.178), Vector2(0.162791, 0.162791)]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_047qm"]
+_data = {
+&"RESET": SubResource("Animation_v08i5"),
+&"activate": SubResource("Animation_6uhem")
+}
+
+[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_bvagy"]
+radius = 24.0
+height = 160.0
+
+[sub_resource type="LabelSettings" id="LabelSettings_v08i5"]
+font = ExtResource("4_6uhem")
+font_size = 18
+
+[node name="Objective" type="Area2D"]
+script = ExtResource("1_3hqw5")
+metadata/_custom_type_script = "uid://d3bk52402ylvl"
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+unique_name_in_owner = true
+libraries = {
+&"": SubResource("AnimationLibrary_047qm")
+}
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2(0, -20)
+rotation = 1.5708
+shape = SubResource("CapsuleShape2D_bvagy")
+
+[node name="ArbreMort" type="Sprite2D" parent="."]
+modulate = Color(0.443137, 0.443137, 0.443137, 1)
+position = Vector2(5, 4)
+scale = Vector2(0.162791, 0.162791)
+texture = ExtResource("2_3hqw5")
+centered = false
+offset = Vector2(-627.055, -607.11)
+
+[node name="LittlePlant" type="Sprite2D" parent="."]
+visible = false
+position = Vector2(-22, -46)
+scale = Vector2(0.094358, 0.094358)
+texture = ExtResource("3_dulsb")
+
+[node name="LittlePlant2" type="Sprite2D" parent="."]
+visible = false
+position = Vector2(39, -25)
+scale = Vector2(0.094358, 0.094358)
+texture = ExtResource("3_dulsb")
+
+[node name="LittlePlant3" type="Sprite2D" parent="."]
+visible = false
+position = Vector2(-49, -14)
+scale = Vector2(0.094358, 0.094358)
+texture = ExtResource("3_dulsb")
+
+[node name="RewardInfo" type="HBoxContainer" parent="."]
+unique_name_in_owner = true
+offset_left = -67.0
+offset_top = -34.0
+offset_right = 51.0
+offset_bottom = -15.0
+theme_override_constants/separation = 2
+alignment = 1
+
+[node name="RewardText" type="Label" parent="RewardInfo"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "bla"
+label_settings = SubResource("LabelSettings_v08i5")
+
+[node name="RewardIcon" type="TextureRect" parent="RewardInfo"]
+unique_name_in_owner = true
+layout_mode = 2
+texture = ExtResource("5_6uhem")
+expand_mode = 2
diff --git a/entities/objectives/resources/increase_day_limit_5_reward.tres b/entities/objectives/resources/increase_day_limit_5_reward.tres
new file mode 100644
index 0000000..3f563cf
--- /dev/null
+++ b/entities/objectives/resources/increase_day_limit_5_reward.tres
@@ -0,0 +1,8 @@
+[gd_resource type="Resource" script_class="IncreaseDayLimitReward" load_steps=2 format=3 uid="uid://b11qyyi8k0mua"]
+
+[ext_resource type="Script" uid="uid://df6i1hivw4ymn" path="res://entities/objectives/scripts/rewards/increase_day_limit_reward.gd" id="1_gt31s"]
+
+[resource]
+script = ExtResource("1_gt31s")
+day_limit_increase = 5
+metadata/_custom_type_script = "uid://df6i1hivw4ymn"
diff --git a/entities/objectives/resources/loot_5_random_seeds_reward.tres b/entities/objectives/resources/loot_5_random_seeds_reward.tres
new file mode 100644
index 0000000..94ae592
--- /dev/null
+++ b/entities/objectives/resources/loot_5_random_seeds_reward.tres
@@ -0,0 +1,8 @@
+[gd_resource type="Resource" script_class="LootRandomSeedsReward" load_steps=2 format=3 uid="uid://ca62vcsijbxgc"]
+
+[ext_resource type="Script" uid="uid://bcdilfb4j7f6d" path="res://entities/objectives/scripts/rewards/loot_random_seeds_reward.gd" id="1_yjhoy"]
+
+[resource]
+script = ExtResource("1_yjhoy")
+seeds_number = 5
+metadata/_custom_type_script = "uid://bcdilfb4j7f6d"
diff --git a/entities/objectives/resources/loot_compost_reward.tres b/entities/objectives/resources/loot_compost_reward.tres
new file mode 100644
index 0000000..2d101b8
--- /dev/null
+++ b/entities/objectives/resources/loot_compost_reward.tres
@@ -0,0 +1,21 @@
+[gd_resource type="Resource" script_class="LootItemReward" load_steps=6 format=3 uid="uid://clmsn7r2shw6j"]
+
+[ext_resource type="Script" uid="uid://dva05p817w00f" path="res://entities/objectives/scripts/rewards/loot_item_reward.gd" id="1_dyn78"]
+[ext_resource type="Texture2D" uid="uid://0xg54agef5gh" path="res://common/icons/package.svg" id="1_gvg4i"]
+[ext_resource type="PackedScene" uid="uid://bkwh1ntvgkkrt" path="res://entities/interactables/machines/compost/compost.tscn" id="2_22dgr"]
+[ext_resource type="Script" uid="uid://b6kubqgq0k7vj" path="res://common/inventory/scripts/items/package.gd" id="3_0bwtl"]
+
+[sub_resource type="Resource" id="Resource_00nan"]
+script = ExtResource("3_0bwtl")
+scene = ExtResource("2_22dgr")
+name = "Compost"
+description = "The compost allow you to upgrade your max energy when putting in it a certain amount of seeds."
+icon = ExtResource("1_gvg4i")
+use_zone_radius = 5
+use_energy = 1
+metadata/_custom_type_script = "uid://b6kubqgq0k7vj"
+
+[resource]
+script = ExtResource("1_dyn78")
+item = SubResource("Resource_00nan")
+metadata/_custom_type_script = "uid://dva05p817w00f"
diff --git a/entities/objectives/scripts/objective.gd b/entities/objectives/scripts/objective.gd
new file mode 100644
index 0000000..2dc3c9e
--- /dev/null
+++ b/entities/objectives/scripts/objective.gd
@@ -0,0 +1,37 @@
+extends InspectableEntity
+class_name Objective
+
+const RANDOM_MAX_OBJECTIVE_INTERVAL = 1.
+
+var completed : bool = false
+var planet : Planet
+@export var reward : ObjectiveReward = null :
+ set(r):
+ reward = r
+ update_reward_info(r)
+
+func _ready():
+ update_reward_info(reward)
+
+func pointer_text():
+ return "Contamination Objective"
+
+func inspector_info() -> Inspector.Info:
+ return Inspector.Info.new(
+ pointer_text(),
+ "If the zone around is decontaminated, give the following reward.\n\n" + reward.get_description(),
+ )
+
+func _end_pass_day():
+ if planet and not completed:
+ if not planet.is_there_contamination(global_position):
+ reward.reward(self)
+ %AnimationPlayer.play("activate")
+ %RewardInfo.visible = false
+ completed = true
+
+func update_reward_info(r : ObjectiveReward):
+ if r:
+ %RewardText.text = r.get_text()
+ %RewardIcon.texture = r.get_icon()
+ %RewardInfo.visible = r != null
diff --git a/entities/objectives/scripts/objective.gd.uid b/entities/objectives/scripts/objective.gd.uid
new file mode 100644
index 0000000..5243287
--- /dev/null
+++ b/entities/objectives/scripts/objective.gd.uid
@@ -0,0 +1 @@
+uid://j8fpi8rd8eyy
diff --git a/entities/objectives/scripts/objective_reward.gd b/entities/objectives/scripts/objective_reward.gd
new file mode 100644
index 0000000..fbaa828
--- /dev/null
+++ b/entities/objectives/scripts/objective_reward.gd
@@ -0,0 +1,14 @@
+extends Resource
+class_name ObjectiveReward
+
+func reward(_objective : Objective):
+ pass
+
+func get_icon() -> Texture:
+ return null
+
+func get_text() -> String:
+ return ""
+
+func get_description() -> String:
+ return ""
\ No newline at end of file
diff --git a/entities/objectives/scripts/objective_reward.gd.uid b/entities/objectives/scripts/objective_reward.gd.uid
new file mode 100644
index 0000000..b96959b
--- /dev/null
+++ b/entities/objectives/scripts/objective_reward.gd.uid
@@ -0,0 +1 @@
+uid://bsh4b8miag8w1
diff --git a/entities/objectives/scripts/rewards/increase_day_limit_reward.gd b/entities/objectives/scripts/rewards/increase_day_limit_reward.gd
new file mode 100644
index 0000000..133b4f7
--- /dev/null
+++ b/entities/objectives/scripts/rewards/increase_day_limit_reward.gd
@@ -0,0 +1,19 @@
+extends ObjectiveReward
+class_name IncreaseDayLimitReward
+
+@export var day_limit_increase = 5
+
+func _init(_day_limit_increase : int):
+ day_limit_increase = _day_limit_increase
+
+func reward(objective : Objective):
+ objective.planet.day_limit += day_limit_increase
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/hourglass-empty.svg")
+
+func get_text() -> String:
+ return "+"+str(day_limit_increase)
+
+func get_description() -> String:
+ return "Increase the day limitation by " + str(day_limit_increase)
diff --git a/entities/objectives/scripts/rewards/increase_day_limit_reward.gd.uid b/entities/objectives/scripts/rewards/increase_day_limit_reward.gd.uid
new file mode 100644
index 0000000..b5e40a2
--- /dev/null
+++ b/entities/objectives/scripts/rewards/increase_day_limit_reward.gd.uid
@@ -0,0 +1 @@
+uid://df6i1hivw4ymn
diff --git a/entities/objectives/scripts/rewards/loot_item_reward.gd b/entities/objectives/scripts/rewards/loot_item_reward.gd
new file mode 100644
index 0000000..278dcac
--- /dev/null
+++ b/entities/objectives/scripts/rewards/loot_item_reward.gd
@@ -0,0 +1,25 @@
+extends ObjectiveReward
+class_name LootItemReward
+
+const REWARD_ITEM_RANDOM_DISPLACEMENT_FACTOR = 100
+
+@export var item : Item
+
+func _init(i : Item):
+ item = i
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/package.svg")
+
+func get_text() -> String:
+ return ""
+
+func get_description() -> String:
+ return "Loot the following item: " + item.name + "."
+
+func reward(objective : Objective):
+ objective.planet.drop_item(
+ item,
+ objective.global_position,
+ REWARD_ITEM_RANDOM_DISPLACEMENT_FACTOR
+ )
diff --git a/entities/objectives/scripts/rewards/loot_item_reward.gd.uid b/entities/objectives/scripts/rewards/loot_item_reward.gd.uid
new file mode 100644
index 0000000..54abc4d
--- /dev/null
+++ b/entities/objectives/scripts/rewards/loot_item_reward.gd.uid
@@ -0,0 +1 @@
+uid://dva05p817w00f
diff --git a/entities/objectives/scripts/rewards/loot_items_reward.gd.uid b/entities/objectives/scripts/rewards/loot_items_reward.gd.uid
new file mode 100644
index 0000000..871c587
--- /dev/null
+++ b/entities/objectives/scripts/rewards/loot_items_reward.gd.uid
@@ -0,0 +1 @@
+uid://dot5gfkbm7p6s
diff --git a/entities/objectives/scripts/rewards/loot_random_seeds_reward.gd b/entities/objectives/scripts/rewards/loot_random_seeds_reward.gd
new file mode 100644
index 0000000..989a41a
--- /dev/null
+++ b/entities/objectives/scripts/rewards/loot_random_seeds_reward.gd
@@ -0,0 +1,26 @@
+extends ObjectiveReward
+class_name LootRandomSeedsReward
+
+const REWARD_SEED_RANDOM_DISPLACEMENT_FACTOR = 100
+
+@export var seeds_number : int
+
+func _init(number : int):
+ seeds_number = number
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/seedling.svg")
+
+func get_text() -> String:
+ return str(seeds_number)
+
+func get_description() -> String:
+ return "Loot " + str(seeds_number) + " random seeds."
+
+func reward(objective : Objective):
+ for i in range(seeds_number):
+ objective.planet.drop_item(
+ Seed.new(GameInfo.game_data.unlocked_plant_types_path.pick_random()),
+ objective.global_position,
+ REWARD_SEED_RANDOM_DISPLACEMENT_FACTOR
+ )
\ No newline at end of file
diff --git a/entities/objectives/scripts/rewards/loot_random_seeds_reward.gd.uid b/entities/objectives/scripts/rewards/loot_random_seeds_reward.gd.uid
new file mode 100644
index 0000000..6665067
--- /dev/null
+++ b/entities/objectives/scripts/rewards/loot_random_seeds_reward.gd.uid
@@ -0,0 +1 @@
+uid://bcdilfb4j7f6d
diff --git a/entities/objectives/scripts/rewards/upgrade_player_max_energy_reward.gd b/entities/objectives/scripts/rewards/upgrade_player_max_energy_reward.gd
new file mode 100644
index 0000000..f39f372
--- /dev/null
+++ b/entities/objectives/scripts/rewards/upgrade_player_max_energy_reward.gd
@@ -0,0 +1,19 @@
+extends ObjectiveReward
+class_name UpgradePlayerMaxEnergyReward
+
+@export var upgrade_amount = 1
+
+func _init(_upgrade_amount : int = 1):
+ upgrade_amount = _upgrade_amount
+
+func reward(objective : Objective):
+ objective.planet.player.upgrade_max_energy(upgrade_amount)
+
+func get_icon() -> Texture:
+ return preload("res://common/icons/bolt.svg")
+
+func get_text() -> String:
+ return "+"+str(upgrade_amount)+" max"
+
+func get_description() -> String:
+ return "Increase player max energy by " + str(upgrade_amount)
diff --git a/entities/objectives/scripts/rewards/upgrade_player_max_energy_reward.gd.uid b/entities/objectives/scripts/rewards/upgrade_player_max_energy_reward.gd.uid
new file mode 100644
index 0000000..1af2ed2
--- /dev/null
+++ b/entities/objectives/scripts/rewards/upgrade_player_max_energy_reward.gd.uid
@@ -0,0 +1 @@
+uid://cflvw3bfcocnn
diff --git a/entities/plants/scripts/plant.gd b/entities/plants/scripts/plant.gd
index b78bb4e..2aebd96 100644
--- a/entities/plants/scripts/plant.gd
+++ b/entities/plants/scripts/plant.gd
@@ -2,7 +2,7 @@ extends InspectableEntity
class_name Plant
const PLANT_AREA_WIDTH = 20
-const HARVESTED_SEED_POSITION_RANGE = 100
+const HARVESTED_SEED_DISPLACEMENT_FACTOR = 100
const RANDOM_MAX_GROW_INTERVAL = Planet.PASS_DAY_ANIMATION_TIME/2. - 0.1
@@ -88,24 +88,12 @@ func harvest():
var seed_plant_type : PlantType = plant_type
if len(plant_type.harvest_types_path):
seed_plant_type = load(plant_type.harvest_types_path.pick_random())
- loot_seed(seed_plant_type)
+ planet.drop_item(
+ Seed.new(seed_plant_type),
+ global_position,
+ HARVESTED_SEED_DISPLACEMENT_FACTOR,
+ )
plant_sprite.start_harvest_animation()
await plant_sprite.harvest_animation_finished
queue_free()
-
-func loot_seed(type : PlantType):
- var item_object = planet.drop_item(
- Seed.new(type),
- global_position
- )
- var tween : Tween = get_tree().create_tween()
- tween.tween_property(
- item_object,
- "position",
- Vector2(
- item_object.position.x + randi()%HARVESTED_SEED_POSITION_RANGE,
- item_object.position.y + randi()%HARVESTED_SEED_POSITION_RANGE
- ),
- 0.2
- )
diff --git a/entities/plants/scripts/plant_effects/produce_seeds.gd b/entities/plants/scripts/plant_effects/produce_seeds.gd
index b82ea5b..e22f1a9 100644
--- a/entities/plants/scripts/plant_effects/produce_seeds.gd
+++ b/entities/plants/scripts/plant_effects/produce_seeds.gd
@@ -5,7 +5,11 @@ class_name ProduceSeedsEffect
@export var produce_number : Array[int] = [1]
func effect(plant):
- for _i in range(produce_number.pick_random()):
- if len(produce_types_path):
- var seed_plant_type = load(produce_types_path.pick_random())
- plant.loot_seed(seed_plant_type)
\ No newline at end of file
+ for _i in range(produce_number.pick_random()):
+ if len(produce_types_path):
+ var seed_plant_type = load(produce_types_path.pick_random())
+ plant.planet.drop_item(
+ Seed.new(seed_plant_type),
+ plant.global_position,
+ plant.HARVESTED_SEED_DISPLACEMENT_FACTOR,
+ )
diff --git a/entities/plants/scripts/plant_type.gd b/entities/plants/scripts/plant_type.gd
index bf1efa1..796d9a9 100644
--- a/entities/plants/scripts/plant_type.gd
+++ b/entities/plants/scripts/plant_type.gd
@@ -14,4 +14,4 @@ class_name PlantType
@export var cyclic_effect : PlantEffect
@export_file var harvest_types_path : Array[String] = []
-@export var harvest_number : Array[int] = [1,2]
+@export var harvest_number : Array[int] = [1,2]
\ No newline at end of file
diff --git a/entities/player/player.tscn b/entities/player/player.tscn
index 567d057..9e9a9f7 100644
--- a/entities/player/player.tscn
+++ b/entities/player/player.tscn
@@ -3,7 +3,7 @@
[ext_resource type="Script" uid="uid://das7twcy5153p" path="res://entities/player/scripts/player.gd" id="1_abrql"]
[ext_resource type="Texture2D" uid="uid://c7ff87jniga5m" path="res://entities/player/assets/sprites/robot.png" id="1_symyc"]
[ext_resource type="AudioStream" uid="uid://dfrp66a4isnt6" path="res://entities/player/sounds/dig/dig_1.wav" id="3_gx6sm"]
-[ext_resource type="Texture2D" uid="uid://bf6nw4onkhavr" path="res://common/inventory/assets/icons/shovel.svg" id="3_yqrof"]
+[ext_resource type="Texture2D" uid="uid://bf6nw4onkhavr" path="res://common/icons/shovel.svg" id="3_yqrof"]
[ext_resource type="AudioStream" uid="uid://bdxkvaciw4mb3" path="res://entities/player/sounds/dig/dig_2.wav" id="4_yqrof"]
[ext_resource type="AudioStream" uid="uid://llxrlwfccywb" path="res://entities/player/sounds/dig/dig_3.wav" id="5_3wlsy"]
[ext_resource type="AudioStream" uid="uid://8nmr5vifkt1f" path="res://entities/player/sounds/harvest/harvest_1.wav" id="6_b2kln"]
diff --git a/entities/player/scripts/player.gd b/entities/player/scripts/player.gd
index 7c4923e..5599f78 100644
--- a/entities/player/scripts/player.gd
+++ b/entities/player/scripts/player.gd
@@ -41,7 +41,7 @@ func _start_pass_day():
# Méthode déclenchée par la classe planet
func _pass_day():
- recharge()
+ full_recharge()
# Méthode déclenchée par la classe planet
func _end_pass_day():
@@ -149,15 +149,19 @@ func use_item(item : Item):
if item.is_one_time_use():
delete_item(item)
-func upgrade():
- max_energy += 1
- energy += 1
+func upgrade_max_energy(amount = 1):
+ max_energy += amount
upgraded.emit()
+ player_updated.emit(self)
func recharge(amount : int = max_energy):
- energy = min(energy + amount, max_energy)
+ energy = energy + amount
+ upgraded.emit()
-func generate_action_area(radius : int = 0) -> Area2D:
+func full_recharge():
+ energy = max(energy, max_energy)
+
+func generate_action_zone(radius : int = 0) -> Area2D:
var area2D = Area2D.new()
var collision_shape = CollisionShape2D.new()
var circle_shape = CircleShape2D.new()
@@ -173,13 +177,13 @@ func generate_action_area(radius : int = 0) -> Area2D:
func setup_preview_zone(zone_radius : int) -> Area2D:
if preview_zone:
preview_zone.queue_free()
- preview_zone = generate_action_area(zone_radius)
+ preview_zone = generate_action_zone(zone_radius)
return preview_zone
func setup_action_zone(zone_position : Vector2, zone_radius : int) -> Area2D:
if action_zone:
action_zone.queue_free()
- action_zone = generate_action_area(zone_radius)
+ action_zone = generate_action_zone(zone_radius)
action_zone.global_position = zone_position
return action_zone
diff --git a/game.tscn b/game.tscn
deleted file mode 100644
index 01ca087..0000000
--- a/game.tscn
+++ /dev/null
@@ -1,136 +0,0 @@
-[gd_scene load_steps=27 format=3 uid="uid://d28cp7a21kwou"]
-
-[ext_resource type="PackedScene" uid="uid://12nak7amd1uq" path="res://gui/game/game_gui.tscn" id="1_iotsf"]
-[ext_resource type="PackedScene" uid="uid://csiacsndm62ll" path="res://gui/game/pause/pause.tscn" id="2_215e1"]
-[ext_resource type="PackedScene" uid="uid://bgvbgeq46wee2" path="res://entities/player/player.tscn" id="2_lc2xo"]
-[ext_resource type="PackedScene" uid="uid://v41hfc7haaye" path="res://gui/game/win/win.tscn" id="3_7sc4i"]
-[ext_resource type="Script" uid="uid://dedg615xudpoq" path="res://entities/interactables/item_object/script/item_object.gd" id="3_215e1"]
-[ext_resource type="PackedScene" uid="uid://tsi5j1uxppa4" path="res://stages/terrain/planet/planet.tscn" id="6_e8heu"]
-[ext_resource type="Resource" uid="uid://ddqalo1k30i5x" path="res://common/inventory/resources/items/default_shovel.tres" id="6_lc2xo"]
-[ext_resource type="Resource" uid="uid://bya8sm6rm6747" path="res://common/inventory/resources/items/compost.tres" id="7_215e1"]
-[ext_resource type="Script" uid="uid://bq7admu4ahs5r" path="res://common/inventory/scripts/item.gd" id="7_rvswv"]
-[ext_resource type="PackedScene" uid="uid://d324mlmgls4fs" path="res://entities/interactables/machines/recharge_station/recharge_station.tscn" id="8_7sc4i"]
-[ext_resource type="Texture2D" uid="uid://pltmnkqd5ut2" path="res://entities/plants/assets/sprites/seeds/grille_seeds.png" id="8_boyg6"]
-[ext_resource type="Resource" uid="uid://b04vho33bl52b" path="res://entities/plants/resources/plant_types/chardi.tres" id="9_e36ub"]
-[ext_resource type="Script" uid="uid://bypjcvlc15gsm" path="res://common/inventory/scripts/items/seed.gd" id="10_hb5m1"]
-[ext_resource type="Resource" uid="uid://dsctivn1vrem2" path="res://entities/plants/resources/plant_types/maias.tres" id="11_x5p1p"]
-[ext_resource type="PackedScene" uid="uid://dj7gp3crtg2yt" path="res://entities/camera/camera.tscn" id="12_qhcbd"]
-[ext_resource type="Resource" uid="uid://cxrc5wchpqm18" path="res://entities/plants/resources/plant_types/champ.tres" id="15_80cx4"]
-[ext_resource type="Resource" uid="uid://c5oxxif3h5yxo" path="res://entities/plants/resources/plant_types/pili.tres" id="16_e8heu"]
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_qt76e"]
-atlas = ExtResource("8_boyg6")
-region = Rect2(1140, 345, 141, 128)
-
-[sub_resource type="Resource" id="Resource_7sc4i"]
-script = ExtResource("10_hb5m1")
-plant_type = ExtResource("9_e36ub")
-name = "Chardi"
-description = "This plant remove a lot of contamination around when it becomes mature."
-icon = SubResource("AtlasTexture_qt76e")
-use_zone_radius = 5
-use_energy = 1
-metadata/_custom_type_script = "uid://bypjcvlc15gsm"
-
-[sub_resource type="Resource" id="Resource_80cx4"]
-script = ExtResource("10_hb5m1")
-plant_type = ExtResource("9_e36ub")
-name = "Chardi"
-description = "This plant remove a lot of contamination around when it becomes mature."
-icon = SubResource("AtlasTexture_qt76e")
-use_zone_radius = 5
-use_energy = 1
-metadata/_custom_type_script = "uid://bypjcvlc15gsm"
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_sri3b"]
-atlas = ExtResource("8_boyg6")
-region = Rect2(1697, 331, 125, 158)
-
-[sub_resource type="Resource" id="Resource_e8heu"]
-script = ExtResource("10_hb5m1")
-plant_type = ExtResource("11_x5p1p")
-name = "Maias"
-description = "This gorgeous flower produce a lot of seeds."
-icon = SubResource("AtlasTexture_sri3b")
-use_zone_radius = 5
-use_energy = 1
-metadata/_custom_type_script = "uid://bypjcvlc15gsm"
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_my6by"]
-atlas = ExtResource("8_boyg6")
-region = Rect2(610, 315, 124, 180)
-
-[sub_resource type="Resource" id="Resource_rvswv"]
-script = ExtResource("10_hb5m1")
-plant_type = ExtResource("15_80cx4")
-name = "Champ"
-description = "When mature, produce a seed every day"
-icon = SubResource("AtlasTexture_my6by")
-use_zone_radius = 5
-use_energy = 1
-metadata/_custom_type_script = "uid://bypjcvlc15gsm"
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_kidty"]
-atlas = ExtResource("8_boyg6")
-region = Rect2(1415, 91, 149, 102)
-
-[sub_resource type="Resource" id="Resource_boyg6"]
-script = ExtResource("10_hb5m1")
-plant_type = ExtResource("16_e8heu")
-name = "Pili"
-description = "Pili slowly decontaminate each day when mature."
-icon = SubResource("AtlasTexture_kidty")
-use_zone_radius = 5
-use_energy = 1
-metadata/_custom_type_script = "uid://bypjcvlc15gsm"
-
-[node name="Game" type="Node2D"]
-
-[node name="CanvasLayer" type="CanvasLayer" parent="."]
-
-[node name="RootGui" parent="CanvasLayer" instance=ExtResource("1_iotsf")]
-metadata/_edit_use_anchors_ = true
-
-[node name="Pause" parent="CanvasLayer" instance=ExtResource("2_215e1")]
-process_mode = 3
-visible = false
-z_index = 1000
-
-[node name="Win" parent="CanvasLayer" instance=ExtResource("3_7sc4i")]
-visible = false
-
-[node name="Entities" type="Node2D" parent="."]
-y_sort_enabled = true
-
-[node name="Player" parent="Entities" instance=ExtResource("2_lc2xo")]
-
-[node name="ItemObject" type="Area2D" parent="Entities"]
-position = Vector2(0, 129)
-script = ExtResource("3_215e1")
-item = ExtResource("6_lc2xo")
-metadata/_custom_type_script = "uid://dedg615xudpoq"
-
-[node name="ItemObject2" type="Area2D" parent="Entities"]
-position = Vector2(-162, 23)
-script = ExtResource("3_215e1")
-item = ExtResource("7_215e1")
-metadata/_custom_type_script = "uid://dedg615xudpoq"
-
-[node name="RechargeStation" parent="Entities" instance=ExtResource("8_7sc4i")]
-position = Vector2(-1, -217)
-
-[node name="Planet" parent="." node_paths=PackedStringArray("import_entities_from_node") instance=ExtResource("6_e8heu")]
-loot_items = Array[ExtResource("7_rvswv")]([SubResource("Resource_7sc4i"), SubResource("Resource_80cx4"), SubResource("Resource_e8heu"), SubResource("Resource_rvswv"), SubResource("Resource_boyg6")])
-import_entities_from_node = NodePath("../Entities")
-
-[node name="Camera" parent="." node_paths=PackedStringArray("following") instance=ExtResource("12_qhcbd")]
-position = Vector2(2.22, 0)
-following = NodePath("../Entities/Player")
-
-[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"]
-[connection signal="day_limit_exceed" from="Planet" to="CanvasLayer/Win" method="_on_planet_day_limit_exceed"]
-[connection signal="pass_day_ended" from="Planet" to="CanvasLayer/RootGui" method="_on_planet_pass_day_ended"]
-[connection signal="pass_day_started" from="Planet" to="CanvasLayer/RootGui" method="_on_planet_pass_day_started"]
-[connection signal="planet_updated" from="Planet" to="CanvasLayer/RootGui" method="_on_planet_updated"]
diff --git a/gui/game/game_gui.tscn b/gui/game/game_gui.tscn
index f81115f..3c70796 100644
--- a/gui/game/game_gui.tscn
+++ b/gui/game/game_gui.tscn
@@ -3,10 +3,10 @@
[ext_resource type="Script" uid="uid://cqao7n800qy40" path="res://gui/game/scripts/game_gui.gd" id="1_udau0"]
[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/default_theme.tres" id="2_nq5i2"]
[ext_resource type="Texture2D" uid="uid://cm3ehinvvj52i" path="res://gui/game/assets/texture/Interface sans boutons.png" id="3_n4kem"]
-[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://gui/game/assets/icons/bolt.svg" id="4_k4juk"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="4_k4juk"]
[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="4_ujg5r"]
[ext_resource type="PackedScene" uid="uid://d3lff5fui1k0c" path="res://gui/game/inspector/inspector.tscn" id="6_dr1y2"]
-[ext_resource type="Texture2D" uid="uid://b5cuxgisrsfgt" path="res://gui/game/pause/assets/icons/player-pause.svg" id="9_2wykm"]
+[ext_resource type="Texture2D" uid="uid://b5cuxgisrsfgt" path="res://common/icons/player-pause.svg" id="9_2wykm"]
[sub_resource type="Gradient" id="Gradient_id0t5"]
interpolation_mode = 1
@@ -279,10 +279,10 @@ stretch_mode = 5
unique_name_in_owner = true
layout_mode = 1
anchors_preset = -1
-anchor_left = 0.281899
-anchor_top = 0.384375
-anchor_right = 0.281899
-anchor_bottom = 0.584375
+anchor_left = 0.267062
+anchor_top = 0.453125
+anchor_right = 0.267062
+anchor_bottom = 0.496875
offset_left = -44.0
offset_top = -12.5
offset_right = 44.0
@@ -296,6 +296,7 @@ metadata/_edit_use_anchors_ = true
custom_minimum_size = Vector2(36.64, 0)
layout_mode = 2
texture = ExtResource("4_k4juk")
+expand_mode = 2
stretch_mode = 5
[node name="EnergyCount" type="Label" parent="MarginContainer/PlayerInfo/EnergyInfo"]
diff --git a/gui/game/pause/pause.tscn b/gui/game/pause/pause.tscn
index a9c2c2d..b4b5eda 100644
--- a/gui/game/pause/pause.tscn
+++ b/gui/game/pause/pause.tscn
@@ -4,9 +4,9 @@
[ext_resource type="Script" uid="uid://crt2d4m5ba25i" path="res://gui/game/pause/scripts/pause.gd" id="1_he4ox"]
[ext_resource type="FontFile" uid="uid://cpnsnrqhfkj3k" path="res://gui/ressources/fonts/spincycle_ot.otf" id="2_8d1kg"]
[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="3_0pdto"]
-[ext_resource type="Texture2D" uid="uid://vmsn54d1ptih" path="res://gui/game/pause/assets/icons/player-play.svg" id="5_apjlw"]
-[ext_resource type="Texture2D" uid="uid://bewr0t1wi8pff" path="res://gui/game/pause/assets/icons/rotate.svg" id="6_58dya"]
-[ext_resource type="Texture2D" uid="uid://dex283rx00fjb" path="res://gui/game/pause/assets/icons/logout.svg" id="7_yj6f1"]
+[ext_resource type="Texture2D" uid="uid://vmsn54d1ptih" path="res://common/icons/player-play.svg" id="5_apjlw"]
+[ext_resource type="Texture2D" uid="uid://bewr0t1wi8pff" path="res://common/icons/rotate.svg" id="6_58dya"]
+[ext_resource type="Texture2D" uid="uid://dex283rx00fjb" path="res://common/icons/logout.svg" id="7_yj6f1"]
[sub_resource type="LabelSettings" id="LabelSettings_apjlw"]
font = ExtResource("2_8d1kg")
diff --git a/gui/game/scripts/game_gui.gd b/gui/game/scripts/game_gui.gd
index b814a1f..5cfa703 100644
--- a/gui/game/scripts/game_gui.gd
+++ b/gui/game/scripts/game_gui.gd
@@ -19,8 +19,8 @@ func _on_day_pass_pressed():
await $AnimationPlayer.animation_finished
func _on_planet_updated(planet:Planet):
- %DayCount.text = "Day " + str(planet.day)
- %DecontaminationCoverage.text = str(roundi(planet.decontamination_coverage * 100)) + "%"
+ %DayCount.text = "Day " + str(planet.day) + "/" + str(planet.day_limit)
+ %DecontaminationCoverage.text = str(roundi(planet.decontamination_surface)) + " m2"
func _on_player_action_tried_without_energy():
diff --git a/gui/game/win/scripts/win.gd b/gui/game/win/scripts/win.gd
index 392e647..91a3f6e 100644
--- a/gui/game/win/scripts/win.gd
+++ b/gui/game/win/scripts/win.gd
@@ -3,10 +3,10 @@ extends Control
func _ready():
visible = false
-func win(decontamination_coverage : float):
+func win(decontamination_surface : float):
visible = true
get_tree().paused = true
- %WinTitle.text = "Score : " + str(roundi(decontamination_coverage * 100)) + "%"
+ %WinTitle.text = "Score : " + str(roundi(decontamination_surface)) + " m2"
func _on_restart_pressed():
get_tree().reload_current_scene()
@@ -16,4 +16,4 @@ func _on_quit_pressed():
func _on_planet_day_limit_exceed(planet : Planet):
- win(planet.decontamination_coverage)
+ win(planet.decontamination_surface)
diff --git a/gui/game/win/win.tscn b/gui/game/win/win.tscn
index 4ed02d7..f24d8a1 100644
--- a/gui/game/win/win.tscn
+++ b/gui/game/win/win.tscn
@@ -4,8 +4,8 @@
[ext_resource type="Script" uid="uid://b3wuxv04clyed" path="res://gui/game/win/scripts/win.gd" id="1_sehw2"]
[ext_resource type="FontFile" uid="uid://cpnsnrqhfkj3k" path="res://gui/ressources/fonts/spincycle_ot.otf" id="2_sehw2"]
[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="3_0b3c6"]
-[ext_resource type="Texture2D" uid="uid://bewr0t1wi8pff" path="res://gui/game/pause/assets/icons/rotate.svg" id="4_8p3aj"]
-[ext_resource type="Texture2D" uid="uid://dex283rx00fjb" path="res://gui/game/pause/assets/icons/logout.svg" id="5_j3wid"]
+[ext_resource type="Texture2D" uid="uid://bewr0t1wi8pff" path="res://common/icons/rotate.svg" id="4_8p3aj"]
+[ext_resource type="Texture2D" uid="uid://dex283rx00fjb" path="res://common/icons/logout.svg" id="5_j3wid"]
[sub_resource type="LabelSettings" id="LabelSettings_eq457"]
font = ExtResource("2_sehw2")
diff --git a/gui/menu/scripts/menu.gd b/gui/menu/scripts/menu.gd
index c7366e4..51540a8 100644
--- a/gui/menu/scripts/menu.gd
+++ b/gui/menu/scripts/menu.gd
@@ -6,4 +6,5 @@ func _ready():
%Version.text = ProjectSettings.get_setting("application/config/version")
func _on_start_pressed():
+ GameInfo.game_data.current_terrain_data = TerrainData.new()
get_tree().change_scene_to_file(start_scene_path)
diff --git a/gui/pointer/pointer.tscn b/gui/pointer/pointer.tscn
index 38e32e5..880639b 100644
--- a/gui/pointer/pointer.tscn
+++ b/gui/pointer/pointer.tscn
@@ -3,8 +3,8 @@
[ext_resource type="Script" uid="uid://vhumsfntpqcl" path="res://gui/pointer/scripts/pointer.gd" id="1_1pe2k"]
[ext_resource type="Texture2D" uid="uid://bspffyprdywgc" path="res://gui/pointer/assets/cursors/pointer.svg" id="2_q4bvb"]
[ext_resource type="AudioStream" uid="uid://bym03qp4n6vep" path="res://gui/pointer/assets/sounds/click.wav" id="3_kj0cm"]
-[ext_resource type="Texture2D" uid="uid://djb52fosgmv4j" path="res://gui/pointer/assets/icons/left_click.svg" id="3_pshoq"]
-[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://gui/game/assets/icons/bolt.svg" id="4_b4uwv"]
+[ext_resource type="Texture2D" uid="uid://djb52fosgmv4j" path="res://common/icons/left_click.svg" id="3_pshoq"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="4_b4uwv"]
[ext_resource type="Script" uid="uid://c2en2hc6a7ils" path="res://gui/pointer/scripts/action_zone.gd" id="4_pshoq"]
[node name="Pointer" type="Node"]
@@ -46,11 +46,13 @@ layout_mode = 2
[node name="MouseImage" type="TextureRect" parent="CanvasLayer/Inspector/Container/Action"]
layout_mode = 2
texture = ExtResource("3_pshoq")
+expand_mode = 2
[node name="ActionEnergyImage" type="TextureRect" parent="CanvasLayer/Inspector/Container/Action"]
unique_name_in_owner = true
layout_mode = 2
texture = ExtResource("4_b4uwv")
+expand_mode = 2
[node name="ActionText" type="Label" parent="CanvasLayer/Inspector/Container/Action"]
unique_name_in_owner = true
diff --git a/project.godot b/project.godot
index f253d77..d440007 100644
--- a/project.godot
+++ b/project.godot
@@ -21,6 +21,7 @@ config/icon="uid://df0y0s666ui4h"
Pointer="*res://gui/pointer/pointer.tscn"
Music="*res://common/music/music.tscn"
+GameInfo="*res://common/game_info/game_info.gd"
[input]
diff --git a/root.tscn b/root.tscn
index 73ba0b6..1ae26b0 100644
--- a/root.tscn
+++ b/root.tscn
@@ -6,7 +6,7 @@
[ext_resource type="Theme" uid="uid://bgcmd213j6gk1" path="res://gui/ressources/default_theme.tres" id="4_gd4vy"]
[ext_resource type="Texture2D" uid="uid://nx4wxpr6mk8l" path="res://gui/menu/assets/texture/SeedingPlanetsLogo.png" id="5_qw60f"]
[ext_resource type="Texture2D" uid="uid://03ijmo6xlytu" path="res://gui/menu/assets/texture/abre1glow.png" id="6_eji0w"]
-[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://gui/game/assets/icons/bolt.svg" id="7_qwhpj"]
+[ext_resource type="Texture2D" uid="uid://dcgnamu7sb3ov" path="res://common/icons/bolt.svg" id="7_qwhpj"]
[ext_resource type="LabelSettings" uid="uid://dqwayi8yjwau2" path="res://gui/ressources/title_label_settings.tres" id="8_bf3um"]
[node name="Root" type="Node2D"]
diff --git a/stages/planet_run/planet_run.tscn b/stages/planet_run/planet_run.tscn
new file mode 100644
index 0000000..df35ef1
--- /dev/null
+++ b/stages/planet_run/planet_run.tscn
@@ -0,0 +1,59 @@
+[gd_scene load_steps=10 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"]
+[ext_resource type="PackedScene" uid="uid://v41hfc7haaye" path="res://gui/game/win/win.tscn" id="3_6guxm"]
+[ext_resource type="PackedScene" uid="uid://bgvbgeq46wee2" path="res://entities/player/player.tscn" id="4_g33f4"]
+[ext_resource type="Script" uid="uid://dedg615xudpoq" path="res://entities/interactables/item_object/script/item_object.gd" id="5_kgrdw"]
+[ext_resource type="Resource" uid="uid://ddqalo1k30i5x" path="res://common/inventory/resources/items/default_shovel.tres" id="6_4rjiq"]
+[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://dj7gp3crtg2yt" path="res://entities/camera/camera.tscn" id="16_m18ms"]
+
+[node name="PlanetRun" type="Node2D"]
+
+[node name="CanvasLayer" type="CanvasLayer" parent="."]
+
+[node name="RootGui" parent="CanvasLayer" instance=ExtResource("1_yy1uy")]
+metadata/_edit_use_anchors_ = true
+
+[node name="Pause" parent="CanvasLayer" instance=ExtResource("2_bt4fd")]
+process_mode = 3
+visible = false
+z_index = 1000
+
+[node name="Win" parent="CanvasLayer" instance=ExtResource("3_6guxm")]
+visible = false
+
+[node name="Entities" type="Node2D" parent="."]
+y_sort_enabled = true
+
+[node name="Player" parent="Entities" instance=ExtResource("4_g33f4")]
+position = Vector2(0, 13.49)
+
+[node name="ItemObject" type="Area2D" parent="Entities"]
+position = Vector2(0, 129)
+script = ExtResource("5_kgrdw")
+item = ExtResource("6_4rjiq")
+metadata/_custom_type_script = "uid://dedg615xudpoq"
+
+[node name="RechargeStation" parent="Entities" instance=ExtResource("7_h4bgy")]
+
+[node name="Planet" parent="." node_paths=PackedStringArray("import_entities_from_node") instance=ExtResource("8_t31p7")]
+loot_number = Array[int]([1])
+loot_item_number = Array[int]([1])
+objective_first_distance = 150
+objective_between_distance = 150
+import_entities_from_node = NodePath("../Entities")
+
+[node name="Camera" parent="." node_paths=PackedStringArray("following") instance=ExtResource("16_m18ms")]
+position = Vector2(2.22, 0)
+following = NodePath("../Entities/Player")
+
+[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"]
+[connection signal="day_limit_exceed" from="Planet" to="CanvasLayer/Win" method="_on_planet_day_limit_exceed"]
+[connection signal="pass_day_ended" from="Planet" to="CanvasLayer/RootGui" method="_on_planet_pass_day_ended"]
+[connection signal="pass_day_started" from="Planet" to="CanvasLayer/RootGui" method="_on_planet_pass_day_started"]
+[connection signal="planet_updated" from="Planet" to="CanvasLayer/RootGui" method="_on_planet_updated"]
diff --git a/stages/scripts/game.gd b/stages/scripts/game.gd
new file mode 100644
index 0000000..c6680ed
--- /dev/null
+++ b/stages/scripts/game.gd
@@ -0,0 +1,15 @@
+extends Node2D
+class_name PlanetRun
+
+@export var planet : Planet
+@export var game_data : GameData
+
+func _ready():
+ if not game_data:
+ game_data = GameData.new()
+
+ if not game_data.current_terrain_data:
+ game_data.current_terrain_data = TerrainData.new()
+
+ if planet:
+ planet.instant
\ No newline at end of file
diff --git a/stages/scripts/game.gd.uid b/stages/scripts/game.gd.uid
new file mode 100644
index 0000000..937dd0b
--- /dev/null
+++ b/stages/scripts/game.gd.uid
@@ -0,0 +1 @@
+uid://gn3dt881v5tk
diff --git a/stages/terrain/planet/scripts/planet.gd b/stages/terrain/planet/scripts/planet.gd
index 57d5e2f..1737561 100644
--- a/stages/terrain/planet/scripts/planet.gd
+++ b/stages/terrain/planet/scripts/planet.gd
@@ -8,14 +8,19 @@ signal pass_day_proceeded(planet : Planet)
signal pass_day_ended(planet : Planet)
const PASS_DAY_ANIMATION_TIME : float = 1.5
-const DAY_LIMIT : int = 10
+const DEFAULT_DAY_LIMIT : int = 10
const PLANET_TEXTURE_SCALE : float = 5.0
+const OBJECTIVE_MAX_LEVEL : int = 10
+const OBJECTIVE_MIN_ANGLE_DIFF = PI/2
@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 var loot_items : Array[Item] = []
+
+@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
@@ -23,20 +28,43 @@ const PLANET_TEXTURE_SCALE : float = 5.0
@onready var background_sprite : Polygon2D = generate_background_sprite()
@onready var contamination_sprite : Polygon2D = generate_contamination_terrain_sprite()
-@onready var decontamination_coverage : float = terrainData.get_decontamination_coverage() :
+@onready var decontamination_surface : float = terrain_data.get_decontamination_surface() :
set(v):
- decontamination_coverage = v
+ print(v)
+ decontamination_surface = v
planet_updated.emit(self)
+@onready var objective_scene : PackedScene = preload("res://entities/objectives/objective.tscn")
var contamination_texture : ImageTexture
var day : int = 1 :
set(v):
day = v
planet_updated.emit(self)
+var day_limit = DEFAULT_DAY_LIMIT :
+ set(v):
+ day_limit = v
+ planet_updated.emit(self)
+var player : Player
func _ready():
planet_updated.emit(self)
generate_loot(first_loot_number)
+ generate_objectives()
+
+ # queue_redraw()
+
+# func _draw():
+# var factor = 10
+# for x in range(terrain_data.terrain_size.x / factor):
+# for y in range(terrain_data.terrain_size.y / factor):
+# var point = Vector2(x, y) * factor
+
+# draw_circle(
+# point,
+# factor/10,
+# Color.BLUE if is_there_contamination(point) else Color.RED,
+# true
+# )
#region ------------------ Generation ------------------
@@ -53,12 +81,15 @@ func add_entity(e : Node2D, container : Node2D = entityContainer):
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 = terrainData.terrainSize
+ var size = terrain_data.terrain_size
sprite.polygon = PackedVector2Array([
Vector2(0,0),
Vector2(size.x, 0),
@@ -82,15 +113,15 @@ func generate_background_sprite() -> Polygon2D:
return sprite
func generate_contamination_terrain_sprite() -> Polygon2D:
- if not terrainData.contamination:
- terrainData.generate_default_contamination()
+ if not terrain_data.contamination:
+ terrain_data.generate_default_contamination()
var sprite :Polygon2D = generate_polygon_sprite(1)
- contamination_texture = ImageTexture.create_from_image(terrainData.contamination)
+ contamination_texture = ImageTexture.create_from_image(terrain_data.contamination)
contamination_material.set_shader_parameter("data_texture", contamination_texture)
- contamination_material.set_shader_parameter("data_texture_size", terrainData.terrainSize)
+ contamination_material.set_shader_parameter("data_texture_size", terrain_data.terrain_size)
contamination_material.set_shader_parameter("texture_scale", PLANET_TEXTURE_SCALE)
sprite.material = contamination_material
@@ -117,15 +148,15 @@ func plant(
return true
func impact_contamination(impact_position : Vector2, impact_radius : int, contamination : bool = false):
- terrainData.impact_contamination(impact_position, impact_radius, 0. if contamination else 1.)
+ terrain_data.impact_contamination(impact_position, impact_radius, 0. if contamination else 1.)
if contamination_texture:
- contamination_texture.update(terrainData.contamination)
+ contamination_texture.update(terrain_data.contamination)
func is_in_zone(point : Vector2) -> bool:
- return terrainData.is_in_image(terrainData.get_pixel_point(point), terrainData.contamination)
+ return terrain_data.is_in_image(terrain_data.get_pixel_point(point), terrain_data.contamination)
func is_there_contamination(point : Vector2) -> bool:
- return terrainData.get_contamination(point) < 0.5
+ return terrain_data.get_contamination(point) < 0.5
func pass_day():
for e : Node2D in entityContainer.get_children():
@@ -147,23 +178,50 @@ func pass_day():
if e.has_method("_end_pass_day"):
e._end_pass_day()
- decontamination_coverage = terrainData.get_decontamination_coverage()
- if day + 1 > DAY_LIMIT:
+ decontamination_surface = terrain_data.get_decontamination_surface()
+ if day + 1 > day_limit:
day_limit_exceed.emit(self)
func generate_loot(number : int = loot_number.pick_random()):
for i in range(number):
var loot = UndergroundLoot.new(self)
for j in range(loot_item_number.pick_random()):
- loot.loot.append(loot_items.pick_random())
+ loot.loot.append(
+ Seed.new(GameInfo.game_data.unlocked_plant_types_path.pick_random())
+ )
add_entity(loot)
var loot_random_range = UndergroundLoot.LOOTED_ITEM_RANDOM_RANGE
loot.global_position = Vector2(
- randf_range(loot_random_range, terrainData.terrainSize.x - loot_random_range),
- randf_range(loot_random_range, terrainData.terrainSize.y - loot_random_range)
+ randf_range(loot_random_range, terrain_data.terrain_size.x - loot_random_range),
+ randf_range(loot_random_range, terrain_data.terrain_size.y - loot_random_range)
)
+func generate_objectives():
+ var last_objective_angle = 10
+ for i in range(OBJECTIVE_MAX_LEVEL):
+ var objective_rewards : Array[ObjectiveReward] = terrain_data.generate_objective_rewards(i, 2)
+
+ for objective_reward in objective_rewards:
+ var objective_angle = randf_range(0, PI*2)
+ while abs(objective_angle - last_objective_angle) < OBJECTIVE_MIN_ANGLE_DIFF:
+ objective_angle = randf_range(0, PI*2)
+
+ last_objective_angle = objective_angle
+
+ generate_objective(
+ objective_first_distance + objective_between_distance * i,
+ objective_angle,
+ objective_reward,
+ )
+
+func generate_objective(distance : int, angle : float, reward : ObjectiveReward):
+ var objective : Objective = objective_scene.instantiate() as Objective
+ add_entity(objective)
+ objective.reward = reward
+
+ objective.position = Vector2.ONE.rotated(angle) * distance
+
#endregion
diff --git a/stages/terrain/scripts/terrain.gd b/stages/terrain/scripts/terrain.gd
index 505d2f6..bf13369 100644
--- a/stages/terrain/scripts/terrain.gd
+++ b/stages/terrain/scripts/terrain.gd
@@ -5,15 +5,11 @@ const BORDER_WIDTH = 100
@export var import_entities_from_node : Node2D = null
-@export var terrainData : TerrainData
+@onready var terrain_data : TerrainData = GameInfo.game_data.current_terrain_data if GameInfo.game_data.current_terrain_data else TerrainData.new()
@onready var borderLimit : StaticBody2D = create_border_limit()
@onready var entityContainer : Node2D = create_entity_container()
-func _init():
- if not terrainData:
- terrainData = TerrainData.new()
-
func add_entity(e : Node2D, container : Node2D = entityContainer):
if e.get_parent():
e.get_parent().remove_child(e)
@@ -23,7 +19,7 @@ func add_entity(e : Node2D, container : Node2D = entityContainer):
func create_entity_container() -> Node2D:
var container = Node2D.new()
container.y_sort_enabled = true
- container.position = terrainData.terrainSize/2
+ container.position = terrain_data.terrain_size/2
add_child(container)
@@ -33,10 +29,22 @@ func create_entity_container() -> Node2D:
return container
-func drop_item(item: Item, item_position : Vector2) -> ItemObject:
+func drop_item(item: Item, item_position : Vector2, random_displacement_factor = 0) -> ItemObject:
var item_object = ItemObject.new(item)
add_entity(item_object)
item_object.global_position = item_position
+
+ if random_displacement_factor:
+ var displacement_direction = randf_range(0,2*PI)
+ var displacement = Vector2.ONE.rotated(displacement_direction) * randf_range(0, random_displacement_factor)
+ var tween : Tween = get_tree().create_tween()
+ tween.tween_property(
+ item_object,
+ "position",
+ item_object.position + displacement,
+ 0.2
+ )
+
return item_object
func create_border_limit() -> StaticBody2D:
@@ -46,7 +54,7 @@ func create_border_limit() -> StaticBody2D:
add_child(staticBody)
staticBody.add_child(staticBodyCollision)
- var size = terrainData.terrainSize
+ var size = terrain_data.terrain_size
staticBodyCollision.polygon = PackedVector2Array([
Vector2(0,0),
Vector2(0, size.y),