Merge branch 'main' into blenvy
This commit is contained in:
commit
f4e3c948cb
|
@ -89,7 +89,6 @@ pub struct BlueprintsPlugin {
|
||||||
pub library_folder: PathBuf,
|
pub library_folder: PathBuf,
|
||||||
/// Automatically generate aabbs for the blueprints root objects
|
/// Automatically generate aabbs for the blueprints root objects
|
||||||
pub aabbs: bool,
|
pub aabbs: bool,
|
||||||
///
|
|
||||||
pub material_library: bool,
|
pub material_library: bool,
|
||||||
pub material_library_folder: PathBuf,
|
pub material_library_folder: PathBuf,
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,6 +192,7 @@ pub(crate) fn check_for_loaded(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub(crate) fn spawn_from_blueprints(
|
pub(crate) fn spawn_from_blueprints(
|
||||||
spawn_placeholders: Query<
|
spawn_placeholders: Query<
|
||||||
(
|
(
|
||||||
|
@ -295,7 +296,7 @@ pub(crate) fn spawn_from_blueprints(
|
||||||
Animations {
|
Animations {
|
||||||
named_animations,
|
named_animations,
|
||||||
named_indices,
|
named_indices,
|
||||||
graph
|
graph,
|
||||||
},
|
},
|
||||||
Spawned,
|
Spawned,
|
||||||
OriginalChildren(original_children),
|
OriginalChildren(original_children),
|
||||||
|
|
|
@ -32,7 +32,7 @@ pub(crate) fn mark_load_requested(
|
||||||
let mut save_path: String = "".into();
|
let mut save_path: String = "".into();
|
||||||
for load_request in load_requests.read() {
|
for load_request in load_requests.read() {
|
||||||
if !load_request.path.is_empty() {
|
if !load_request.path.is_empty() {
|
||||||
save_path = load_request.path.clone();
|
save_path.clone_from(&load_request.path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !save_path.is_empty() {
|
if !save_path.is_empty() {
|
||||||
|
|
|
@ -80,7 +80,7 @@ pub(crate) fn save_game(world: &mut World) {
|
||||||
|
|
||||||
for event in events.get_reader().read(&events) {
|
for event in events.get_reader().read(&events) {
|
||||||
info!("SAVE EVENT !! {:?}", event);
|
info!("SAVE EVENT !! {:?}", event);
|
||||||
save_path = event.path.clone();
|
save_path.clone_from(&event.path);
|
||||||
}
|
}
|
||||||
events.clear();
|
events.clear();
|
||||||
|
|
||||||
|
|
|
@ -1,54 +1,8 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy::render::mesh::{MeshVertexAttributeId, PrimitiveTopology, VertexAttributeValues};
|
use bevy::render::mesh::PrimitiveTopology;
|
||||||
// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/src/util/trait_extension.rs
|
// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/src/util/trait_extension.rs
|
||||||
|
|
||||||
pub(crate) trait Vec3Ext: Copy {
|
|
||||||
fn is_approx_zero(self) -> bool;
|
|
||||||
fn split(self, up: Vec3) -> SplitVec3;
|
|
||||||
}
|
|
||||||
impl Vec3Ext for Vec3 {
|
|
||||||
#[inline]
|
|
||||||
fn is_approx_zero(self) -> bool {
|
|
||||||
self.length_squared() < 1e-5
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn split(self, up: Vec3) -> SplitVec3 {
|
|
||||||
let vertical = up * self.dot(up);
|
|
||||||
let horizontal = self - vertical;
|
|
||||||
SplitVec3 {
|
|
||||||
vertical,
|
|
||||||
horizontal,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
|
||||||
pub(crate) struct SplitVec3 {
|
|
||||||
pub(crate) vertical: Vec3,
|
|
||||||
pub(crate) horizontal: Vec3,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) trait Vec2Ext: Copy {
|
|
||||||
fn is_approx_zero(self) -> bool;
|
|
||||||
fn x0y(self) -> Vec3;
|
|
||||||
}
|
|
||||||
impl Vec2Ext for Vec2 {
|
|
||||||
#[inline]
|
|
||||||
fn is_approx_zero(self) -> bool {
|
|
||||||
self.length_squared() < 1e-5
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn x0y(self) -> Vec3 {
|
|
||||||
Vec3::new(self.x, 0., self.y)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) trait MeshExt {
|
pub(crate) trait MeshExt {
|
||||||
fn transform(&mut self, transform: Transform);
|
|
||||||
fn transformed(&self, transform: Transform) -> Mesh;
|
|
||||||
fn read_coords_mut(&mut self, id: impl Into<MeshVertexAttributeId>) -> &mut Vec<[f32; 3]>;
|
|
||||||
fn search_in_children<'a>(
|
fn search_in_children<'a>(
|
||||||
parent: Entity,
|
parent: Entity,
|
||||||
children: &'a Query<&Children>,
|
children: &'a Query<&Children>,
|
||||||
|
@ -58,37 +12,6 @@ pub(crate) trait MeshExt {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MeshExt for Mesh {
|
impl MeshExt for Mesh {
|
||||||
fn transform(&mut self, transform: Transform) {
|
|
||||||
for coords in self.read_coords_mut(Mesh::ATTRIBUTE_POSITION.clone()) {
|
|
||||||
let vec3 = (*coords).into();
|
|
||||||
let transformed = transform.transform_point(vec3);
|
|
||||||
*coords = transformed.into();
|
|
||||||
}
|
|
||||||
for normal in self.read_coords_mut(Mesh::ATTRIBUTE_NORMAL.clone()) {
|
|
||||||
let vec3 = (*normal).into();
|
|
||||||
let transformed = transform.rotation.mul_vec3(vec3);
|
|
||||||
*normal = transformed.into();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn transformed(&self, transform: Transform) -> Mesh {
|
|
||||||
let mut mesh = self.clone();
|
|
||||||
mesh.transform(transform);
|
|
||||||
mesh
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_coords_mut(&mut self, id: impl Into<MeshVertexAttributeId>) -> &mut Vec<[f32; 3]> {
|
|
||||||
// Guaranteed by Bevy for the current usage
|
|
||||||
match self
|
|
||||||
.attribute_mut(id)
|
|
||||||
.expect("Failed to read unknown mesh attribute")
|
|
||||||
{
|
|
||||||
VertexAttributeValues::Float32x3(values) => values,
|
|
||||||
// Guaranteed by Bevy for the current usage
|
|
||||||
_ => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn search_in_children<'a>(
|
fn search_in_children<'a>(
|
||||||
parent: Entity,
|
parent: Entity,
|
||||||
children_query: &'a Query<&Children>,
|
children_query: &'a Query<&Children>,
|
||||||
|
@ -125,51 +48,3 @@ impl MeshExt for Mesh {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) trait F32Ext: Copy {
|
|
||||||
fn is_approx_zero(self) -> bool;
|
|
||||||
fn squared(self) -> f32;
|
|
||||||
fn lerp(self, other: f32, ratio: f32) -> f32;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl F32Ext for f32 {
|
|
||||||
#[inline]
|
|
||||||
fn is_approx_zero(self) -> bool {
|
|
||||||
self.abs() < 1e-5
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn squared(self) -> f32 {
|
|
||||||
self * self
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn lerp(self, other: f32, ratio: f32) -> f32 {
|
|
||||||
self.mul_add(1. - ratio, other * ratio)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) trait TransformExt: Copy {
|
|
||||||
fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform;
|
|
||||||
fn lerp(self, other: Transform, ratio: f32) -> Transform;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TransformExt for Transform {
|
|
||||||
fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform {
|
|
||||||
let direction = target - self.translation;
|
|
||||||
let horizontal_direction = direction - up * direction.dot(up);
|
|
||||||
let look_target = self.translation + horizontal_direction;
|
|
||||||
self.looking_at(look_target, up)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn lerp(self, other: Transform, ratio: f32) -> Transform {
|
|
||||||
let translation = self.translation.lerp(other.translation, ratio);
|
|
||||||
let rotation = self.rotation.slerp(other.rotation, ratio);
|
|
||||||
let scale = self.scale.lerp(other.scale, ratio);
|
|
||||||
Transform {
|
|
||||||
translation,
|
|
||||||
rotation,
|
|
||||||
scale,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,54 +1,8 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy::render::mesh::{MeshVertexAttributeId, PrimitiveTopology, VertexAttributeValues};
|
use bevy::render::mesh::PrimitiveTopology;
|
||||||
// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/src/util/trait_extension.rs
|
// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/src/util/trait_extension.rs
|
||||||
|
|
||||||
pub(crate) trait Vec3Ext: Copy {
|
|
||||||
fn is_approx_zero(self) -> bool;
|
|
||||||
fn split(self, up: Vec3) -> SplitVec3;
|
|
||||||
}
|
|
||||||
impl Vec3Ext for Vec3 {
|
|
||||||
#[inline]
|
|
||||||
fn is_approx_zero(self) -> bool {
|
|
||||||
self.length_squared() < 1e-5
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn split(self, up: Vec3) -> SplitVec3 {
|
|
||||||
let vertical = up * self.dot(up);
|
|
||||||
let horizontal = self - vertical;
|
|
||||||
SplitVec3 {
|
|
||||||
vertical,
|
|
||||||
horizontal,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
|
||||||
pub(crate) struct SplitVec3 {
|
|
||||||
pub(crate) vertical: Vec3,
|
|
||||||
pub(crate) horizontal: Vec3,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) trait Vec2Ext: Copy {
|
|
||||||
fn is_approx_zero(self) -> bool;
|
|
||||||
fn x0y(self) -> Vec3;
|
|
||||||
}
|
|
||||||
impl Vec2Ext for Vec2 {
|
|
||||||
#[inline]
|
|
||||||
fn is_approx_zero(self) -> bool {
|
|
||||||
self.length_squared() < 1e-5
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn x0y(self) -> Vec3 {
|
|
||||||
Vec3::new(self.x, 0., self.y)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) trait MeshExt {
|
pub(crate) trait MeshExt {
|
||||||
fn transform(&mut self, transform: Transform);
|
|
||||||
fn transformed(&self, transform: Transform) -> Mesh;
|
|
||||||
fn read_coords_mut(&mut self, id: impl Into<MeshVertexAttributeId>) -> &mut Vec<[f32; 3]>;
|
|
||||||
fn search_in_children<'a>(
|
fn search_in_children<'a>(
|
||||||
parent: Entity,
|
parent: Entity,
|
||||||
children: &'a Query<&Children>,
|
children: &'a Query<&Children>,
|
||||||
|
@ -58,37 +12,6 @@ pub(crate) trait MeshExt {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MeshExt for Mesh {
|
impl MeshExt for Mesh {
|
||||||
fn transform(&mut self, transform: Transform) {
|
|
||||||
for coords in self.read_coords_mut(Mesh::ATTRIBUTE_POSITION.clone()) {
|
|
||||||
let vec3 = (*coords).into();
|
|
||||||
let transformed = transform.transform_point(vec3);
|
|
||||||
*coords = transformed.into();
|
|
||||||
}
|
|
||||||
for normal in self.read_coords_mut(Mesh::ATTRIBUTE_NORMAL.clone()) {
|
|
||||||
let vec3 = (*normal).into();
|
|
||||||
let transformed = transform.rotation.mul_vec3(vec3);
|
|
||||||
*normal = transformed.into();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn transformed(&self, transform: Transform) -> Mesh {
|
|
||||||
let mut mesh = self.clone();
|
|
||||||
mesh.transform(transform);
|
|
||||||
mesh
|
|
||||||
}
|
|
||||||
|
|
||||||
fn read_coords_mut(&mut self, id: impl Into<MeshVertexAttributeId>) -> &mut Vec<[f32; 3]> {
|
|
||||||
// Guaranteed by Bevy for the current usage
|
|
||||||
match self
|
|
||||||
.attribute_mut(id)
|
|
||||||
.expect("Failed to read unknown mesh attribute")
|
|
||||||
{
|
|
||||||
VertexAttributeValues::Float32x3(values) => values,
|
|
||||||
// Guaranteed by Bevy for the current usage
|
|
||||||
_ => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn search_in_children<'a>(
|
fn search_in_children<'a>(
|
||||||
parent: Entity,
|
parent: Entity,
|
||||||
children_query: &'a Query<&Children>,
|
children_query: &'a Query<&Children>,
|
||||||
|
@ -125,51 +48,3 @@ impl MeshExt for Mesh {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) trait F32Ext: Copy {
|
|
||||||
fn is_approx_zero(self) -> bool;
|
|
||||||
fn squared(self) -> f32;
|
|
||||||
fn lerp(self, other: f32, ratio: f32) -> f32;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl F32Ext for f32 {
|
|
||||||
#[inline]
|
|
||||||
fn is_approx_zero(self) -> bool {
|
|
||||||
self.abs() < 1e-5
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn squared(self) -> f32 {
|
|
||||||
self * self
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn lerp(self, other: f32, ratio: f32) -> f32 {
|
|
||||||
self.mul_add(1. - ratio, other * ratio)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(crate) trait TransformExt: Copy {
|
|
||||||
fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform;
|
|
||||||
fn lerp(self, other: Transform, ratio: f32) -> Transform;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TransformExt for Transform {
|
|
||||||
fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform {
|
|
||||||
let direction = target - self.translation;
|
|
||||||
let horizontal_direction = direction - up * direction.dot(up);
|
|
||||||
let look_target = self.translation + horizontal_direction;
|
|
||||||
self.looking_at(look_target, up)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn lerp(self, other: Transform, ratio: f32) -> Transform {
|
|
||||||
let translation = self.translation.lerp(other.translation, ratio);
|
|
||||||
let rotation = self.rotation.slerp(other.rotation, ratio);
|
|
||||||
let scale = self.scale.lerp(other.scale, ratio);
|
|
||||||
Transform {
|
|
||||||
translation,
|
|
||||||
rotation,
|
|
||||||
scale,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue