new item model and interactions

person can hold item now. Global can give item to person.
This commit is contained in:
Nikolai Fesenko
2025-08-18 01:33:54 +02:00
parent a62d2e29bc
commit 7ba255334d
16 changed files with 392 additions and 6 deletions

BIN
Blends/BoneTest.bin Normal file

Binary file not shown.

View File

@@ -0,0 +1,7 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://ewwyg8jhpr87"]
[resource]
resource_name = "Material.001"
cull_mode = 2
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
roughness = 0.5

View File

@@ -0,0 +1,16 @@
[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://detpb4ww2vvsf"]
[ext_resource type="Shader" uid="uid://c08eg1piwoy3t" path="res://Shaders/outline.gdshader" id="1_4u3y3"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_s6uwl"]
render_priority = 0
shader = ExtResource("1_4u3y3")
shader_parameter/is_active = false
shader_parameter/color = Vector3(0.95, 0.71, 0.01)
[resource]
resource_name = "Material"
next_pass = SubResource("ShaderMaterial_s6uwl")
cull_mode = 2
albedo_color = Color(0.655154, 0.629469, 0.906882, 1)
roughness = 0.5

BIN
Blends/Items/Food/food.bin Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,53 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://yry4c8j7q63q"
path="res://.godot/imported/food.blend-bb725c29af6e4b27bddfb2a1444749ae.scn"
[deps]
source_file="res://Blends/Items/Food/food.blend"
dest_files=["res://.godot/imported/food.blend-bb725c29af6e4b27bddfb2a1444749ae.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
blender/nodes/cameras=true
blender/nodes/custom_properties=true
blender/nodes/modifiers=1
blender/meshes/colors=false
blender/meshes/uvs=true
blender/meshes/normals=true
blender/meshes/export_geometry_nodes_instances=false
blender/meshes/tangents=true
blender/meshes/skins=2
blender/meshes/export_bones_deforming_mesh_only=false
blender/materials/unpack_enabled=true
blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true

Binary file not shown.

217
Blends/Items/Food/food.gltf Normal file
View File

@@ -0,0 +1,217 @@
{
"asset":{
"generator":"Khronos glTF Blender I/O v4.5.47",
"version":"2.0"
},
"scene":0,
"scenes":[
{
"name":"Scene",
"nodes":[
0,
1
]
}
],
"nodes":[
{
"mesh":0,
"name":"Cube"
},
{
"mesh":1,
"name":"Text",
"scale":[
0.5714878439903259,
0.5714878439903259,
0.5714878439903259
]
}
],
"materials":[
{
"doubleSided":true,
"name":"Material",
"pbrMetallicRoughness":{
"baseColorFactor":[
0.3867591321468353,
0.3540330231189728,
0.8011000156402588,
1
],
"metallicFactor":0,
"roughnessFactor":0.5
}
},
{
"doubleSided":true,
"name":"Material.001",
"pbrMetallicRoughness":{
"baseColorFactor":[
0.800000011920929,
0.800000011920929,
0.800000011920929,
1
],
"metallicFactor":0,
"roughnessFactor":0.5
}
}
],
"meshes":[
{
"name":"Cube",
"primitives":[
{
"attributes":{
"POSITION":0,
"NORMAL":1,
"TEXCOORD_0":2
},
"indices":3,
"material":0
}
]
},
{
"name":"f",
"primitives":[
{
"attributes":{
"POSITION":4,
"NORMAL":5,
"TEXCOORD_0":6
},
"indices":7,
"material":1
}
]
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":168,
"max":[
1.0715641975402832,
0.07224392890930176,
1.0715641975402832
],
"min":[
-1.0715641975402832,
-0.7519297003746033,
-1.0715641975402832
],
"type":"VEC3"
},
{
"bufferView":1,
"componentType":5126,
"count":168,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":168,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":852,
"type":"SCALAR"
},
{
"bufferView":4,
"componentType":5126,
"count":512,
"max":[
1.3956226110458374,
0.17762300372123718,
0.31090247631073
],
"min":[
-1.3473774194717407,
0.1200113594532013,
-0.38909757137298584
],
"type":"VEC3"
},
{
"bufferView":5,
"componentType":5126,
"count":512,
"type":"VEC3"
},
{
"bufferView":6,
"componentType":5126,
"count":512,
"type":"VEC2"
},
{
"bufferView":7,
"componentType":5123,
"count":3060,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":2016,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":2016,
"byteOffset":2016,
"target":34962
},
{
"buffer":0,
"byteLength":1344,
"byteOffset":4032,
"target":34962
},
{
"buffer":0,
"byteLength":1704,
"byteOffset":5376,
"target":34963
},
{
"buffer":0,
"byteLength":6144,
"byteOffset":7080,
"target":34962
},
{
"buffer":0,
"byteLength":6144,
"byteOffset":13224,
"target":34962
},
{
"buffer":0,
"byteLength":4096,
"byteOffset":19368,
"target":34962
},
{
"buffer":0,
"byteLength":6120,
"byteOffset":23464,
"target":34963
}
],
"buffers":[
{
"byteLength":29584,
"uri":"food.bin"
}
]
}

View File

@@ -0,0 +1,48 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://tedmijw81j46"
path="res://.godot/imported/food.gltf-05a2764e0a6bf33e050aa626fcac2f77.scn"
[deps]
source_file="res://Blends/Items/Food/food.gltf"
dest_files=["res://.godot/imported/food.gltf-05a2764e0a6bf33e050aa626fcac2f77.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={
"materials": {
"Material": {
"use_external/enabled": true,
"use_external/path": "res://Blends/Items/Food/Material.tres"
},
"Material.001": {
"use_external/enabled": true,
"use_external/path": "res://Blends/Items/Food/Material.001.tres"
}
}
}
gltf/naming_version=1
gltf/embedded_image_handling=1

View File

@@ -19,6 +19,7 @@ shader_parameter/color = Vector3(0, 0, 0)
render_priority = 0 render_priority = 0
shader = ExtResource("5_c1046") shader = ExtResource("5_c1046")
shader_parameter/is_active = false shader_parameter/is_active = false
shader_parameter/color = Vector3(0, 0, 0)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_c1046"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_c1046"]
next_pass = SubResource("ShaderMaterial_k1k40") next_pass = SubResource("ShaderMaterial_k1k40")
@@ -29,6 +30,7 @@ roughness_texture = ExtResource("4_dn7et")
render_priority = 0 render_priority = 0
shader = ExtResource("5_c1046") shader = ExtResource("5_c1046")
shader_parameter/is_active = false shader_parameter/is_active = false
shader_parameter/color = Vector3(0, 0, 0)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k1k40"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k1k40"]
next_pass = SubResource("ShaderMaterial_tma46") next_pass = SubResource("ShaderMaterial_tma46")
@@ -38,6 +40,7 @@ albedo_texture = ExtResource("5_sp2kd")
render_priority = 0 render_priority = 0
shader = ExtResource("5_c1046") shader = ExtResource("5_c1046")
shader_parameter/is_active = false shader_parameter/is_active = false
shader_parameter/color = Vector3(0, 0, 0)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tma46"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tma46"]
next_pass = SubResource("ShaderMaterial_8tdb8") next_pass = SubResource("ShaderMaterial_8tdb8")

3
Scenes/Prefabs/Item.gd Normal file
View File

@@ -0,0 +1,3 @@
extends Node3D
var item_name

View File

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

View File

@@ -0,0 +1,12 @@
[gd_scene load_steps=4 format=3 uid="uid://d3l2w1076ttb0"]
[ext_resource type="PackedScene" uid="uid://tedmijw81j46" path="res://Blends/Items/Food/food.gltf" id="1_613iy"]
[ext_resource type="Script" uid="uid://c1ic8jloyqlnt" path="res://Scenes/Prefabs/Item.gd" id="2_qhaka"]
[ext_resource type="Material" uid="uid://detpb4ww2vvsf" path="res://Blends/Items/Food/Material.tres" id="3_cemcp"]
[node name="food" instance=ExtResource("1_613iy")]
transform = Transform3D(0.3, -1.53807e-05, 1.30802e-05, 1.53807e-05, 0.3, -5.5671e-06, -1.30802e-05, 5.5671e-06, 0.3, 0, 0, 0)
script = ExtResource("2_qhaka")
[node name="Cube" parent="." index="0"]
surface_material_override/0 = ExtResource("3_cemcp")

View File

@@ -1,15 +1,25 @@
extends Node3D extends Node3D
@onready var outline_shader = preload("res://Shaders/outline.gdshader") @onready var outline_shader = preload("res://Shaders/outline.gdshader")
@onready var food_item = preload("res://Scenes/Prefabs/food_item.tscn")
@export var debugLabel1: Label @export var debugLabel1: Label
signal interact(person,interact_object) signal interact(person,interact_object)
func _ready() -> void: func _ready() -> void:
print(outline_shader)
interact.connect(_on_interact) interact.connect(_on_interact)
func _on_interact(person, object): func _on_interact(person, object):
object.ActionNode.start_action(person, object) object.ActionNode.start_action(person, object)
func give_item(person, item_id):
var item = get_item_form_id(item_id)
person.hold_item(item)
func get_item_form_id(id):
match id:
0:
return food_item

View File

@@ -14,6 +14,11 @@ var action: Interactable
var is_target_reached: bool var is_target_reached: bool
var timer: Timer var timer: Timer
var is_holding_item: bool = false
var holdingItem: Object
func _ready() -> void: func _ready() -> void:
nav_agent = $NavigationAgent3D nav_agent = $NavigationAgent3D
meshI = $MeshInstance3D meshI = $MeshInstance3D
@@ -28,6 +33,8 @@ func _ready() -> void:
is_in_action = false is_in_action = false
timer = $Timer timer = $Timer
Global.give_item(self, 0)
#nav_agent.target_position = Vector3(-15.955,3.486,-58.942) #nav_agent.target_position = Vector3(-15.955,3.486,-58.942)
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
@@ -79,3 +86,14 @@ func _on_timer_timeout() -> void:
if action != null: if action != null:
print("action stoped") print("action stoped")
action.stop_action(self,target_object) action.stop_action(self,target_object)
func hold_item(item):
var newItem = item.instantiate()
holdingItem = newItem
newItem.position = Vector3(0,0.976, -0.065)
self.add_child(newItem)
func drop_item():
pass

View File

@@ -1,9 +1,7 @@
shader_type spatial; shader_type spatial;
render_mode cull_front, unshaded; render_mode cull_front, unshaded;
uniform bool is_active; uniform bool is_active;
uniform vec3 color = vec3(0.95, 0.71, 0.01);
const vec3 color = vec3(0.95, 0.71, 0.01);
const float thickness = 0.1; const float thickness = 0.1;
void vertex() { void vertex() {