seed queue + seed card + distant spawn + reproduction
This commit is contained in:
parent
6faa06f036
commit
0a5af3879d
@ -1,17 +1,20 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://d3srnfkpx01we"]
|
||||
[gd_scene load_steps=6 format=3 uid="uid://d3srnfkpx01we"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://d3hul8b7hlmj7" path="res://scenes/Map.tscn" id="1_nnb57"]
|
||||
[ext_resource type="Script" path="res://scripts/game.gd" id="1_ult6o"]
|
||||
[ext_resource type="PackedScene" uid="uid://dha8pa1les53a" path="res://scenes/Gui.tscn" id="2_d5c8m"]
|
||||
[ext_resource type="Script" path="res://scripts/camera.gd" id="3_7olyu"]
|
||||
[ext_resource type="PackedScene" uid="uid://qpdlnll5pihe" path="res://objects/Planter.tscn" id="3_qx0o7"]
|
||||
|
||||
[node name="Game" type="Node2D"]
|
||||
script = ExtResource("1_ult6o")
|
||||
|
||||
[node name="Map" parent="." instance=ExtResource("1_nnb57")]
|
||||
|
||||
[node name="Interface" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="Gui" parent="Interface" instance=ExtResource("2_d5c8m")]
|
||||
[node name="Gui" parent="Interface" node_paths=PackedStringArray("planter") instance=ExtResource("2_d5c8m")]
|
||||
planter = NodePath("../../Planter")
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
position = Vector2(709, 382)
|
||||
@ -21,3 +24,4 @@ script = ExtResource("3_7olyu")
|
||||
camera = NodePath("../Camera2D")
|
||||
|
||||
[connection signal="scanner_selected" from="Interface/Gui" to="Map" method="_on_gui_scanner_selected"]
|
||||
[connection signal="seed_list_updated" from="Planter" to="Interface/Gui" method="_on_planter_seed_list_updated"]
|
||||
|
||||
BIN
assets/grille_seeds.png
Normal file
BIN
assets/grille_seeds.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 391 KiB |
34
assets/grille_seeds.png.import
Normal file
34
assets/grille_seeds.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b3kjaw1hajc6s"
|
||||
path="res://.godot/imported/grille_seeds.png-e1abfe5b80bdca5644f3d1e62fa17daf.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/grille_seeds.png"
|
||||
dest_files=["res://.godot/imported/grille_seeds.png-e1abfe5b80bdca5644f3d1e62fa17daf.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
|
||||
@ -6,9 +6,10 @@
|
||||
[ext_resource type="Resource" uid="uid://dnahox31xqy6l" path="res://objects/plant_types/peuplier.tres" id="4_tmfl1"]
|
||||
[ext_resource type="Resource" uid="uid://b6ufxuqdcgwmx" path="res://objects/plant_types/chene.tres" id="5_j34av"]
|
||||
|
||||
[node name="Planter" type="Node"]
|
||||
[node name="Planter" type="Node2D"]
|
||||
y_sort_enabled = true
|
||||
script = ExtResource("1_l7lry")
|
||||
plants = Array[ExtResource("2_7h3ga")]([ExtResource("3_lgbrc"), ExtResource("5_j34av"), ExtResource("4_tmfl1")])
|
||||
plants = Array[ExtResource("2_7h3ga")]([ExtResource("3_lgbrc"), ExtResource("4_tmfl1"), ExtResource("5_j34av")])
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
wait_time = 0.2
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://iaf4md4cbwqh"]
|
||||
[gd_scene load_steps=5 format=3 uid="uid://iaf4md4cbwqh"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/gui/seed_card.gd" id="1_ecgsq"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_lissx"]
|
||||
offsets = PackedFloat32Array(1)
|
||||
@ -14,6 +16,7 @@ layout_mode = 3
|
||||
anchors_preset = 0
|
||||
size_flags_horizontal = 8
|
||||
size_flags_vertical = 8
|
||||
script = ExtResource("1_ecgsq")
|
||||
|
||||
[node name="Card" type="PanelContainer" parent="."]
|
||||
layout_mode = 1
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bm8nlb7kmaa6k"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://bm8nlb7kmaa6k"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/gui/seed_queue.gd" id="1_6lrhe"]
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_reedq"]
|
||||
|
||||
@ -9,6 +11,7 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_6lrhe")
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
@ -20,12 +23,6 @@ grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="NextSeed" type="TextureRect" parent="HBoxContainer"]
|
||||
custom_minimum_size = Vector2(80, 80)
|
||||
layout_mode = 2
|
||||
texture = SubResource("NoiseTexture2D_reedq")
|
||||
expand_mode = 2
|
||||
|
||||
[node name="Queue" type="HBoxContainer" parent="HBoxContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
@ -70,3 +67,9 @@ size_flags_horizontal = 4
|
||||
size_flags_vertical = 8
|
||||
texture = SubResource("NoiseTexture2D_reedq")
|
||||
expand_mode = 2
|
||||
|
||||
[node name="NextSeed" type="TextureRect" parent="HBoxContainer"]
|
||||
custom_minimum_size = Vector2(80, 80)
|
||||
layout_mode = 2
|
||||
texture = SubResource("NoiseTexture2D_reedq")
|
||||
expand_mode = 2
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://x4kv2y5f52cm"]
|
||||
[gd_scene load_steps=6 format=3 uid="uid://x4kv2y5f52cm"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://b3kjaw1hajc6s" path="res://assets/grille_seeds.png" id="1_n5onq"]
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_x3g5o"]
|
||||
script/source = "class_name Plant
|
||||
@ -11,24 +13,31 @@ signal grown
|
||||
signal died
|
||||
|
||||
@onready var growing_timer: Timer = $Growing
|
||||
@onready var sprite_node: AnimatedSprite2D = $AnimatedSprite2D
|
||||
@onready var need_checker: Timer = $NeedChecker
|
||||
@onready var sapling_count_down: Timer = $SaplingCountDown
|
||||
@onready var reproduction: Timer = $Reproduction
|
||||
@onready var sprite_node: AnimatedSprite2D = $AnimatedSprite2D
|
||||
|
||||
const NEEDCHECKPERIOD := 1.0
|
||||
const NEED_CHECK_PERIOD := 0.5
|
||||
const SAPLING_LIFETIME_MULT := 2.0 # this multiplies the time to grow to tell the time it can stay as a sapling
|
||||
const OFFSET_REPRODUCTION_PERCT_DIST := 0.5
|
||||
|
||||
var parameter: PlantType
|
||||
var state := PlantState.SAPLING
|
||||
var sapling_time_left: float
|
||||
var can_grow := true
|
||||
|
||||
func init(plant_parameter: PlantType):
|
||||
parameter = plant_parameter
|
||||
sapling_count_down.start(SAPLING_LIFETIME_MULT * parameter.growing_time)
|
||||
sprite_node.sprite_frames = parameter.sprite_frames
|
||||
need_checker.start(NEEDCHECKPERIOD)
|
||||
need_checker.start(NEED_CHECK_PERIOD)
|
||||
|
||||
|
||||
func _on_need_checker_timeout() -> void:
|
||||
can_grow = check_terrain_viability()
|
||||
growing_timer.paused = not can_grow
|
||||
growing_timer.paused = not can_grow and state == PlantState.SAPLING
|
||||
reproduction.paused = not can_grow
|
||||
|
||||
func check_terrain_viability() -> bool:
|
||||
var water := GameTerrain.get_stat(position, GameTerrain.Stats.WATER)
|
||||
@ -41,20 +50,26 @@ func check_terrain_viability() -> bool:
|
||||
|
||||
var presence := GameTerrain.get_stat(position, GameTerrain.Stats.PRESENCE)
|
||||
presence += GameTerrain.LEVELS_NUMBER / 2
|
||||
if presence < parameter.presence_need[0] or parameter.presence_need[1]:
|
||||
if presence < parameter.presence_need[0] or presence > parameter.presence_need[1]:
|
||||
return false
|
||||
|
||||
return true
|
||||
|
||||
|
||||
func _on_growing_timeout() -> void:
|
||||
if state == PlantState.SAPLING:
|
||||
can_grow = check_terrain_viability()
|
||||
if not can_grow:
|
||||
growing_timer.start()
|
||||
return
|
||||
|
||||
match state:
|
||||
PlantState.SAPLING:
|
||||
grow()
|
||||
PlantState.GROWN:
|
||||
die()
|
||||
PlantState.DEAD:
|
||||
push_error(\"Already dead\")
|
||||
remove()
|
||||
|
||||
|
||||
func plant(new_position: Vector2):
|
||||
@ -69,6 +84,7 @@ func grow():
|
||||
push_error(\"Tried to grow \" + parameter.type + \", but was not at sapling state\")
|
||||
return
|
||||
state = PlantState.GROWN
|
||||
sapling_count_down.stop()
|
||||
growing_timer.start(parameter.dying_time)
|
||||
GameTerrain.modify_zone(position,
|
||||
parameter.distance_prod,
|
||||
@ -82,25 +98,87 @@ func grow():
|
||||
parameter.distance_prod,
|
||||
GameTerrain.Stats.PRESENCE,
|
||||
parameter.presence_prod)
|
||||
|
||||
reproduction.start(parameter.dying_time / (parameter.offspring_per_lifetime + 1) + 0.1)
|
||||
|
||||
grown.emit()
|
||||
sprite_node.play(\"GROWN\")
|
||||
|
||||
|
||||
func die():
|
||||
state = PlantState.DEAD
|
||||
# remove alive prod and add dead prod
|
||||
GameTerrain.modify_zone(position,
|
||||
parameter.distance_prod,
|
||||
GameTerrain.Stats.WATER,
|
||||
-parameter.water_prod + parameter.dead_water_prod)
|
||||
GameTerrain.modify_zone(position,
|
||||
parameter.distance_prod,
|
||||
GameTerrain.Stats.FERTILITY,
|
||||
-parameter.fertility_prod + parameter.dead_fertility_prod)
|
||||
GameTerrain.modify_zone(position,
|
||||
parameter.distance_prod,
|
||||
GameTerrain.Stats.PRESENCE,
|
||||
-parameter.presence_prod)
|
||||
growing_timer.start(parameter.dead_time)
|
||||
died.emit()
|
||||
sprite_node.play(\"DEAD\")
|
||||
|
||||
func remove(was_dead: bool = true):
|
||||
if was_dead:
|
||||
GameTerrain.modify_zone(position,
|
||||
parameter.distance_prod,
|
||||
GameTerrain.Stats.WATER,
|
||||
-parameter.dead_water_prod)
|
||||
GameTerrain.modify_zone(position,
|
||||
parameter.distance_prod,
|
||||
GameTerrain.Stats.FERTILITY,
|
||||
-parameter.dead_fertility_prod)
|
||||
queue_free()
|
||||
|
||||
|
||||
func _on_sapling_count_down_timeout() -> void:
|
||||
remove(false)
|
||||
|
||||
|
||||
func _on_reproduction_timeout() -> void:
|
||||
var min_dist := parameter.distance_prod - parameter.distance_prod * OFFSET_REPRODUCTION_PERCT_DIST
|
||||
var max_dist := parameter.distance_prod + parameter.distance_prod * OFFSET_REPRODUCTION_PERCT_DIST
|
||||
var plant_pos = position + (Vector2.RIGHT * randf_range(min_dist, max_dist)).rotated(randf_range(0, PI))
|
||||
|
||||
var space := get_world_2d().direct_space_state
|
||||
var parameters = PhysicsPointQueryParameters2D.new()
|
||||
parameters.position = plant_pos
|
||||
parameters.collide_with_areas = true
|
||||
parameters.collide_with_bodies = false
|
||||
var result := space.intersect_point(parameters, 1)
|
||||
if result.size() > 0:
|
||||
return
|
||||
|
||||
var offspring = self.duplicate()
|
||||
self.get_parent().add_child(offspring)
|
||||
offspring.init(parameter)
|
||||
offspring.plant(plant_pos)
|
||||
"
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_5did5"]
|
||||
atlas = ExtResource("1_n5onq")
|
||||
region = Rect2(810, 540, 270, 270)
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_667un"]
|
||||
animations = [{
|
||||
"frames": [],
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": SubResource("AtlasTexture_5did5")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"SEED",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_jksuk"]
|
||||
radius = 36.0
|
||||
|
||||
[node name="Plant" type="Node2D"]
|
||||
script = SubResource("GDScript_x3g5o")
|
||||
|
||||
@ -109,10 +187,23 @@ one_shot = true
|
||||
|
||||
[node name="NeedChecker" type="Timer" parent="."]
|
||||
|
||||
[node name="SaplingCountDown" type="Timer" parent="."]
|
||||
one_shot = true
|
||||
|
||||
[node name="Reproduction" type="Timer" parent="."]
|
||||
|
||||
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
|
||||
scale = Vector2(0.2, 0.2)
|
||||
sprite_frames = SubResource("SpriteFrames_667un")
|
||||
animation = &"SEED"
|
||||
offset = Vector2(0, -250)
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
shape = SubResource("CircleShape2D_jksuk")
|
||||
|
||||
[connection signal="timeout" from="Growing" to="." method="_on_growing_timeout"]
|
||||
[connection signal="timeout" from="NeedChecker" to="." method="_on_need_checker_timeout"]
|
||||
[connection signal="timeout" from="SaplingCountDown" to="." method="_on_sapling_count_down_timeout"]
|
||||
[connection signal="timeout" from="Reproduction" to="." method="_on_reproduction_timeout"]
|
||||
|
||||
@ -1,8 +1,13 @@
|
||||
[gd_resource type="Resource" script_class="PlantType" load_steps=7 format=3 uid="uid://bgi2lo7kb3d2v"]
|
||||
[gd_resource type="Resource" script_class="PlantType" load_steps=9 format=3 uid="uid://bgi2lo7kb3d2v"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/plant_type.gd" id="1_i8xe4"]
|
||||
[ext_resource type="Texture2D" uid="uid://b3kjaw1hajc6s" path="res://assets/grille_seeds.png" id="2_4rpny"]
|
||||
[ext_resource type="Texture2D" uid="uid://r1bq2tgt1yxf" path="res://assets/gamejam_plantes_props1.png" id="2_gaemm"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_1lwna"]
|
||||
atlas = ExtResource("2_4rpny")
|
||||
region = Rect2(0, 0, 270, 270)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_fxqnu"]
|
||||
atlas = ExtResource("2_gaemm")
|
||||
region = Rect2(1920, 1620, 320, 540)
|
||||
@ -45,15 +50,18 @@ animations = [{
|
||||
[resource]
|
||||
script = ExtResource("1_i8xe4")
|
||||
type = "Chardon"
|
||||
seed_sprite = SubResource("AtlasTexture_1lwna")
|
||||
sprite_frames = SubResource("SpriteFrames_fxtnk")
|
||||
growing_time = 0.5
|
||||
dying_time = 10.0
|
||||
water_need = [0, 0]
|
||||
fertility_need = [0, 0]
|
||||
presence_need = [0, 0]
|
||||
water_prod = 1
|
||||
fertility_prod = -1
|
||||
presence_prod = 1
|
||||
growing_time = 1.0
|
||||
offspring_per_lifetime = 1
|
||||
dying_time = 30.0
|
||||
dead_time = 10.0
|
||||
water_need = [-5, 5]
|
||||
fertility_need = [-5, 5]
|
||||
presence_need = [0, 5]
|
||||
water_prod = 2
|
||||
fertility_prod = 0
|
||||
presence_prod = 2
|
||||
dead_water_prod = 0
|
||||
dead_fertility_prod = 1
|
||||
distance_prod = 50
|
||||
distance_prod = 150
|
||||
|
||||
@ -1,7 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="PlantType" load_steps=7 format=3 uid="uid://b6ufxuqdcgwmx"]
|
||||
[gd_resource type="Resource" script_class="PlantType" load_steps=9 format=3 uid="uid://b6ufxuqdcgwmx"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/plant_type.gd" id="1_meppe"]
|
||||
[ext_resource type="Texture2D" uid="uid://r1bq2tgt1yxf" path="res://assets/gamejam_plantes_props1.png" id="2_jkmk8"]
|
||||
[ext_resource type="Texture2D" uid="uid://b3kjaw1hajc6s" path="res://assets/grille_seeds.png" id="2_m81be"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_bqj8q"]
|
||||
atlas = ExtResource("2_m81be")
|
||||
region = Rect2(270, 0, 270, 270)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_vmgwa"]
|
||||
atlas = ExtResource("2_jkmk8")
|
||||
@ -45,15 +50,18 @@ animations = [{
|
||||
[resource]
|
||||
script = ExtResource("1_meppe")
|
||||
type = "Chene"
|
||||
seed_sprite = SubResource("AtlasTexture_bqj8q")
|
||||
sprite_frames = SubResource("SpriteFrames_shufc")
|
||||
growing_time = 50.0
|
||||
growing_time = 20.0
|
||||
offspring_per_lifetime = 3
|
||||
dying_time = 100.0
|
||||
water_need = [0, 0]
|
||||
fertility_need = [0, 0]
|
||||
presence_need = [0, 0]
|
||||
water_prod = 1
|
||||
fertility_prod = 2
|
||||
presence_prod = 1
|
||||
dead_time = 200.0
|
||||
water_need = [1, 5]
|
||||
fertility_need = [1, 5]
|
||||
presence_need = [3, 7]
|
||||
water_prod = 3
|
||||
fertility_prod = 0
|
||||
presence_prod = 5
|
||||
dead_water_prod = 0
|
||||
dead_fertility_prod = 1
|
||||
distance_prod = 50
|
||||
dead_fertility_prod = 5
|
||||
distance_prod = 400
|
||||
|
||||
@ -1,7 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="PlantType" load_steps=7 format=3 uid="uid://dnahox31xqy6l"]
|
||||
[gd_resource type="Resource" script_class="PlantType" load_steps=9 format=3 uid="uid://dnahox31xqy6l"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/plant_type.gd" id="1_mhtmv"]
|
||||
[ext_resource type="Texture2D" uid="uid://r1bq2tgt1yxf" path="res://assets/gamejam_plantes_props1.png" id="2_gcjog"]
|
||||
[ext_resource type="Texture2D" uid="uid://b3kjaw1hajc6s" path="res://assets/grille_seeds.png" id="2_od2qm"]
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_dkacp"]
|
||||
atlas = ExtResource("2_od2qm")
|
||||
region = Rect2(540, 0, 270, 270)
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ncq3n"]
|
||||
atlas = ExtResource("2_gcjog")
|
||||
@ -44,16 +49,19 @@ animations = [{
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_mhtmv")
|
||||
type = "Peuplier"
|
||||
type = "Buisson"
|
||||
seed_sprite = SubResource("AtlasTexture_dkacp")
|
||||
sprite_frames = SubResource("SpriteFrames_d15np")
|
||||
growing_time = 2.0
|
||||
dying_time = 2.0
|
||||
water_need = [0, 0]
|
||||
fertility_need = [0, 0]
|
||||
presence_need = [0, 0]
|
||||
water_prod = 2
|
||||
offspring_per_lifetime = 1
|
||||
dying_time = 45.0
|
||||
dead_time = 15.0
|
||||
water_need = [1, 5]
|
||||
fertility_need = [-5, 5]
|
||||
presence_need = [1, 10]
|
||||
water_prod = 0
|
||||
fertility_prod = 2
|
||||
presence_prod = 1
|
||||
presence_prod = 3
|
||||
dead_water_prod = 0
|
||||
dead_fertility_prod = 1
|
||||
distance_prod = 25.0
|
||||
distance_prod = 250
|
||||
|
||||
12
scripts/game.gd
Normal file
12
scripts/game.gd
Normal file
@ -0,0 +1,12 @@
|
||||
extends Node2D
|
||||
|
||||
@onready var gui: Gui = $Interface/Gui
|
||||
@onready var planter: Planter = $Planter
|
||||
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
|
||||
func _on_planter_seed_list_updated() -> void:
|
||||
pass # Replace with function body.
|
||||
@ -3,5 +3,20 @@ extends Control
|
||||
|
||||
signal scanner_selected
|
||||
|
||||
@onready var seed_queue: Control = $MarginContainer/SeedQueue
|
||||
@onready var seed_card: Control = $MarginContainer/SeedCard
|
||||
|
||||
@export var planter: Planter
|
||||
|
||||
func _ready() -> void:
|
||||
seed_queue.planter = planter
|
||||
seed_card.planter = planter
|
||||
|
||||
|
||||
func _on_scanner_modes_scanner_selected(type : Scanners.Type):
|
||||
emit_signal("scanner_selected", type)
|
||||
|
||||
|
||||
func _on_planter_seed_list_updated() -> void:
|
||||
seed_queue.update_queue()
|
||||
seed_card.update_card()
|
||||
|
||||
15
scripts/gui/seed_card.gd
Normal file
15
scripts/gui/seed_card.gd
Normal file
@ -0,0 +1,15 @@
|
||||
extends Control
|
||||
|
||||
@onready var nom: Label = $Card/MarginContainer/VBoxContainer/Nom
|
||||
@onready var image: TextureRect = $Card/MarginContainer/VBoxContainer/Image
|
||||
@onready var besoins: Label = $Card/MarginContainer/VBoxContainer/Besoins
|
||||
@onready var apports: Label = $Card/MarginContainer/VBoxContainer/Apports
|
||||
|
||||
var planter: Planter
|
||||
|
||||
func update_card():
|
||||
var next_seed_param := planter.get_plant_from_queue()
|
||||
nom.text = next_seed_param.type
|
||||
image.texture = next_seed_param.sprite_frames.get_frame_texture("GROWN", 0)
|
||||
besoins.text = "w: [" + str(next_seed_param.water_need[0]) + ", " + str(next_seed_param.water_need[1]) + "]\nf: [" + str(next_seed_param.fertility_need[0]) + ", " + str(next_seed_param.fertility_need[1]) + "]"
|
||||
apports.text = "w: " + str(next_seed_param.water_prod) + "\nf: " + str(next_seed_param.fertility_prod)
|
||||
15
scripts/gui/seed_queue.gd
Normal file
15
scripts/gui/seed_queue.gd
Normal file
@ -0,0 +1,15 @@
|
||||
extends Control
|
||||
|
||||
@onready var next_seed: TextureRect = $HBoxContainer/NextSeed
|
||||
@onready var queue: HBoxContainer = $HBoxContainer/Queue
|
||||
|
||||
var planter: Planter
|
||||
|
||||
func update_queue():
|
||||
var next_seed_param := planter.get_plant_from_queue()
|
||||
next_seed.texture = next_seed_param.seed_sprite
|
||||
var index := 0
|
||||
for child in queue.get_children():
|
||||
var seed_param := planter.get_plant_from_queue(index)
|
||||
child.texture = seed_param.seed_sprite
|
||||
index += 1
|
||||
@ -4,14 +4,17 @@ extends Resource
|
||||
|
||||
@export var type: String
|
||||
|
||||
@export var seed_sprite: AtlasTexture
|
||||
@export var sprite_frames: SpriteFrames
|
||||
|
||||
@export var growing_time := 1.0
|
||||
@export var dying_time := 30.0
|
||||
@export var offspring_per_lifetime := 1
|
||||
@export var dying_time := 30.0 # time to die
|
||||
@export var dead_time := 10.0 # time being dead
|
||||
|
||||
@export var water_need := [0, 0] # min max
|
||||
@export var fertility_need := [0, 0] # min max
|
||||
@export var presence_need := [0, 0] # min max
|
||||
@export var water_need := [-5, 5] # min max
|
||||
@export var fertility_need := [-5, 5] # min max
|
||||
@export var presence_need := [0, 10] # min max
|
||||
|
||||
@export var water_prod := 0
|
||||
@export var fertility_prod := 0
|
||||
@ -19,4 +22,5 @@ extends Resource
|
||||
|
||||
@export var dead_water_prod := 0
|
||||
@export var dead_fertility_prod := 1
|
||||
|
||||
@export var distance_prod := 50
|
||||
|
||||
@ -1,18 +1,50 @@
|
||||
class_name Planter
|
||||
|
||||
extends Node
|
||||
extends Node2D
|
||||
|
||||
@export var plants: Array[PlantType]
|
||||
signal seed_list_updated
|
||||
|
||||
const QUEUE_LENGTH := 6 # ENORME
|
||||
|
||||
@onready var plant_scene = preload("res://objects/Plant.tscn")
|
||||
@onready var timer: Timer = $Timer
|
||||
|
||||
@export var plants: Array[PlantType]
|
||||
|
||||
@export var camera: Camera2D
|
||||
|
||||
# index of the PlantType in plants
|
||||
var seed_queue: Array[int]
|
||||
var can_plant := true
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if Input.is_action_just_pressed("plant") and timer.is_stopped():
|
||||
var chosen_type: PlantType = plants[randi_range(0, plants.size() - 1)]
|
||||
func get_plant_from_queue(index: int = -1) -> PlantType:
|
||||
if index == -1:
|
||||
return plants[seed_queue.back()]
|
||||
return plants[seed_queue[index]]
|
||||
|
||||
func _ready() -> void:
|
||||
for i in range(QUEUE_LENGTH):
|
||||
seed_queue.push_front(randi_range(0, plants.size() - 1))
|
||||
seed_list_updated.emit()
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
var space := get_world_2d().direct_space_state
|
||||
var parameters = PhysicsPointQueryParameters2D.new()
|
||||
parameters.position = camera.get_global_mouse_position()
|
||||
parameters.collide_with_areas = true
|
||||
parameters.collide_with_bodies = false
|
||||
var result := space.intersect_point(parameters, 1)
|
||||
can_plant = result.size() == 0
|
||||
|
||||
func take_next_seed() -> PlantType:
|
||||
var plant_ind: int = seed_queue.pop_back()
|
||||
seed_queue.push_front(randi_range(0, plants.size() - 1))
|
||||
seed_list_updated.emit()
|
||||
return plants[plant_ind]
|
||||
|
||||
func _unhandled_input(_event: InputEvent) -> void:
|
||||
if can_plant and Input.is_action_just_pressed("plant") and timer.is_stopped():
|
||||
var chosen_type: PlantType = take_next_seed()
|
||||
var plant = plant_scene.instantiate()
|
||||
add_child(plant)
|
||||
plant.init(chosen_type)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user