New collision detection

This commit is contained in:
2021-03-13 15:05:16 +01:00
parent 258ce51cfe
commit d2cf54556e
12 changed files with 186 additions and 125 deletions
+46 -5
View File
@@ -3,6 +3,7 @@
#include "sdlpp_common.hpp"
#include "sdlpp_vector.hpp"
#include <iostream>
namespace SDLPP {
template<typename T>
@@ -11,14 +12,38 @@ public:
Line() = delete;
~Line() = default;
Line( const Vec2D<T> &start, const Vec2D<T> &end )
: _start( start ), _end( end ) {}
: _start( start ), _end( end ) {
updateMost();
}
Line( T x_1, T y_1, T x_2, T y_2 )
: _start( { x_1, y_1 } ), _end( { x_2, y_2 } ) {}
: Line( { x_1, y_1 }, { x_2, y_2 } ) {}
Line( const Vec2D<T> &start, const Vec2D<T> &end, bool infinite )
: _start( start ), _end( end ), _infinite( infinite ) {}
: Line( start, end ), _infinite( infinite ) {}
Line( T x_1, T y_1, T x_2, T y_2, bool infinite )
: _start( { x_1, y_1 } ), _end( { x_2, y_2 } ),
_infinite( infinite ) {}
: Line( { x_1, y_1 }, { x_2, y_2 }, infinite ) {}
Line(const Line &input) : Line(input.getStart(), input.getEnd()) {}
Line &operator=(const Line &input) {
_start = input.getStart();
_end = input.getEnd();
updateMost();
return *this;
}
void updateMost() {
if(_start.getY() < _end.getY()) {
top = &_start;
bottom = &_end;
} else {
top = &_end;
bottom = &_start;
}
if(_start.getX() < _end.getX()) {
left = &_start;
right = &_end;
} else {
left = &_end;
right = &_start;
}
}
const Vec2D<T> &getStart() const {
return _start;
}
@@ -41,10 +66,26 @@ public:
_start += vec;
_end += vec;
}
const Vec2D<T> &topmost() const {
return *top;
}
const Vec2D<T> &bottomost() const {
return *bottom;
}
const Vec2D<T> &leftmost() const {
return *left;
}
const Vec2D<T> &rightmost() const {
return *right;
}
private:
Vec2D<T> _start;
Vec2D<T> _end;
Vec2D<T> *top = nullptr;
Vec2D<T> *bottom = nullptr;
Vec2D<T> *left = nullptr;
Vec2D<T> *right = nullptr;
bool _infinite = false;
};
} // namespace SDLPP