Added a map (wich is a little buggy when trying to set it by hand) and a randomiszer to it and debug now shows limits

This commit is contained in:
2022-05-17 14:56:59 +02:00
parent 1b3337c993
commit fa437f2b6c
4 changed files with 192 additions and 6 deletions
Generated
+54
View File
@@ -14,6 +14,17 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "getrandom"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "1.4.0" version = "1.4.0"
@@ -26,6 +37,42 @@ version = "0.2.125"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b"
[[package]]
name = "ppv-lite86"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
dependencies = [
"getrandom",
]
[[package]] [[package]]
name = "sdl2" name = "sdl2"
version = "0.35.2" version = "0.35.2"
@@ -53,6 +100,7 @@ dependencies = [
name = "test_sdl" name = "test_sdl"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"rand",
"sdl2", "sdl2",
] ]
@@ -61,3 +109,9 @@ name = "version-compare"
version = "0.1.0" version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73" checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73"
[[package]]
name = "wasi"
version = "0.10.2+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+1
View File
@@ -7,3 +7,4 @@ edition = "2021"
[dependencies] [dependencies]
sdl2 = "0.35.2" sdl2 = "0.35.2"
rand = "0.8.5"
+3 -1
View File
@@ -25,7 +25,9 @@ W,A,S,D and Arrow Keys are for modifying the shot direction and force
[DEBUG] Right Click cancels any velocity of the ball. [DEBUG] Right Click cancels any velocity of the ball.
Tab toggles a debug mode where you can see the actual vector applied to the ball wich is render as a cube to see its hitbox (maybe even more in the futur) [DEBUG] Press R to randomize the map (you can maintain the key pressed if you want to kill a friend who has photosensitive epilepsy)
Tab toggles a debug mode where you can see the actual vector applied to the ball wich is render as a cube to see its hitbox and tiles borders
Spacebar releases the ball and when preseed back, resets the position and velocity of the ball Spacebar releases the ball and when preseed back, resets the position and velocity of the ball
+133 -4
View File
@@ -5,9 +5,10 @@ use sdl2::keyboard::Scancode;
use std::time::Duration; use std::time::Duration;
use sdl2::rect::Point; use sdl2::rect::Point;
use sdl2::rect::Rect; use sdl2::rect::Rect;
use rand::Rng;
const WINDOW_HEIGHT:i32 = 800; const WINDOW_HEIGHT:i32 = 1000;
const WINDOW_WIDTH:i32 = 500; const WINDOW_WIDTH:i32 = 800;
const BALL_SPEED:f32 = 3.0; const BALL_SPEED:f32 = 3.0;
const MAX_SPEED:f32 = 60.0; const MAX_SPEED:f32 = 60.0;
const DEBUG_FX_SIZE_RATIO:i32 = 2; const DEBUG_FX_SIZE_RATIO:i32 = 2;
@@ -17,18 +18,140 @@ const DEFAULT_BALL_WIDTH:i32 = 20;
const DEFAULT_START_BALL_LOCATION_X:i32 = WINDOW_WIDTH / 2 - DEFAULT_BALL_WIDTH / 2; const DEFAULT_START_BALL_LOCATION_X:i32 = WINDOW_WIDTH / 2 - DEFAULT_BALL_WIDTH / 2;
const DEFAULT_START_BALL_LOCATION_Y:i32 = (WINDOW_HEIGHT / 5) * 4 - DEFAULT_BALL_WIDTH / 2; const DEFAULT_START_BALL_LOCATION_Y:i32 = (WINDOW_HEIGHT / 5) * 4 - DEFAULT_BALL_WIDTH / 2;
const DEFAULT_MAP_WIDTH:i32 = 40;
const DEFAULT_MAP_HEIGHT:i32 = 50;
const DEFAULT_TEST_MAP:&[i32] = &[
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,
];
pub struct Map{
size:Point,
grid:Vec<i32>,
}
impl Map{
fn new() -> Self{
let (DEFAULT_MAP,height) = (50,40);
Map{
size:Point::new(DEFAULT_MAP_WIDTH,DEFAULT_MAP_HEIGHT),
//grid:vec![0;width as usize * height as usize],
grid:DEFAULT_TEST_MAP.to_vec(),
}
}
fn randomize(&mut self){
let mut rng = rand::thread_rng();
for x in 0..self.size.x{
for y in 0..self.size.y{
let index = (x * self.size.y) + y;
self.grid[index as usize] = rng.gen_range(0..3);
}
}
}
pub fn render(&mut self,ctx:&mut sdl2::render::Canvas<sdl2::video::Window>,debug:bool){
let width = WINDOW_WIDTH / self.size.x;
let height = WINDOW_HEIGHT / self.size.y;
for x in 0..self.size.x{
for y in 0..self.size.y{
let rect = Rect::new(x * width,y * height,width as u32,height as u32);
let index = (x * height) + y;
let tile_color:Color = Color::RGB(0xFF, 0xFF, 0xFF);
let tile_bg:Color;
match self.grid[index as usize]{
0 => {
//Ground
tile_bg = Color::RGB(0x6A,0x9A,0x1D);
}
1 =>{
//Water
tile_bg = Color::RGB(0x59, 0xA5, 0xD8);
}
2 =>{
//Wall
tile_bg = Color::RGB(0x17, 0x2A, 0x33);
}
_ => {
//uuuuuuh... whatever I guess lets make it black
tile_bg = Color::RGB(0x00, 0x00, 0x00);
},
}
ctx.set_draw_color(tile_bg);
ctx.fill_rect(rect).expect("Could not render grid");
if debug{
ctx.set_draw_color(tile_color);
ctx.draw_rect(rect).expect("Could not render grid");
}
}
}
}
}
pub struct Game{ pub struct Game{
main_ball:Entity, main_ball:Entity,
draw_debug:bool, draw_debug:bool,
ball_released:bool, ball_released:bool,
map:Map,
} }
impl Game{ impl Game{
pub fn render(&mut self,ctx:&mut sdl2::render::Canvas<sdl2::video::Window>){ pub fn render(&mut self,ctx:&mut sdl2::render::Canvas<sdl2::video::Window>){
let main_ball_color:Color = Color::RGB(0xFA, 0xFD, 0xF6); let main_ball_color:Color = Color::RGB(0xFA, 0xFD, 0xF6);
let main_ball_outline:Color = Color::RGB(0x17, 0x2A, 0x33); let main_ball_outline:Color = Color::RGB(0x17, 0x2A, 0x33);
let background_color:Color = Color::RGB(0x6A,0x9A,0x1D); let background_color:Color = Color::RGB(0xFF,0xFF,0xFF);
ctx.set_draw_color(background_color); ctx.set_draw_color(background_color);
ctx.clear(); ctx.clear();
//map
self.map.render(ctx,self.draw_debug);
//ball
let center:Point = Point::new(self.main_ball.shape.x + (self.main_ball.shape.width() / 2) as i32,self.main_ball.shape.y + (self.main_ball.shape.width() / 2) as i32); let center:Point = Point::new(self.main_ball.shape.x + (self.main_ball.shape.width() / 2) as i32,self.main_ball.shape.y + (self.main_ball.shape.width() / 2) as i32);
if self.draw_debug { if self.draw_debug {
ctx.set_draw_color(main_ball_color); ctx.set_draw_color(main_ball_color);
@@ -212,6 +335,9 @@ fn is_left_pressed(e: &sdl2::EventPump)-> bool{
fn is_right_pressed(e: &sdl2::EventPump)-> bool{ fn is_right_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::D) || e.keyboard_state().is_scancode_pressed(Scancode::Right) e.keyboard_state().is_scancode_pressed(Scancode::D) || e.keyboard_state().is_scancode_pressed(Scancode::Right)
} }
fn is_random_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::R)
}
fn is_tab_pressed(e: &sdl2::EventPump)-> bool{ fn is_tab_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::Tab) e.keyboard_state().is_scancode_pressed(Scancode::Tab)
} }
@@ -249,6 +375,9 @@ pub fn main_loop(canvas: &mut sdl2::render::Canvas<sdl2::video::Window>,event_pu
if is_right_pressed(event_pump){ if is_right_pressed(event_pump){
game.right(); game.right();
} }
if is_random_pressed(event_pump){
game.map.randomize();
}
if is_tab_pressed(event_pump){ if is_tab_pressed(event_pump){
if tab_state == false{ if tab_state == false{
//Keydown //Keydown
@@ -328,6 +457,6 @@ pub fn main() {
shape:main_ball_rectangle, shape:main_ball_rectangle,
velocity:main_ball_velocity velocity:main_ball_velocity
}; };
let mut game = Game{main_ball:main_entity,draw_debug:false,ball_released:false}; let mut game = Game{main_ball:main_entity,draw_debug:false,ball_released:false,map:Map::new()};
main_loop(&mut canvas,&mut event_pump,&mut game); main_loop(&mut canvas,&mut event_pump,&mut game);
} }