1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2024-11-27 14:37:16 +00:00

fixed crashes on getHemisphere

This commit is contained in:
Zeno Rogue 2018-07-17 02:39:12 +02:00
parent 12e2447314
commit 2ca0629a91

View File

@ -391,6 +391,35 @@ pair<int, int> subval(cell *c, int _subpathid = subpathid, int _subpathorder = s
} }
int getHemisphere(heptagon *h, int which) {
int id = h->fiftyval;
if(S7 == 5) {
int hemitable[3][12] = {
{ 6, 3, 3, 3, 3, 3,-6,-3,-3,-3,-3,-3},
{ 6, 3, 6, 3, 0, 0,-6,-3,-6,-3, 0, 0},
{-3, 0, 3, 0,-6,-6, 3, 0,-3, 0, 6, 6}
};
return hemitable[which][id];
}
else if(S7 == 4) {
int hemitable[3][6] = {
{ 2, 2, 2,-1,-1,-1},
{ 2,-1, 2, 2,-1,-1},
{ 2,-1,-1, 2, 2,-1},
};
return hemitable[which][id];
}
else if(S7 == 3) {
int hemitable[3][4] = {
{ 2, 2,-1,-1},
{ 2,-1, 2,-1},
{ 2,-1,-1, 2},
};
return hemitable[which][id];
}
else return 0;
}
int getHemisphere(cell *c, int which) { int getHemisphere(cell *c, int which) {
if(torus) return 0; if(torus) return 0;
if(which == 0 && gp::on && has_nice_dual()) { if(which == 0 && gp::on && has_nice_dual()) {
@ -421,34 +450,8 @@ int getHemisphere(cell *c, int which) {
for(int i=0; i<isize(q); i++) if(q[i] == c) return type[i]; for(int i=0; i<isize(q); i++) if(q[i] == c) return type[i];
return 0; return 0;
} }
if(ctof(c)) { if(ctof(c))
int id = c->master->fiftyval; return getHemisphere(c->master, which);
if(S7 == 5) {
int hemitable[3][12] = {
{ 6, 3, 3, 3, 3, 3,-6,-3,-3,-3,-3,-3},
{ 6, 3, 6, 3, 0, 0,-6,-3,-6,-3, 0, 0},
{-3, 0, 3, 0,-6,-6, 3, 0,-3, 0, 6, 6}
};
return hemitable[which][id];
}
else if(S7 == 4) {
int hemitable[3][6] = {
{ 2, 2, 2,-1,-1,-1},
{ 2,-1, 2, 2,-1,-1},
{ 2,-1,-1, 2, 2,-1},
};
return hemitable[which][id];
}
else if(S7 == 3) {
int hemitable[3][4] = {
{ 2, 2,-1,-1},
{ 2,-1, 2,-1},
{ 2,-1,-1, 2},
};
return hemitable[which][id];
}
else return 0;
}
else { else {
int score = 0; int score = 0;
if(gp::on) { if(gp::on) {
@ -465,6 +468,12 @@ int getHemisphere(cell *c, int which) {
if(score == 0 && error < -.001) score--; if(score == 0 && error < -.001) score--;
return score; return score;
} }
else if(irr::on) {
auto m = irr::get_masters(c);
for(int i=0; i<3; i++)
score += getHemisphere(m[i], which);
return score / 3;
}
else { else {
for(int i=0; i<6; i+=2) for(int i=0; i<6; i+=2)
score += getHemisphere(c->mov[i], which) * (c->mirror(i) ? -1 : 1); score += getHemisphere(c->mov[i], which) * (c->mirror(i) ? -1 : 1);