reworked level widget to stateful widget
This commit is contained in:
45
src/main.rs
45
src/main.rs
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user