Adds "agent" that moves right

master
Joey Pollack 2 years ago
parent ef52c604d1
commit ef8bbe0c55

3637
Cargo.lock generated

File diff suppressed because it is too large Load Diff

@ -6,3 +6,9 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bevy = "0.11.0"
# Enable high optimizations for dependencies (incl. Bevy), but not for our code:
[profile.dev.package."*"]
opt-level = 3

@ -1,4 +1,83 @@
use bevy::{prelude::*, sprite::MaterialMesh2dBundle};
use std::time::Instant;
mod neural_net;
#[derive(Component)]
struct Agent;
#[derive(Resource)]
struct SimulationState
{
generation: i32,
generation_step: i32,
max_gen_steps: i32,
last_step_time: f32,
last_gen_time: f32,
}
impl SimulationState
{
fn new(steps_per_gen: i32) -> SimulationState
{
SimulationState { generation: (1), generation_step: (0), max_gen_steps: steps_per_gen, last_step_time: 0.0, last_gen_time: 0.0 }
}
}
fn main()
{
println!("Hello, world!");
App::new()
.add_plugins(DefaultPlugins)
.insert_resource(SimulationState::new(200))
.insert_resource(Time::new(Instant::now()))
.add_systems(Startup, setup)
.add_systems(Update, tick_simulation)
.run();
}
fn setup(mut commands: Commands, mut meshes: ResMut<Assets<Mesh>>, mut materials: ResMut<Assets<ColorMaterial>>)
{
// Camera
commands.spawn(Camera2dBundle::default());
// Circle
commands.spawn((
MaterialMesh2dBundle {
mesh: meshes.add(shape::Circle::new(50.).into()).into(),
material: materials.add(ColorMaterial::from(Color::PURPLE)),
transform: Transform::from_translation(Vec3::new(-150., 0., 0.)),
..default()
},
Agent
));
}
fn tick_simulation(mut state: ResMut<SimulationState>, delta_time: Res<Time>, mut query: Query<&mut Transform, With<Agent>>)
{
let now = Instant::now();
// Update neural net inputs
// Tick the neural net
// Process agent actions
let mut agent_transform = query.single_mut();
agent_transform.translation.x += 0.5;
let elapsed_time = now.elapsed();
state.last_gen_time += state.last_step_time;
state.last_step_time = elapsed_time.as_secs_f32();
state.generation_step += 1;
if state.generation_step >= state.max_gen_steps
{
// Move on to the next generation
state.generation += 1;
}
}

@ -0,0 +1,7 @@
pub enum InputNeuron
{
Position((i32, i32)), // Position on the world grid
Age(i32), // Age is the number of steps since the start of the generation
}
Loading…
Cancel
Save