From e791f15e879f8de09d643ff2625687ad5ed9dada Mon Sep 17 00:00:00 2001 From: Voyager Date: Tue, 11 Aug 2026 16:39:20 -0400 Subject: [PATCH] Add ambient character blinking --- .../characters/faces/eyes/eyes_closed.png | Bin 0 -> 34733 bytes .../faces/eyes/eyes_closed.png.import | 40 ++++++++++++++++++ player/player.gd | 36 ++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 art/exported/characters/faces/eyes/eyes_closed.png create mode 100644 art/exported/characters/faces/eyes/eyes_closed.png.import diff --git a/art/exported/characters/faces/eyes/eyes_closed.png b/art/exported/characters/faces/eyes/eyes_closed.png new file mode 100644 index 0000000000000000000000000000000000000000..d37f0a7e37db49af36698f832c305ee36ca05e5a GIT binary patch literal 34733 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 Nfv2mV%Q~loCIF}8iEID> literal 0 HcmV?d00001 diff --git a/art/exported/characters/faces/eyes/eyes_closed.png.import b/art/exported/characters/faces/eyes/eyes_closed.png.import new file mode 100644 index 0000000..af51540 --- /dev/null +++ b/art/exported/characters/faces/eyes/eyes_closed.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2ufsni8mnpmq" +path="res://.godot/imported/eyes_closed.png-80789498475c2cfbcb6e3ac14e067a76.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/exported/characters/faces/eyes/eyes_closed.png" +dest_files=["res://.godot/imported/eyes_closed.png-80789498475c2cfbcb6e3ac14e067a76.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/player/player.gd b/player/player.gd index 733be49..9d89a9c 100644 --- a/player/player.gd +++ b/player/player.gd @@ -84,6 +84,9 @@ enum PocketVisualTarget { CATCH_SHOWCASE, } const FIGHTING_EYES_ID: String = "alligator_eyes" +const BLINK_EYES_ID: String = "closed" +const BLINK_INTERVAL_SECONDS := Vector2(2.8, 7.5) +const BLINK_DURATION_SECONDS: float = 0.11 const CHARACTER_CALL_MOUTH_ID: String = "open_ah" const CHARACTER_CALL_MOUTH_DURATION_SECONDS: float = 0.16 const BASE_REEL_SPEED: float = 0.16 @@ -155,6 +158,9 @@ func set_fighting_visual(active: bool) -> void: if _fighting_visual_active == active: return _fighting_visual_active = active + if active: + _blink_visual_active = false + _schedule_next_blink() _apply_presented_appearance() _character_animation_name = &"" _update_character_animation() @@ -236,6 +242,9 @@ func _apply_presented_appearance() -> void: if not is_node_ready() or _visuals == null: return var presented_appearance := appearance_snapshot + if _blink_visual_active and not _fighting_visual_active: + presented_appearance = appearance_snapshot.duplicate(true) + presented_appearance["eyes"] = BLINK_EYES_ID if _fighting_visual_active: presented_appearance = appearance_snapshot.duplicate(true) presented_appearance["eyes"] = FIGHTING_EYES_ID @@ -402,6 +411,9 @@ var _pocket_visual_midpoint_callback: Callable var _pocket_visual_midpoint_called: bool = false var _pocket_visual_generation: int = 0 var _fighting_visual_active: bool = false +var _blink_visual_active: bool = false +var _blink_seconds_remaining: float = 0.0 +var _blink_rng := RandomNumberGenerator.new() var _character_call_mouth_active: bool = false var _character_call_visual_generation: int = 0 var _fishing_visual_active: bool = false @@ -417,6 +429,8 @@ var _controller_mapping_manager: ControllerMappingManagerType func _ready() -> void: + _blink_rng.randomize() + _schedule_next_blink() if ( _character_animation_player != null and not _character_animation_player.animation_finished.is_connected( @@ -592,6 +606,7 @@ func _physics_process(delta: float) -> void: func _process(delta: float) -> void: + _update_blink(delta) _update_character_animation() _update_sprint_dust() # The hand bone supplies the attachment position, but its animated wrist @@ -658,6 +673,27 @@ func _process(delta: float) -> void: ) +func _update_blink(delta: float) -> void: + if _fighting_visual_active: + return + _blink_seconds_remaining -= delta + if _blink_seconds_remaining > 0.0: + return + _blink_visual_active = not _blink_visual_active + if _blink_visual_active: + _blink_seconds_remaining = BLINK_DURATION_SECONDS + else: + _schedule_next_blink() + _apply_presented_appearance() + + +func _schedule_next_blink() -> void: + _blink_seconds_remaining = _blink_rng.randf_range( + BLINK_INTERVAL_SECONDS.x, + BLINK_INTERVAL_SECONDS.y, + ) + + func _update_sprint_dust() -> void: if _sprint_dust == null: return