Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions amethyst_animation/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ fnv = "1"
hibitset = { version = "0.5.1", features = ["parallel"] }
itertools = "0.7.8"
log = "0.4"
num-traits = "0.2"
minterpolate = { version = "0.4", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }

Expand Down
1 change: 1 addition & 0 deletions amethyst_animation/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ extern crate itertools;
#[macro_use]
extern crate log;
extern crate minterpolate;
extern crate num_traits;
#[macro_use]
extern crate serde;

Expand Down
2 changes: 1 addition & 1 deletion amethyst_animation/src/skinning/resources.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use hibitset::BitSet;

use amethyst_assets::{PrefabData, PrefabError, ProgressCounter};
use amethyst_core::{
cgmath::{Matrix4, SquareMatrix},
nalgebra::Matrix4,
specs::prelude::{Component, DenseVecStorage, Entity, WriteStorage},
};
use amethyst_renderer::JointTransformsPrefab;
Expand Down
5 changes: 2 additions & 3 deletions amethyst_animation/src/skinning/systems.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use amethyst_core::{
cgmath::SquareMatrix,
specs::prelude::{
BitSet, InsertedFlag, Join, ModifiedFlag, ReadStorage, ReaderId, Resources, System,
WriteStorage,
Expand Down Expand Up @@ -96,7 +95,7 @@ impl<'a> System<'a> for VertexSkinningSystem {
// update the joint matrices in all referenced mesh entities
for (_, mesh_global, matrix) in (&skin.meshes, &global_transforms, &mut matrices).join()
{
if let Some(global_inverse) = mesh_global.0.invert() {
if let Some(global_inverse) = mesh_global.0.try_inverse() {
matrix.matrices.clear();
matrix
.matrices
Expand All @@ -110,7 +109,7 @@ impl<'a> System<'a> for VertexSkinningSystem {
for (_, mesh_global, mut joint_transform) in
(&self.updated, &global_transforms, &mut matrices).join()
{
if let Some(global_inverse) = mesh_global.0.invert() {
if let Some(global_inverse) = mesh_global.0.try_inverse() {
let skin = skins.get(joint_transform.skin).unwrap();
joint_transform.matrices.clear();
joint_transform
Expand Down
15 changes: 10 additions & 5 deletions amethyst_animation/src/transform.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use amethyst_core::{
cgmath::{InnerSpace, Quaternion, Vector3},
nalgebra::{Quaternion, Unit, Vector3},
Transform,
};

Expand Down Expand Up @@ -33,8 +33,10 @@ impl AnimationSampling for Transform {
use self::TransformChannel::*;

match (channel, *data) {
(&Translation, Vec3(ref d)) => self.translation = Vector3::from(*d),
(&Rotation, Vec4(ref d)) => self.rotation = Quaternion::from(*d).normalize(),
(&Translation, Vec3(ref d)) => *self.translation_mut() = Vector3::from(*d),
(&Rotation, Vec4(ref d)) => {
*self.rotation_mut() = Unit::new_normalize(Quaternion::new(d[0], d[1], d[2], d[3]))
}
(&Scale, Vec3(ref d)) => self.scale = Vector3::from(*d),
_ => panic!("Attempt to apply invalid sample to Transform"),
}
Expand All @@ -43,8 +45,11 @@ impl AnimationSampling for Transform {
fn current_sample(&self, channel: &Self::Channel, _: &()) -> SamplerPrimitive<f32> {
use self::TransformChannel::*;
match channel {
Translation => SamplerPrimitive::Vec3(self.translation.into()),
Rotation => SamplerPrimitive::Vec4(self.rotation.into()),
Translation => SamplerPrimitive::Vec3((*self.translation()).into()),
Rotation => SamplerPrimitive::Vec4({
let c = self.rotation().as_ref().coords;
[c.w, c.x, c.y, c.z]
}),
Scale => SamplerPrimitive::Vec3(self.scale.into()),
}
}
Expand Down
15 changes: 8 additions & 7 deletions amethyst_animation/src/util.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use minterpolate::InterpolationPrimitive;
use num_traits::cast::{NumCast, ToPrimitive};

use amethyst_core::{
cgmath::{num_traits::NumCast, BaseNum},
nalgebra::Real,
specs::prelude::{Entity, WriteStorage},
};

Expand Down Expand Up @@ -35,7 +36,7 @@ where
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
pub enum SamplerPrimitive<S>
where
S: BaseNum,
S: Real,
{
/// A single value
Scalar(S),
Expand All @@ -49,7 +50,7 @@ where

impl<S> From<[S; 2]> for SamplerPrimitive<S>
where
S: BaseNum,
S: Real,
{
fn from(arr: [S; 2]) -> Self {
SamplerPrimitive::Vec2(arr)
Expand All @@ -58,7 +59,7 @@ where

impl<S> From<[S; 3]> for SamplerPrimitive<S>
where
S: BaseNum,
S: Real,
{
fn from(arr: [S; 3]) -> Self {
SamplerPrimitive::Vec3(arr)
Expand All @@ -67,7 +68,7 @@ where

impl<S> From<[S; 4]> for SamplerPrimitive<S>
where
S: BaseNum,
S: Real,
{
fn from(arr: [S; 4]) -> Self {
SamplerPrimitive::Vec4(arr)
Expand All @@ -76,7 +77,7 @@ where

impl<S> InterpolationPrimitive for SamplerPrimitive<S>
where
S: BaseNum,
S: Real + ToPrimitive + NumCast,
{
fn add(&self, other: &Self) -> Self {
match (*self, *other) {
Expand Down Expand Up @@ -155,7 +156,7 @@ where

fn mul_f32<T>(s: T, scalar: f32) -> T
where
T: BaseNum,
T: Real + ToPrimitive + NumCast,
{
NumCast::from(s.to_f32().unwrap() * scalar).unwrap()
}
6 changes: 3 additions & 3 deletions amethyst_audio/src/components/audio_listener.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use amethyst_core::{
cgmath::Point3,
nalgebra::Vector3,
specs::{prelude::Component, storage::HashMapStorage},
};

Expand All @@ -11,9 +11,9 @@ pub struct AudioListener {
/// Output used by this listener to emit sounds to
pub output: Output,
/// Position of the left ear relative to the global transform on this entity.
pub left_ear: Point3<f32>,
pub left_ear: Vector3<f32>,
/// Position of the right ear relative to the global transform on this entity.
pub right_ear: Point3<f32>,
pub right_ear: Vector3<f32>,
}

impl Component for AudioListener {
Expand Down
4 changes: 2 additions & 2 deletions amethyst_audio/src/components/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pub use self::{audio_emitter::AudioEmitter, audio_listener::AudioListener};

use amethyst_assets::{PrefabData, PrefabError};
use amethyst_core::{
cgmath::Point3,
nalgebra::Vector3,
specs::prelude::{Entity, Read, WriteStorage},
};

Expand All @@ -20,7 +20,7 @@ mod audio_listener;
pub struct AudioPrefab {
emitter: bool,
/// Left, Right
listener: Option<(Point3<f32>, Point3<f32>)>,
listener: Option<(Vector3<f32>, Vector3<f32>)>,
}

impl<'a> PrefabData<'a> for AudioPrefab {
Expand Down
24 changes: 10 additions & 14 deletions amethyst_audio/src/systems/audio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ use std::{
use rodio::SpatialSink;

use amethyst_core::{
cgmath::Transform,
specs::prelude::{Entities, Entity, Join, Read, ReadStorage, System, WriteStorage},
transform::GlobalTransform,
};
Expand Down Expand Up @@ -62,23 +61,20 @@ impl<'a> System<'a> for AudioSystem {
.and_then(|sl| transform.get(sl.0))
.or_else(|| transform.get(entity))
{
let listener_transform = listener_transform.0;
let left_ear_position =
listener_transform.transform_point(listener.left_ear).into();
let right_ear_position = listener_transform
.transform_point(listener.right_ear)
.into();
let listener_transform = listener_transform.0.column(3).xyz();
let left_ear_position = listener_transform + listener.left_ear;
let right_ear_position = listener_transform + listener.right_ear;
for (transform, mut audio_emitter) in (&transform, &mut audio_emitter).join() {
let x = transform.0[3][0];
let y = transform.0[3][1];
let z = transform.0[3][2];
let x = transform.0[(0, 3)];
let y = transform.0[(1, 3)];
let z = transform.0[(2, 3)];
let emitter_position = [x, y, z];
// Remove all sinks whose sounds have ended.
audio_emitter.sinks.retain(|s| !s.1.load(Ordering::Relaxed));
for &mut (ref mut sink, _) in &mut audio_emitter.sinks {
sink.set_emitter_position(emitter_position);
sink.set_left_ear_position(left_ear_position);
sink.set_right_ear_position(right_ear_position);
sink.set_left_ear_position(left_ear_position.into());
sink.set_right_ear_position(right_ear_position.into());
}
if audio_emitter.sinks.is_empty() {
if let Some(mut picker) = replace(&mut audio_emitter.picker, None) {
Expand All @@ -91,8 +87,8 @@ impl<'a> System<'a> for AudioSystem {
let sink = SpatialSink::new(
&listener.output.device,
emitter_position,
left_ear_position,
right_ear_position,
left_ear_position.into(),
right_ear_position.into(),
);
let atomic_bool = Arc::new(AtomicBool::new(false));
let clone = atomic_bool.clone();
Expand Down
21 changes: 11 additions & 10 deletions amethyst_controls/src/systems.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use std::{hash::Hash, marker::PhantomData};
use winit::{DeviceEvent, Event, WindowEvent};

use amethyst_core::{
cgmath::{Deg, Vector3},
nalgebra::{Unit, Vector3},
shrev::{EventChannel, ReaderId},
specs::prelude::{Join, Read, ReadStorage, Resources, System, Write, WriteStorage},
timing::Time,
Expand Down Expand Up @@ -70,10 +70,10 @@ where
let y = get_input_axis_simple(&self.up_input_axis, &input);
let z = get_input_axis_simple(&self.forward_input_axis, &input);

let dir = Vector3::new(x, y, z);

for (transform, _) in (&mut transform, &tag).join() {
transform.move_along_local(dir, time.delta_seconds() * self.speed);
if let Some(dir) = Unit::try_new(Vector3::new(x, y, z), 1.0e-6) {
for (transform, _) in (&mut transform, &tag).join() {
transform.move_along_local(dir, time.delta_seconds() * self.speed);
}
}
}
}
Expand All @@ -95,14 +95,14 @@ impl<'a> System<'a> for ArcBallRotationSystem {
fn run(&mut self, (mut transforms, tags): Self::SystemData) {
let mut position = None;
for (transform, arc_ball_camera_tag) in (&transforms, &tags).join() {
let pos_vec = transform.rotation * -Vector3::unit_z() * arc_ball_camera_tag.distance;
let pos_vec = transform.rotation() * -Vector3::z() * arc_ball_camera_tag.distance;
if let Some(target_transform) = transforms.get(arc_ball_camera_tag.target) {
position = Some(target_transform.translation - pos_vec);
position = Some(target_transform.translation() - pos_vec);
}
}
if let Some(new_pos) = position {
for (transform, _) in (&mut transforms, &tags).join() {
transform.translation = new_pos;
*transform.translation_mut() = new_pos;
}
}
}
Expand Down Expand Up @@ -155,8 +155,9 @@ where
if let Event::DeviceEvent { ref event, .. } = *event {
if let DeviceEvent::MouseMotion { delta: (x, y) } = *event {
for (transform, _) in (&mut transform, &tag).join() {
transform.pitch_local(Deg((-1.0) * y as f32 * self.sensitivity_y));
transform.yaw_global(Deg((-1.0) * x as f32 * self.sensitivity_x));
use std::f32::consts::PI;
transform.pitch_local(-y as f32 * self.sensitivity_y * PI / 180.0);
transform.yaw_global(-x as f32 * self.sensitivity_x * PI / 180.0);
}
}
}
Expand Down
5 changes: 4 additions & 1 deletion amethyst_core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ appveyor = { repository = "amethyst/amethyst" }
travis-ci = { repository = "amethyst/amethyst" }

[dependencies]
cgmath = { version = "0.16", features = ["serde", "mint"] }
nalgebra = { version = "0.16.7", features = ["serde-serialize", "mint"] }
approx = "0.3"
nalgebra-glm = "0.2"
error-chain = "0.12"
fnv = "1"
hibitset = { version = "0.5.2", features = ["parallel"] }
Expand All @@ -31,6 +33,7 @@ thread_profiler = { version = "0.3" , optional = true }

[dev-dependencies]
amethyst = { path = "..", version = "0.9.0" }
serde_test = "1"

[features]
profiler = [ "thread_profiler/thread_profiler" ]
Expand Down
7 changes: 5 additions & 2 deletions amethyst_core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

#![warn(missing_docs)]

#[macro_use]
pub extern crate cgmath;
pub extern crate nalgebra;
pub extern crate nalgebra_glm;
pub extern crate shred;
pub extern crate shrev;
pub extern crate specs;
Expand All @@ -22,6 +22,9 @@ extern crate specs_hierarchy;
#[cfg(feature = "profiler")]
extern crate thread_profiler;

#[cfg(test)]
extern crate serde_test;

#[cfg(all(target_os = "emscripten", not(no_threading)))]
compile_error!("the cfg flag \"no_threading\" is required when building for emscripten");

Expand Down
14 changes: 7 additions & 7 deletions amethyst_core/src/orientation.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Orientation of objects

use cgmath::{Matrix3, Vector3};
use nalgebra::{Matrix3, Vector3};

/// This struct contains 3 unit vectors pointing in the given directions.
///
Expand All @@ -22,9 +22,9 @@ impl From<Matrix3<f32>> for Orientation {
/// Reverses the z axis matching the GL coordinate system.
fn from(mat: Matrix3<f32>) -> Self {
Orientation {
forward: -mat.z,
right: mat.x,
up: mat.y,
forward: -mat.column(0),
right: mat.column(1).into(),
up: mat.column(2).into(),
}
}
}
Expand All @@ -33,9 +33,9 @@ impl Default for Orientation {
fn default() -> Self {
// Signs depend on coordinate system
Self {
forward: -Vector3::unit_z(),
right: Vector3::unit_x(),
up: Vector3::unit_y(),
forward: -Vector3::z(),
right: Vector3::x(),
up: Vector3::y(),
}
}
}
Loading