New collision detection
This commit is contained in:
+24
-26
@@ -62,29 +62,27 @@ void RectColider::updateCollision( int x, int y, int w, int h ) {
|
||||
_size_pixel = Vec2D< int >( width() * w, height() * h );
|
||||
}
|
||||
|
||||
void RectColider::render( Renderer &renderer,
|
||||
const std::tuple< int, int, int, int > &color ) {
|
||||
void RectColider::render( Renderer &renderer, const SDL_Color &color,
|
||||
const SDL_Color &outline_color ) {
|
||||
auto rect = getRect();
|
||||
// outline with desired color at 50% opacity
|
||||
SDL_SetRenderDrawColor( renderer.getRendererPtr(), std::get< 0 >( color ),
|
||||
std::get< 1 >( color ), std::get< 2 >( color ),
|
||||
0x80 );
|
||||
SDL_RenderDrawRect( renderer.getRendererPtr(), &rect );
|
||||
// fill with desired color at 25% opacity
|
||||
SDL_SetRenderDrawColor( renderer.getRendererPtr(), std::get< 0 >( color ),
|
||||
std::get< 1 >( color ), std::get< 2 >( color ),
|
||||
0x40 );
|
||||
SDL_SetRenderDrawColor( renderer.getRendererPtr(), color.r, color.g,
|
||||
color.b, color.a );
|
||||
SDL_RenderFillRect( renderer.getRendererPtr(), &rect );
|
||||
SDL_SetRenderDrawColor( renderer.getRendererPtr(), outline_color.r,
|
||||
outline_color.g, outline_color.b, outline_color.a );
|
||||
SDL_RenderDrawRect( renderer.getRendererPtr(), &rect );
|
||||
}
|
||||
|
||||
void RectColider::render( Renderer &renderer, const SDL_Color &color ) {
|
||||
auto input_color = color;
|
||||
auto outline_color = color;
|
||||
input_color.a = 0x40;
|
||||
outline_color.a = 0x80;
|
||||
render( renderer, input_color, outline_color );
|
||||
}
|
||||
|
||||
void RectColider::render( Renderer &renderer ) {
|
||||
auto rect = getRect();
|
||||
SDL_SetRenderDrawColor( renderer.getRendererPtr(), sdl_color.r, sdl_color.g,
|
||||
sdl_color.b, sdl_color.a );
|
||||
SDL_RenderFillRect( renderer.getRendererPtr(), &rect );
|
||||
SDL_SetRenderDrawColor( renderer.getRendererPtr(), sdl_outline.r,
|
||||
sdl_outline.g, sdl_outline.b, sdl_outline.a );
|
||||
SDL_RenderDrawRect( renderer.getRendererPtr(), &rect );
|
||||
render( renderer, sdl_color, sdl_outline );
|
||||
}
|
||||
|
||||
SDL_Rect RectColider::getRect() {
|
||||
@@ -111,14 +109,14 @@ std::shared_ptr< CollisionPolygon > RectColider::copySelf() {
|
||||
return std::make_shared< RectColider >( *this );
|
||||
}
|
||||
|
||||
std::vector< Line< double > > RectColider::getLines() {
|
||||
std::vector< Line< double > > ret{};
|
||||
ret.emplace_back( original, original + Vec2D< double >( width(), 0 ) );
|
||||
ret.emplace_back( original + Vec2D< double >( width(), 0 ),
|
||||
original + _size );
|
||||
ret.emplace_back( original, original + Vec2D< double >( 0, height() ) );
|
||||
ret.emplace_back( original + Vec2D< double >( 0, height() ),
|
||||
original + _size );
|
||||
std::vector< Line< int > > RectColider::getLines() const {
|
||||
std::vector< Line< int > > ret{};
|
||||
ret.emplace_back( position, position + Vec2D< int >( pixel_width(), 0 ) );
|
||||
ret.emplace_back( position + Vec2D< int >( pixel_width(), 0 ),
|
||||
position + _size_pixel );
|
||||
ret.emplace_back( position, position + Vec2D< int >( 0, pixel_height() ) );
|
||||
ret.emplace_back( position + Vec2D< int >( 0, pixel_height() ),
|
||||
position + _size_pixel );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user