diff --git a/DR.py b/DR.py index d710ecd..4b255be 100644 --- a/DR.py +++ b/DR.py @@ -28,7 +28,9 @@ def print_path() -> None: print(f'{sys.path=}') print(f'{sys.path[0]=}') print(f'{sys.argv[0]=}') + print(f'{os.curdir=}') print(f'{os.getcwd()=}') + print(f'{os.path.abspath(os.curdir)=}') print(f'{os.path.abspath(__file__)=}') print(f'{os.path.realpath(__file__)=}') print(f'{os.path.split(os.path.split(os.path.realpath(__file__))[0])=}') @@ -49,10 +51,10 @@ def main() -> None: from Difficult_Rocket import crash from Difficult_Rocket import DR_option try: - from libs.pyglet_rs import get_version_str + from libs.pyglet_rs import get_version_str, patch_vector print('pyglet_rs available:', get_version_str()) print('trying to patch pyglet_rs') - from libs.pyglet_rs import patch_vector + patch_vector() except ImportError as e: print('pyglet_rs import error') traceback.print_exc() diff --git a/docs/src/nuitka/20230406-xml-parse-nuitka-pyinstaller.png b/docs/src/nuitka/20230406-xml-parse-nuitka-pyinstaller.png new file mode 100644 index 0000000..48d6f16 Binary files /dev/null and b/docs/src/nuitka/20230406-xml-parse-nuitka-pyinstaller.png differ diff --git a/docs/src/update_logs.md b/docs/src/update_logs.md index 4ecbc0f..103a20c 100644 --- a/docs/src/update_logs.md +++ b/docs/src/update_logs.md @@ -22,7 +22,23 @@ - [![Readme-gitee](https://img.shields.io/badge/Readme-中文(点我!)-blue.svg?style=flat-square)](../../README.md) - Using [SemVer 2.0.0](https://semver.org/) to manage version -## 202304 DR `0.7.2.1` +## 202304 DR `0.7.2.2` + DR_rs `0.2.7.0` + +### DR_rs V 0.2.7.0 + +- `python::translate::Translate` + - 正在尝试用 Rust 重写一遍 `Difficult_Rocket.utils.translate` + - Trying to rewrite `Difficult_Rocket.utils.translate` in Rust + +### Changes + +- `DR.py` + - 向输出环境信息的地方加入 运行目录 信息 + - Add running directory information to the place where the output environment information + - `os.curdir` + - `os.path.abspath(os.curdir)` + +## 20230405 DR `0.7.2.1` ### Changes @@ -218,6 +234,9 @@ ### 内部协议 13 ```python +from collections import namedtuple +Version = namedtuple("Version", ["version"]) # 版本号 (用于通过 Pycharm 的检查) + game_version = Version("0.7.1.2") # 游戏版本 build_version = Version("1.1.0.0") # 编译文件版本(与游戏本体无关) DR_rust_version = Version("0.2.5.3") # DR 的 Rust 编写部分的版本 @@ -783,7 +802,7 @@ long_version: 一个用于标记内部协议的整数 - `test_logging_conf.py` - `test_speed_of_sprite.py` -## 2021/06/26 V 0.4.3 +## 20210626 V 0.4.3 ### DEBUG @@ -799,7 +818,7 @@ long_version: 一个用于标记内部协议的整数 - add performance_test folder - add some performances test -## 2021/05/24 V 0.4.2 +## 20210524 V 0.4.2 ### DEBUG @@ -815,7 +834,7 @@ long_version: 一个用于标记内部协议的整数 - debug name_format -## 2021/04/17 V 0.4.1 +## 20210417 V 0.4.1 PS: @@ -836,7 +855,7 @@ PS: - plan to change config file format to .config (plan to) - reformat all files (including libs) -## 2021/04/09 V 0.2.3/4 +## 20210409 V 0.2.3/4 ### Add @@ -853,7 +872,7 @@ PS: - `{date}` can be successful use in `tools.name_handler()` (if you define the format of date) - log file's filename incorrect (should be `xxxx-xx-xx xx-xx-xx DR.log` but be `{date} DR.log`) -## 2021/03/27 V 0.2.2/1 +## 20210327 V 0.2.2/1 ### Add diff --git a/libs/Difficult_Rocket_rs/src/src/python.rs b/libs/Difficult_Rocket_rs/src/src/python.rs index 57e5cc7..d63f5bf 100644 --- a/libs/Difficult_Rocket_rs/src/src/python.rs +++ b/libs/Difficult_Rocket_rs/src/src/python.rs @@ -7,13 +7,14 @@ */ pub mod data { - use pyo3::prelude::*; - use serde_xml_rs::from_str; use std::collections::HashMap; + use pyo3::prelude::*; + use crate::sr1_data::part_list::RawPartList; use crate::sr1_data::ship::RawShip; - use crate::types::sr1::{SR1PartList, SR1PartListTrait, SR1PartType, SR1Ship}; + use crate::types::sr1::{SR1PartList, SR1PartType, SR1Ship}; + use crate::types::sr1::{SR1PartListTrait, SR1ShipTrait}; #[pyclass] #[pyo3(name = "SR1PartType_rs")] @@ -77,10 +78,32 @@ pub mod data { } } } + + #[pyclass] + #[pyo3(name = "SR1Ship_rs")] + #[pyo3( + text_signature = "(file_path = './configs/dock1.xml', part_list = './configs/PartList.xml', ship_name = 'NewShip')" + )] + pub struct PySR1Ship { + pub ship: SR1Ship, + pub part_list: SR1PartList, + } + + #[pymethods] + impl PySR1Ship { + #[new] + fn new(file_path: String, part_list: String, ship_name: String) -> Self { + let raw_ship: RawShip = RawShip::from_file(file_path).unwrap(); + let ship = raw_ship.to_sr_ship(Some(ship_name)); + let part_list = SR1PartList::from_file(part_list).unwrap(); + Self { ship, part_list } + } + } } pub mod translate { use pyo3::prelude::*; + use pyo3::types::PyDict; #[pyclass] pub struct TranslateConfig { @@ -94,8 +117,8 @@ pub mod translate { #[pyclass] pub struct Translate { - pub data: PyObject, + pub data: Py, pub get_list: Vec<(String, bool)>, - pub config: Config, + pub config: TranslateConfig, } } diff --git a/libs/Difficult_Rocket_rs/src/src/sr1_data.rs b/libs/Difficult_Rocket_rs/src/src/sr1_data.rs index a45727d..3a556fc 100644 --- a/libs/Difficult_Rocket_rs/src/src/sr1_data.rs +++ b/libs/Difficult_Rocket_rs/src/src/sr1_data.rs @@ -100,14 +100,17 @@ pub mod part_list { } impl AttachPoints { + #[inline] pub fn new(attaches: Vec) -> Self { AttachPoints { points: attaches } } + #[inline] pub fn insert(&mut self, attach: AttachPoint) { self.points.push(attach); } + #[inline] pub fn unzip(&self) -> Vec { self.points.clone() } @@ -124,6 +127,7 @@ pub mod part_list { } impl Damage { + #[inline] pub fn to_damage(&self) -> crate::types::sr1::Damage { crate::types::sr1::Damage { disconnect: self.disconnect, @@ -235,6 +239,7 @@ pub mod part_list { } impl SR1PartTypeData for RawPartType { + #[inline] fn to_sr_part_type(&self) -> SR1PartType { let part_attr: Option = match self.r#type { SR1PartTypeEnum::tank => { @@ -347,6 +352,7 @@ pub mod part_list { } impl SR1PartListTrait for RawPartList { + #[inline] fn to_sr_part_list(&self, name: Option) -> SR1PartList { let mut types: Vec = Vec::new(); for part_data in self.part_types.iter() { @@ -360,6 +366,7 @@ pub mod part_list { } } + #[inline] #[pyfunction] #[pyo3(name = "part_list_read_test", signature = (file_name = "./configs/PartList.xml".to_string()))] pub fn read_part_list_py(_py: Python, file_name: Option) -> PyResult<()> { @@ -376,11 +383,14 @@ pub mod part_list { #[allow(unused)] pub mod ship { + use std::fs; use pyo3::prelude::*; use serde::{Deserialize, Serialize}; // use quick_xml::de::from_str; - use serde_xml_rs::from_str; + use serde_xml_rs::{expect, from_str}; + + use crate::types::sr1::{SR1Ship, SR1ShipTrait}; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct RawShip { @@ -518,7 +528,24 @@ pub mod ship { pub child_part: i64, } - // pub fn read_ship_from_file(file_name: String) -> Result { + impl SR1ShipTrait for RawShip { + #[inline] + fn to_sr_ship(&self, name: Option) -> SR1Ship { + todo!() + } - // } + #[inline] + fn to_raw_ship(&self) -> RawShip { + self.clone() + } + } + + impl RawShip { + #[inline] + pub fn from_file(path: String) -> Option { + let ship_file = fs::read_to_string(path).unwrap(); + let ship: RawShip = from_str(&ship_file).unwrap(); + Some(ship) + } + } } diff --git a/libs/Difficult_Rocket_rs/src/src/types.rs b/libs/Difficult_Rocket_rs/src/src/types.rs index 244ebfb..f6c37f4 100644 --- a/libs/Difficult_Rocket_rs/src/src/types.rs +++ b/libs/Difficult_Rocket_rs/src/src/types.rs @@ -8,12 +8,13 @@ pub mod sr1 { use std::collections::HashMap; - // use super::math::{Shape, Point2D}; + use crate::sr1_data::part_list::Damage as RawDamage; use crate::sr1_data::part_list::{ AttachPoint, AttachPoints, Engine, Lander, Rcs, Shape as RawShape, Solar, Tank, }; use crate::sr1_data::part_list::{RawPartList, RawPartType, SR1PartTypeEnum}; + use crate::sr1_data::ship::RawShip; #[inline] pub fn map_ptype_textures(ptype: String) -> String { @@ -212,6 +213,14 @@ pub mod sr1 { } impl SR1PartList { + pub fn from_file(file_name: String) -> Option { + if let Some(raw_list) = RawPartList::from_file(file_name) { + return Some(raw_list.to_sr_part_list(None)); + } + None + } + + #[inline] pub fn get_hash_map(&mut self) -> HashMap { if let Some(map) = &self.cache { return map.clone(); @@ -235,6 +244,11 @@ pub mod sr1 { fn to_raw_part_list(&self) -> RawPartList; } + pub trait SR1ShipTrait { + fn to_sr_ship(&self, name: Option) -> SR1Ship; + fn to_raw_ship(&self) -> RawShip; + } + impl SR1PartList { #[inline] pub fn new(name: String, types: Vec) -> Self { @@ -402,6 +416,7 @@ pub mod sr1 { } } + #[derive(Debug, Clone)] pub struct SR1Ship { pub name: String, pub description: String, @@ -410,6 +425,24 @@ pub mod sr1 { pub lift_off: bool, pub touch_ground: bool, } + + impl SR1ShipTrait for SR1Ship { + #[inline] + fn to_sr_ship(&self, name: Option) -> SR1Ship { + if let Some(name) = name { + let mut dupe = self.clone(); + dupe.name = name; + dupe + } else { + self.clone() + } + } + + #[inline] + fn to_raw_ship(&self) -> RawShip { + todo!() // 1145行的内容 + } + } } #[allow(unused)]