Add line collision checking to geom2d functions.

pull/28/head
sigonasr2 1 year ago
parent 60c8317b20
commit 5a8527f51b
  1. 4
      Crawler/Crawler.cpp
  2. 6
      Crawler/Monster.cpp
  3. 2
      Crawler/Version.h
  4. 14
      Crawler/olcUTIL_Geometry2D.h
  5. 2289
      Crawler/pge.data
  6. 2
      Crawler/pge.js
  7. BIN
      Crawler/pge.wasm

@ -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 {};
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.
Loading…
Cancel
Save