From 6b2075c2a4bbf186d218e3c84cb59a68b07fb3cf Mon Sep 17 00:00:00 2001 From: annieversary Date: Fri, 1 Oct 2021 19:56:26 +0200 Subject: [PATCH] idk --- assets/textures/floor.png | Bin 0 -> 8873 bytes src/camera.rs | 1 + src/columns.rs | 2 ++ src/light_balls.rs | 8 +++-- src/loading.rs | 33 ++++++++++++++++++++ src/main.rs | 64 +++++++++++++++++++++++++++----------- src/player.rs | 8 +++-- 7 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 assets/textures/floor.png create mode 100644 src/loading.rs diff --git a/assets/textures/floor.png b/assets/textures/floor.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab7812ef468c59b4e161a5d6d7d85ac9fea76a3 GIT binary patch literal 8873 zcmeHNZA=qq9DjNg9S{(yiBSs<_+N%G!9^E(D+z@o`AXp65%K=r!Y9ObBYCUbY@(GpP-cg z+wwe;@!pmFKRH4W7XRt%NQ~)5cwkZ%{4O>q{NZc}pRh_ZA$FXRv?5x>V}paZueTv1_dvQi9gSb)U%tneNKPD}CX;(}gnuc&$T%7kH30iusAhA5N;<-%2iwXyIwy8Ud zsU3sDW6Dswey2gta4U_(rr-fP=zx|5gg1o^3N^1g%hOzZm?^A>9`;z3(i7CQIkfoJ z2Thps3*S;ugO~*jJ(fkq2FNHv-l1~OefQa3xA#miDFeD%Qip!EZI_%{+nC8h z*J<~nxO*>79fhobiZ$?og@cvP(>jvLjVD$VYE2pT7AE#*piqm0;(D7NV#GH-mx=TJ z76&UoSd00-dmm(dJMAq)xCIZ(X_wC*bx7EzDT!FX*P+~Nh+j0rO5@DCN@KKXA3+gp z+saMeb|XPJPs`O0*|-Ot&R0VQ;gYf}YQNuMmZnqJx71XQgkRLWGG6TJ%5DDV+?eU? z#6p7Pm&80(XF~vO4fu5dJcR7K)wf1xQh)Qw3t^xIG4p+$Rg`~W)bpieGW}&J5)@WU zHxBG2oF&IEJET0>aBv+}^G8<08dSAYw*u`(EuLxmD|{&+ju;3cUufwd$f6#rC~dNN z5dGqg&I2K1PUH&_?(s|C&m^-S)$9U5iJqYn1fMdVCgzI#WuNi}c9|O3T^-7D05Af* z3jp=vf1`SvH32yD`aK1bQ=+%)JAA4Qb8fiDuUt5|a+y!?FX+oR_G=y?NR@qEQKH*< GRQU$0lq4$v literal 0 HcmV?d00001 diff --git a/src/camera.rs b/src/camera.rs index f5c21dd..bb16082 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -15,6 +15,7 @@ pub fn camera_follow_player( }; let ds = time.delta_seconds() * 5.0; + // TODO Change this to normal movement for (mut trans, _) in camera.iter_mut() { trans.look_at(player_pos, Vec3::Y); diff --git a/src/columns.rs b/src/columns.rs index 1423d44..2e9cca4 100644 --- a/src/columns.rs +++ b/src/columns.rs @@ -1,3 +1,5 @@ +#![allow(dead_code)] + use bevy::prelude::*; const DIS: f32 = 300.0; diff --git a/src/light_balls.rs b/src/light_balls.rs index 33f0b57..5ff6885 100644 --- a/src/light_balls.rs +++ b/src/light_balls.rs @@ -2,6 +2,8 @@ use bevy::prelude::*; use crate::player::Player; +const RANGE: f32 = 25.0; + pub struct LightBall; pub fn light_up_ball_when_close_to_player( mut commands: Commands, @@ -23,17 +25,17 @@ pub fn light_up_ball_when_close_to_player( for (entity, trans, _, mut material, light) in thingies.iter_mut() { let dis = trans.translation.distance(player_pos); - if dis < 20.0 { + if dis < RANGE { *material = materials.lit.clone(); // change intensity, // add light if there isn't one if let Some(mut l) = light { - l.intensity = 300.0 * (20.0 - dis) / 20.0; + l.intensity = 300.0 * (RANGE - dis) / RANGE; } else { commands.entity(entity).insert(Light { color: Color::rgb(15.0, 15.0, 15.0), - intensity: 300.0 * (20.0 - dis) / 20.0, + intensity: 300.0 * (RANGE - dis) / RANGE, ..Default::default() }); } diff --git a/src/loading.rs b/src/loading.rs new file mode 100644 index 0000000..037e29b --- /dev/null +++ b/src/loading.rs @@ -0,0 +1,33 @@ +use bevy::{ + prelude::*, + render::texture::{AddressMode, FilterMode}, +}; + +use crate::AppState; + +pub struct LoadedAssets { + pub floor: Handle, +} +impl FromWorld for LoadedAssets { + fn from_world(world: &mut World) -> Self { + let server = world.get_resource::().unwrap(); + + let floor = server.load("textures/floor.png"); + Self { floor } + } +} + +pub fn loading( + assets: Res, + mut textures: ResMut>, + mut state: ResMut>, +) { + if let Some(t) = textures.get_mut(&assets.floor) { + t.sampler.address_mode_u = AddressMode::MirrorRepeat; + t.sampler.address_mode_v = AddressMode::Repeat; + t.sampler.address_mode_w = AddressMode::Repeat; + t.sampler.mipmap_filter = FilterMode::Linear; + + state.set(AppState::Game).unwrap(); + } +} diff --git a/src/main.rs b/src/main.rs index 5a5e8a9..84a6b40 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,24 +9,43 @@ use player::*; mod camera; use camera::*; mod columns; -use columns::*; + +mod loading; + +#[derive(Clone, PartialEq, Eq, Hash, Debug)] +pub enum AppState { + Loading, + Game, +} fn main() { App::build() .insert_resource(Msaa { samples: 4 }) + .insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0))) .add_plugins(rendering::CustomPlugins) .init_resource::() - .add_startup_system(setup.system()) - .add_system(exit_on_esc_system.system()) - .add_system(light_movement.system()) - .add_system(move_player.system()) - .add_system(camera_follow_player.system()) - .add_system(light_up_ball_when_close_to_player.system()) + .init_resource::() + .add_state(AppState::Loading) + // loading + .add_system_set( + SystemSet::on_update(AppState::Loading).with_system(loading::loading.system()), + ) + // game + .add_system_set(SystemSet::on_enter(AppState::Game).with_system(setup.system())) + .add_system_set( + SystemSet::on_update(AppState::Game) + .with_system(exit_on_esc_system.system()) + .with_system(light_movement.system()) + .with_system(move_player.system()) + .with_system(camera_follow_player.system()) + .with_system(light_up_ball_when_close_to_player.system()), + ) .run(); } fn setup( mut commands: Commands, + assets: Res, mut meshes: ResMut>, mut materials: ResMut>, mut ambient: ResMut, @@ -34,21 +53,30 @@ fn setup( ) { // set ambient light to very low ambient.color = Color::rgb(0.3, 0.3, 0.3); - ambient.brightness = 0.02; + ambient.brightness = 0.01; // floor - let mut floor_material: StandardMaterial = Color::rgb(0.1, 0.1, 0.1).into(); + let mut floor_material = StandardMaterial { + base_color_texture: Some(assets.floor.clone()), + base_color: Color::rgb(0.3, 0.3, 0.3), + ..Default::default() + }; floor_material.metallic = 0.0; floor_material.reflectance = 0.0; let floor_material = materials.add(floor_material); - commands.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 10000.0 })), - material: floor_material, - ..Default::default() - }); + for i in -10..10 { + for j in -10..10 { + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Plane { size: 100.0 })), + material: floor_material.clone(), + transform: Transform::from_xyz(100.0 * i as f32, 0.0, 100.0 * j as f32), + ..Default::default() + }); + } + } // columns - spawn_columns(&mut commands, &mut meshes, &mut materials); + // columns::spawn_columns(&mut commands, &mut meshes, &mut materials); // player spawn_player(&mut commands, &mut meshes, &mut materials); @@ -58,19 +86,19 @@ fn setup( spawn_light_ball( &mut commands, &light_ball_materials, - Vec3::new(i as f32 * 30.0, 2.0, 6.0), + Vec3::new(i as f32 * 30.0, 2.0, 10.0), ); spawn_light_ball( &mut commands, &light_ball_materials, - Vec3::new(i as f32 * 30.0, 2.0, -6.0), + Vec3::new(i as f32 * 30.0, 2.0, -10.0), ); } // camera commands .spawn_bundle(PerspectiveCameraBundle { - transform: Transform::from_xyz(-20.0, 100.0, 50.0).looking_at(Vec3::ZERO, Vec3::Y), + transform: Transform::from_xyz(-40.0, 110.0, 40.0).looking_at(Vec3::ZERO, Vec3::Y), ..Default::default() }) .insert(Camera); diff --git a/src/player.rs b/src/player.rs index 6eed3eb..8ac3b7e 100644 --- a/src/player.rs +++ b/src/player.rs @@ -17,16 +17,17 @@ pub fn spawn_player( ..Default::default() })), material: materials.add(Color::rgb(1.0, 1.0, 1.0).into()), - transform: Transform::from_xyz(33.0, 1.0, 0.0), + transform: Transform::from_xyz(0.0, 1.0, 0.0), ..Default::default() }) .insert(Player) .with_children(|parent| { // light - let mut light_material: StandardMaterial = Color::rgb(0.3, 0.5, 0.3).into(); + let mut light_material: StandardMaterial = + Color::rgb(0.737255, 0.560784, 0.560784).into(); light_material.metallic = 0.5; light_material.reflectance = 0.5; - light_material.emissive = Color::rgb(15.0, 15.0, 15.0); + light_material.emissive = Color::rgb(7.52, 5.72, 5.72); let light_material = materials.add(light_material); for i in 0..6 { @@ -43,6 +44,7 @@ pub fn spawn_player( .insert_bundle(LightBundle { transform: Transform::from_xyz(0.0, 0.0, 0.0), light: Light { + color: Color::rgb(7.52, 5.72, 5.72), ..Default::default() }, ..Default::default()