1#![allow(dead_code)]
2
3#![feature(trait_upcasting)]
4#![feature(ptr_metadata)]
5#![feature(arbitrary_self_types)]
6#![feature(negative_impls)]
7#![feature(variant_count)]
8#![feature(panic_always_abort)]
9
10#![allow(internal_features)]
11#![feature(core_intrinsics)]
12
13#[rustversion::not(nightly)]
14compile_error!("This crate can only be built with nightly rust due to the use of unstable features.");
15
16pub mod core;
17pub mod instance;
18pub mod userdata;
19mod godot_vm_bindings;
20
21use core::verify_gdext_api_compat;
22
23pub use godot_vm_bindings::RobloxVMNode;
24
25use godot::prelude::*;
26use rustversion_detect::RUST_VERSION;
27
28#[cfg(debug_assertions)]
29macro_rules! godot_debug {
30 ($fmt:literal $(, $args:expr)* $(,)?) => {
31 godot::prelude::godot_print_rich!("[color=cyan]{}[/color]\n[color=gray]stack traceback:\n{}[/color]",
32 format!($fmt, $(, $args)*),
33 std::backtrace::Backtrace::force_capture()
34 );
35 };
36 ($thing:expr) => {
37 godot::prelude::godot_print_rich!("[color=cyan]{}[/color]\n[color=gray]stack traceback:\n{}[/color]",
38 format!("{} = {:?}", stringify!($thing), $thing),
39 std::backtrace::Backtrace::force_capture()
40 );
41 };
42 (backtrace $thing:expr) => {
43 godot::prelude::godot_print_rich!("[color=gray]stack traceback:\n{}[/color]", $thing);
44 };
45}
46#[cfg(not(debug_assertions))]
47macro_rules! godot_debug {
48 ($fmt:literal $(, $args:expr)* $(,)?) => {};
49 ($thing:expr) => {};
50}
51pub(crate) use godot_debug;
52
53struct RobloxToGodotProjectExtension;
54
55#[gdextension]
56unsafe impl ExtensionLibrary for RobloxToGodotProjectExtension {
57 fn min_level() -> InitLevel {
58 InitLevel::Scene
59 }
60
61 fn on_level_init(level: InitLevel) {
62
63 match level {
64 InitLevel::Scene => {
65 verify_gdext_api_compat();
66
67 std::panic::always_abort();
70
71 godot_print!("Roblox To Godot Project v{} (Rust runtime v{}) by {}\n", env!("CARGO_PKG_VERSION"), RUST_VERSION, {
72 let authors: &'static str = env!("CARGO_PKG_AUTHORS");
73 authors.replace(":", ", ")
74 });
75 }
85 _ => ()
86 }
87 }
88}