Arc implementation completed. Release Build 11776.
This commit is contained in:
parent
d85cef1b86
commit
7b165a64d5
@ -41,22 +41,31 @@ All rights reserved.
|
||||
|
||||
INCLUDE_game
|
||||
|
||||
Arc::Arc(const vf2d pos,const float pointingAngle,const float sweepAngle)
|
||||
:pos(pos),pointingAngle(pointingAngle),sweepAngle(sweepAngle){
|
||||
Arc::Arc(const vf2d pos,const float radius,const float pointingAngle,const float sweepAngle)
|
||||
:pos(pos),radius(radius),pointingAngle(pointingAngle),sweepAngle(sweepAngle){
|
||||
if(sweepAngle<0.f)ERR(std::format("WARNING! Sweep angle must be greater than or equal to 0! Provided Sweep Angle: {}",sweepAngle));
|
||||
//Use cut-off point between two angles
|
||||
poly.pos.emplace_back(vf2d{}); //Always add 0,0
|
||||
int startInd{int(std::fmod(util::radToDeg(pointingAngle-sweepAngle)/4,90))};
|
||||
int endInd{int(std::fmod(util::radToDeg(pointingAngle+sweepAngle)/4,90))};
|
||||
if(startInd>endInd)std::swap(startInd,endInd);
|
||||
for(int i=startInd;i<endInd;i++){
|
||||
poly.pos.emplace_back(game->circleCooldownPoints[i]);
|
||||
poly.pos.emplace_back(pos); //Always add 0,0
|
||||
float smallestAng{util::radToDeg(pointingAngle-sweepAngle)+90};
|
||||
float largestAng{util::radToDeg(pointingAngle+sweepAngle)+90};
|
||||
while(smallestAng<0.f)smallestAng+=360;
|
||||
while(largestAng<0.f)largestAng+=360;
|
||||
int startInd{int(std::fmod(smallestAng/4+1,90))};
|
||||
int endInd{int(std::fmod(largestAng/4+1,90))};
|
||||
if(startInd>endInd){
|
||||
startInd=(startInd+3)%90;
|
||||
}else{
|
||||
endInd=(endInd+3)%90;
|
||||
}
|
||||
poly.pos.emplace_back(vf2d{}); //Connect back to itself.
|
||||
for(int i=startInd;i!=endInd;i=(i+1)%game->circleCooldownPoints.size()){
|
||||
poly.pos.emplace_back(pos+game->circleCooldownPoints[i]*radius);
|
||||
}
|
||||
void Arc::Draw(AiL*game,const vf2d pos,const float pointingAngle,const float sweepAngle,const Pixel col){
|
||||
poly.pos.emplace_back(pos); //Connect back to itself.
|
||||
}
|
||||
void Arc::Draw(AiL*game,const Pixel col){
|
||||
game->SetDecalStructure(DecalStructure::FAN);
|
||||
game->view.DrawPolygonDecal(nullptr,poly.pos,poly.pos,col);
|
||||
}
|
||||
const bool Arc::overlaps(const vf2d checkPos)const{
|
||||
|
||||
return geom2d::overlaps(checkPos,poly);
|
||||
}
|
@ -38,18 +38,20 @@ All rights reserved.
|
||||
#pragma once
|
||||
|
||||
#include "olcUTIL_Geometry2D.h"
|
||||
#include "Pixel.h"
|
||||
|
||||
class AiL;
|
||||
|
||||
class Arc{
|
||||
public:
|
||||
//Define a sweep angle such that each direction will arc that way. Example: PI/2 means a sweep angle from -PI/2 to PI/2.
|
||||
Arc(const vf2d pos,const float pointingAngle,const float sweepAngle);
|
||||
void Draw(AiL*game,const vf2d pos,const float pointingAngle,const float sweepAngle,const Pixel col);
|
||||
//Define a sweep angle such that each direction will arc that way. Example: PI/2 means a sweep angle from -PI/2 to PI/2. MUST BE POSITIVE
|
||||
Arc(const vf2d pos,const float radius,const float pointingAngle,const float sweepAngle);
|
||||
void Draw(AiL*game,const Pixel col);
|
||||
const bool overlaps(const vf2d checkPos)const;
|
||||
private:
|
||||
const vf2d pos;
|
||||
const float pointingAngle;
|
||||
const float sweepAngle;
|
||||
const float radius;
|
||||
geom2d::polygon<float>poly;
|
||||
};
|
@ -41,7 +41,7 @@ All rights reserved.
|
||||
|
||||
template<class T>
|
||||
class Oscillator{
|
||||
friend class ThrownProjectile;
|
||||
friend struct ThrownProjectile;
|
||||
public:
|
||||
inline Oscillator()
|
||||
:Oscillator({},{},0.f){}
|
||||
|
@ -39,7 +39,7 @@ All rights reserved.
|
||||
#define VERSION_MAJOR 1
|
||||
#define VERSION_MINOR 3
|
||||
#define VERSION_PATCH 0
|
||||
#define VERSION_BUILD 11757
|
||||
#define VERSION_BUILD 11776
|
||||
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
|
BIN
Adventures in Lestoria/assets/gamepack.pak
Normal file
BIN
Adventures in Lestoria/assets/gamepack.pak
Normal file
Binary file not shown.
@ -383,6 +383,7 @@ return 0;
|
||||
#define OLC_PGE_DEF
|
||||
|
||||
#pragma region std_includes
|
||||
#define Arc _OLDARC
|
||||
// O------------------------------------------------------------------------------O
|
||||
// | STANDARD INCLUDES |
|
||||
// O------------------------------------------------------------------------------O
|
||||
@ -573,6 +574,8 @@ namespace X11
|
||||
#endif
|
||||
#pragma endregion
|
||||
|
||||
#undef Arc
|
||||
|
||||
// O------------------------------------------------------------------------------O
|
||||
// | olcPixelGameEngine INTERFACE DECLARATION |
|
||||
// O------------------------------------------------------------------------------O
|
||||
|
@ -1112,8 +1112,8 @@ namespace olc::utils::geom2d
|
||||
{
|
||||
int index{1};
|
||||
std::vector<geom2d::triangle<float>>tris;
|
||||
while(index<polygon.pos.size()-1){
|
||||
if(overlaps(p1,geom2d::triangle<float>{polygon.pos[0],polygon.pos[index],polygon.pos[index+1]}))return true;
|
||||
while(index<p2.pos.size()-1){
|
||||
if(overlaps(p1,geom2d::triangle<float>{p2.pos[0],p2.pos[index],p2.pos[index+1]}))return true;
|
||||
index++;
|
||||
}
|
||||
return false;
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user