#15 #23 developpement de la classe SeedItem

This commit is contained in:
2025-08-19 09:08:42 +02:00
parent 0afb93454e
commit f5be43767a
17 changed files with 226 additions and 125 deletions

View File

@@ -1,8 +1,36 @@
[gd_scene load_steps=6 format=3 uid="uid://bcj812ox8xv2t"]
[gd_scene load_steps=7 format=3 uid="uid://bcj812ox8xv2t"]
[ext_resource type="Texture2D" uid="uid://bf6nw4onkhavr" path="res://common/inventory/assets/icons/shovel.svg" id="1_7u8ru"]
[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://c1eiu5ag7lcp8" path="res://entities/interactables/item_object/assets/sprites/shadow.svg" id="2_ng201"]
[sub_resource type="Animation" id="Animation_wing4"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Shadow:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0.875, 0.875)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Icon:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
}
[sub_resource type="Animation" id="Animation_ng201"]
resource_name = "default"
length = 2.0
@@ -10,77 +38,26 @@ loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/path = NodePath("Shadow:scale")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1, 2),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0, 0), Vector2(0, -5), Vector2(0, 0)]
"values": [Vector2(0.875, 0.875), Vector2(0.7, 0.7), Vector2(0.875, 0.875)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Shadow:position")
tracks/1/path = NodePath("Icon:position")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1, 2),
"times": PackedFloat32Array(0, 1, 2.06667),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0, 23), Vector2(0, 28), Vector2(0, 23)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Shadow:scale")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 1, 2),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(0.875, 0.875), Vector2(0.7, 0.7), Vector2(0.875, 0.875)]
}
[sub_resource type="Animation" id="Animation_wing4"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Shadow:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0, 23)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Shadow:scale")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(0.875, 0.875)]
"values": [Vector2(0, 0), Vector2(0, -8), Vector2(0, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ng3e4"]
@@ -89,8 +66,11 @@ _data = {
&"default": SubResource("Animation_ng201")
}
[node name="ItemObjectSprite" type="Sprite2D"]
texture = ExtResource("1_7u8ru")
[node name="ItemObjectSprite" type="Node2D"]
script = ExtResource("1_wing4")
[node name="Icon" type="Sprite2D" parent="."]
texture = ExtResource("2_ng3e4")
[node name="Shadow" type="Sprite2D" parent="."]
modulate = Color(1, 1, 1, 0.227451)

View File

@@ -2,15 +2,16 @@ extends Interactable
class_name ItemObject
const ITEM_AREA_WIDTH = 10
const ITEM_SPRITE_SIZE = 40.
const SPRITE_SCENE : PackedScene = preload("res://entities/interactables/item_object/item_object_sprite.tscn")
@export var item : Item :
set(_item):
item = _item
if sprite:
sprite.texture = item.icon
if object_sprite:
object_sprite.apply_texture_to_sprite(item.icon, ITEM_SPRITE_SIZE)
@onready var sprite : Sprite2D = generate_sprite()
@onready var object_sprite : ItemObjectSprite = generate_sprite()
func _init(_item = null):
if _item:
@@ -39,10 +40,13 @@ func pickup_animation(player : Player):
queue_free()
)
func generate_sprite() -> Sprite2D:
var s = SPRITE_SCENE.instantiate() as Sprite2D
add_child(s)
func generate_sprite() -> ItemObjectSprite:
var spriteNode = SPRITE_SCENE.instantiate() as ItemObjectSprite
add_child(spriteNode)
s.texture = item.icon
spriteNode.apply_texture_to_sprite(
item.icon,
ITEM_SPRITE_SIZE
)
return s
return spriteNode

View File

@@ -0,0 +1,11 @@
extends Node2D
class_name ItemObjectSprite
@onready var iconSprite = $Icon
func apply_texture_to_sprite(texture, item_sprite_size = 50.):
iconSprite.texture = texture
iconSprite.scale = Vector2(
1./(texture.get_width()/item_sprite_size),
1./(texture.get_height()/item_sprite_size)
)

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://pltmnkqd5ut2"
path="res://.godot/imported/grille_seeds.png-5193c30dc41cd45a15f8418b446b498e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://entities/plants/assets/sprites/seeds/grille_seeds.png"
dest_files=["res://.godot/imported/grille_seeds.png-5193c30dc41cd45a15f8418b446b498e.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

View File

@@ -1,20 +1,27 @@
[gd_resource type="Resource" script_class="PlantType" load_steps=7 format=3 uid="uid://b04vho33bl52b"]
[gd_resource type="Resource" script_class="PlantType" load_steps=9 format=3 uid="uid://b04vho33bl52b"]
[ext_resource type="Texture2D" uid="uid://c7mp7tkkkk6o5" path="res://entities/plants/assets/sprites/default/growing.png" id="1_fp5j6"]
[ext_resource type="Script" path="res://entities/plants/scripts/plant_type.gd" id="1_moyj3"]
[ext_resource type="Script" uid="uid://jnye5pe1bgqw" path="res://entities/plants/scripts/plant_type.gd" id="1_moyj3"]
[ext_resource type="Script" path="res://entities/plants/scripts/plant_effects/decontaminate_terrain_effect.gd" id="2_cky1j"]
[ext_resource type="Texture2D" uid="uid://bupl1y0cfj21q" path="res://entities/plants/assets/sprites/default/mature.png" id="3_ffarr"]
[ext_resource type="Texture2D" uid="uid://ba413oun7ry78" path="res://entities/plants/assets/sprites/default/planted.png" id="4_2s6re"]
[ext_resource type="Texture2D" uid="uid://pltmnkqd5ut2" path="res://entities/plants/assets/sprites/seeds/grille_seeds.png" id="6_cky1j"]
[sub_resource type="Resource" id="Resource_q68uy"]
script = ExtResource("2_cky1j")
impact_radius = 100
metadata/_custom_type_script = "uid://cgscbuxe4dawb"
[sub_resource type="AtlasTexture" id="AtlasTexture_ffarr"]
atlas = ExtResource("6_cky1j")
region = Rect2(1140, 345, 141, 128)
[resource]
script = ExtResource("1_moyj3")
name = ""
name = "Chardi"
description = "This plant can grow without water, and reduce contamination around when it becomes mature."
growing_time = 2
seed_texture = SubResource("AtlasTexture_ffarr")
planted_texture = ExtResource("4_2s6re")
growing_texture = ExtResource("1_fp5j6")
mature_texture = ExtResource("3_ffarr")

View File

@@ -2,6 +2,7 @@ extends Resource
class_name PlantType
@export var name : String
@export_multiline var description : String
@export var growing_time : int

View File

@@ -82,3 +82,4 @@ stream = SubResource("AudioStreamRandomizer_24ehl")
[node name="AudioStreamPlayer_movement" type="AudioStreamPlayer" parent="Audio"]
stream = SubResource("AudioStreamRandomizer_bwdx1")
volume_db = -20.0

View File

@@ -6,8 +6,6 @@ signal player_updated(player: Player)
var planet : Planet # mis à jour par la classe Planet
@export var speed = 400
@export var testPlantType : PlantType
@onready var inventory : Inventory = Inventory.new()
var max_energy : int = 10
@@ -23,6 +21,12 @@ var closest_interactable : Interactable = null :
closest_interactable = v
if old != closest_interactable:
player_updated.emit(self)
var can_use_item : bool = false :
set(v):
var old = can_use_item
can_use_item = v
if old != can_use_item:
player_updated.emit(self)
var energy : int = max_energy :
set(v):
energy = v
@@ -40,8 +44,9 @@ func get_input():
var old_velocity=velocity
calculate_direction()
if Input.is_action_just_pressed("action") and energy > 0:
action()
can_use_item = inventory.lenght() != 0 and inventory.get_item().can_use(self)
if Input.is_action_just_pressed("action"):
use_item()
if Input.is_action_just_pressed("interact") and closest_interactable:
closest_interactable.interact(self)
if Input.is_action_just_pressed("drop") and inventory.lenght() > 0:
@@ -56,12 +61,17 @@ func calculate_direction():
if input_direction.x:
$Sprite.flip_h = (input_direction.x < 0)
func action():
if planet:
planet.plant(
testPlantType,
global_position
)
func try_use_item():
if energy > 0 and can_use_item:
use_item()
func use_item():
var item = inventory.get_item()
var is_item_used = item.use(self)
if is_item_used:
energy -= 1
if item.is_one_time_use():
inventory.pop_item()
func pass_day():
energy = max_energy
@@ -94,4 +104,4 @@ func _on_root_gui_day_pass_finished():
controlling_player = true
func _on_root_gui_game_click():
action()
try_use_item()