dr_rs bump
This commit is contained in:
parent
77a42199f0
commit
199264ba29
@ -25,7 +25,7 @@ from libs.MCDR.version import Version
|
|||||||
|
|
||||||
game_version = Version("0.7.0.0") # 游戏版本
|
game_version = Version("0.7.0.0") # 游戏版本
|
||||||
build_version = Version("1.1.0.0") # 编译文件版本(与游戏本体无关)
|
build_version = Version("1.1.0.0") # 编译文件版本(与游戏本体无关)
|
||||||
DR_rust_version = Version("0.1.6.2") # DR 的 Rust 编写部分的版本
|
DR_rust_version = Version("0.1.6.5") # DR 的 Rust 编写部分的版本
|
||||||
__version__ = game_version
|
__version__ = game_version
|
||||||
|
|
||||||
long_version: int = 11
|
long_version: int = 11
|
||||||
|
@ -29,7 +29,7 @@ if TYPE_CHECKING:
|
|||||||
from Difficult_Rocket.client import ClientWindow
|
from Difficult_Rocket.client import ClientWindow
|
||||||
|
|
||||||
if DR_option.use_DR_rust:
|
if DR_option.use_DR_rust:
|
||||||
from libs.Difficult_Rocket_rs import better_update_parts, PartDatas
|
from libs.Difficult_Rocket_rs import better_update_parts, PartDatas, Camera_rs
|
||||||
|
|
||||||
|
|
||||||
def get_sr1_part(part_xml: Element) -> Optional[SR1PartData]:
|
def get_sr1_part(part_xml: Element) -> Optional[SR1PartData]:
|
||||||
@ -116,6 +116,7 @@ class SR1ShipRender(BaseScreen):
|
|||||||
self.part_data: Dict[int, SR1PartData] = {}
|
self.part_data: Dict[int, SR1PartData] = {}
|
||||||
self.parts_sprite: Dict[int, Sprite] = {}
|
self.parts_sprite: Dict[int, Sprite] = {}
|
||||||
if DR_option.use_DR_rust:
|
if DR_option.use_DR_rust:
|
||||||
|
self.camera_rs = Camera_rs(main_window)
|
||||||
self.rust_parts = None
|
self.rust_parts = None
|
||||||
|
|
||||||
def load_xml(self, file_path: str) -> bool:
|
def load_xml(self, file_path: str) -> bool:
|
||||||
@ -136,9 +137,9 @@ class SR1ShipRender(BaseScreen):
|
|||||||
start_time = time.perf_counter_ns()
|
start_time = time.perf_counter_ns()
|
||||||
self.part_data: Dict[int, SR1PartData] = {}
|
self.part_data: Dict[int, SR1PartData] = {}
|
||||||
self.parts_sprite: Dict[int, Sprite] = {}
|
self.parts_sprite: Dict[int, Sprite] = {}
|
||||||
|
self.scale = 1.0
|
||||||
self.dx = 0
|
self.dx = 0
|
||||||
self.dy = 0
|
self.dy = 0
|
||||||
self.scale = 1.0
|
|
||||||
parts = self.xml_root.find('Parts')
|
parts = self.xml_root.find('Parts')
|
||||||
for part_xml in parts:
|
for part_xml in parts:
|
||||||
if part_xml.tag != 'Part':
|
if part_xml.tag != 'Part':
|
||||||
@ -153,8 +154,8 @@ class SR1ShipRender(BaseScreen):
|
|||||||
render_scale = DR_option.gui_scale # 这个是 DR 的缩放比例 可以调节的(
|
render_scale = DR_option.gui_scale # 这个是 DR 的缩放比例 可以调节的(
|
||||||
# 主要是 Windows 下有一个缩放系数嘛,我待会试试这玩意能不能获取(估计得 ctypes
|
# 主要是 Windows 下有一个缩放系数嘛,我待会试试这玩意能不能获取(估计得 ctypes
|
||||||
# 在不缩放的情况下,XML的1个单位长度对应60个像素
|
# 在不缩放的情况下,XML的1个单位长度对应60个像素
|
||||||
render_x = part.x * render_scale * self.scale * 60 + self.window_pointer.width / 2 + self.dx
|
render_x = part.x * render_scale * self.scale * 60 + self.window_pointer.width / 2
|
||||||
render_y = part.y * render_scale * self.scale * 60 + self.window_pointer.height / 2 + self.dy
|
render_y = part.y * render_scale * self.scale * 60 + self.window_pointer.height / 2
|
||||||
# 你就这里改吧
|
# 你就这里改吧
|
||||||
cache_sprite = Sprite(img=self.textures.get_texture(part.textures),
|
cache_sprite = Sprite(img=self.textures.get_texture(part.textures),
|
||||||
x=render_x, y=render_y,
|
x=render_x, y=render_y,
|
||||||
@ -197,8 +198,8 @@ class SR1ShipRender(BaseScreen):
|
|||||||
self.rust_parts, DR_option.gui_scale, 60)
|
self.rust_parts, DR_option.gui_scale, 60)
|
||||||
for part_id in self.part_data:
|
for part_id in self.part_data:
|
||||||
# x y scale
|
# x y scale
|
||||||
self.parts_sprite[part_id].x = self.part_data[part_id].x * DR_option.gui_scale * self.scale * 60 + self.window_pointer.width / 2 + self.dx
|
self.parts_sprite[part_id].x = self.part_data[part_id].x * DR_option.gui_scale * self.scale * 60 + self.window_pointer.width / 2
|
||||||
self.parts_sprite[part_id].y = self.part_data[part_id].y * DR_option.gui_scale * self.scale * 60 + self.window_pointer.height / 2 + self.dy
|
self.parts_sprite[part_id].y = self.part_data[part_id].y * DR_option.gui_scale * self.scale * 60 + self.window_pointer.height / 2
|
||||||
self.parts_sprite[part_id].scale = self.scale * DR_option.gui_scale
|
self.parts_sprite[part_id].scale = self.scale * DR_option.gui_scale
|
||||||
self.need_update_parts = False
|
self.need_update_parts = False
|
||||||
|
|
||||||
@ -208,7 +209,11 @@ class SR1ShipRender(BaseScreen):
|
|||||||
if self.need_update_parts:
|
if self.need_update_parts:
|
||||||
self.update_parts()
|
self.update_parts()
|
||||||
self.need_update_parts = False
|
self.need_update_parts = False
|
||||||
|
if DR_option.use_DR_rust:
|
||||||
|
self.camera_rs.begin()
|
||||||
self.part_batch.draw()
|
self.part_batch.draw()
|
||||||
|
if DR_option.use_DR_rust:
|
||||||
|
self.camera_rs.end()
|
||||||
self.debug_label.draw()
|
self.debug_label.draw()
|
||||||
if SR1ShipRender_Option.debug_d_pos:
|
if SR1ShipRender_Option.debug_d_pos:
|
||||||
self.debug_line.draw()
|
self.debug_line.draw()
|
||||||
|
@ -40,7 +40,7 @@ if TYPE_CHECKING:
|
|||||||
min_zoom: float = 1.0,
|
min_zoom: float = 1.0,
|
||||||
max_zoom: float = 1.0): ...
|
max_zoom: float = 1.0): ...
|
||||||
|
|
||||||
def start(self) -> None: ...
|
def begin(self) -> None: ...
|
||||||
|
|
||||||
def end(self) -> None: ...
|
def end(self) -> None: ...
|
||||||
|
|
||||||
|
2
libs/Difficult_Rocket_rs/src/Cargo.lock
generated
2
libs/Difficult_Rocket_rs/src/Cargo.lock
generated
@ -22,7 +22,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "difficult_rocket_rs"
|
name = "difficult_rocket_rs"
|
||||||
version = "0.1.4"
|
version = "0.1.6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pyo3",
|
"pyo3",
|
||||||
]
|
]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "difficult_rocket_rs"
|
name = "difficult_rocket_rs"
|
||||||
version = "0.1.4"
|
version = "0.1.6"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license-file = '../../LICENSE'
|
license-file = '../../LICENSE'
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
@ -13,7 +13,7 @@ use pyo3::prelude::*;
|
|||||||
|
|
||||||
#[pyfunction]
|
#[pyfunction]
|
||||||
fn get_version_str() -> String {
|
fn get_version_str() -> String {
|
||||||
return String::from("0.1.6.2");
|
return String::from("0.1.6.5");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[pyfunction]
|
#[pyfunction]
|
||||||
|
@ -29,7 +29,7 @@ pub mod camera {
|
|||||||
impl CameraRs {
|
impl CameraRs {
|
||||||
#[new]
|
#[new]
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
#[pyo3(signature = (window, zoom=1.0, dx=1.0, dy=1.0,min_zoom=1.0, max_zoom=1.0))]
|
#[pyo3(signature = (window, zoom=1.0, dx=1.0, dy=1.0, min_zoom=1.0, max_zoom=1.0))]
|
||||||
pub fn py_new(window: &PyAny, zoom: f64, dx: f64, dy: f64,min_zoom: f64, max_zoom: f64) -> PyResult<Self> {
|
pub fn py_new(window: &PyAny, zoom: f64, dx: f64, dy: f64,min_zoom: f64, max_zoom: f64) -> PyResult<Self> {
|
||||||
return Ok(CameraRs {dx, dy, zoom, min_zoom, max_zoom,
|
return Ok(CameraRs {dx, dy, zoom, min_zoom, max_zoom,
|
||||||
window: window.into()})
|
window: window.into()})
|
||||||
@ -41,6 +41,17 @@ pub mod camera {
|
|||||||
})?)
|
})?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[getter]
|
||||||
|
pub fn get_position(&self) -> (f64, f64) {
|
||||||
|
return (self.dx, self.dy)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[setter]
|
||||||
|
pub fn set_position(&mut self, value: (f64, f64)) -> () {
|
||||||
|
self.dx = value.0;
|
||||||
|
self.dy = value.1;
|
||||||
|
}
|
||||||
|
|
||||||
#[getter]
|
#[getter]
|
||||||
pub fn get_zoom(&self) -> PyResult<f64> {
|
pub fn get_zoom(&self) -> PyResult<f64> {
|
||||||
Ok(self.zoom)
|
Ok(self.zoom)
|
||||||
@ -52,28 +63,32 @@ pub mod camera {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused_variables)]
|
|
||||||
pub fn begin(&self) -> PyResult<()> {
|
pub fn begin(&self) -> PyResult<()> {
|
||||||
Python::with_gil(|py| -> PyResult<()> {
|
Python::with_gil(|py| -> PyResult<()> {
|
||||||
let view = self.window.getattr(py, intern!(py, "view"))?;
|
let view = self.window.getattr(py, intern!(py, "view"))?;
|
||||||
let args = (-self.dx * self.zoom, -self.dy * self.zoom, 0);
|
|
||||||
|
let args = ((-self.dx * self.zoom, -self.dy * self.zoom, 0), );
|
||||||
let view_matrix = view.call_method1(py, intern!(py, "translate"), args)?;
|
let view_matrix = view.call_method1(py, intern!(py, "translate"), args)?;
|
||||||
let args = (self.zoom, self.zoom, 1);
|
|
||||||
|
let args = ((self.zoom, self.zoom, 1), );
|
||||||
let view_matrix = view_matrix.call_method1(py, intern!(py, "scale"), args)?;
|
let view_matrix = view_matrix.call_method1(py, intern!(py, "scale"), args)?;
|
||||||
|
|
||||||
self.window.setattr(py, intern!(py, "view"), view_matrix)?;
|
self.window.setattr(py, intern!(py, "view"), view_matrix)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
})?;
|
})?;
|
||||||
return Ok(())
|
return Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused_variables)]
|
|
||||||
pub fn end(&self) -> PyResult<()> {
|
pub fn end(&self) -> PyResult<()> {
|
||||||
Python::with_gil(|py| -> PyResult<()> {
|
Python::with_gil(|py| -> PyResult<()> {
|
||||||
let view = self.window.getattr(py, intern!(py, "view"))?;
|
let view = self.window.getattr(py, intern!(py, "view"))?;
|
||||||
let args = (1.0 / self.zoom, 1.0 / self.zoom, 1);
|
|
||||||
|
let args = ((1.0 / self.zoom, 1.0 / self.zoom, 1), );
|
||||||
let view_matrix = view.call_method1(py, intern!(py, "scale"), args)?;
|
let view_matrix = view.call_method1(py, intern!(py, "scale"), args)?;
|
||||||
let args = (self.dx * self.zoom, self.dy * self.zoom, 0);
|
|
||||||
|
let args = ((self.dx * self.zoom, self.dy * self.zoom, 0), );
|
||||||
let view_matrix = view_matrix.call_method1(py, intern!(py, "translate"), args)?;
|
let view_matrix = view_matrix.call_method1(py, intern!(py, "translate"), args)?;
|
||||||
|
|
||||||
self.window.setattr(py, intern!(py, "view"), view_matrix)?;
|
self.window.setattr(py, intern!(py, "view"), view_matrix)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
})?;
|
})?;
|
||||||
|
@ -116,19 +116,15 @@ pub mod types {
|
|||||||
#[pyfunction]
|
#[pyfunction]
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
pub fn better_update_parts(render: &PyAny, option: &PyAny, window: &PyAny,
|
pub fn better_update_parts(render: &PyAny, option: &PyAny, window: &PyAny,
|
||||||
parts: &types::PartDatas,
|
parts: &types::PartDatas, sr1_xml_scale: i32) -> PyResult<bool> {
|
||||||
global_scale: f64, sr1_xml_scale: i32) -> PyResult<bool> {
|
|
||||||
if !render.getattr(intern!(render.py(), "rendered"))?.is_true()? {
|
if !render.getattr(intern!(render.py(), "rendered"))?.is_true()? {
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
let start_time = time::Instant::now();
|
let start_time = time::Instant::now();
|
||||||
let dx: f64 = render.getattr(intern!(render.py(), "dx"))?.extract()?;
|
|
||||||
let dy: f64 = render.getattr(intern!(render.py(), "dy"))?.extract()?;
|
|
||||||
let x_center: f32 = window.getattr(intern!(window.py(), "width"))?.extract()?;
|
let x_center: f32 = window.getattr(intern!(window.py(), "width"))?.extract()?;
|
||||||
let y_center: f32 = window.getattr(intern!(window.py(), "height"))?.extract()?;
|
let y_center: f32 = window.getattr(intern!(window.py(), "height"))?.extract()?;
|
||||||
let x_center: f32 = x_center / 2.0;
|
let x_center: f32 = x_center / 2.0;
|
||||||
let y_center: f32 = y_center / 2.0;
|
let y_center: f32 = y_center / 2.0;
|
||||||
let render_scale: f32 = render.getattr(intern!(render.py(), "scale"))?.extract()?;
|
|
||||||
let datas: &HashMap<i64, SR1PartData> = &parts.part_structs;
|
let datas: &HashMap<i64, SR1PartData> = &parts.part_structs;
|
||||||
let part_sprites = render.getattr(intern!(render.py(), "parts_sprite"))?;
|
let part_sprites = render.getattr(intern!(render.py(), "parts_sprite"))?;
|
||||||
// let part_sprites: &PyDict = part_sprites.downcast::<PyDict>()?;
|
// let part_sprites: &PyDict = part_sprites.downcast::<PyDict>()?;
|
||||||
@ -138,12 +134,10 @@ pub fn better_update_parts(render: &PyAny, option: &PyAny, window: &PyAny,
|
|||||||
for keys in datas {
|
for keys in datas {
|
||||||
// let index = keys.0.to_string();
|
// let index = keys.0.to_string();
|
||||||
let sprite = part_sprites.get_item(keys.0)?;
|
let sprite = part_sprites.get_item(keys.0)?;
|
||||||
let new_x: f64 = keys.1.x * global_scale * render_scale as f64 * sr1_xml_scale as f64 + x_center as f64 + dx;
|
let new_x: f64 = keys.1.x * sr1_xml_scale as f64 + x_center as f64;
|
||||||
let new_y: f64 = keys.1.y * global_scale * render_scale as f64 * sr1_xml_scale as f64 + y_center as f64 + dy;
|
let new_y: f64 = keys.1.y * sr1_xml_scale as f64 + y_center as f64;
|
||||||
let new_scale: f32 = render_scale * global_scale as f32;
|
|
||||||
sprite.setattr(intern!(sprite.py(), "x"), new_x)?;
|
sprite.setattr(intern!(sprite.py(), "x"), new_x)?;
|
||||||
sprite.setattr(intern!(sprite.py(), "y"), new_y)?;
|
sprite.setattr(intern!(sprite.py(), "y"), new_y)?;
|
||||||
sprite.setattr(intern!(sprite.py(), "scale"), new_scale)?;
|
|
||||||
// part_sprites.set_item(keys.0, sprite)?;
|
// part_sprites.set_item(keys.0, sprite)?;
|
||||||
// println!("{}", keys.0);
|
// println!("{}", keys.0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user