1
0
mirror of https://github.com/zenorogue/hyperrogue.git synced 2026-04-15 06:21:23 +00:00
This commit is contained in:
Zeno Rogue
2026-04-12 16:25:56 +02:00
4 changed files with 33 additions and 13 deletions

View File

@@ -51,7 +51,7 @@ not the data, which is available on [itch.io](https://zenorogue.itch.io/rogueviz
On Linux with apt-get:
```sudo apt-get install make g++ libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libglew-dev```
```sudo apt-get install make g++ libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libglew-dev libpng-dev```
On macOS with Homebrew:

View File

@@ -1075,8 +1075,18 @@ EX vector<int> get_display_modes(char which) {
#if SDLVER >= 2
SDL_DisplayMode mode;
for(int m=0; m<SDL_GetNumVideoDisplays(); m++) {
for(int i=0; i<SDL_GetNumDisplayModes(m); i++) {
int num_video_displays = SDL_GetNumVideoDisplays();
if(num_video_displays < 0)
println(hlog, "SDL_GetNumVideoDisplays error: ", SDL_GetError());
else if(num_video_displays == 0)
println(hlog, "SDL_GetNumVideoDisplays returned 0");
for(int m=0; m<num_video_displays; m++) {
int num_display_modes = SDL_GetNumDisplayModes(m);
if(num_display_modes < 0)
println(hlog, "SDL_GetNumDisplayModes(", m, ") error: ", SDL_GetError());
else if(num_display_modes == 0)
println(hlog, "SDL_GetNumDisplayModes(", m, ") returned 0");
for(int i=0; i<num_display_modes; i++) {
SDL_GetDisplayMode(m, i, &mode);
if(which == 'x') seen.insert(mode.w);
if(which == 'y') seen.insert(mode.h);
@@ -1085,7 +1095,13 @@ EX vector<int> get_display_modes(char which) {
#else
SDL_Rect **modes = SDL_ListModes(nullptr, 0);
if(modes && modes != (SDL_Rect**)-1) for(int i=0; modes[i]; i++) {
if(!modes)
println(hlog, "SDL_ListModes: No modes available!");
else if(modes == (SDL_Rect**)-1)
println(hlog, "SDL_ListModes: All resolutions available.");
else if(!*modes)
println(hlog, "SDL_ListModes returned an empty array");
else for(int i=0; modes[i]; i++) {
if(which == 'x') seen.insert(modes[i]->w);
if(which == 'y') seen.insert(modes[i]->h);
}

View File

@@ -164,7 +164,7 @@ struct dmercator_embedding : abstract_embedding {
virtual string name() override { return "dmercator"; }
eGeometryClass get_geometry() override { return gcHyperbolic; }
int get_dimension() override { return 3; }
hyperpoint as_hyperpoint(int id) {
hyperpoint as_hyperpoint(int id) override {
auto& mc = mcs[id];
hyperpoint h;
for(int i=0; i<3; i++)
@@ -175,7 +175,7 @@ struct dmercator_embedding : abstract_embedding {
ld zero_distance(int id) override { return mcs[id].distance; }
ld distance(int a, int b) {
ld distance(int a, int b) override {
if(a == b) return ld(0);
ld da = mcs[a].distance;
ld db = mcs[b].distance;

View File

@@ -83,15 +83,10 @@ struct monster {
void rebasePat(const shiftmatrix& new_pat, cell *tgt);
void remove_reference() {
refs--;
if(!refs) {
if(parent) parent->remove_reference();
delete this;
}
}
void remove_reference();
void set_parent(monster *par) {
if(parent == par) return;
if(parent) parent->remove_reference();
parent = par;
parent->refs++;
@@ -128,6 +123,15 @@ typedef multimap<cell*, monster*>::iterator mit;
EX vector<monster*> active, nonvirtual, additional;
void monster::remove_reference() {
refs--;
if(!refs) {
if(parent) parent->remove_reference();
nonvirtual.erase(std::remove(nonvirtual.begin(), nonvirtual.end(), this), nonvirtual.end());
delete this;
}
}
cell *findbaseAround(shiftpoint p, cell *around, int maxsteps) {
if(quotient || fake::split()) {