fix issue on command

This commit is contained in:
shenjack 2023-06-18 15:42:35 +08:00
parent 3784a32184
commit 0fd7bcf0f5
6 changed files with 39 additions and 7 deletions

View File

@ -15,7 +15,7 @@ import traceback
from pathlib import Path
from decimal import Decimal
from typing import Callable, Dict, List, TYPE_CHECKING
from typing import Callable, Dict, List, TYPE_CHECKING, Optional
# third function
import rtoml
@ -122,6 +122,17 @@ def pyglet_load_fonts_folder(folder) -> None:
pyglet_load_fonts_folder(os.path.join(folder, obj))
def _call_back(call_back: Callable) -> Callable:
def wrapper(func):
@functools.wraps(func)
def warp(self: "ClientWindow", *args, **kwargs):
result = func(self, *args, **kwargs)
call_back(self)
return result
return warp
return wrapper
def _call_screen_after(func: Callable) -> Callable:
@functools.wraps(func)
def warped(self: "ClientWindow", *args, **kwargs):
@ -306,8 +317,13 @@ class ClientWindow(Window):
self.on_command(command_text)
self.input_box.value = ''
def new_command(self):
self.game.console.new_command()
@_call_back(new_command)
@_call_screen_after
def on_command(self, command: line.CommandText):
command.text = command.text.rstrip('\n')
self.logger.info(tr().window.command.text().format(command))
command.find('/')
if command.find('stop'):
@ -335,8 +351,9 @@ class ClientWindow(Window):
except LanguageNotFound:
self.logger.info(tr().language_available().format(os.listdir('./configs/lang')))
self.save_info()
# self.command_tree.parse(command.plain_command)
elif command.find('mods'):
for mod in self.game.mod_module:
self.logger.info(f"mod: {mod.name} id: {mod.mod_id} version: {mod.version}")
@_call_screen_after
def on_message(self, message: line.CommandText):

View File

@ -65,6 +65,9 @@ class Console(Options):
def get_command(self) -> Optional[str]:
return self.caches.pop(0) if self.caches else None
def new_command(self) -> None:
return None
class Game(Options):
name = 'MainGame'

View File

@ -7,8 +7,8 @@ fonts_folder = "libs/fonts"
[window]
style = "None"
width = 2175
height = 1808
width = 1094
height = 1173
visible = true
gui_scale = 1
caption = "Difficult Rocket v{DR_version}"

View File

@ -128,3 +128,4 @@ if TYPE_CHECKING:
def start(self) -> None: ...
def stop(self) -> bool: ...
def get_command(self) -> Optional[str]: ...
def new_command(self) -> bool: ...

View File

@ -228,6 +228,7 @@ pub mod translate {
pub mod console {
use pyo3::prelude::*;
use std::io::{self, Write};
#[pyclass]
#[pyo3(name = "Console_rs")]
@ -251,7 +252,7 @@ pub mod console {
let (stop_sender, stop_receiver) = std::sync::mpsc::channel();
let (keyboard_input_sender, keyboard_input_receiver) = std::sync::mpsc::channel();
std::thread::spawn(move || {
let std_in = std::io::stdin();
let std_in = io::stdin();
loop {
if let Ok(()) = stop_receiver.try_recv() {
break;
@ -261,9 +262,10 @@ pub mod console {
if !input.is_empty() {
keyboard_input_sender.send(input).unwrap();
}
print!(">>");
}
});
print!("rs>");
io::stdout().flush().unwrap();
self.stop_sender = Some(stop_sender);
self.keyboard_input_receiver = Some(keyboard_input_receiver);
}
@ -276,6 +278,12 @@ pub mod console {
false
}
fn new_command(&self) -> bool {
print!("rs>");
io::stdout().flush().unwrap();
true
}
fn get_command(&self) -> Option<String> {
// 获取输入
if let Some(receiver) = &self.keyboard_input_receiver {

View File

@ -22,3 +22,6 @@ class RustConsole(Console):
def get_command(self) -> str:
return self.console.get_command()
def new_command(self) -> None:
self.console.new_command()