diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..30aa626 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml new file mode 100644 index 0000000..3354e7c --- /dev/null +++ b/.idea/markdown-navigator.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index b8a4bc1..02a97db 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # FirstRustGame +[![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/DeFuex/FirstRustGame/blob/master/LICENSE) +[![Crates.io](https://img.shields.io/crates/v/ggez.svg?label=ggez)](https://crates.io/crates/ggez) ## Prerequisites @@ -18,4 +20,6 @@ cargo run ## Game +Use `space` to jump and `left` `right` respectively to go left and right + screen shot 2018-07-07 at 18 03 04 \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 9ff1f12..6950fe0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,19 +4,19 @@ extern crate ncollide; extern crate nphysics2d; extern crate rand; -use ggez::{ContextBuilder, Context, GameResult}; use ggez::conf::{WindowMode, WindowSetup}; -use ggez::event::{ self, EventHandler, Keycode, Mod} ; -use ggez::graphics::{ Vector2 as gVector2, clear, circle, line, present, DrawMode, Point2 }; +use ggez::event::{self, EventHandler, Keycode, Mod}; +use ggez::graphics::{circle, clear, line, present, DrawMode, Point2, Vector2 as gVector2}; use ggez::timer; +use ggez::{Context, ContextBuilder, GameResult}; use rand::Rng; -use na::{Vector1, Vector2, Translation2, UnitComplex}; +use na::{Translation2, UnitComplex, Vector1, Vector2}; use ncollide::shape::{Ball, Plane}; -use nphysics2d::world::World; use nphysics2d::math::Orientation; use nphysics2d::object::{RigidBody, RigidBodyHandle}; +use nphysics2d::world::World; const WINDOW_WIDTH: u32 = 800; const WINDOW_HEIGHT: u32 = 600; @@ -156,7 +156,7 @@ fn player_handle_input(actor: &mut Actor, dt: f32) { actor.direction += dt * PLAYER_TURN_RATE; //* input.xaxis; // if input.yaxis > 0.0 { - player_thrust(actor, dt); + player_thrust(actor, dt); // } } @@ -184,7 +184,6 @@ fn update_actor_position(actor: &mut Actor, dt: f32) { impl Game { fn new(_ctx: &mut Context) -> GameResult { - print_instructions(); let mut world = World::new(); @@ -195,25 +194,27 @@ impl Game { let mut player = create_player(); let walls = create_walls(5, player.pos); - + let wall_bodies = Vec::new(); // let mut player = RigidBody::new_dynamic(Ball::new(PLAYER_R), 1.0, 0.0, 0.0); player.body.set_inv_mass(1.5); - player.body.append_translation(&Translation2::new(400.0, 300.0)); + player + .body + .append_translation(&Translation2::new(400.0, 300.0)); let player_body = world.add_rigid_body(player.body.clone()); - let s = Game { - world, - player, - player_body, - is_walls_setup: false, - walls, - wall_bodies, - wall_collision: false, - wall_pos_col_x: 0.0, - wall_pos_col_y: 0.0, - }; + let s = Game { + world, + player, + player_body, + is_walls_setup: false, + walls, + wall_bodies, + wall_collision: false, + wall_pos_col_x: 0.0, + wall_pos_col_y: 0.0, + }; Ok(s) } @@ -223,8 +224,12 @@ impl Game { wall.body.set_inv_mass(0.); wall.body.append_rotation(&UnitComplex::new(100.0)); // wall.body.append_rotation(&UnitComplex::new(rand::thread_rng().gen_range(0.0, 100.0))); - wall.body.append_translation(&Translation2::new(0.0, rand::thread_rng().gen_range(200.0, 300.0))); //rand::thread_rng().gen_range(0., 400.0))); - self.wall_bodies.push(self.world.add_rigid_body(wall.body.clone())); + wall.body.append_translation(&Translation2::new( + 0.0, + rand::thread_rng().gen_range(200.0, 300.0), + )); //rand::thread_rng().gen_range(0., 400.0))); + self.wall_bodies + .push(self.world.add_rigid_body(wall.body.clone())); } self.is_walls_setup = true; } @@ -259,10 +264,13 @@ impl Game { println!("player box: {}", self.player.bbox_size); println!("wall box: {}", wall.bbox_size); println!("box size: {}", self.player.bbox_size + wall.bbox_size); - println!("{}", (pdistance.norm()/1000.0) < (self.player.bbox_size + wall.bbox_size)); + println!( + "{}", + (pdistance.norm() / 1000.0) < (self.player.bbox_size + wall.bbox_size) + ); /* TEST VALUES */ - if (pdistance.norm()/100.) < (self.player.bbox_size + wall.bbox_size) { + if (pdistance.norm() / 100.) < (self.player.bbox_size + wall.bbox_size) { // self.player.life = 0.0; self.wall_collision = true; self.wall_pos_col_x = wall.pos.x; @@ -301,8 +309,21 @@ impl EventHandler for Game { fn draw(&mut self, ctx: &mut Context) -> GameResult<()> { clear(ctx); let pos = self.player_body.borrow().position_center(); - circle(ctx, DrawMode::Fill, Point2::new(pos.x, pos.y), PLAYER_R, 0.1)?; - line(ctx, &[Point2::new(0.0, FLOOR_Y), Point2::new(WINDOW_WIDTH as f32, FLOOR_Y)], 1.0)?; + circle( + ctx, + DrawMode::Fill, + Point2::new(pos.x, pos.y), + PLAYER_R, + 0.1, + )?; + line( + ctx, + &[ + Point2::new(0.0, FLOOR_Y), + Point2::new(WINDOW_WIDTH as f32, FLOOR_Y), + ], + 1.0, + )?; // Loop over all objects drawing them... { @@ -313,11 +334,17 @@ impl EventHandler for Game { for wall_body in &self.wall_bodies { // let mut coords = wall_body.borrow_mut(); // let local = coords.local_to_world; - line(ctx, &[Point2::new( - wall_body.borrow().position_center().x, - wall_body.borrow().position_center().y), - Point2::new(WINDOW_WIDTH as f32, - -100.0)], 1.0)?; //wall_body.borrow().position_center().coords.data + line( + ctx, + &[ + Point2::new( + wall_body.borrow().position_center().x, + wall_body.borrow().position_center().y, + ), + Point2::new(WINDOW_WIDTH as f32, -100.0), + ], + 1.0, + )?; //wall_body.borrow().position_center().coords.data } } @@ -341,12 +368,13 @@ impl EventHandler for Game { self.world.set_gravity(Vector2::new(0.0, 200.0)); } - let mut player: std::cell::RefMut> = self.player_body.borrow_mut(); + let mut player: std::cell::RefMut> = + self.player_body.borrow_mut(); if player.position_center().y + PLAYER_R > FLOOR_Y - 0.1 { player.apply_central_impulse(Vector2::new(0.0, -150.0)); } } - _ => () + _ => (), } self.refresh_horizontal_vel(); } @@ -364,14 +392,14 @@ impl EventHandler for Game { if self.wall_collision { // if (self.wall_pos_col_y > self.player.pos.y) && // (self.wall_pos_col_x > self.player.pos.x) { - self.world.set_gravity(Vector2::new(0.0, 200.0)); + self.world.set_gravity(Vector2::new(0.0, 200.0)); // } - } + } // else { // self.world.set_gravity(Vector2::new(0.0, -200.0)); // } } - _ => () + _ => (), } self.refresh_horizontal_vel(); } @@ -409,7 +437,7 @@ fn print_instructions() { // let image = assets.actor_image(actor); // let drawparams = ggez::graphics::DrawParam { // dest: pos, -// rotation: actor.direction as f32, //facing var for rotation +// rotation: actor.direction as f32, //facing var for rotation // offset: ggez::graphics::Point2::new(0.5, 0.5), // ..Default::default() // }; @@ -426,4 +454,4 @@ fn world_to_screen_coords(screen_width: u32, screen_height: u32, point: Point2) let x = point.x + width / 2.0; let y = height - (point.y + height / 2.0); Point2::new(x, y) -} \ No newline at end of file +}