5个版本
0.1.4 | 2023年4月6日 |
---|---|
0.1.3 | 2023年4月6日 |
0.1.2 | 2023年2月5日 |
0.1.1 | 2023年1月10日 |
0.1.0 | 2023年1月10日 |
在游戏开发类别中排名530
每月下载量35次
34KB
417 行
tts-external-api
Tabletop Simulator外部编辑API的Rust实现。
此实现旨在简化编写开发工具和插件,而不是使用内置脚本编辑器。
ExternalEditorApi
这是代表编辑器的客户端/服务器。您可以监听来自Tabletop Simulator活动实例的连接,并向活动实例发送消息。
use tts_external_api::ExternalEditorApi;
fn main() {
let api = ExternalEditorApi::new();
api.execute(String::from("print('Hello World')")).unwrap();
}
输出消息
您可以发送四种类型的输出消息
获取Lua脚本
use tts_external_api::{messages::AnswerReload, ExternalEditorApi};
fn get_lua_scripts(api: ExternalEditorApi) {
let answer_reload: AnswerReload = api.get_scripts().unwrap();
println!("{:#?}", answer_reload.script_states);
}
保存 & 播放
use tts_external_api::{json, messages::AnswerReload, ExternalEditorApi};
fn save_and_play(api: ExternalEditorApi) {
// Objects not mentioned in the script_states are not updated
let answer_reload: AnswerReload = api.reload(json!([])).unwrap();
println!("{:#?}", answer_reload);
}
自定义消息
use tts_external_api::{json, ExternalEditorApi, Value};
fn custom_message(api: ExternalEditorApi) {
let message: Value = json![{"foo": "Foo", "bar": "Bar"}];
api.custom_message(message).unwrap();
}
执行Lua脚本
use tts_external_api::{messages::AnswerReturn, ExternalEditorApi};
fn execute_lua_script(api: ExternalEditorApi) {
// JSON strings will be deserialized if possible
let answer_return: AnswerReturn = api
.execute(String::from(
"return JSON.encode({foo = 'Foo', bar = 'Bar'})",
))
.unwrap();
println!("{:#?}", answer_return.return_value);
}
输入消息
您还可以监听八种类型的输入消息
推送新对象
use tts_external_api::{messages::AnswerNewObject, ExternalEditorApi};
fn await_new_object(api: ExternalEditorApi) {
let answer_new_object: AnswerNewObject = api.wait();
println!("{:#?}", answer_new_object);
}
加载新游戏
use tts_external_api::{messages::AnswerReload, ExternalEditorApi};
fn await_reload(api: ExternalEditorApi) {
let answer_reload: AnswerReload = api.wait();
println!("{:#?}", answer_reload);
}
打印/调试消息
use tts_external_api::{messages::AnswerPrint, ExternalEditorApi};
fn await_print(api: ExternalEditorApi) {
let answer_print: AnswerPrint = api.wait();
println!("{:#?}", answer_print);
}
错误消息
use tts_external_api::{messages::AnswerError, ExternalEditorApi};
fn await_error(api: ExternalEditorApi) {
let answer_error: AnswerError = api.wait();
println!("{:#?}", answer_error);
}
自定义消息
use tts_external_api::{messages::AnswerCustomMessage, ExternalEditorApi};
fn await_custom_message(api: ExternalEditorApi) {
let answer_custom_message: AnswerCustomMessage = api.wait();
println!("{:#?}", answer_custom_message);
}
返回消息
use tts_external_api::{messages::AnswerReturn, ExternalEditorApi};
fn await_return(api: ExternalEditorApi) {
let answer_return: AnswerReturn = api.wait();
println!("{:#?}", answer_return);
}
游戏已保存
use tts_external_api::{messages::AnswerGameSaved, ExternalEditorApi};
fn await_game_saved(api: ExternalEditorApi) {
let answer_game_saved: AnswerGameSaved = api.wait();
println!("{:#?}", answer_game_saved);
}
对象已创建
use tts_external_api::{messages::AnswerObjectCreated, ExternalEditorApi};
fn await_object_created(api: ExternalEditorApi) {
let answer_object_created: AnswerObjectCreated = api.wait();
println!("{:#?}", answer_object_created);
}
未指定消息
或者您可以等待任何输入消息
use tts_external_api::{messages::Answer, ExternalEditorApi};
fn await_message(api: ExternalEditorApi) {
let answer: Answer = api.read();
match answer {
Answer::AnswerNewObject(_) => println!("pushing new object"),
Answer::AnswerReload(_) => println!("loading new game"),
Answer::AnswerPrint(_) => println!("print/debug message"),
Answer::AnswerError(_) => println!("error message"),
Answer::AnswerCustomMessage(_) => println!("custom message"),
Answer::AnswerReturn(_) => println!("return message"),
Answer::AnswerGameSaved(_) => println!("game saved"),
Answer::AnswerObjectCreated(_) => println!("object created"),
}
}
依赖项
~0.7–1.4MB
~32K SLoC