Textures for girl & clubs

This commit is contained in:
Rob Kelly 2024-11-12 01:47:14 -07:00
parent 62d42d9c03
commit 1be3617c74
39 changed files with 3667 additions and 2469 deletions

BIN
asset_dev/characters/clubs/club_grip.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
asset_dev/characters/clubs/clubs.blend (Stored with Git LFS)

Binary file not shown.

BIN
asset_dev/characters/clubs/driver.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
asset_dev/characters/clubs/iron.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
asset_dev/characters/gfolf_girl/eyes_closed.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
asset_dev/characters/gfolf_girl/eyes_open.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
asset_dev/characters/gfolf_girl/mouth_neko.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
asset_dev/characters/gfolf_girl/mouth_neutral.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/characters/gfolf_girl/eyes_closed.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b3se8lsjqn4qs"
path="res://.godot/imported/eyes_closed.png-5929ecad52cf596b263d9689079054cf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/models/characters/gfolf_girl/eyes_closed.png"
dest_files=["res://.godot/imported/eyes_closed.png-5929ecad52cf596b263d9689079054cf.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=true
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=0

BIN
assets/models/characters/gfolf_girl/eyes_open.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cyeinvdvrp2bf"
path="res://.godot/imported/eyes_open.png-05391ac5e181667080927fb0db5d8b24.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/models/characters/gfolf_girl/eyes_open.png"
dest_files=["res://.godot/imported/eyes_open.png-05391ac5e181667080927fb0db5d8b24.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=true
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=0

File diff suppressed because it is too large Load Diff

BIN
assets/models/characters/gfolf_girl/mouth_neutral.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cfhkymejfm1mk"
path="res://.godot/imported/mouth_neutral.png-f42ff8adc4fc6aeff0619f59cf1bb559.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/models/characters/gfolf_girl/mouth_neutral.png"
dest_files=["res://.godot/imported/mouth_neutral.png-f42ff8adc4fc6aeff0619f59cf1bb559.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=true
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=0

BIN
assets/models/clubs/club_grip.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://r766u6ep7m1l"
path="res://.godot/imported/club_grip.png-c5509a2edfaee70233cc7ab31a87fdad.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/models/clubs/club_grip.png"
dest_files=["res://.godot/imported/club_grip.png-c5509a2edfaee70233cc7ab31a87fdad.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=true
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=0

Binary file not shown.

View File

@ -26,14 +26,21 @@
"materials":[
{
"doubleSided":true,
"name":"Material",
"name":"ClubGrip",
"pbrMetallicRoughness":{
"baseColorFactor":[
0.800000011920929,
0.800000011920929,
0.800000011920929,
1
],
"baseColorTexture":{
"index":0
},
"metallicFactor":0
}
},
{
"doubleSided":true,
"name":"IronMaterial",
"pbrMetallicRoughness":{
"baseColorTexture":{
"index":1
},
"metallicFactor":0,
"roughnessFactor":0.5
}
@ -51,19 +58,50 @@
},
"indices":3,
"material":0
},
{
"attributes":{
"POSITION":4,
"NORMAL":5,
"TEXCOORD_0":6
},
"indices":7,
"material":1
}
]
}
],
"textures":[
{
"sampler":0,
"source":0
},
{
"sampler":0,
"source":1
}
],
"images":[
{
"mimeType":"image/png",
"name":"club_grip",
"uri":"club_grip.png"
},
{
"mimeType":"image/png",
"name":"iron",
"uri":"iron.png"
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":164,
"count":68,
"max":[
0.4176812469959259,
1.9800440073013306,
0.6112575531005859
0.05376429855823517,
-0.694483757019043,
0.05376402288675308
],
"min":[
-0.05376391485333443,
@ -75,51 +113,115 @@
{
"bufferView":1,
"componentType":5126,
"count":164,
"count":68,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":164,
"count":68,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":246,
"count":102,
"type":"SCALAR"
},
{
"bufferView":4,
"componentType":5126,
"count":98,
"max":[
0.4176812469959259,
1.9800440073013306,
0.6112575531005859
],
"min":[
-0.0400003157556057,
-0.6944853067398071,
-0.04000140354037285
],
"type":"VEC3"
},
{
"bufferView":5,
"componentType":5126,
"count":98,
"type":"VEC3"
},
{
"bufferView":6,
"componentType":5126,
"count":98,
"type":"VEC2"
},
{
"bufferView":7,
"componentType":5123,
"count":144,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":1968,
"byteLength":816,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":1968,
"byteOffset":1968,
"byteLength":816,
"byteOffset":816,
"target":34962
},
{
"buffer":0,
"byteLength":1312,
"byteOffset":3936,
"byteLength":544,
"byteOffset":1632,
"target":34962
},
{
"buffer":0,
"byteLength":492,
"byteOffset":5248,
"byteLength":204,
"byteOffset":2176,
"target":34963
},
{
"buffer":0,
"byteLength":1176,
"byteOffset":2380,
"target":34962
},
{
"buffer":0,
"byteLength":1176,
"byteOffset":3556,
"target":34962
},
{
"buffer":0,
"byteLength":784,
"byteOffset":4732,
"target":34962
},
{
"buffer":0,
"byteLength":288,
"byteOffset":5516,
"target":34963
}
],
"samplers":[
{
"magFilter":9728,
"minFilter":9984
}
],
"buffers":[
{
"byteLength":5740,
"byteLength":5804,
"uri":"driver.bin"
}
]

Binary file not shown.

View File

@ -26,14 +26,21 @@
"materials":[
{
"doubleSided":true,
"name":"Material",
"name":"ClubGrip",
"pbrMetallicRoughness":{
"baseColorFactor":[
0.800000011920929,
0.800000011920929,
0.800000011920929,
1
],
"baseColorTexture":{
"index":0
},
"metallicFactor":0
}
},
{
"doubleSided":true,
"name":"IronMaterial",
"pbrMetallicRoughness":{
"baseColorTexture":{
"index":1
},
"metallicFactor":0,
"roughnessFactor":0.5
}
@ -51,19 +58,50 @@
},
"indices":3,
"material":0
},
{
"attributes":{
"POSITION":4,
"NORMAL":5,
"TEXCOORD_0":6
},
"indices":7,
"material":1
}
]
}
],
"textures":[
{
"sampler":0,
"source":0
},
{
"sampler":0,
"source":1
}
],
"images":[
{
"mimeType":"image/png",
"name":"club_grip",
"uri":"club_grip.png"
},
{
"mimeType":"image/png",
"name":"iron",
"uri":"iron.png"
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":126,
"count":68,
"max":[
0.13040433824062347,
1.8918243646621704,
0.5181902050971985
0.05376429855823517,
-0.694483757019043,
0.05376402288675308
],
"min":[
-0.05376391485333443,
@ -75,51 +113,115 @@
{
"bufferView":1,
"componentType":5126,
"count":126,
"count":68,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":126,
"count":68,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":192,
"count":102,
"type":"SCALAR"
},
{
"bufferView":4,
"componentType":5126,
"count":60,
"max":[
0.13040433824062347,
1.8918243646621704,
0.5181902050971985
],
"min":[
-0.040000300854444504,
-0.6944853067398071,
-0.04000140354037285
],
"type":"VEC3"
},
{
"bufferView":5,
"componentType":5126,
"count":60,
"type":"VEC3"
},
{
"bufferView":6,
"componentType":5126,
"count":60,
"type":"VEC2"
},
{
"bufferView":7,
"componentType":5123,
"count":90,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":1512,
"byteLength":816,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":1512,
"byteOffset":1512,
"byteLength":816,
"byteOffset":816,
"target":34962
},
{
"buffer":0,
"byteLength":1008,
"byteOffset":3024,
"byteLength":544,
"byteOffset":1632,
"target":34962
},
{
"buffer":0,
"byteLength":384,
"byteOffset":4032,
"byteLength":204,
"byteOffset":2176,
"target":34963
},
{
"buffer":0,
"byteLength":720,
"byteOffset":2380,
"target":34962
},
{
"buffer":0,
"byteLength":720,
"byteOffset":3100,
"target":34962
},
{
"buffer":0,
"byteLength":480,
"byteOffset":3820,
"target":34962
},
{
"buffer":0,
"byteLength":180,
"byteOffset":4300,
"target":34963
}
],
"samplers":[
{
"magFilter":9728,
"minFilter":9984
}
],
"buffers":[
{
"byteLength":4416,
"byteLength":4480,
"uri":"iron.bin"
}
]

BIN
assets/models/clubs/iron.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://co8hyjekxqqpd"
path="res://.godot/imported/iron.png-f3054763e3e9c0255d7ac29604106ae4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/models/clubs/iron.png"
dest_files=["res://.godot/imported/iron.png-f3054763e3e9c0255d7ac29604106ae4.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=true
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=0

Binary file not shown.

View File

@ -26,14 +26,21 @@
"materials":[
{
"doubleSided":true,
"name":"Material",
"name":"ClubGrip",
"pbrMetallicRoughness":{
"baseColorFactor":[
0.800000011920929,
0.800000011920929,
0.800000011920929,
1
],
"baseColorTexture":{
"index":0
},
"metallicFactor":0
}
},
{
"doubleSided":true,
"name":"IronMaterial",
"pbrMetallicRoughness":{
"baseColorTexture":{
"index":1
},
"metallicFactor":0,
"roughnessFactor":0.5
}
@ -51,15 +58,80 @@
},
"indices":3,
"material":0
},
{
"attributes":{
"POSITION":4,
"NORMAL":5,
"TEXCOORD_0":6
},
"indices":7,
"material":1
}
]
}
],
"textures":[
{
"sampler":0,
"source":0
},
{
"sampler":0,
"source":1
}
],
"images":[
{
"mimeType":"image/png",
"name":"club_grip",
"uri":"club_grip.png"
},
{
"mimeType":"image/png",
"name":"iron",
"uri":"iron.png"
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":152,
"count":68,
"max":[
0.05376429855823517,
-0.694483757019043,
0.05376402288675308
],
"min":[
-0.05376391485333443,
-1.8250000476837158,
-0.05376402288675308
],
"type":"VEC3"
},
{
"bufferView":1,
"componentType":5126,
"count":68,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":68,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":102,
"type":"SCALAR"
},
{
"bufferView":4,
"componentType":5126,
"count":84,
"max":[
0.07092801481485367,
1.8706790208816528,
@ -67,54 +139,84 @@
],
"min":[
-0.05810827389359474,
-1.8250000476837158,
-0.6944853067398071,
-0.14764030277729034
],
"type":"VEC3"
},
{
"bufferView":1,
"bufferView":5,
"componentType":5126,
"count":152,
"count":84,
"type":"VEC3"
},
{
"bufferView":2,
"bufferView":6,
"componentType":5126,
"count":152,
"count":84,
"type":"VEC2"
},
{
"bufferView":3,
"bufferView":7,
"componentType":5123,
"count":228,
"count":126,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":1824,
"byteLength":816,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":1824,
"byteOffset":1824,
"byteLength":816,
"byteOffset":816,
"target":34962
},
{
"buffer":0,
"byteLength":1216,
"byteOffset":3648,
"byteLength":544,
"byteOffset":1632,
"target":34962
},
{
"buffer":0,
"byteLength":456,
"byteOffset":4864,
"byteLength":204,
"byteOffset":2176,
"target":34963
},
{
"buffer":0,
"byteLength":1008,
"byteOffset":2380,
"target":34962
},
{
"buffer":0,
"byteLength":1008,
"byteOffset":3388,
"target":34962
},
{
"buffer":0,
"byteLength":672,
"byteOffset":4396,
"target":34962
},
{
"buffer":0,
"byteLength":252,
"byteOffset":5068,
"target":34963
}
],
"samplers":[
{
"magFilter":9728,
"minFilter":9984
}
],
"buffers":[

Binary file not shown.

View File

@ -26,14 +26,21 @@
"materials":[
{
"doubleSided":true,
"name":"Material",
"name":"ClubGrip",
"pbrMetallicRoughness":{
"baseColorFactor":[
0.800000011920929,
0.800000011920929,
0.800000011920929,
1
],
"baseColorTexture":{
"index":0
},
"metallicFactor":0
}
},
{
"doubleSided":true,
"name":"IronMaterial",
"pbrMetallicRoughness":{
"baseColorTexture":{
"index":1
},
"metallicFactor":0,
"roughnessFactor":0.5
}
@ -51,22 +58,53 @@
},
"indices":3,
"material":0
},
{
"attributes":{
"POSITION":4,
"NORMAL":5,
"TEXCOORD_0":6
},
"indices":7,
"material":1
}
]
}
],
"textures":[
{
"sampler":0,
"source":0
},
{
"sampler":0,
"source":1
}
],
"images":[
{
"mimeType":"image/png",
"name":"club_grip",
"uri":"club_grip.png"
},
{
"mimeType":"image/png",
"name":"iron",
"uri":"iron.png"
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":180,
"count":68,
"max":[
0.22545579075813293,
1.951971173286438,
0.49008044600486755
0.05376429855823517,
-0.694483757019043,
0.05376402288675308
],
"min":[
-0.08979124575853348,
-0.05376391485333443,
-1.8250000476837158,
-0.05376402288675308
],
@ -75,46 +113,110 @@
{
"bufferView":1,
"componentType":5126,
"count":180,
"count":68,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":180,
"count":68,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":258,
"count":102,
"type":"SCALAR"
},
{
"bufferView":4,
"componentType":5126,
"count":112,
"max":[
0.22545579075813293,
1.951971173286438,
0.49008044600486755
],
"min":[
-0.08979124575853348,
-0.6944853067398071,
-0.04000140354037285
],
"type":"VEC3"
},
{
"bufferView":5,
"componentType":5126,
"count":112,
"type":"VEC3"
},
{
"bufferView":6,
"componentType":5126,
"count":112,
"type":"VEC2"
},
{
"bufferView":7,
"componentType":5123,
"count":156,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":2160,
"byteLength":816,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":2160,
"byteOffset":2160,
"byteLength":816,
"byteOffset":816,
"target":34962
},
{
"buffer":0,
"byteLength":1440,
"byteOffset":4320,
"byteLength":544,
"byteOffset":1632,
"target":34962
},
{
"buffer":0,
"byteLength":516,
"byteOffset":5760,
"byteLength":204,
"byteOffset":2176,
"target":34963
},
{
"buffer":0,
"byteLength":1344,
"byteOffset":2380,
"target":34962
},
{
"buffer":0,
"byteLength":1344,
"byteOffset":3724,
"target":34962
},
{
"buffer":0,
"byteLength":896,
"byteOffset":5068,
"target":34962
},
{
"buffer":0,
"byteLength":312,
"byteOffset":5964,
"target":34963
}
],
"samplers":[
{
"magFilter":9728,
"minFilter":9984
}
],
"buffers":[

View File

@ -6,6 +6,7 @@ class_name CharacterController extends Node3D
var animation_state: AnimationNodeStateMachinePlayback = animation_tree["parameters/playback"]
@onready var right_hand_grip: Node3D = %RightHandGrip
@onready var eye_animation: AnimationPlayer = %EyeAnimation
## Snap the given node to the character's right hand grip.
@ -30,3 +31,7 @@ func start_upswing() -> void:
func downswing() -> void:
animation_state.travel("downswing")
func _on_blink_timer_timeout() -> void:
eye_animation.play("blink")

View File

@ -1,7 +1,8 @@
[gd_scene load_steps=18 format=3 uid="uid://1s3gywmoi20e"]
[gd_scene load_steps=22 format=3 uid="uid://1s3gywmoi20e"]
[ext_resource type="PackedScene" uid="uid://ha6jxf4v5845" path="res://assets/models/characters/gfolf_girl/gfolf_girl.gltf" id="1_j80rr"]
[ext_resource type="Script" path="res://src/characters/character_controller.gd" id="2_7o84v"]
[ext_resource type="Script" path="res://src/util/random_timer.gd" id="3_ex68g"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fokhu"]
albedo_color = Color(0.226707, 0.226707, 0.226707, 1)
@ -59,6 +60,67 @@ states/upswing/node = SubResource("AnimationNodeAnimation_mlacs")
states/upswing/position = Vector2(703, 100)
transitions = ["Start", "stand_to_idle", SubResource("AnimationNodeStateMachineTransition_xk15a"), "stand_to_idle", "idle", SubResource("AnimationNodeStateMachineTransition_gtsjq"), "idle", "upswing", SubResource("AnimationNodeStateMachineTransition_apb2k"), "upswing", "idle", SubResource("AnimationNodeStateMachineTransition_h5bcf"), "upswing", "downswing", SubResource("AnimationNodeStateMachineTransition_ox862"), "downswing", "End", SubResource("AnimationNodeStateMachineTransition_oblek")]
[sub_resource type="Animation" id="Animation_kuw5f"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Armature/Skeleton3D/Eyes_Closed:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Armature/Skeleton3D/Eyes_Open:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_vjm4y"]
resource_name = "blink"
length = 0.1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Armature/Skeleton3D/Eyes_Closed:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0666667),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Armature/Skeleton3D/Eyes_Open:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0666667),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_3te1k"]
_data = {
"RESET": SubResource("Animation_kuw5f"),
"blink": SubResource("Animation_vjm4y")
}
[node name="GfolfGirl" instance=ExtResource("1_j80rr")]
script = ExtResource("2_7o84v")
@ -103,8 +165,11 @@ bones/22/scale = Vector3(1, 1, 1)
bones/23/rotation = Quaternion(0.000222673, 0.707107, 0.707107, -0.000222504)
bones/23/scale = Vector3(1, 1, 1)
[node name="Eyes_Closed" parent="Armature/Skeleton3D" index="1"]
visible = false
[node name="BoneAttachment3D" type="BoneAttachment3D" parent="Armature/Skeleton3D" index="6"]
transform = Transform3D(-0.944824, 0.316851, -0.0831416, -0.325832, -0.935181, 0.138814, -0.0337689, 0.158246, 0.986822, -0.1687, 3.15143, 0.849092)
transform = Transform3D(-0.944824, 0.316851, -0.0831417, -0.325345, -0.937238, 0.12544, -0.0381779, 0.145568, 0.988612, -0.1687, 3.1755, 0.839478)
bone_name = "Hand.R"
bone_idx = 11
@ -125,3 +190,18 @@ mesh = SubResource("BoxMesh_oll6x")
[node name="AnimationTree" type="AnimationTree" parent="." index="2"]
tree_root = SubResource("AnimationNodeStateMachine_yepp7")
anim_player = NodePath("../AnimationPlayer")
[node name="EyeAnimation" type="AnimationPlayer" parent="." index="3"]
unique_name_in_owner = true
libraries = {
"": SubResource("AnimationLibrary_3te1k")
}
[node name="BlinkTimer" type="Timer" parent="EyeAnimation" index="0"]
autostart = true
script = ExtResource("3_ex68g")
mean_time = 4.0
st_dev_time = 2.0
minimum_time = 0.1
[connection signal="timeout" from="EyeAnimation/BlinkTimer" to="." method="_on_blink_timer_timeout"]

19
src/util/random_timer.gd Normal file
View File

@ -0,0 +1,19 @@
class_name RandomTimer extends Timer
## A Timer variant that randomizes the timer interval
## Average timer interval, in seconds
@export var mean_time := 1.0
## Standard deviation of timer interval, in seconds
@export var st_dev_time := 0.2
## Minimum timer interval, in seconds
@export var minimum_time := 0.0
var _rng := RandomNumberGenerator.new()
func _ready() -> void:
timeout.connect(_on_timeout)
func _on_timeout() -> void:
wait_time = max(minimum_time, _rng.randfn(mean_time, st_dev_time))