use core::ffi::c_float;
use sys::ffi::CollisionPoint;
use sys::ffi::CollisionVector;
use sys::ffi::PDRect;
use sys::ffi::SpriteCollisionInfo;
use sys::ffi::SpriteCollisionResponseType;
use sys::ffi::SpriteQueryInfo;
use crate::SpriteRef;
pub trait SpriteQueryInfoExt {
fn sprite(&self) -> SpriteRef;
fn ti1(&self) -> c_float;
fn ti2(&self) -> c_float;
fn entry_point(&self) -> &CollisionPoint;
fn entry_point_mut(&mut self) -> &mut CollisionPoint;
fn exit_point(&self) -> &CollisionPoint;
fn exit_point_mut(&mut self) -> &mut CollisionPoint;
}
impl SpriteQueryInfoExt for SpriteQueryInfo {
fn sprite(&self) -> SpriteRef { self.sprite.into() }
fn ti1(&self) -> c_float { self.ti1 }
fn ti2(&self) -> c_float { self.ti2 }
fn entry_point(&self) -> &CollisionPoint { &self.entryPoint }
fn entry_point_mut(&mut self) -> &mut CollisionPoint { &mut self.entryPoint }
fn exit_point(&self) -> &CollisionPoint { &self.exitPoint }
fn exit_point_mut(&mut self) -> &mut CollisionPoint { &mut self.exitPoint }
}
trait SpriteCollisionInfoExt {
fn sprite(&self) -> SpriteRef;
fn other(&self) -> SpriteRef;
fn response_type(&self) -> SpriteCollisionResponseType;
fn overlaps(&self) -> bool;
fn ti(&self) -> c_float;
fn diff(&self) -> &CollisionPoint;
fn normal(&self) -> &CollisionVector;
fn touch(&self) -> &CollisionPoint;
fn sprite_rect(&self) -> &PDRect;
fn other_rect(&self) -> &PDRect;
}
impl SpriteCollisionInfoExt for SpriteCollisionInfo {
fn sprite(&self) -> SpriteRef { self.sprite.into() }
fn other(&self) -> SpriteRef { self.other.into() }
fn response_type(&self) -> SpriteCollisionResponseType { self.responseType }
fn overlaps(&self) -> bool { self.overlaps != 0 }
fn ti(&self) -> c_float { self.ti }
fn diff(&self) -> &CollisionPoint { &self.move_ }
fn normal(&self) -> &CollisionVector { &self.normal }
fn touch(&self) -> &CollisionPoint { &self.touch }
fn sprite_rect(&self) -> &PDRect { &self.spriteRect }
fn other_rect(&self) -> &PDRect { &self.otherRect }
}
pub trait SpriteCollisionResponseTypeExt {
#![allow(non_upper_case_globals)]
const Slide: SpriteCollisionResponseType = SpriteCollisionResponseType::kCollisionTypeSlide;
const Freeze: SpriteCollisionResponseType = SpriteCollisionResponseType::kCollisionTypeFreeze;
const Overlap: SpriteCollisionResponseType = SpriteCollisionResponseType::kCollisionTypeOverlap;
const Bounce: SpriteCollisionResponseType = SpriteCollisionResponseType::kCollisionTypeBounce;
}
impl SpriteCollisionResponseTypeExt for SpriteCollisionResponseType {}