From 1bb0f56f40955180fafc159a16f5243cca3dab72 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Wed, 9 Oct 2019 16:10:14 -0500 Subject: [PATCH] Make `rate` a percentage, and add getter to determine if rate selection is supported. --- TTS.gd | 7 +++++++ src/lib.rs | 22 ++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/TTS.gd b/TTS.gd index 6ab38ca..abcaeb1 100644 --- a/TTS.gd +++ b/TTS.gd @@ -1,3 +1,4 @@ +tool extends Node const TTS = preload("godot-tts.gdns") @@ -11,12 +12,18 @@ func get_rate(): return tts.rate var rate setget set_rate, get_rate + func speak(text, interrupt := true): tts.speak(text, interrupt) func stop(): tts.stop() +func get_is_rate_supported(): + return tts.is_rate_supported() + +var is_rate_supported setget , get_is_rate_supported + func singular_or_plural(count, singular, plural): if count == 1: return singular diff --git a/src/lib.rs b/src/lib.rs index 3c2570f..2d06c2a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,8 @@ +use std::u8; + use gdnative::*; use gdnative::init::*; - -use tts::{TTS as Tts}; +use tts::{Features, TTS as Tts}; struct TTS(Tts); @@ -20,18 +21,19 @@ impl NativeClass for TTS { fn register_properties(builder: &ClassBuilder) { builder.add_property(Property { name: "rate", - default: 128, + default: 50, hint: PropertyHint::Range { - range: 0.0..255.0, + range: 0.0..100.0, step: 1., slider: true, }, getter: |this: &TTS| { let rate = this.0.get_rate().unwrap(); - rate + rate / u8::MAX * 100 }, setter: |this: &mut TTS, v: u8| { - this.0.set_rate(v).unwrap(); + let v = v / 100 * u8::MAX; + this.0.set_rate(v as u8).unwrap(); }, usage: PropertyUsage::DEFAULT, }); @@ -56,6 +58,14 @@ impl TTS { fn stop(&mut self, _owner: Node) { self.0.stop().unwrap(); } + + #[export] + fn is_rate_supported(&mut self, _owner: Node) -> bool { + let Features { + rate: rate_feature, .. + } = self.0.supported_features(); + rate_feature + } } fn init(handle: gdnative::init::InitHandle) {