generated from ElnuDev/rust-project
Use event system instead of direct commands
This commit is contained in:
parent
0319f3d630
commit
38948883e4
2 changed files with 31 additions and 4 deletions
|
@ -3,7 +3,7 @@ use std::thread;
|
|||
use std::time::Duration;
|
||||
|
||||
use eframe::egui;
|
||||
use renrs::{State, Command};
|
||||
use renrs::State;
|
||||
|
||||
use sfml::{
|
||||
graphics::{Color, RenderTarget, RenderWindow, RectangleShape, Transformable},
|
||||
|
@ -41,7 +41,7 @@ impl App {
|
|||
}
|
||||
|
||||
fn next(&mut self) {
|
||||
if let Some(Command::Say { name, text }) = self.state.next_command() {
|
||||
if let Some(renrs::Event::Say { name, text }) = self.state.next() {
|
||||
self.text = match name {
|
||||
Some(name) => format!("{name}: {text}"),
|
||||
None => text,
|
||||
|
|
|
@ -31,13 +31,28 @@ use Token::*;
|
|||
|
||||
// Parsed script commands
|
||||
#[derive(Debug)]
|
||||
pub enum Command {
|
||||
#[allow(dead_code)]
|
||||
enum Command {
|
||||
Say { name: Option<String>, text: String },
|
||||
Eat { food: String, politely: bool },
|
||||
}
|
||||
|
||||
use Command::*;
|
||||
|
||||
impl Command {
|
||||
fn is_blocking(&self) -> bool {
|
||||
match self {
|
||||
Say { .. } => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Event {
|
||||
Say { name: Option<String>, text: String },
|
||||
}
|
||||
|
||||
// Tokenize raw script string
|
||||
fn tokenize(script: &str) -> Vec<Vec<Token>> {
|
||||
let file = RpyParser::parse(Rule::file, script)
|
||||
|
@ -159,7 +174,19 @@ impl State {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn next_command(&mut self) -> Option<Command> {
|
||||
pub fn next(&mut self) -> Option<Event> {
|
||||
while let Some(command) = self.next_command() {
|
||||
if command.is_blocking() {
|
||||
return Some(match command {
|
||||
Say { name, text } => Event::Say { name, text },
|
||||
_ => unimplemented!(),
|
||||
})
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn next_command(&mut self) -> Option<Command> {
|
||||
if self.command_queue.len() == 0 {
|
||||
None
|
||||
} else {
|
||||
|
|
Loading…
Add table
Reference in a new issue