box2d_rs/private/dynamics/contacts/
b2_circle_contact.rs

1use crate::b2_contact::*;
2use crate::b2_common::*;
3use crate::b2rs_common::UserDataType;
4use crate::b2_collision::*;
5use crate::b2_math::*;
6use crate::b2_fixture::*;
7use crate::b2_shape::*;
8use std::rc::Rc;
9use std::cell::RefCell;
10
11pub(crate) struct B2circleContact<D: UserDataType>
12{
13	base: B2contact<D>,
14}
15
16impl<D: UserDataType> B2circleContact<D>
17{
18	pub fn create(fixture_a: FixturePtr<D>, index_a: i32, fixture_b: FixturePtr<D>, index_b: i32) -> ContactPtr<D>
19	 {
20		return Rc::new(RefCell::new(B2circleContact::new(fixture_a,index_a, fixture_b, index_b)));
21	}
22
23	pub fn new(fixture_a: FixturePtr<D>, index_a: i32, fixture_b: FixturePtr<D>, index_b: i32) -> Self
24	{
25		b2_assert(fixture_a.as_ref().borrow().get_type() == B2ShapeType::ECircle);
26		b2_assert(fixture_b.as_ref().borrow().get_type() == B2ShapeType::ECircle);
27
28		return Self{
29			base: B2contact::new(fixture_a, index_a, fixture_b, index_b)
30		};
31	}
32}
33
34impl<D: UserDataType> B2contactDynTrait<D> for B2circleContact<D>
35{
36	fn get_base<'a>(&'a self) -> &'a B2contact<D>
37	{
38		return &self.base;
39	}
40	fn get_base_mut<'a>(&'a mut self) -> &'a mut B2contact<D>
41	{
42		return &mut self.base;
43	}
44
45	fn evaluate(&self, manifold: &mut B2manifold, xf_a: &B2Transform, xf_b: &B2Transform)
46	{
47		let circle_shape1 = self.base.m_fixture_a.as_ref().borrow().get_shape();
48		 let circle1 = circle_shape1.as_circle().unwrap();
49		 let circle_shape2 = self.base.m_fixture_b.as_ref().borrow().get_shape();
50		 let circle2 = circle_shape2.as_circle().unwrap();
51		 b2_collide_circles(manifold, circle1, xf_a, circle2, xf_b);
52	}	
53}