progress
33
.cargo/config.toml
Normal file
|
@ -0,0 +1,33 @@
|
|||
# Add the contents of this file to `config.toml` to enable "fast build" configuration. Please read the notes below.
|
||||
|
||||
# NOTE: For maximum performance, build using a nightly compiler
|
||||
# If you are using rust stable, remove the "-Zshare-generics=y" below.
|
||||
|
||||
[target.x86_64-unknown-linux-gnu]
|
||||
linker = "clang"
|
||||
rustflags = ["-Clink-arg=-fuse-ld=mold", "-Zshare-generics=y"]
|
||||
|
||||
# NOTE: you must install [Mach-O LLD Port](https://lld.llvm.org/MachO/index.html) on mac. you can easily do this by installing llvm which includes lld with the "brew" package manager:
|
||||
# `brew install llvm`
|
||||
[target.x86_64-apple-darwin]
|
||||
rustflags = [
|
||||
"-C",
|
||||
"link-arg=-fuse-ld=/usr/local/opt/llvm/bin/ld64.lld",
|
||||
"-Zshare-generics=y",
|
||||
]
|
||||
|
||||
[target.aarch64-apple-darwin]
|
||||
rustflags = [
|
||||
"-C",
|
||||
"link-arg=-fuse-ld=/opt/homebrew/opt/llvm/bin/ld64.lld",
|
||||
"-Zshare-generics=y",
|
||||
]
|
||||
|
||||
[target.x86_64-pc-windows-msvc]
|
||||
linker = "rust-lld.exe"
|
||||
rustflags = ["-Zshare-generics=n"]
|
||||
|
||||
# Optional: Uncommenting the following improves compile times, but reduces the amount of debug info to 'line number tables only'
|
||||
# In most cases the gains are negligible, but if you are on macos and have slow compile times you should see significant gains.
|
||||
#[profile.dev]
|
||||
#debug = 1
|
BIN
assets/emoticons.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
assets/game.png
Normal file
After Width: | Height: | Size: 144 KiB |
BIN
assets/generic_clear.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
assets/generic_unhookable_0.7.png
Normal file
After Width: | Height: | Size: 154 KiB |
BIN
assets/particles.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
assets/skins/coala_bluekitty.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
assets/skins/default.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
|
@ -1 +0,0 @@
|
|||
use bevy::prelude::*;
|
18
src/main.rs
|
@ -1,19 +1,27 @@
|
|||
use bevy::prelude::*;
|
||||
use bevy_inspector_egui::quick::WorldInspectorPlugin;
|
||||
use physics::Velocity;
|
||||
|
||||
pub mod entity;
|
||||
pub mod physics;
|
||||
pub mod player;
|
||||
pub mod tee;
|
||||
|
||||
fn main() {
|
||||
App::new()
|
||||
.register_type::<Velocity>()
|
||||
.add_plugins(DefaultPlugins)
|
||||
.add_plugin(WorldInspectorPlugin::new())
|
||||
.add_startup_system(general_setup)
|
||||
.add_startup_system(player::add_player)
|
||||
.add_system(player::player_input.before(physics::move_system))
|
||||
.add_system(player::player_mouse.before(physics::move_system))
|
||||
.add_system(physics::move_system)
|
||||
.run();
|
||||
}
|
||||
|
||||
fn print_position_system(query: Query<&Transform>) {
|
||||
for transform in &query {
|
||||
println!("position: {:?}", transform.translation);
|
||||
}
|
||||
#[derive(Component)]
|
||||
pub struct MainCamera;
|
||||
|
||||
fn general_setup(mut commands: Commands, server: Res<AssetServer>) {
|
||||
commands.spawn((Camera2dBundle::default(), MainCamera));
|
||||
}
|
||||
|
|
27
src/physics.rs
Normal file
|
@ -0,0 +1,27 @@
|
|||
use bevy::prelude::*;
|
||||
|
||||
#[derive(Debug, Reflect, Component, Default, Clone)]
|
||||
pub struct Velocity {
|
||||
pub vel: Vec2,
|
||||
pub speed: f32,
|
||||
}
|
||||
|
||||
impl Velocity {
|
||||
pub fn new(speed: f32) -> Self {
|
||||
Self {
|
||||
speed,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct BoundingBox {
|
||||
pub rect: Rect,
|
||||
}
|
||||
|
||||
pub fn move_system(mut query: Query<(&Velocity, &mut Transform)>, time: Res<Time>) {
|
||||
for (vel, mut transform) in query.iter_mut() {
|
||||
transform.translation += vel.vel.extend(0.0) * time.delta_seconds();
|
||||
}
|
||||
}
|
|
@ -1,8 +1,70 @@
|
|||
use bevy::prelude::*;
|
||||
use bevy::{math::Vec3Swizzles, prelude::*};
|
||||
|
||||
use crate::{
|
||||
physics::Velocity,
|
||||
tee::{TeeBundle, TeeBundleChildren},
|
||||
MainCamera,
|
||||
};
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct Player;
|
||||
|
||||
pub fn add_player(mut commands: Commands) {
|
||||
commands.spawn((Player, Name::new("Ryo"), Transform::default()));
|
||||
pub fn add_player(mut commands: Commands, server: Res<AssetServer>) {
|
||||
let handle: Handle<Image> = server.load("skins/default.png");
|
||||
|
||||
let tee_bundle = TeeBundle::new("Player", Vec3::new(32.0, 32.0, 0.0));
|
||||
|
||||
let tee_bundle_children = TeeBundleChildren::new(handle);
|
||||
|
||||
commands
|
||||
.spawn((Player, tee_bundle, Velocity::new(100.0)))
|
||||
.with_children(|parent| {
|
||||
parent.spawn(tee_bundle_children.body);
|
||||
parent.spawn(tee_bundle_children.left_foot);
|
||||
parent.spawn(tee_bundle_children.right_foot);
|
||||
});
|
||||
}
|
||||
|
||||
pub fn player_input(
|
||||
keys: Res<Input<KeyCode>>,
|
||||
mut query_player: Query<&mut Velocity, With<Player>>,
|
||||
) {
|
||||
let mut dir = Vec2::ZERO;
|
||||
|
||||
if keys.pressed(KeyCode::W) {
|
||||
dir.y += 1.0;
|
||||
}
|
||||
if keys.pressed(KeyCode::S) {
|
||||
dir.y -= 1.0;
|
||||
}
|
||||
if keys.pressed(KeyCode::D) {
|
||||
dir.x += 1.0;
|
||||
}
|
||||
if keys.pressed(KeyCode::A) {
|
||||
dir.x -= 1.0;
|
||||
}
|
||||
|
||||
let mut v = query_player.single_mut();
|
||||
v.vel = dir.normalize_or_zero() * v.speed;
|
||||
}
|
||||
|
||||
pub fn player_mouse(
|
||||
mut cursor_evr: EventReader<CursorMoved>,
|
||||
mut query_player: Query<&mut Transform, With<Player>>,
|
||||
query_camera: Query<(&Camera, &GlobalTransform), With<MainCamera>>,
|
||||
) {
|
||||
let (camera, camera_transform) = query_camera.single();
|
||||
|
||||
for ev in cursor_evr.iter() {
|
||||
let real_pos = camera.viewport_to_world_2d(camera_transform, ev.position);
|
||||
if let Some(real_pos) = real_pos {
|
||||
let mut transform = query_player.single_mut();
|
||||
let translation = transform.translation.xy();
|
||||
let vector = (real_pos - translation).normalize();
|
||||
|
||||
let rotate_to_mouse = Quat::from_rotation_arc(Vec3::Y, vector.extend(0.0));
|
||||
|
||||
transform.rotation = rotate_to_mouse;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
111
src/tee.rs
Normal file
|
@ -0,0 +1,111 @@
|
|||
use std::borrow::Cow;
|
||||
|
||||
use bevy::prelude::*;
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct Tee;
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct Body;
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct LeftFoot;
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct RightFoot;
|
||||
|
||||
#[derive(Bundle)]
|
||||
pub struct TeeBundle {
|
||||
pub tee: Tee,
|
||||
pub name: Name,
|
||||
pub spatial_bundle: SpatialBundle,
|
||||
}
|
||||
|
||||
#[derive(Bundle)]
|
||||
pub struct TeePartBundle<T: Component> {
|
||||
pub sprite: SpriteBundle,
|
||||
pub marker: T,
|
||||
pub name: Name,
|
||||
}
|
||||
|
||||
pub struct TeeBundleChildren {
|
||||
pub body: TeePartBundle<Body>,
|
||||
pub left_foot: TeePartBundle<LeftFoot>,
|
||||
pub right_foot: TeePartBundle<RightFoot>,
|
||||
}
|
||||
|
||||
impl TeeBundle {
|
||||
pub fn new(name: impl Into<Cow<'static, str>>, translation: Vec3) -> Self {
|
||||
Self {
|
||||
tee: Tee,
|
||||
name: Name::new(name),
|
||||
spatial_bundle: SpatialBundle {
|
||||
transform: Transform::from_translation(translation),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl TeeBundleChildren {
|
||||
pub fn new(handle: Handle<Image>) -> Self {
|
||||
Self {
|
||||
body: TeePartBundle {
|
||||
sprite: SpriteBundle {
|
||||
texture: handle.clone(),
|
||||
sprite: Sprite {
|
||||
rect: Some(Rect::from_corners(Vec2::ZERO, Vec2::new(96.0, 96.0))),
|
||||
..Default::default()
|
||||
},
|
||||
transform: Transform::from_xyz(0.0, 0.0, 0.5),
|
||||
..default()
|
||||
},
|
||||
marker: Body,
|
||||
name: Name::new("Body"),
|
||||
},
|
||||
left_foot: TeePartBundle {
|
||||
sprite: SpriteBundle {
|
||||
texture: handle.clone(),
|
||||
sprite: Sprite {
|
||||
rect: Some(Rect::new(96.0 * 2.0, 32.0, 96.0 * 2.0 + 64.0, 32.0 + 32.0)),
|
||||
..Default::default()
|
||||
},
|
||||
transform: Transform::from_xyz(-28.0, -5.0, 0.0)
|
||||
.with_rotation(Quat::from_rotation_z(1.7)),
|
||||
..default()
|
||||
},
|
||||
marker: LeftFoot,
|
||||
name: Name::new("LeftFoot"),
|
||||
},
|
||||
right_foot: TeePartBundle {
|
||||
sprite: SpriteBundle {
|
||||
texture: handle,
|
||||
sprite: Sprite {
|
||||
rect: Some(Rect::new(96.0 * 2.0, 32.0, 96.0 * 2.0 + 64.0, 32.0 + 32.0)),
|
||||
..Default::default()
|
||||
},
|
||||
transform: Transform::from_xyz(28.0, -5.0, 0.0)
|
||||
.with_scale(Vec3::new(-1.0, 1.0, 1.0))
|
||||
.with_rotation(Quat::from_rotation_z(-1.7)),
|
||||
..default()
|
||||
},
|
||||
marker: RightFoot,
|
||||
name: Name::new("RightFoot"),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
pub fn add_tee(commands: Commands, handle: Handle<Image>, translation: Vec3, name: &str) {
|
||||
TeeBundle {
|
||||
tee: Tee,
|
||||
name: Name::new(name.to_string()),
|
||||
spatial_bundle: SpatialBundle {
|
||||
transform: Transform::from_translation(translation),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
.spawn(commands, handle);
|
||||
}
|
||||
*/
|