pre-api removal

This commit is contained in:
Llywelwyn 2023-07-10 11:46:21 +01:00
parent 7eb0e0ad64
commit 85881db62f
8 changed files with 95 additions and 15 deletions

1
Cargo.lock generated
View file

@ -2277,6 +2277,7 @@ version = "0.1.0"
dependencies = [
"bracket-lib 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)",
"criterion",
"lazy_static",
"rltk",
"serde",
"serde_json",

View file

@ -12,6 +12,7 @@ specs = { version = "0.16.1", features = ["serde"] }
specs-derive = "0.4.1"
serde = { version = "1.0.93", features = ["derive"]}
serde_json = "1.0.39"
lazy_static = "1.4.0"
[dev-dependencies]
criterion = { version = "^0.5" }

View file

@ -1,3 +0,0 @@
pub struct GameLog {
pub entries: Vec<String>,
}

27
src/gamelog/builder.rs Normal file
View file

@ -0,0 +1,27 @@
use super::{append_entry, LogFragment};
use rltk::prelude::*;
pub struct Logger {
current_colour: RGB,
fragments: Vec<LogFragment>,
}
impl Logger {
pub fn new() -> Self {
Logger { current_colour: RGB::named(rltk::WHITE), fragments: Vec::new() }
}
pub fn colour(mut self, colour: (u8, u8, u8)) -> Self {
self.current_colour = RGB::named(colour);
return self;
}
pub fn append<T: ToString>(mut self, text: T) -> Self {
self.fragments.push(LogFragment { colour: self.current_colour, text: text.to_string() });
return self;
}
pub fn log(self) {
append_entry(self.fragments)
}
}

33
src/gamelog/logstore.rs Normal file
View file

@ -0,0 +1,33 @@
use super::LogFragment;
use rltk::prelude::*;
use std::sync::Mutex;
lazy_static! {
static ref LOG: Mutex<Vec<Vec<LogFragment>>> = Mutex::new(Vec::new());
}
pub fn append_fragment(fragment: LogFragment) {
LOG.lock().unwrap().push(vec![fragment]);
}
pub fn append_entry(fragments: Vec<LogFragment>) {
LOG.lock().unwrap().push(fragments);
}
pub fn clear_log() {
LOG.lock().unwrap().clear();
}
pub fn log_display() -> TextBuilder {
let mut buf = TextBuilder::empty();
LOG.lock().unwrap().iter().rev().take(12).for_each(|log| {
log.iter().for_each(|frag| {
buf.fg(frag.colour);
buf.line_wrap(&frag.text);
});
buf.ln();
});
return buf;
}

16
src/gamelog/mod.rs Normal file
View file

@ -0,0 +1,16 @@
use rltk::prelude::*;
mod builder;
pub use builder::*;
mod logstore;
use logstore::*;
pub use logstore::{clear_log, log_display};
pub struct GameLog {
pub entries: Vec<String>,
}
pub struct LogFragment {
pub colour: RGB,
pub text: String,
}

View file

@ -1,8 +1,8 @@
use super::{
gamelog::GameLog, rex_assets::RexAssets, CombatStats, InBackpack, Map, Name, Player, Point, Position, RunState,
State, Viewshed,
gamelog, rex_assets::RexAssets, CombatStats, InBackpack, Map, Name, Player, Point, Position, RunState, State,
Viewshed,
};
use rltk::{Rltk, VirtualKeyCode, RGB};
use rltk::{Rltk, TextBlock, VirtualKeyCode, RGB};
use specs::prelude::*;
pub fn draw_ui(ecs: &World, ctx: &mut Rltk) {
@ -18,14 +18,9 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) {
}
// Render message log
let log = ecs.fetch::<GameLog>();
let mut y = 44;
for s in log.entries.iter().rev() {
if y < 49 {
ctx.print(2, y, s);
}
y += 1;
}
let mut block = TextBlock::new(1, 44, 78, 5);
let _ = block.print(&gamelog::log_display());
block.render(&mut rltk::BACKEND_INTERNAL.lock().consoles[0].console);
// Render depth
let map = ecs.fetch::<Map>();

View file

@ -32,6 +32,8 @@ mod particle_system;
use particle_system::{ParticleBuilder, DEFAULT_PARTICLE_LIFETIME, LONG_PARTICLE_LIFETIME};
mod random_table;
mod rex_assets;
#[macro_use]
extern crate lazy_static;
// Embedded resources for use in wasm build
rltk::embedded_resource!(TERMINAL8X8, "../resources/terminal8x8.jpg");
@ -375,7 +377,7 @@ fn main() -> rltk::BError {
.with_resource_path("resources/")
.with_font("terminal8x8.jpg", 8, 8)
.with_simple_console(DISPLAYWIDTH, DISPLAYHEIGHT, "terminal8x8.jpg")
.with_simple_console_no_bg(DISPLAYWIDTH, DISPLAYHEIGHT, "terminal8x8.jpg")
//.with_simple_console_no_bg(DISPLAYWIDTH, DISPLAYHEIGHT, "terminal8x8.jpg")
.build()?;
context.with_post_scanlines(false);
//context.screen_burn_color(RGB::named((150, 255, 255)));
@ -432,6 +434,14 @@ fn main() -> rltk::BError {
gs.ecs.insert(gamelog::GameLog {
entries: vec!["<pretend i wrote a paragraph explaining why you're here>".to_string()],
});
gamelog::clear_log();
gamelog::Logger::new()
.append("Welcome!")
.colour(rltk::CYAN)
.append("(")
.append("pretend i wrote a paragraph explaining why you're here")
.append(")")
.log();
gs.ecs.insert(RunState::MainMenu { menu_selection: gui::MainMenuSelection::NewGame });
gs.ecs.insert(particle_system::ParticleBuilder::new());
gs.ecs.insert(rex_assets::RexAssets::new());