parent
c2f05eaeb0
commit
b04ab122eb
|
|
@ -1,3 +0,0 @@
|
|||
[gd_scene format=3 uid="uid://dg85xsdqg6wj0"]
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[configuration]
|
||||
entry_symbol = "gdext_rust_init"
|
||||
compatibility_minimum = 4.1
|
||||
reloadable = true
|
||||
|
||||
[libraries]
|
||||
linux.debug.x86_64 = "res://../rust/target/debug/libprice_is_wrong.so"
|
||||
linux.release.x86_64 = "res://../rust/target/release/libprice_is_wrong.so"
|
||||
windows.debug.x86_64 = "res://../rust/target/debug/price_is_wrong.dll"
|
||||
windows.release.x86_64 = "res://../rust/target/release/price_is_wrong.dll"
|
||||
macos.debug = "res://../rust/target/debug/libprice_is_wrong.dylib"
|
||||
macos.release = "res://../rust/target/release/libprice_is_wrong.dylib"
|
||||
macos.debug.arm64 = "res://../rust/target/debug/libprice_is_wrong.dylib"
|
||||
macos.release.arm64 = "res://../rust/target/release/libprice_is_wrong.dylib"
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://dg85xsdqg6wj0"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cneqjngiworik" path="res://icon.svg" id="1_swwii"]
|
||||
|
||||
[node name="Node2D" type="Node2D"]
|
||||
|
||||
[node name="BreeLPlayer" type="BreeLPlayer" parent="."]
|
||||
position = Vector2(556, 302)
|
||||
texture = ExtResource("1_swwii")
|
||||
|
Before Width: | Height: | Size: 994 B After Width: | Height: | Size: 994 B |
|
|
@ -11,6 +11,7 @@ config_version=5
|
|||
[application]
|
||||
|
||||
config/name="price-is-wrong"
|
||||
run/main_scene="res://gd/node_2d.tscn"
|
||||
config/features=PackedStringArray("4.3", "GL Compatibility")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
|
|
@ -2,6 +2,15 @@
|
|||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.96"
|
||||
|
|
@ -186,6 +195,24 @@ dependencies = [
|
|||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gdextension-api"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af8707eca996b28193b772a4a9a28a97364bb93c97e3c313542e812f2963fb93"
|
||||
|
||||
[[package]]
|
||||
name = "gensym"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "913dce4c5f06c2ea40fc178c06f777ac89fc6b1383e90c254fafb1abe4ba3c82"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.3.1"
|
||||
|
|
@ -198,12 +225,101 @@ dependencies = [
|
|||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glam"
|
||||
version = "0.28.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94"
|
||||
|
||||
[[package]]
|
||||
name = "glob"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
|
||||
|
||||
[[package]]
|
||||
name = "godot"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a29a3646d4b02bf4587fedba4ac7b44a47d45c933fd85ba7e61292408818eaa4"
|
||||
dependencies = [
|
||||
"godot-core",
|
||||
"godot-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "godot-bindings"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0014540bff93ba275031bc852f1cf9a3ff3216f02cdd51dc249745dccc8c578"
|
||||
dependencies = [
|
||||
"gdextension-api",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "godot-cell"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "88184d525d763ebc88ff6806ffee35e19c7118d5c9e4eedbc74e70e069f8a671"
|
||||
|
||||
[[package]]
|
||||
name = "godot-codegen"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "caa72d9b8be812fef2932f2a172b80c8b3feaee030571682f8f770c3d1c348d8"
|
||||
dependencies = [
|
||||
"godot-bindings",
|
||||
"heck",
|
||||
"nanoserde",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"regex",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "godot-core"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ff8345372e4c990ca592d7b61490ef88ff249fc77226f5b79beca173b4a0458"
|
||||
dependencies = [
|
||||
"glam",
|
||||
"godot-bindings",
|
||||
"godot-cell",
|
||||
"godot-codegen",
|
||||
"godot-ffi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "godot-ffi"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "606d08085bd590d2f9c72633d4d218fee665ab3a0760b2d9daff2d964d628def"
|
||||
dependencies = [
|
||||
"gensym",
|
||||
"godot-bindings",
|
||||
"godot-codegen",
|
||||
"libc",
|
||||
"paste",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "godot-macros"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c11b3188e54ebacf88feb4c968ed19048a71a329c4cfd4a06cf374f18357a36"
|
||||
dependencies = [
|
||||
"godot-bindings",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"venial",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "heck"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.14"
|
||||
|
|
@ -228,6 +344,21 @@ version = "2.7.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
|
||||
|
||||
[[package]]
|
||||
name = "nanoserde"
|
||||
version = "0.1.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5de9cf844ab1e25a0353525bd74cb889843a6215fa4a0d156fd446f4857a1b99"
|
||||
dependencies = [
|
||||
"nanoserde-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nanoserde-derive"
|
||||
version = "0.1.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e943b2c21337b7e3ec6678500687cdc741b7639ad457f234693352075c082204"
|
||||
|
||||
[[package]]
|
||||
name = "native_db"
|
||||
version = "0.8.1"
|
||||
|
|
@ -287,6 +418,12 @@ version = "1.20.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
|
||||
|
||||
[[package]]
|
||||
name = "paste"
|
||||
version = "1.0.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-lite"
|
||||
version = "0.2.16"
|
||||
|
|
@ -304,6 +441,7 @@ name = "price-is-wrong"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"godot",
|
||||
"native_db",
|
||||
"native_model",
|
||||
"serde",
|
||||
|
|
@ -356,6 +494,35 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-automata",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-automata"
|
||||
version = "0.4.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.38.44"
|
||||
|
|
@ -506,6 +673,25 @@ version = "1.0.17"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
|
||||
|
||||
[[package]]
|
||||
name = "uuid"
|
||||
version = "1.15.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "venial"
|
||||
version = "0.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a42528baceab6c7784446df2a10f4185078c39bf73dc614f154353f1a6b1229"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.5"
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@ edition = "2024"
|
|||
|
||||
[dependencies]
|
||||
futures = "0.3.31"
|
||||
godot = "0.2.4"
|
||||
native_db = "0.8.1"
|
||||
native_model = "0.4.20"
|
||||
serde = "1.0.218"
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,111 @@
|
|||
mod main {
|
||||
use {super::data};
|
||||
|
||||
pub fn main() {
|
||||
let db = data::DB::new().expect("could not make db");
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_main() {
|
||||
main();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod data {
|
||||
mod models {
|
||||
use {
|
||||
native_db::{
|
||||
native_db,
|
||||
ToKey,
|
||||
},
|
||||
native_model::{
|
||||
native_model,
|
||||
Model,
|
||||
},
|
||||
serde::{Deserialize, Serialize},
|
||||
};
|
||||
|
||||
pub mod v1 {
|
||||
use super::*;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
|
||||
#[native_model(id = 1, version = 1)]
|
||||
#[native_db]
|
||||
pub struct Person {
|
||||
#[primary_key]
|
||||
pub name: String,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
use native_db::*;
|
||||
|
||||
pub type Person = models::v1::Person;
|
||||
|
||||
static MODELS: std::sync::LazyLock<Models> = std::sync::LazyLock::new(|| {
|
||||
let mut models = Models::new();
|
||||
models.define::<Person>().expect("failed to define person");
|
||||
models
|
||||
});
|
||||
|
||||
pub struct DB<'a> {
|
||||
db: Database<'a>,
|
||||
}
|
||||
|
||||
impl<'a> DB<'a> {
|
||||
pub fn new() -> Result<DB<'a>, String> {
|
||||
let db = match Builder::new().create_in_memory(&MODELS) {
|
||||
Ok(db) => Ok(db),
|
||||
Err(msg) => Err(msg.to_string()),
|
||||
}?;
|
||||
Ok(DB{
|
||||
db: db,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn insert<T: ToInput>(self: &DB<'a>, v: T) -> Result<(), String> {
|
||||
let t = match self.db.rw_transaction() {
|
||||
Ok(t) => t,
|
||||
Err(msg) => return Err(msg.to_string()),
|
||||
};
|
||||
if let Err(msg) = t.insert(v) {
|
||||
return Err(msg.to_string());
|
||||
}
|
||||
if let Err(msg) = t.commit() {
|
||||
return Err(msg.to_string());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get<T: ToInput, S: ToKey>(self: &DB<'a>, primary: S) -> Result<Option<T>, String> {
|
||||
let t = match self.db.r_transaction() {
|
||||
Ok(t) => t,
|
||||
Err(msg) => return Err(msg.to_string()),
|
||||
};
|
||||
match t.get().primary(primary) {
|
||||
Ok(v) => Ok(v),
|
||||
Err(msg) => Err(msg.to_string()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn mvp() {
|
||||
let db = DB::new().expect("could not make db");
|
||||
let person = Person{name: "me".to_string()};
|
||||
db.insert(person.clone()).expect("could not insert person");
|
||||
assert_eq!(person, db.get("me".to_string()).expect("could not get").expect("got none"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,110 +1,9 @@
|
|||
mod main {
|
||||
use {super::data};
|
||||
use godot::prelude::*;
|
||||
|
||||
pub fn main() {
|
||||
let db = data::DB::new().expect("could not make db");
|
||||
}
|
||||
struct MyExtension;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_main() {
|
||||
main();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod data {
|
||||
mod models {
|
||||
use {
|
||||
native_db::{
|
||||
native_db,
|
||||
ToKey,
|
||||
},
|
||||
native_model::{
|
||||
native_model,
|
||||
Model,
|
||||
},
|
||||
serde::{Deserialize, Serialize},
|
||||
};
|
||||
|
||||
pub mod v1 {
|
||||
use super::*;
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
|
||||
#[native_model(id = 1, version = 1)]
|
||||
#[native_db]
|
||||
pub struct Person {
|
||||
#[primary_key]
|
||||
pub name: String,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
use native_db::*;
|
||||
|
||||
pub type Person = models::v1::Person;
|
||||
|
||||
static MODELS: std::sync::LazyLock<Models> = std::sync::LazyLock::new(|| {
|
||||
let mut models = Models::new();
|
||||
models.define::<Person>().expect("failed to define person");
|
||||
models
|
||||
});
|
||||
|
||||
pub struct DB<'a> {
|
||||
db: Database<'a>,
|
||||
}
|
||||
|
||||
impl<'a> DB<'a> {
|
||||
pub fn new() -> Result<DB<'a>, String> {
|
||||
let db = match Builder::new().create_in_memory(&MODELS) {
|
||||
Ok(db) => Ok(db),
|
||||
Err(msg) => Err(msg.to_string()),
|
||||
}?;
|
||||
Ok(DB{
|
||||
db: db,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn insert<T: ToInput>(self: &DB<'a>, v: T) -> Result<(), String> {
|
||||
let t = match self.db.rw_transaction() {
|
||||
Ok(t) => t,
|
||||
Err(msg) => return Err(msg.to_string()),
|
||||
};
|
||||
if let Err(msg) = t.insert(v) {
|
||||
return Err(msg.to_string());
|
||||
}
|
||||
if let Err(msg) = t.commit() {
|
||||
return Err(msg.to_string());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn get<T: ToInput, S: ToKey>(self: &DB<'a>, primary: S) -> Result<Option<T>, String> {
|
||||
let t = match self.db.r_transaction() {
|
||||
Ok(t) => t,
|
||||
Err(msg) => return Err(msg.to_string()),
|
||||
};
|
||||
match t.get().primary(primary) {
|
||||
Ok(v) => Ok(v),
|
||||
Err(msg) => Err(msg.to_string()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn mvp() {
|
||||
let db = DB::new().expect("could not make db");
|
||||
let person = Person{name: "me".to_string()};
|
||||
db.insert(person.clone()).expect("could not insert person");
|
||||
assert_eq!(person, db.get("me".to_string()).expect("could not get").expect("got none"));
|
||||
}
|
||||
}
|
||||
#[gdextension]
|
||||
unsafe impl ExtensionLibrary for MyExtension {
|
||||
}
|
||||
|
||||
pub mod player;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
use godot::{prelude::*, classes::{ISprite2D, Sprite2D}};
|
||||
#[derive(GodotClass)]
|
||||
#[class(base=Sprite2D)]
|
||||
struct BreeLPlayer {
|
||||
base: Base<Sprite2D>
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
impl ISprite2D for BreeLPlayer {
|
||||
fn init(base: Base<Sprite2D>) -> Self {
|
||||
eprintln!("init");
|
||||
BreeLPlayer{base: base}
|
||||
}
|
||||
|
||||
fn physics_process(&mut self, delta: f64) {
|
||||
eprintln!("physics_process({delta})");
|
||||
}
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
impl BreeLPlayer {
|
||||
fn drop(&mut self) {
|
||||
eprintln!("drop");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue