This commit is contained in:
2023-05-10 17:04:31 +02:00
parent 25787c8b65
commit 2efb3aff04
2 changed files with 53 additions and 0 deletions

13
rust/mhgd/Cargo.toml Normal file
View File

@@ -0,0 +1,13 @@
[package]
name = "mhgd"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
godot = { git = "https://github.com/godot-rust/gdext", branch = "master" }
lightwave-3d = "1.0.0"
itertools = "0.10.5"
starforcelib = { path = "../starforcelib" }
springylib = { path = "../springylib" }

40
rust/mhgd/src/lib.rs Normal file
View File

@@ -0,0 +1,40 @@
use crate::sproing::datafile::DatafileLoader;
use ::godot::engine::class_macros::auto_register_classes;
use ::godot::engine::{ResourceFormatLoaderVirtual, ResourceLoader};
use ::godot::init::{gdextension, ExtensionLayer};
use ::godot::prelude::{ExtensionLibrary, Gd, InitHandle, InitLevel, Share};
pub mod sproing;
pub mod lightwave_object;
struct Main {}
#[gdextension]
unsafe impl ExtensionLibrary for Main {
fn load_library(handle: &mut InitHandle) -> bool {
handle.register_layer(InitLevel::Editor, ResourceLoaderLayer { datafile: None });
true
}
}
struct ResourceLoaderLayer {
pub datafile: Option<Gd<DatafileLoader>>,
}
impl ExtensionLayer for ResourceLoaderLayer {
fn initialize(&mut self) {
auto_register_classes();
self.datafile = Some(Gd::<DatafileLoader>::with_base(DatafileLoader::init));
ResourceLoader::singleton()
.add_resource_format_loader(self.datafile.as_ref().unwrap().share().upcast(), true);
}
fn deinitialize(&mut self) {
if let Some(datafile) = &self.datafile {
ResourceLoader::singleton().remove_resource_format_loader(datafile.share().upcast());
self.datafile = None;
}
}
}