generated from sigonasr2/CPlusPlusProjectTemplate
Safe tile degree bounds checking
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
d7ba1b4ded
commit
3c608515a8
Binary file not shown.
@ -17,6 +17,7 @@ enum class ActionType;
|
||||
class Entity;
|
||||
class Effect;
|
||||
class Cutscene;
|
||||
class TILE;
|
||||
namespace Battle{
|
||||
class Move;
|
||||
}
|
||||
@ -137,6 +138,8 @@ class SeasonI:public PixelGameEngine{
|
||||
double ReadDoubleFromStream(std::ifstream&f);
|
||||
std::string ReadStringFromStream(std::ifstream&f);
|
||||
void CenterCameraOnPlayer();
|
||||
int GetPointQuadrantRelativeToLine(vi2d x1y1,vi2d x2y2,vi2d point);
|
||||
char GetTileDegreeSafely(std::vector<std::vector<TILE*>>&data);
|
||||
};
|
||||
extern SeasonI*GAME;
|
||||
#endif
|
18
main.cpp
18
main.cpp
@ -4587,13 +4587,9 @@ void SeasonI::DrawGameWorld() {
|
||||
int yTileOffset = cameraPos.y/32;
|
||||
for (auto&obj:OBJECTS) {
|
||||
if (!obj->drawn&&(!obj->dead||EDITING_LAYER==layer::ENCOUNTER)&&
|
||||
(MAP2[y+yTileOffset][(obj->GetPos().x+obj->originPoint.x)/32]->tileDegree==0&&
|
||||
(GetTileDegreeSafely(MAP2)&&
|
||||
obj->GetPos().y+obj->originPoint.y>(y+yTileOffset)*32&&
|
||||
obj->GetPos().y+obj->originPoint.y<=(y+yTileOffset+1)*32||
|
||||
MAP2[y+yTileOffset][(obj->GetPos().x+obj->originPoint.x)/32]->tileDegree==-1&& //y=-x+b Check if 32-x position is greater than our y.
|
||||
((int)(obj->GetPos().x+obj->originPoint.x)%32<32-(int)(obj->GetPos().y+obj->originPoint.y)%32)/*||
|
||||
y+yTileOffset<(int)(obj->GetPos().y+obj->originPoint.y)/32*/)) {
|
||||
printf("%d<%d\n",(int)(obj->GetPos().x+obj->originPoint.x)%32,32-(int)(obj->GetPos().y+obj->originPoint.y)%32);
|
||||
obj->GetPos().y+obj->originPoint.y<=(y+yTileOffset+1)*32)) {
|
||||
obj->drawn=true;
|
||||
if (obj->blinkFrames>0) {
|
||||
obj->blinkFrames--;
|
||||
@ -5546,6 +5542,16 @@ void SeasonI::CenterCameraOnPlayer(){
|
||||
cameraPos=PARTY_MEMBER_OBJ[0]->GetPos()+PARTY_MEMBER_OBJ[0]->originPoint/2-cameraOffset;
|
||||
}
|
||||
|
||||
int SeasonI::GetPointQuadrantRelativeToLine(vi2d x1y1,vi2d x2y2,vi2d point){
|
||||
return (x2y2.y - x1y1.y) * point.x + (x1y1.x - x2y2.x) * point.y + (x2y2.x * x1y1.y - x1y1.x * x2y2.y);
|
||||
}
|
||||
|
||||
char SeasonI::GetTileDegreeSafely(std::vector<std::vector<TILE*>>&data){
|
||||
int tileY=(int)PARTY_MEMBER_OBJ[0]->GetPosWithOrigin().y/32;
|
||||
int tileX=(int)PARTY_MEMBER_OBJ[0]->GetPosWithOrigin().x/32;
|
||||
return tileX>=0&&tileY>=0&&tileX<data[0].size()&&tileY<data.size()?data[(int)PARTY_MEMBER_OBJ[0]->GetPosWithOrigin().y/32][(int)PARTY_MEMBER_OBJ[0]->GetPosWithOrigin().x/32]->tileDegree:0;
|
||||
}
|
||||
|
||||
#ifndef TEST_SUITE
|
||||
int main()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user