tirbofish/dropbear
main / crates / eucalyptus-exports / src / scene.rs · 4130 bytes
crates/eucalyptus-exports/src/scene.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
use eucalyptus_core::ptr::{CommandBufferPtr, CommandBufferUnwrapped, SceneLoaderPtr, SceneLoaderUnwrapped};
use eucalyptus_core::scene::scripting::shared;
use eucalyptus_core::scripting::result::DropbearNativeResult;
use eucalyptus_core::utils::Progress;
use crate::ToJObject;
use jni::objects::{JObject, JValue};
use jni::{Env, jni_sig, jni_str};
use eucalyptus_core::scripting::native::DropbearNativeError;
impl ToJObject for Progress {
fn to_jobject<'a>(&self, env: &mut Env<'a>) -> DropbearNativeResult<JObject<'a>> {
let class = env
.load_class(jni_str!("com/dropbear/utils/Progress"))
.map_err(|_| DropbearNativeError::JNIClassNotFound)?;
let message_obj = env
.new_string(&self.message)
.map_err(|_| DropbearNativeError::JNIFailedToCreateObject)?;
let args = [
JValue::Double(self.current as f64),
JValue::Double(self.total as f64),
JValue::Object(&JObject::from(message_obj)),
];
env.new_object(&class, jni_sig!((double, double, java.lang.String) -> void), &args)
.map_err(|_| DropbearNativeError::JNIFailedToCreateObject)
}
}
#[dropbear_macro::export(
kotlin(class = "com.dropbear.scene.SceneManagerNative", func = "loadSceneAsync"),
c
)]
fn load_scene_async(
#[dropbear_macro::define(CommandBufferPtr)] command_buffer: &CommandBufferUnwrapped,
#[dropbear_macro::define(SceneLoaderPtr)] scene_loader: &SceneLoaderUnwrapped,
scene_name: String,
) -> DropbearNativeResult<u64> {
Ok(shared::load_scene_async(command_buffer, scene_loader, scene_name, None)?)
}
#[dropbear_macro::export(
kotlin(class = "com.dropbear.scene.SceneManagerNative", func = "loadSceneAsyncWithLoading"),
c
)]
fn load_scene_async_with_loading(
#[dropbear_macro::define(CommandBufferPtr)] command_buffer: &CommandBufferUnwrapped,
#[dropbear_macro::define(SceneLoaderPtr)] scene_loader: &SceneLoaderUnwrapped,
scene_name: String,
loading_scene: String,
) -> DropbearNativeResult<u64> {
Ok(shared::load_scene_async(command_buffer, scene_loader, scene_name, Some(loading_scene))?)
}
#[dropbear_macro::export(
kotlin(class = "com.dropbear.scene.SceneManagerNative", func = "switchToSceneImmediate"),
c
)]
fn switch_to_scene_immediate(
#[dropbear_macro::define(CommandBufferPtr)] command_buffer: &CommandBufferUnwrapped,
scene_name: String,
) -> DropbearNativeResult<()> {
Ok(shared::switch_to_scene_immediate(command_buffer, scene_name)?)
}
#[dropbear_macro::export(
kotlin(
class = "com.dropbear.scene.SceneLoadHandleNative",
func = "getSceneLoadHandleSceneName"
),
c
)]
fn get_scene_load_handle_scene_name(
#[dropbear_macro::define(SceneLoaderPtr)] scene_loader: &SceneLoaderUnwrapped,
scene_id: u64,
) -> DropbearNativeResult<String> {
Ok(shared::get_scene_load_handle_scene_name(scene_loader, scene_id)?)
}
#[dropbear_macro::export(
kotlin(class = "com.dropbear.scene.SceneLoadHandleNative", func = "switchToSceneAsync"),
c
)]
fn switch_to_scene_async(
#[dropbear_macro::define(CommandBufferPtr)] command_buffer: &CommandBufferUnwrapped,
#[dropbear_macro::define(SceneLoaderPtr)] scene_loader: &SceneLoaderUnwrapped,
scene_id: u64,
) -> DropbearNativeResult<()> {
Ok(shared::switch_to_scene_async(command_buffer, scene_loader, scene_id)?)
}
#[dropbear_macro::export(
kotlin(class = "com.dropbear.scene.SceneLoadHandleNative", func = "getSceneLoadProgress"),
c
)]
fn get_scene_load_progress(
#[dropbear_macro::define(SceneLoaderPtr)] scene_loader: &SceneLoaderUnwrapped,
scene_id: u64,
) -> DropbearNativeResult<Progress> {
Ok(shared::get_scene_load_progress(scene_loader, scene_id)?)
}
#[dropbear_macro::export(
kotlin(class = "com.dropbear.scene.SceneLoadHandleNative", func = "getSceneLoadStatus"),
c
)]
fn get_scene_load_status(
#[dropbear_macro::define(SceneLoaderPtr)] scene_loader: &SceneLoaderUnwrapped,
scene_id: u64,
) -> DropbearNativeResult<u32> {
Ok(shared::get_scene_load_status(scene_loader, scene_id)?)
}