Add line collision checking to geom2d functions.
This commit is contained in:
parent
60c8317b20
commit
5a8527f51b
@ -831,13 +831,10 @@ void Crawler::LoadLevel(MapName map){
|
||||
int tileSheetY=tileSheetIndex/tileSheetWidth;
|
||||
if(IsForegroundTile(tileSheet,tileSheetIndex)){
|
||||
TileRenderData tile={tileSheet.tileset.tileset->Decal(),vi2d{x,y}*24,vi2d{tileSheetX,tileSheetY}*24};
|
||||
std::cout<<"Tile "<<vi2d{x,y}<<" w/Tile ID "<<tileSheetIndex<<" is foreground tile."<<std::endl;
|
||||
bool foundGroup=false;
|
||||
for(TileGroup&group:foregroundTileGroups){
|
||||
if(geom2d::overlaps(geom2d::rect<int>{vi2d{x,y}*24-vi2d{1,1},{26,26}},group.GetRange())){
|
||||
std::cout<<" Group found: "<<group.GetRange().pos<<"/"<<group.GetRange().size<<std::endl;
|
||||
group.InsertTile(tile);
|
||||
std::cout<<" After: "<<group.GetRange().pos<<"/"<<group.GetRange().size<<std::endl;
|
||||
foundGroup=true;
|
||||
break;
|
||||
}
|
||||
@ -845,7 +842,6 @@ void Crawler::LoadLevel(MapName map){
|
||||
if(!foundGroup){
|
||||
TileGroup group;
|
||||
group.InsertTile(tile);
|
||||
std::cout<<" No Group found. New group: "<<group.GetRange().pos<<"/"<<group.GetRange().size<<std::endl;
|
||||
foregroundTileGroups.push_back(group);
|
||||
}
|
||||
}
|
||||
|
@ -90,6 +90,9 @@ void Monster::PerformJumpAnimation(){
|
||||
case SLIME_RED:{
|
||||
animation.ChangeState(internal_animState,AnimationState::RED_SLIME_JUMP);
|
||||
}break;
|
||||
case SLIME_YELLOW:{
|
||||
animation.ChangeState(internal_animState,AnimationState::YELLOW_SLIME_JUMP);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
void Monster::PerformShootAnimation(){
|
||||
@ -103,6 +106,9 @@ void Monster::PerformShootAnimation(){
|
||||
case SLIME_RED:{
|
||||
animation.ChangeState(internal_animState,AnimationState::RED_SLIME_SPIT);
|
||||
}break;
|
||||
case SLIME_YELLOW:{
|
||||
animation.ChangeState(internal_animState,AnimationState::YELLOW_SLIME_SPIT);
|
||||
}break;
|
||||
}
|
||||
}
|
||||
void Monster::SetX(float x){
|
||||
|
@ -2,7 +2,7 @@
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 2
|
||||
#define VERSION_PATCH 0
|
||||
#define VERSION_BUILD 217
|
||||
#define VERSION_BUILD 221
|
||||
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
|
@ -585,8 +585,9 @@ namespace olc::utils::geom2d
|
||||
template<typename T1, typename T2>
|
||||
inline constexpr bool overlaps(const line<T1>& l1, const line<T2>& l2)
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
float uA = ((l2.end.x-l2.start.x)*(l1.start.y-l2.start.y) - (l2.end.y-l2.start.y)*(l1.start.x-l2.start.x)) / ((l2.end.y-l2.start.y)*(l1.end.x-l1.start.x) - (l2.end.x-l2.start.x)*(l1.end.y-l1.start.y));
|
||||
float uB = ((l1.end.x-l1.start.x)*(l1.start.y-l2.start.y) - (l1.end.y-l1.start.y)*(l1.start.x-l2.start.x)) / ((l2.end.y-l2.start.y)*(l1.end.x-l1.start.x) - (l2.end.x-l2.start.x)*(l1.end.y-l1.start.y));
|
||||
return uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1;
|
||||
}
|
||||
|
||||
// Check if rectangle overlaps line segment
|
||||
@ -633,7 +634,14 @@ namespace olc::utils::geom2d
|
||||
template<typename T1, typename T2>
|
||||
inline std::vector<olc::v2d_generic<T2>> intersects(const line<T1>& l1, const line<T2>& l2)
|
||||
{
|
||||
// TODO:
|
||||
float uA = ((l2.end.x-l2.start.x)*(l1.start.y-l2.start.y) - (l2.end.y-l2.start.y)*(l1.start.x-l2.start.x)) / ((l2.end.y-l2.start.y)*(l1.end.x-l1.start.x) - (l2.end.x-l2.start.x)*(l1.end.y-l1.start.y));
|
||||
float uB = ((l1.end.x-l1.start.x)*(l1.start.y-l2.start.y) - (l1.end.y-l1.start.y)*(l1.start.x-l2.start.x)) / ((l2.end.y-l2.start.y)*(l1.end.x-l1.start.x) - (l2.end.x-l2.start.x)*(l1.end.y-l1.start.y));
|
||||
|
||||
if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) {
|
||||
float intersectionX = l1.start.x + (uA * (l1.end.x-l1.start.x));
|
||||
float intersectionY = l1.start.y + (uA * (l1.end.y-l1.start.y));
|
||||
return {{intersectionX,intersectionY}};
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
|
2289
Crawler/pge.data
2289
Crawler/pge.data
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
BIN
Crawler/pge.wasm
BIN
Crawler/pge.wasm
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user