reworked level widget to stateful widget

This commit is contained in:
2023-12-09 20:11:02 +01:00
parent 6e2441aad1
commit 206a49fb08
3 changed files with 161 additions and 185 deletions

View File

@@ -1,5 +1,5 @@
use std::io::{Result, stdout};
use std::ops::Index;
use std::io::Result;
use std::io::stdout;
use crossterm::{
event::{self, KeyCode, KeyEventKind},
@@ -15,9 +15,8 @@ use ratatui::widgets::Block;
use whoami::realname;
use crate::game::Game;
use crate::level::Level;
use crate::level_generator::LevelGenerator;
use crate::level_widget::LevelWidget;
// use crate::level_widget::LevelWidget;
use crate::player::Player;
mod game;
@@ -28,20 +27,9 @@ mod level_widget;
mod level_generator;
mod artifacts;
mod monster;
//
fn main() -> Result<()> {
let mut levels = Vec::new();
for l in 0..25 {
levels.push(LevelGenerator::generate(l).render());
}
let mut g = Game {
player: Player::new(realname().as_str(), 10),
levels,
};
// let first_level = g.levels.index(0);
// g.get_mutable_player().get_position().change(first_level.start.0 as i16, first_level.start.1 as i16);
let mut game = Game::new(Player::new(realname().as_str(), 10));
stdout().execute(EnterAlternateScreen)?;
enable_raw_mode()?;
@@ -68,7 +56,7 @@ fn main() -> Result<()> {
width: level::LEVEL_WIDTH as u16,
height: level::LEVEL_HEIGHT as u16,
};
frame.render_widget(LevelWidget { game: &g }, map_area);
frame.render_stateful_widget(LevelWidget{}, map_area, &mut game);
let stats_area = Rect {
x: area.x + 50,
@@ -78,11 +66,11 @@ fn main() -> Result<()> {
};
frame.render_widget(
Paragraph::new(format!("{}\nHealth: {}/{}\nGold: {}\nLevel: {}",
g.get_player().get_name(),
g.get_player().get_life(),
g.get_player().get_max_life(),
g.get_player().get_gold(),
g.get_player().get_immutable_position().get_level()))
game.get_player().get_name(),
game.get_player().get_life(),
game.get_player().get_max_life(),
game.get_player().get_gold(),
game.get_player().get_immutable_position().get_level()))
.white()
.on_blue(),
stats_area,
@@ -93,20 +81,17 @@ fn main() -> Result<()> {
if key.kind == KeyEventKind::Press && key.code == KeyCode::Char('q') {
break;
}
// if key.kind == KeyEventKind::Press && key.code == KeyCode::Char('d') {
// ;
// }
if key.kind == KeyEventKind::Press && key.code == KeyCode::Left {
g.get_mutable_player().get_position().change(-1, 0);
game.move_player(-1, 0);
}
if key.kind == KeyEventKind::Press && key.code == KeyCode::Right {
g.get_mutable_player().get_position().change(1, 0);
game.move_player(1, 0);
}
if key.kind == KeyEventKind::Press && key.code == KeyCode::Up {
g.get_mutable_player().get_position().change(0, -1);
game.move_player(0, -1);
}
if key.kind == KeyEventKind::Press && key.code == KeyCode::Down {
g.get_mutable_player().get_position().change(0, 1);
game.move_player(0, 1);
}
}
}