From a6f8a70895c192e15dfc59594125614b0c9fafe6 Mon Sep 17 00:00:00 2001 From: shenjack <3695888@qq.com> Date: Thu, 16 May 2024 00:33:25 +0800 Subject: [PATCH] DR rs 0.3.3 --- gen_require.py | 11 ++++---- mods/dr_game/Difficult_Rocket_rs/__init__.py | 6 ----- .../Difficult_Rocket_rs/src/Cargo.lock | 19 ++++++------- .../Difficult_Rocket_rs/src/Cargo.toml | 4 +-- .../Difficult_Rocket_rs/src/src/lib.rs | 7 ----- .../src/src/python/data.rs | 8 +++++- .../Difficult_Rocket_rs/src/src/sr1_parse.rs | 7 +++-- .../src/sr1_parse/data_structure/part_list.rs | 27 +++++++++++-------- .../src/src/sr1_parse/data_structure/ship.rs | 15 ++++------- mods/dr_game/__init__.py | 5 ++-- mods/dr_game/sr1_ship.py | 24 ++++++++++------- scripts/compile_mod.py | 5 ++++ 12 files changed, 70 insertions(+), 68 deletions(-) diff --git a/gen_require.py b/gen_require.py index 0930e61..c2147b7 100644 --- a/gen_require.py +++ b/gen_require.py @@ -9,7 +9,7 @@ import argparse # fmt: off basic = { "images": [ - 'pillow >= 10.2.0; (platform_python_implementation == "PyPy" and ' + 'pillow >= 10.3.0; (platform_python_implementation == "PyPy" and ' 'python_version < "3.10") or platform_python_implementation == "CPython"', ], "sys info": [ @@ -24,17 +24,18 @@ basic = { build = { "compile": [ - "nuitka >= 2.0.0", - "imageio >= 2.33.1", + "nuitka >= 2.2.2", + "imageio >= 2.34.1", "setuptools >= 69", - "setuptools-rust >= 1.8.1" + "setuptools-rust >= 1.9.0", + "wheel >= 0.37.0", ] } dev = { "debug": [ "objprint >= 0.2.3", - "viztracer >= 0.16.1; platform_python_implementation != \"PyPy\"", + "viztracer >= 0.16.3; platform_python_implementation != \"PyPy\"", "vizplugins >= 0.1.3; platform_python_implementation != \"PyPy\"" ] } diff --git a/mods/dr_game/Difficult_Rocket_rs/__init__.py b/mods/dr_game/Difficult_Rocket_rs/__init__.py index 7d4b94c..b6bdab9 100644 --- a/mods/dr_game/Difficult_Rocket_rs/__init__.py +++ b/mods/dr_game/Difficult_Rocket_rs/__init__.py @@ -9,12 +9,6 @@ from .lib import * # noqa: F403 from typing import TYPE_CHECKING, Dict, Tuple, Optional, List if TYPE_CHECKING: - - def test_call(py_obj) -> bool: - """这里展示的代码实际上就是实际的等效实现""" - py_obj.draw() - return True - def get_version_str() -> str: """ 获取版本号 diff --git a/mods/dr_game/Difficult_Rocket_rs/src/Cargo.lock b/mods/dr_game/Difficult_Rocket_rs/src/Cargo.lock index 0dcd38d..c76f237 100644 --- a/mods/dr_game/Difficult_Rocket_rs/src/Cargo.lock +++ b/mods/dr_game/Difficult_Rocket_rs/src/Cargo.lock @@ -20,6 +20,12 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +[[package]] +name = "anyhow" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" + [[package]] name = "approx" version = "0.5.1" @@ -140,10 +146,10 @@ dependencies = [ [[package]] name = "difficult_rocket_rs" -version = "0.3.2" +version = "0.3.3" dependencies = [ + "anyhow", "dict_derive", - "fs-err", "nalgebra", "pyo3", "quick-xml", @@ -163,15 +169,6 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" -[[package]] -name = "fs-err" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" -dependencies = [ - "autocfg", -] - [[package]] name = "hashbrown" version = "0.14.5" diff --git a/mods/dr_game/Difficult_Rocket_rs/src/Cargo.toml b/mods/dr_game/Difficult_Rocket_rs/src/Cargo.toml index fac8b56..ea7b0bc 100644 --- a/mods/dr_game/Difficult_Rocket_rs/src/Cargo.toml +++ b/mods/dr_game/Difficult_Rocket_rs/src/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "difficult_rocket_rs" -version = "0.3.2" +version = "0.3.3" edition = "2021" license-file = '../../LICENSE' authors = ["shenjackyuanjie <3695888@qq.com>"] @@ -22,7 +22,7 @@ panic = "abort" opt-level = 2 [dependencies] -fs-err = "2.11.0" +anyhow = "1.0" quick-xml = { version = "0.31.0", features = ["serialize"] } serde = { version = "1.0", features = ["derive"] } diff --git a/mods/dr_game/Difficult_Rocket_rs/src/src/lib.rs b/mods/dr_game/Difficult_Rocket_rs/src/src/lib.rs index 2386e7f..3ee62e3 100644 --- a/mods/dr_game/Difficult_Rocket_rs/src/src/lib.rs +++ b/mods/dr_game/Difficult_Rocket_rs/src/src/lib.rs @@ -19,17 +19,10 @@ fn get_version_str() -> String { env!("CARGO_PKG_VERSION").to_string() } -#[pyfunction] -fn test_call(py_obj: &PyAny) -> PyResult { - py_obj.call_method0("draw")?; - Ok(true) -} - #[pymodule] #[pyo3(name = "Difficult_Rocket_rs")] fn module_init(_py: Python<'_>, m: &PyModule) -> PyResult<()> { m.add_function(wrap_pyfunction!(get_version_str, m)?)?; - m.add_function(wrap_pyfunction!(test_call, m)?)?; m.add_function(wrap_pyfunction!(sr1_parse::part_list::read_part_list_py, m)?)?; m.add_function(wrap_pyfunction!(sr1_parse::ship::py_raw_ship_from_file, m)?)?; m.add_function(wrap_pyfunction!(python::data::load_and_save_test, m)?)?; diff --git a/mods/dr_game/Difficult_Rocket_rs/src/src/python/data.rs b/mods/dr_game/Difficult_Rocket_rs/src/src/python/data.rs index 3a1609b..5ef38f0 100644 --- a/mods/dr_game/Difficult_Rocket_rs/src/src/python/data.rs +++ b/mods/dr_game/Difficult_Rocket_rs/src/src/python/data.rs @@ -109,7 +109,13 @@ impl PySR1PartList { #[new] #[pyo3(text_signature = "(file_path = './assets/builtin/PartList.xml', list_name = 'NewPartList')")] fn new(file_path: String, list_name: String) -> Self { - let raw_part_list: RawPartList = RawPartList::from_file(file_path).unwrap(); + let raw_part_list: RawPartList = match RawPartList::from_file(file_path.clone()) { + Ok(raw_part_list) => raw_part_list, + Err(e) => { + println!("ERROR!\n{}\n----------", e); + panic!("Parse part list failed! {}\n{e}", file_path); + } + }; let data = raw_part_list.to_sr_part_list(Some(list_name)); Self { data } } diff --git a/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse.rs b/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse.rs index 2112021..9283120 100644 --- a/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse.rs +++ b/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse.rs @@ -6,7 +6,7 @@ use crate::dr_physics::math::{Edge, Shape}; use crate::dr_physics::math::{Point2D, Rotate}; use crate::sr1_parse::part_list::Damage as RawDamage; use crate::sr1_parse::part_list::{AttachPoint, AttachPoints, Engine, Lander, Rcs, Shape as RawShape, Solar, Tank}; -use crate::sr1_parse::part_list::{RawPartList, RawPartType, SR1PartTypeEnum, FuelType}; +use crate::sr1_parse::part_list::{FuelType, RawPartList, RawPartType, SR1PartTypeEnum}; use crate::sr1_parse::ship::{ Activate as RawActivate, Connection, Connections, DisconnectedPart as RawDisconnectedPart, DisconnectedParts as RawDisconnectedParts, Engine as RawEngine, Part as RawPartData, Parts as RawParts, @@ -19,7 +19,6 @@ use std::collections::HashMap; use std::io::Cursor; use std::ops::Deref; -use fs_err as fs; use quick_xml::events::{BytesEnd, BytesStart, Event}; use quick_xml::writer::Writer; @@ -174,7 +173,7 @@ impl SR1PartList { } pub fn from_file(file_name: String) -> Option { - if let Some(raw_list) = RawPartList::from_file(file_name) { + if let Ok(raw_list) = RawPartList::from_file(file_name) { let sr_list = raw_list.to_sr_part_list(None); return Some(sr_list); } @@ -898,7 +897,7 @@ impl SR1Ship { String::from_utf8(writer.into_inner().into_inner()).unwrap() } - fs::write(file_name, write_data(self, save_status)).unwrap(); + std::fs::write(file_name, write_data(self, save_status)).unwrap(); Some(()) } } diff --git a/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse/data_structure/part_list.rs b/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse/data_structure/part_list.rs index 2e6ef46..8dede11 100644 --- a/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse/data_structure/part_list.rs +++ b/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse/data_structure/part_list.rs @@ -1,7 +1,7 @@ use crate::sr1_parse::{SR1PartList, SR1PartType, SR1PartTypeAttr}; use crate::sr1_parse::{SR1PartListTrait, SR1PartTypeData}; -use fs_err as fs; +use anyhow::Result; use pyo3::prelude::*; use quick_xml::de::from_str; use serde::{Deserialize, Serialize}; @@ -153,12 +153,16 @@ impl Damage { pub enum FuelType { /// 就是液体燃料 #[default] + #[serde(rename = "0")] Common = 0, /// RCS 推进剂 + #[serde(rename = "1")] Rcs = 1, /// 电!!!!! + #[serde(rename = "2")] Battery = 2, /// 固推神教! + #[serde(rename = "3")] Soild = 3, } @@ -376,10 +380,10 @@ impl RawPartList { RawPartList { part_types: parts } } - pub fn from_file(file_name: String) -> Option { - let part_list_file = fs::read_to_string(file_name).ok()?; - let part_list: RawPartList = from_str(part_list_file.as_str()).ok()?; - Some(part_list) + pub fn from_file(file_name: String) -> Result { + let part_list_file = std::fs::read_to_string(file_name)?; + let part_list: RawPartList = from_str(part_list_file.as_str())?; + Ok(part_list) } pub fn list_print(&self) { @@ -407,11 +411,12 @@ impl SR1PartListTrait for RawPartList { #[pyo3(name = "part_list_read_test", signature = (file_name = "./assets/builtin/PartList.xml".to_string()))] pub fn read_part_list_py(_py: Python, file_name: Option) -> PyResult<()> { let file_name = file_name.unwrap_or("./assets/builtin/PartList.xml".to_string()); - let _parts = RawPartList::from_file(file_name); - if let Some(parts) = _parts { - // println!("{:?}", parts) - parts.list_print(); - let _part_list = parts.to_sr_part_list(Some("Vanilla".to_string())); - } + // let _parts = RawPartList::from_file(file_name); + // if let Some(parts) = _parts { + // // println!("{:?}", parts) + // parts.list_print(); + // let _part_list = parts.to_sr_part_list(Some("Vanilla".to_string())); + // } + println!("{:?}", RawPartList::from_file(file_name)); Ok(()) } diff --git a/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse/data_structure/ship.rs b/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse/data_structure/ship.rs index 58befe2..f8da2a4 100644 --- a/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse/data_structure/ship.rs +++ b/mods/dr_game/Difficult_Rocket_rs/src/src/sr1_parse/data_structure/ship.rs @@ -2,11 +2,10 @@ use crate::sr1_parse::{SR1PartData, SR1PartDataAttr, SR1Ship}; use crate::sr1_parse::{SR1PartDataTrait, SR1ShipTrait}; use crate::IdType; -use fs_err as fs; +use anyhow::Result; use pyo3::prelude::*; use quick_xml::de::from_str; use quick_xml::se::to_string; -// use quick_xml::Error as XmlError; use serde::{Deserialize, Serialize}; /// https://docs.rs/quick-xml/latest/quick_xml/de/index.html#basics @@ -240,7 +239,7 @@ impl SR1ShipTrait for RawShip { impl RawShip { pub fn from_file(path: String) -> Option { - let ship_file = fs::read_to_string(path); // for encoding error + let ship_file = std::fs::read_to_string(path); // for encoding error if let Err(e) = ship_file { println!("ERROR!\n{}\n----------", e); return None; @@ -256,14 +255,10 @@ impl RawShip { } } - pub fn save(&self, file_name: String) -> Result<(), quick_xml::DeError> { + pub fn save(&self, file_name: String) -> Result<()> { let part_list_file = to_string(self)?; print!("{:?}", part_list_file); - match fs::write(file_name, part_list_file) { - Ok(()) => (), - Err(_) => return Err(quick_xml::DeError::Custom("Failed to save file!".to_string())), - } - + std::fs::write(file_name, part_list_file)?; Ok(()) } } @@ -272,7 +267,7 @@ impl RawShip { #[pyo3(name = "read_ship_test")] #[pyo3(signature = (path = "./assets/builtin/dock1.xml".to_string()))] pub fn py_raw_ship_from_file(path: String) -> PyResult { - let file = fs::read_to_string(path)?; + let file = std::fs::read_to_string(path)?; let raw_ship = from_str::(&file); match raw_ship { Ok(ship) => { diff --git a/mods/dr_game/__init__.py b/mods/dr_game/__init__.py index 0783b1b..398b711 100644 --- a/mods/dr_game/__init__.py +++ b/mods/dr_game/__init__.py @@ -16,7 +16,7 @@ from Difficult_Rocket.api.types import Options, Version from lib_not_dr import loggers -DR_rust_version = Version("0.3.2") # DR_mod 的 Rust 编写部分的兼容版本 +DR_rust_version = Version("0.3.3") # DR_mod 的 Rust 编写部分的兼容版本 logger = loggers.config.get_logger_from_old("client.dr_game", "client") @@ -40,7 +40,8 @@ class _DR_mod_runtime(Options): # NOQA "larger" if self.DR_rust_version > self.DR_rust_version else "smaller" ) logger.warn( - f"DR_rust builtin version is {self.DR_rust_version} but true version is {get_version_str()}.\n" + f"DR_rust builtin version is {self.DR_rust_version} " + f"but true version is {get_version_str()}.\n" f"Builtin version {relationship} than true version", tag="load_dll", ) diff --git a/mods/dr_game/sr1_ship.py b/mods/dr_game/sr1_ship.py index 64a1f78..afd6e35 100644 --- a/mods/dr_game/sr1_ship.py +++ b/mods/dr_game/sr1_ship.py @@ -74,7 +74,7 @@ class SR1ShipRender(BaseScreen): def __init__(self, main_window: ClientWindow): super().__init__(main_window) self.logger = logger - logger.info(sr_tr().mod.info.setup.start()) + logger.info(sr_tr().mod.info.setup.start(), tag="setup") load_start_time = time.time_ns() # status self.status = SR1ShipRenderStatus() @@ -150,7 +150,8 @@ class SR1ShipRender(BaseScreen): logger.info( sr_tr() .mod.info.setup.use_time() - .format((load_end_time - load_start_time) / 1000000000) + .format((load_end_time - load_start_time) / 1000000000), + tag="setup", ) @property @@ -171,20 +172,21 @@ class SR1ShipRender(BaseScreen): """ try: start_time = time.time_ns() - logger.info(sr_tr().sr1.ship.xml.loading().format(file_path)) + logger.info(sr_tr().sr1.ship.xml.loading().format(file_path), tag="load_xml") self.ship_name = file_path.split("/")[-1].split(".")[0] if DR_mod_runtime.use_DR_rust: self.rust_ship = SR1Ship_rs(file_path, self.part_list_rs, "a_new_ship") - logger.info(sr_tr().sr1.ship.xml.load_done()) + logger.info(sr_tr().sr1.ship.xml.load_done(), tag="load_xml") logger.info( sr_tr() .sr1.ship.xml.load_time() - .format((time.time_ns() - start_time) / 1000000000) + .format((time.time_ns() - start_time) / 1000000000), + tag="load_xml", ) return True except Exception: traceback.print_exc() - self.logger.error(traceback.format_exc()) + self.logger.error(traceback.format_exc(), tag="load_xml") return False def gen_sprite(self, each_count: int = 100) -> Generator: @@ -349,7 +351,7 @@ class SR1ShipRender(BaseScreen): 渲染船 """ self.status.draw_done = False - logger.info(sr_tr().sr1.ship.ship.load().format(self.ship_name)) + logger.info(sr_tr().sr1.ship.ship.load().format(self.ship_name), tag="ship") start_time = time.perf_counter_ns() self.parts_sprite: Dict[int, Sprite] = {} self.part_line_box = {} @@ -369,7 +371,8 @@ class SR1ShipRender(BaseScreen): logger.info( sr_tr() .sr1.ship.ship.load_time() - .format((time.perf_counter_ns() - start_time) / 1000000000) + .format((time.perf_counter_ns() - start_time) / 1000000000), + tag="ship" ) logger.info( sr_tr() @@ -379,7 +382,8 @@ class SR1ShipRender(BaseScreen): f"{full_mass}kg" if DR_mod_runtime.use_DR_rust else sr_tr().game.require_DR_rs(), - ) + ), + tag="ship", ) def draw_batch(self, window: ClientWindow): @@ -430,6 +434,8 @@ class SR1ShipRender(BaseScreen): return self.render_d_line.x2 = width // 2 self.render_d_line.y2 = height // 2 + self.width = width + self.height = height def on_mouse_scroll( self, x: int, y: int, scroll_x: int, scroll_y: int, window: ClientWindow diff --git a/scripts/compile_mod.py b/scripts/compile_mod.py index 7740491..7dbb13f 100644 --- a/scripts/compile_mod.py +++ b/scripts/compile_mod.py @@ -13,6 +13,11 @@ if __name__ == "__main__": # 移动到项目根目录 os.chdir("./mods/dr_game/Difficult_Rocket_rs/src") + os.chdir("./src") + + subprocess.run(["cargo", "fmt", "--all"]) + + os.chdir("../") if not args.py: if args.all: