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 std::time::Duration;
|
||||||
|
|
||||||
use eframe::egui;
|
use eframe::egui;
|
||||||
use renrs::{State, Command};
|
use renrs::State;
|
||||||
|
|
||||||
use sfml::{
|
use sfml::{
|
||||||
graphics::{Color, RenderTarget, RenderWindow, RectangleShape, Transformable},
|
graphics::{Color, RenderTarget, RenderWindow, RectangleShape, Transformable},
|
||||||
|
@ -41,7 +41,7 @@ impl App {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn next(&mut self) {
|
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 {
|
self.text = match name {
|
||||||
Some(name) => format!("{name}: {text}"),
|
Some(name) => format!("{name}: {text}"),
|
||||||
None => text,
|
None => text,
|
||||||
|
|
|
@ -31,13 +31,28 @@ use Token::*;
|
||||||
|
|
||||||
// Parsed script commands
|
// Parsed script commands
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Command {
|
#[allow(dead_code)]
|
||||||
|
enum Command {
|
||||||
Say { name: Option<String>, text: String },
|
Say { name: Option<String>, text: String },
|
||||||
Eat { food: String, politely: bool },
|
Eat { food: String, politely: bool },
|
||||||
}
|
}
|
||||||
|
|
||||||
use Command::*;
|
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
|
// Tokenize raw script string
|
||||||
fn tokenize(script: &str) -> Vec<Vec<Token>> {
|
fn tokenize(script: &str) -> Vec<Vec<Token>> {
|
||||||
let file = RpyParser::parse(Rule::file, script)
|
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 {
|
if self.command_queue.len() == 0 {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue