# HG changeset patch # User alfadur # Date 1567026391 -10800 # Node ID 52844baced172db4c2e2457d86dc8fcdcf62c6be # Parent 6e3e5be8b2e21e5c8f8041596a9cb7f6ccb2bc84 add gravity diff -r 6e3e5be8b2e2 -r 52844baced17 rust/hwphysics/src/common.rs --- a/rust/hwphysics/src/common.rs Wed Aug 28 23:06:34 2019 +0300 +++ b/rust/hwphysics/src/common.rs Thu Aug 29 00:06:31 2019 +0300 @@ -1,9 +1,5 @@ use fpnum::FPNum; -use std::{ - collections::BinaryHeap, - num::NonZeroU16, - ops::{Add, Index, IndexMut}, -}; +use std::{collections::BinaryHeap, num::NonZeroU16, ops::Add}; pub type GearId = NonZeroU16; diff -r 6e3e5be8b2e2 -r 52844baced17 rust/hwphysics/src/data.rs --- a/rust/hwphysics/src/data.rs Wed Aug 28 23:06:34 2019 +0300 +++ b/rust/hwphysics/src/data.rs Thu Aug 29 00:06:31 2019 +0300 @@ -2,7 +2,6 @@ use std::{ any::TypeId, fmt::{Debug, Error, Formatter}, - io::Write, mem::{size_of, MaybeUninit}, num::NonZeroU16, ptr::{copy_nonoverlapping, null_mut, NonNull}, diff -r 6e3e5be8b2e2 -r 52844baced17 rust/hwphysics/src/lib.rs --- a/rust/hwphysics/src/lib.rs Wed Aug 28 23:06:34 2019 +0300 +++ b/rust/hwphysics/src/lib.rs Thu Aug 29 00:06:31 2019 +0300 @@ -9,7 +9,7 @@ use land2d::Land2D; use crate::{ - collision::{CollisionData, CollisionProcessor, ContactData}, + collision::CollisionProcessor, common::{GearAllocator, GearId, Millis}, data::GearDataManager, physics::PhysicsProcessor, diff -r 6e3e5be8b2e2 -r 52844baced17 rust/hwphysics/src/physics.rs --- a/rust/hwphysics/src/physics.rs Wed Aug 28 23:06:34 2019 +0300 +++ b/rust/hwphysics/src/physics.rs Thu Aug 29 00:06:31 2019 +0300 @@ -12,10 +12,6 @@ #[repr(transparent)] pub struct VelocityData(pub FPPoint); -pub struct PhysicsProcessor { - position_updates: PositionUpdates, -} - pub struct PositionUpdates { pub gear_ids: Vec, pub shifts: Vec<(FPPoint, FPPoint)>, @@ -48,6 +44,11 @@ } } +pub struct PhysicsProcessor { + gravity: FPNum, + position_updates: PositionUpdates, +} + impl PhysicsProcessor { pub fn register_components(data: &mut GearDataManager) { data.register::(); @@ -56,6 +57,7 @@ pub fn new() -> Self { Self { + gravity: fp!(100), position_updates: PositionUpdates::new(64), } } @@ -68,6 +70,7 @@ |gear_id, (pos, vel): (&mut PositionData, &mut VelocityData)| { if !vel.0.is_zero() { let old_pos = pos.0; + vel.0 -= self.gravity * fp_step; pos.0 += vel.0 * fp_step; self.position_updates.push(gear_id, &old_pos, &pos.0) }