Make rate a percentage, and add getter to determine if rate selection is supported.

This commit is contained in:
Nolan Darilek 2019-10-09 16:10:14 -05:00
parent f6cf82f8c9
commit 1bb0f56f40
2 changed files with 23 additions and 6 deletions

7
TTS.gd
View File

@ -1,3 +1,4 @@
tool
extends Node extends Node
const TTS = preload("godot-tts.gdns") const TTS = preload("godot-tts.gdns")
@ -11,12 +12,18 @@ func get_rate():
return tts.rate return tts.rate
var rate setget set_rate, get_rate var rate setget set_rate, get_rate
func speak(text, interrupt := true): func speak(text, interrupt := true):
tts.speak(text, interrupt) tts.speak(text, interrupt)
func stop(): func stop():
tts.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): func singular_or_plural(count, singular, plural):
if count == 1: if count == 1:
return singular return singular

View File

@ -1,7 +1,8 @@
use std::u8;
use gdnative::*; use gdnative::*;
use gdnative::init::*; use gdnative::init::*;
use tts::{Features, TTS as Tts};
use tts::{TTS as Tts};
struct TTS(Tts); struct TTS(Tts);
@ -20,18 +21,19 @@ impl NativeClass for TTS {
fn register_properties(builder: &ClassBuilder<Self>) { fn register_properties(builder: &ClassBuilder<Self>) {
builder.add_property(Property { builder.add_property(Property {
name: "rate", name: "rate",
default: 128, default: 50,
hint: PropertyHint::Range { hint: PropertyHint::Range {
range: 0.0..255.0, range: 0.0..100.0,
step: 1., step: 1.,
slider: true, slider: true,
}, },
getter: |this: &TTS| { getter: |this: &TTS| {
let rate = this.0.get_rate().unwrap(); let rate = this.0.get_rate().unwrap();
rate rate / u8::MAX * 100
}, },
setter: |this: &mut TTS, v: u8| { 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, usage: PropertyUsage::DEFAULT,
}); });
@ -56,6 +58,14 @@ impl TTS {
fn stop(&mut self, _owner: Node) { fn stop(&mut self, _owner: Node) {
self.0.stop().unwrap(); 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) { fn init(handle: gdnative::init::InitHandle) {