回归stable and fix pyo3

This commit is contained in:
shenjack 2024-11-28 22:12:17 +08:00
parent 42f68a71ea
commit 9ef84afa3f
Signed by: shenjack
GPG Key ID: 7B1134A979775551
10 changed files with 107 additions and 108 deletions

View File

@ -1,5 +0,0 @@
{
"rust-analyzer.linkedProjects": [
"mods/dr_game/Difficult_Rocket_rs/src/Cargo.toml"
]
}

View File

@ -33,9 +33,9 @@ dependencies = [
[[package]]
name = "allocator-api2"
version = "0.2.18"
version = "0.2.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9"
[[package]]
name = "android-activity"
@ -144,9 +144,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]]
name = "bytemuck"
version = "1.19.0"
version = "1.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d"
checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a"
[[package]]
name = "bytes"
@ -182,9 +182,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.1.36"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baee610e9452a8f6f0a1b6194ec09ff9e2d85dea54432acdae41aa0761c95d70"
checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47"
dependencies = [
"jobserver",
"libc",
@ -337,7 +337,7 @@ dependencies = [
"anyhow",
"nalgebra",
"pyo3",
"quick-xml 0.37.0",
"quick-xml 0.37.1",
"rapier2d-f64",
"raw-window-handle",
"serde",
@ -378,6 +378,15 @@ version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
[[package]]
name = "ena"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5"
dependencies = [
"log",
]
[[package]]
name = "equivalent"
version = "1.0.1"
@ -454,9 +463,9 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.15.1"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
[[package]]
name = "heck"
@ -477,7 +486,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
dependencies = [
"equivalent",
"hashbrown 0.15.1",
"hashbrown 0.15.2",
]
[[package]]
@ -528,9 +537,9 @@ dependencies = [
[[package]]
name = "libc"
version = "0.2.161"
version = "0.2.166"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36"
[[package]]
name = "libloading"
@ -981,15 +990,16 @@ dependencies = [
[[package]]
name = "parry2d-f64"
version = "0.17.1"
version = "0.17.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9ef77dcfb95073cf0fb746ae2ba87a747d0bc3eaf3c3fd207a53af5f33fb642"
checksum = "7ddb8f75aa4a6402cc22b47efb61deb2e9534543df78309699877dcaa4dae7ec"
dependencies = [
"approx",
"arrayvec",
"bitflags 2.6.0",
"downcast-rs",
"either",
"ena",
"log",
"nalgebra",
"num-derive",
@ -1049,9 +1059,9 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]]
name = "polling"
version = "3.7.3"
version = "3.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511"
checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f"
dependencies = [
"cfg-if",
"concurrent-queue",
@ -1064,9 +1074,9 @@ dependencies = [
[[package]]
name = "portable-atomic"
version = "1.9.0"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2"
checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6"
[[package]]
name = "proc-macro-crate"
@ -1079,18 +1089,18 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.89"
version = "1.0.92"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
dependencies = [
"unicode-ident",
]
[[package]]
name = "pyo3"
version = "0.22.6"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884"
checksum = "f54b3d09cbdd1f8c20650b28e7b09e338881482f4aa908a5f61a00c98fba2690"
dependencies = [
"cfg-if",
"indoc",
@ -1106,9 +1116,9 @@ dependencies = [
[[package]]
name = "pyo3-build-config"
version = "0.22.6"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38"
checksum = "3015cf985888fe66cfb63ce0e321c603706cd541b7aec7ddd35c281390af45d8"
dependencies = [
"once_cell",
"target-lexicon",
@ -1116,9 +1126,9 @@ dependencies = [
[[package]]
name = "pyo3-ffi"
version = "0.22.6"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636"
checksum = "6fca7cd8fd809b5ac4eefb89c1f98f7a7651d3739dfb341ca6980090f554c270"
dependencies = [
"libc",
"pyo3-build-config",
@ -1126,9 +1136,9 @@ dependencies = [
[[package]]
name = "pyo3-macros"
version = "0.22.6"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453"
checksum = "34e657fa5379a79151b6ff5328d9216a84f55dc93b17b08e7c3609a969b73aa0"
dependencies = [
"proc-macro2",
"pyo3-macros-backend",
@ -1138,9 +1148,9 @@ dependencies = [
[[package]]
name = "pyo3-macros-backend"
version = "0.22.6"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe"
checksum = "295548d5ffd95fd1981d2d3cf4458831b21d60af046b729b6fd143b0ba7aee2f"
dependencies = [
"heck",
"proc-macro2",
@ -1160,9 +1170,9 @@ dependencies = [
[[package]]
name = "quick-xml"
version = "0.37.0"
version = "0.37.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffbfb3ddf5364c9cfcd65549a1e7b801d0e8d1b14c1a1590a6408aa93cfbfa84"
checksum = "f22f29bdff3987b4d8632ef95fd6424ec7e4e0a57e2f4fc63e489e75357f6a03"
dependencies = [
"memchr",
"serde",
@ -1245,9 +1255,9 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
[[package]]
name = "rustix"
version = "0.38.39"
version = "0.38.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "375116bee2be9ed569afe2154ea6a99dfdffd257f533f187498c2a8f5feaf4ee"
checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6"
dependencies = [
"bitflags 2.6.0",
"errno",
@ -1295,18 +1305,18 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.214"
version = "1.0.215"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f55c3193aca71c12ad7890f1785d2b73e1b9f63a0bbc353c08ef26fe03fc56b5"
checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.214"
version = "1.0.215"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de523f781f095e28fa605cdce0f8307e451cc0fd14e2eb4cd2e98a355b147766"
checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
dependencies = [
"proc-macro2",
"quote",
@ -1401,9 +1411,9 @@ checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
[[package]]
name = "syn"
version = "2.0.87"
version = "2.0.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e"
dependencies = [
"proc-macro2",
"quote",
@ -1418,18 +1428,18 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "thiserror"
version = "1.0.68"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02dd99dc800bbb97186339685293e1cc5d9df1f8fae2d0aecd9ff1c77efea892"
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.68"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e"
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
@ -1480,9 +1490,9 @@ dependencies = [
[[package]]
name = "tracing"
version = "0.1.40"
version = "0.1.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
"pin-project-lite",
"tracing-core",
@ -1490,9 +1500,9 @@ dependencies = [
[[package]]
name = "tracing-core"
version = "0.1.32"
version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
[[package]]
name = "ttf-parser"
@ -1508,9 +1518,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "unicode-ident"
version = "1.0.13"
version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
[[package]]
name = "unicode-segmentation"
@ -1750,9 +1760,9 @@ dependencies = [
[[package]]
name = "wide"
version = "0.7.28"
version = "0.7.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b828f995bf1e9622031f8009f8481a85406ce1f4d4588ff746d872043e855690"
checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019"
dependencies = [
"bytemuck",
"safe_arch",

View File

@ -21,7 +21,7 @@ quick-xml = { version = "0.37", features = ["serialize"] }
serde = { version = "1.0", features = ["derive"] }
nalgebra = "0.33"
pyo3 = { version = "0.22", features = [
pyo3 = { version = "0.23", features = [
"extension-module",
"macros",
"py-clone",

View File

@ -1,3 +0,0 @@
[toolchain]
# 记得 rustup 完 cargo clean
channel = "nightly"

View File

@ -14,7 +14,11 @@ mod renders;
/// sr1 的逆天数据结构解析
mod sr1_parse;
use pyo3::prelude::*;
use pyo3::{
pyfunction, pymodule,
types::{PyModule, PyModuleMethods},
wrap_pyfunction, Bound, PyResult,
};
#[pyfunction]
fn get_version_str() -> String { env!("CARGO_PKG_VERSION").to_string() }

View File

@ -10,6 +10,9 @@ pub struct PyConsole {
pub keyboard_input_receiver: Option<std::sync::mpsc::Receiver<String>>,
}
/// 额, 就先这样吧(逃
unsafe impl Sync for PyConsole {}
#[pymethods]
impl PyConsole {
#[new]

View File

@ -43,6 +43,8 @@ pub struct PySR1PartType {
impl PySR1PartType {
pub fn new(data: SR1PartType) -> Self { Self { data } }
pub fn ref_new(data: &SR1PartType) -> Self { Self { data: data.clone() } }
}
#[pymethods]
@ -99,12 +101,16 @@ impl PySR1PartList {
}
fn as_dict(&self) -> HashMap<String, PySR1PartType> {
self.data.get_cache().iter().map(|(k, v)| (k.clone(), PySR1PartType::new(v.clone()))).collect()
let mut map = HashMap::new();
for part_type in self.data.types.iter() {
map.insert(part_type.name.clone(), PySR1PartType::ref_new(part_type));
}
map
}
fn get_part_type(&self, name: String) -> Option<PySR1PartType> {
let part_type = self.data.get_part_type(&name);
part_type.map(PySR1PartType::new)
part_type.map(PySR1PartType::ref_new)
}
}

View File

@ -16,7 +16,6 @@ use crate::sr1_parse::ship::{
};
use crate::sr1_parse::ship::{Connections as RawConnections, DisconnectedParts, Parts as RawParts};
use std::cell::{Cell, RefCell};
use std::collections::HashMap;
use std::io::Cursor;
use std::ops::Deref;
@ -161,18 +160,11 @@ impl SR1PartType {
#[derive(Debug, Clone)]
pub struct SR1PartList {
pub types: Vec<SR1PartType>,
pub cache: RefCell<Option<HashMap<String, SR1PartType>>>,
pub name: String,
}
impl SR1PartList {
pub fn new(name: String, types: Vec<SR1PartType>) -> SR1PartList {
SR1PartList {
types,
cache: RefCell::new(None),
name,
}
}
pub fn new(name: String, types: Vec<SR1PartType>) -> SR1PartList { SR1PartList { types, name } }
pub fn from_file(file_name: String) -> Option<SR1PartList> {
if let Ok(raw_list) = RawPartList::from_file(file_name) {
@ -182,21 +174,8 @@ impl SR1PartList {
None
}
pub fn get_cache(&self) -> HashMap<String, SR1PartType> {
if self.cache.borrow().is_none() {
let mut map = HashMap::new();
for part in self.types.iter() {
map.insert(part.id.clone(), part.clone());
}
let cache = Some(map.clone());
self.cache.replace(cache);
}
self.cache.borrow().clone().unwrap()
}
pub fn get_part_type(&self, type_name: &String) -> Option<SR1PartType> {
let cache = self.get_cache();
cache.get(type_name).cloned()
pub fn get_part_type(&self, type_name: &String) -> Option<&SR1PartType> {
self.types.iter().find(|part_type| &part_type.id == type_name)
}
pub fn part_types_new(part_types: Vec<SR1PartType>, name: Option<String>) -> Self {
@ -514,39 +493,44 @@ pub struct SR1PartDataAttr {
pub deployed: Option<bool>,
pub rope: Option<bool>,
// part_type
pub part_type: Cell<Option<SR1PartTypeEnum>>,
pub part_type: Option<SR1PartTypeEnum>,
}
impl SR1PartDataAttr {
pub fn guess_type(&self) -> SR1PartTypeEnum {
if let Some(part_type) = self.part_type.get() {
pub fn guess_type(&mut self) -> SR1PartTypeEnum {
if let Some(part_type) = self.part_type {
return part_type;
}
if self.fuel.is_some() {
self.part_type.set(Some(SR1PartTypeEnum::tank));
return self.part_type.get().unwrap();
self.part_type = Some(SR1PartTypeEnum::tank);
return SR1PartTypeEnum::tank;
}
if self.name.is_some() {
self.part_type.set(Some(SR1PartTypeEnum::pod));
return self.part_type.get().unwrap();
self.part_type = Some(SR1PartTypeEnum::pod);
return SR1PartTypeEnum::pod;
}
if self.extension.is_some() {
self.part_type.set(Some(SR1PartTypeEnum::solar));
return self.part_type.get().unwrap();
self.part_type = Some(SR1PartTypeEnum::solar);
return SR1PartTypeEnum::solar;
}
if self.chute_x.is_some() {
self.part_type.set(Some(SR1PartTypeEnum::parachute));
return self.part_type.get().unwrap();
self.part_type = Some(SR1PartTypeEnum::parachute);
}
SR1PartTypeEnum::strut // 默认为 Strut 开摆
}
pub fn get_part_type(&self) -> SR1PartTypeEnum {
if let Some(part_type) = self.part_type.get() {
pub fn get_part_type(&mut self) -> SR1PartTypeEnum {
if let Some(part_type) = self.part_type {
return part_type;
}
self.guess_type()
}
pub unsafe fn get_part_type_none_mut(&self) -> SR1PartTypeEnum {
let slf = self as *const Self as *mut Self;
(*slf).get_part_type()
}
#[allow(clippy::too_many_arguments)]
pub fn new(
fuel: Option<f64>,
@ -579,7 +563,7 @@ impl SR1PartDataAttr {
inflation,
deployed,
rope,
part_type: Cell::new(part_type),
part_type,
}
}
@ -605,7 +589,7 @@ impl SR1PartDataAttr {
} else {
(None, None, None, None)
};
let results = SR1PartDataAttr {
let mut results = SR1PartDataAttr {
fuel,
name,
throttle,
@ -620,10 +604,10 @@ impl SR1PartDataAttr {
inflation: raw_data.inflation,
deployed: raw_data.deployed.map(|i| i != 0),
rope: raw_data.rope.map(|i| i != 0),
part_type: Cell::new(part_type),
part_type,
};
if guess & results.part_type.get().is_none() {
if guess & results.part_type.is_none() {
results.guess_type();
}
results

View File

@ -90,7 +90,7 @@ pub struct Part {
pub inflate: Option<i8>,
#[serde(rename = "@inflation")]
pub inflation: Option<f64>,
#[serde(rename = "@deployed")]
#[serde(rename = "@exploded")]
pub exploded: Option<i8>,
#[serde(rename = "@rope")]
pub rope: Option<i8>,
@ -289,7 +289,7 @@ impl Connection {
impl SR1PartDataTrait for Part {
fn to_sr_part_data(&self) -> SR1PartData {
let attr = SR1PartDataAttr::from_raw(self, None, true);
let part_type = attr.get_part_type();
let part_type = unsafe { attr.get_part_type_none_mut() };
SR1PartData {
attr,
x: self.x,

View File

@ -18,7 +18,7 @@ if __name__ == "__main__":
os.chdir("./mods/dr_game/Difficult_Rocket_rs/src")
os.chdir("./src")
subprocess.run(["cargo", "fmt", "--all"])
subprocess.run(["cargo", "+nightly", "fmt", "--all"])
if args.clean:
subprocess.run(["cargo", "clean"])