mirror of
				https://github.com/zenorogue/hyperrogue.git
				synced 2025-10-31 05:52:59 +00:00 
			
		
		
		
	Make hookset<T> a pointer type, just like purehookset.
No more declaring `hookset<T> *hooks_foo`; now it's just `hookset<T> hooks_foo` at global scope. This clears the way to make `hookset<T>` into a class type if we want.
This commit is contained in:
		| @@ -219,7 +219,7 @@ void setcameraangle(bool b) { } | |||||||
| #if CAP_GL | #if CAP_GL | ||||||
|  |  | ||||||
| #if CAP_VR | #if CAP_VR | ||||||
| EX hookset<bool()> *hooks_vr_eye_view, *hooks_vr_eye_projection; | EX hookset<bool()> hooks_vr_eye_view, hooks_vr_eye_projection; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| EX void eyewidth_translate(int ed) { | EX void eyewidth_translate(int ed) { | ||||||
|   | |||||||
| @@ -1332,7 +1332,7 @@ EX bool quickfind(eLand l) { | |||||||
| #define I2000 (INVLUCK?600:2000) | #define I2000 (INVLUCK?600:2000) | ||||||
| #define I10000 (INVLUCK?3000:10000) | #define I10000 (INVLUCK?3000:10000) | ||||||
|  |  | ||||||
| EX hookset<int(cell*, bool)> *hooks_wallchance; | EX hookset<int(cell*, bool)> hooks_wallchance; | ||||||
|  |  | ||||||
| EX int wallchance(cell *c, bool deepOcean) { | EX int wallchance(cell *c, bool deepOcean) { | ||||||
|   int i = callhandlers(-1, hooks_wallchance, c, deepOcean); |   int i = callhandlers(-1, hooks_wallchance, c, deepOcean); | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								cell.cpp
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								cell.cpp
									
									
									
									
									
								
							| @@ -279,7 +279,7 @@ EX void eumerge(cell* c1, int s1, cell *c2, int s2, bool mirror) { | |||||||
|  |  | ||||||
| //  map<pair<eucoord, eucoord>, cell*> euclidean; | //  map<pair<eucoord, eucoord>, cell*> euclidean; | ||||||
|  |  | ||||||
| EX hookset<hrmap*()> *hooks_newmap; | EX hookset<hrmap*()> hooks_newmap; | ||||||
|  |  | ||||||
| /** create a map in the current geometry */ | /** create a map in the current geometry */ | ||||||
| EX void initcells() { | EX void initcells() { | ||||||
|   | |||||||
| @@ -347,7 +347,7 @@ int arg::readCommon() { | |||||||
|  |  | ||||||
| EX purehookset hooks_config; | EX purehookset hooks_config; | ||||||
|  |  | ||||||
| EX hookset<int()> *hooks_args; | EX hookset<int()> hooks_args; | ||||||
|  |  | ||||||
| namespace arg { | namespace arg { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -554,7 +554,7 @@ EX bool mightBeMine(cell *c) { | |||||||
|   return c->wall == waMineUnknown || c->wall == waMineMine; |   return c->wall == waMineUnknown || c->wall == waMineMine; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX hookset<bool(cell*)> *hooks_mark; | EX hookset<bool(cell*)> hooks_mark; | ||||||
|  |  | ||||||
| EX void performMarkCommand(cell *c) { | EX void performMarkCommand(cell *c) { | ||||||
|   if(!c) return; |   if(!c) return; | ||||||
|   | |||||||
| @@ -2028,7 +2028,7 @@ EX void draw_main() { | |||||||
|   } |   } | ||||||
|  |  | ||||||
| #if CAP_VR | #if CAP_VR | ||||||
| EX hookset<bool()> *hooks_vr_draw_all; | EX hookset<bool()> hooks_vr_draw_all; | ||||||
| #endif | #endif | ||||||
|    |    | ||||||
| EX void drawqueue() { | EX void drawqueue() { | ||||||
|   | |||||||
| @@ -40,8 +40,8 @@ EX bool hide_player() { | |||||||
|  |  | ||||||
| #define ADC(V,c) for(const transmatrix& V: current_display->all_drawn_copies[c]) | #define ADC(V,c) for(const transmatrix& V: current_display->all_drawn_copies[c]) | ||||||
|  |  | ||||||
| EX hookset<bool(int sym, int uni)> *hooks_handleKey; | EX hookset<bool(int sym, int uni)> hooks_handleKey; | ||||||
| EX hookset<bool(cell *c, const transmatrix& V)> *hooks_drawcell; | EX hookset<bool(cell *c, const transmatrix& V)> hooks_drawcell; | ||||||
| EX purehookset hooks_frame, hooks_markers; | EX purehookset hooks_frame, hooks_markers; | ||||||
|  |  | ||||||
| EX ld animation_factor = 1; | EX ld animation_factor = 1; | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								help.cpp
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								help.cpp
									
									
									
									
									
								
							| @@ -772,7 +772,7 @@ EX void appendHelp(string s) { | |||||||
| unsigned char lastval; | unsigned char lastval; | ||||||
| int windtotal; | int windtotal; | ||||||
|  |  | ||||||
| EX hookset<void(cell*)> *hooks_mouseover; | EX hookset<void(cell*)> hooks_mouseover; | ||||||
|  |  | ||||||
| EX void describeMouseover() { | EX void describeMouseover() { | ||||||
|   DEBBI(DF_GRAPH, ("describeMouseover")); |   DEBBI(DF_GRAPH, ("describeMouseover")); | ||||||
| @@ -1017,7 +1017,7 @@ EX void showHelp() { | |||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX hookset<bool()> *hooks_default_help; | EX hookset<bool()> hooks_default_help; | ||||||
|  |  | ||||||
| EX void gotoHelp(const string& h) { | EX void gotoHelp(const string& h) { | ||||||
|   help = h; |   help = h; | ||||||
|   | |||||||
| @@ -217,7 +217,7 @@ void addSpin(heptagon *h, int d, heptagon *from, int rot, int spin) { | |||||||
|  |  | ||||||
| extern int hrand(int); | extern int hrand(int); | ||||||
|  |  | ||||||
| EX hookset<void(heptagon*, int)> *hooks_createStep; | EX hookset<void(heptagon*, int)> hooks_createStep; | ||||||
|  |  | ||||||
| // create h->move(d) if not created yet | // create h->move(d) if not created yet | ||||||
| heptagon *createStep(heptagon *h, int d) { | heptagon *createStep(heptagon *h, int d) { | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								hud.cpp
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								hud.cpp
									
									
									
									
									
								
							| @@ -328,7 +328,7 @@ void displayglyph2(int cx, int cy, int buttonsize, int i) { | |||||||
|  |  | ||||||
| EX bool nohud, nomenukey; | EX bool nohud, nomenukey; | ||||||
|  |  | ||||||
| EX hookset<bool()> *hooks_prestats; | EX hookset<bool()> hooks_prestats; | ||||||
|  |  | ||||||
| #if CAP_SHAPES | #if CAP_SHAPES | ||||||
| void drawMobileArrow(int i) { | void drawMobileArrow(int i) { | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ void moreStack() { | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| namespace hr { | namespace hr { | ||||||
| EX hookset<bool(int argc, char** argv)> *hooks_main; | EX hookset<bool(int argc, char** argv)> hooks_main; | ||||||
|  |  | ||||||
| EX int hyper_main(int argc, char **argv) { | EX int hyper_main(int argc, char **argv) { | ||||||
|   using namespace hr;  |   using namespace hr;  | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								hyper.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								hyper.h
									
									
									
									
									
								
							| @@ -407,8 +407,9 @@ struct movedir { | |||||||
|  |  | ||||||
| // shmup | // shmup | ||||||
|  |  | ||||||
| template<class T> class hookset : public map<int, function<T>> {}; | template<class T> class hookset_impl : public map<int, function<T>> {}; | ||||||
| typedef hookset<void()> *purehookset; | template<class T> using hookset = hookset_impl<T> *; | ||||||
|  | using purehookset = hookset_impl<void()> *; | ||||||
|  |  | ||||||
| static const int NOHINT = -1; | static const int NOHINT = -1; | ||||||
|  |  | ||||||
| @@ -633,8 +634,8 @@ color_t darkena(color_t c, int lev, int a); | |||||||
|  |  | ||||||
| static const int DISTANCE_UNKNOWN = 127; | static const int DISTANCE_UNKNOWN = 127; | ||||||
|  |  | ||||||
| template<class T, class U> int addHook(hookset<T>*& m, int prio, const U& hook) { | template<class T, class U> int addHook(hookset<T>& m, int prio, const U& hook) { | ||||||
|   if(!m) m = new hookset<T> (); |   if(!m) m = new hookset_impl<T> (); | ||||||
|   while(m->count(prio)) { |   while(m->count(prio)) { | ||||||
|     prio++; |     prio++; | ||||||
|     } |     } | ||||||
| @@ -642,11 +643,11 @@ template<class T, class U> int addHook(hookset<T>*& m, int prio, const U& hook) | |||||||
|   return 0; |   return 0; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| template<class T, class... U> void callhooks(hookset<T> *h, U&&... args) { | template<class T, class... U> void callhooks(hookset<T> h, U&&... args) { | ||||||
|   if(h) for(auto& p: *h) p.second(std::forward<U>(args)...); |   if(h) for(auto& p: *h) p.second(std::forward<U>(args)...); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| template<class T, class V, class... U> V callhandlers(V zero, hookset<T> *h, U&&... args) { | template<class T, class V, class... U> V callhandlers(V zero, hookset<T> h, U&&... args) { | ||||||
|   if(h) for(auto& p: *h) { |   if(h) for(auto& p: *h) { | ||||||
|     auto z = p.second(std::forward<U>(args)...); |     auto z = p.second(std::forward<U>(args)...); | ||||||
|     if(z != zero) return z; |     if(z != zero) return z; | ||||||
|   | |||||||
| @@ -2082,8 +2082,8 @@ EX transmatrix& get_view_orientation() { | |||||||
|   return prod ? NLP : View; |   return prod ? NLP : View; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX hookset<bool(const transmatrix&)> *hooks_rotate_view; | EX hookset<bool(const transmatrix&)> hooks_rotate_view; | ||||||
| EX hookset<bool(const hyperpoint&)> *hooks_shift_view; | EX hookset<bool(const hyperpoint&)> hooks_shift_view; | ||||||
|  |  | ||||||
| /** rotate the view using the given rotation matrix */ | /** rotate the view using the given rotation matrix */ | ||||||
| EX void rotate_view(transmatrix T) { | EX void rotate_view(transmatrix T) { | ||||||
|   | |||||||
| @@ -276,7 +276,7 @@ EX bool createOnSea(eLand old) { | |||||||
|     (old == laOcean && (chaosmode ? hrand(2) : !generatingEquidistant)); |     (old == laOcean && (chaosmode ? hrand(2) : !generatingEquidistant)); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX hookset<eLand(eLand)> *hooks_nextland; | EX hookset<eLand(eLand)> hooks_nextland; | ||||||
|  |  | ||||||
| EX eLand getNewLand(eLand old) { | EX eLand getNewLand(eLand old) { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -951,7 +951,7 @@ typedef pair<string, reaction_t> named_functionality; | |||||||
| inline named_functionality named_dialog(string x, reaction_t dialog) { return named_functionality(x, [dialog] () { pushScreen(dialog); }); } | inline named_functionality named_dialog(string x, reaction_t dialog) { return named_functionality(x, [dialog] () { pushScreen(dialog); }); } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| EX hookset<named_functionality()> *hooks_o_key; | EX hookset<named_functionality()> hooks_o_key; | ||||||
|  |  | ||||||
| EX named_functionality get_o_key() { | EX named_functionality get_o_key() { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -82,7 +82,7 @@ void gamedata::restoregame() { | |||||||
|   gamedata_all(*this); |   gamedata_all(*this); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX hookset<void(gamedata*)> *hooks_gamedata; | EX hookset<void(gamedata*)> hooks_gamedata; | ||||||
|  |  | ||||||
| EX namespace gamestack { | EX namespace gamestack { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1666,7 +1666,7 @@ EX namespace patterns { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|    |    | ||||||
|   EX hookset<int(cell*)> *hooks_generate_canvas; |   EX hookset<int(cell*)> hooks_generate_canvas; | ||||||
|  |  | ||||||
|   EX int generateCanvas(cell *c) { |   EX int generateCanvas(cell *c) { | ||||||
|      |      | ||||||
|   | |||||||
| @@ -169,8 +169,8 @@ string build_getter(string type, string name, int index) { | |||||||
| #define GET(array, index) array "[" index "]" | #define GET(array, index) array "[" index "]" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| EX hookset<void(string&, string&)> *hooks_rayshader; | EX hookset<void(string&, string&)> hooks_rayshader; | ||||||
| EX hookset<bool(shared_ptr<raycaster>)> *hooks_rayset; | EX hookset<bool(shared_ptr<raycaster>)> hooks_rayset; | ||||||
|  |  | ||||||
| void enable_raycaster() { | void enable_raycaster() { | ||||||
|   if(geometry != last_geometry) reset_raycaster(); |   if(geometry != last_geometry) reset_raycaster(); | ||||||
|   | |||||||
| @@ -107,11 +107,11 @@ namespace rogueviz { | |||||||
|  |  | ||||||
|   extern colorpair dftcolor; |   extern colorpair dftcolor; | ||||||
|    |    | ||||||
|   inline hookset<void(vertexdata&, cell*, shmup::monster*, int)> *hooks_drawvertex; |   inline hookset<void(vertexdata&, cell*, shmup::monster*, int)> hooks_drawvertex; | ||||||
|   inline hookset<bool(edgeinfo*, bool store)> *hooks_alt_edges; |   inline hookset<bool(edgeinfo*, bool store)> hooks_alt_edges; | ||||||
|   inline purehookset hooks_rvmenu; |   inline purehookset hooks_rvmenu; | ||||||
|   inline hookset<bool()> *hooks_rvmenu_replace; |   inline hookset<bool()> hooks_rvmenu_replace; | ||||||
|   inline hookset<bool(int&, string&, FILE*)> *hooks_readcolor; |   inline hookset<bool(int&, string&, FILE*)> hooks_readcolor; | ||||||
|   inline purehookset hooks_close; |   inline purehookset hooks_close; | ||||||
|    |    | ||||||
|   void readcolor(const string& cfname); |   void readcolor(const string& cfname); | ||||||
| @@ -121,7 +121,7 @@ namespace rogueviz { | |||||||
|    |    | ||||||
|   namespace rvtour { |   namespace rvtour { | ||||||
|     using namespace hr::tour; |     using namespace hr::tour; | ||||||
|     inline hookset<void(vector<slide>&)> *hooks_build_rvtour; |     inline hookset<void(vector<slide>&)> hooks_build_rvtour; | ||||||
|     slide *gen_rvtour(); |     slide *gen_rvtour(); | ||||||
|  |  | ||||||
| template<class T> function<void(presmode)> roguevizslide(char c, const T& t) { | template<class T> function<void(presmode)> roguevizslide(char c, const T& t) { | ||||||
|   | |||||||
| @@ -236,7 +236,7 @@ bool isBullet(monster *m) { | |||||||
| bool isPlayer(monster *m) { return m->type == moPlayer; } | bool isPlayer(monster *m) { return m->type == moPlayer; } | ||||||
| bool isMonster(monster *m) { return m->type != moPlayer && m->type != moBullet; } | bool isMonster(monster *m) { return m->type != moPlayer && m->type != moBullet; } | ||||||
|  |  | ||||||
| EX hookset<bool(shmup::monster*)> *hooks_kill; | EX hookset<bool(shmup::monster*)> hooks_kill; | ||||||
|  |  | ||||||
| void killMonster(monster* m, eMonster who_kills, flagtype flags = 0) { | void killMonster(monster* m, eMonster who_kills, flagtype flags = 0) { | ||||||
|   int tk = tkills(); |   int tk = tkills(); | ||||||
| @@ -2456,7 +2456,7 @@ EX void fixStorage() { | |||||||
|   for(monster *m: restore) m->store(); |   for(monster *m: restore) m->store(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX hookset<bool(int)> *hooks_turn; | EX hookset<bool(int)> hooks_turn; | ||||||
|  |  | ||||||
| EX void turn(int delta) { | EX void turn(int delta) { | ||||||
|  |  | ||||||
| @@ -2771,7 +2771,7 @@ EX bool boatAt(cell *c) { | |||||||
|   return false; |   return false; | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX hookset<bool(const transmatrix&, cell*, shmup::monster*)> *hooks_draw; | EX hookset<bool(const transmatrix&, cell*, shmup::monster*)> hooks_draw; | ||||||
|  |  | ||||||
| EX void clearMonsters() { | EX void clearMonsters() { | ||||||
|   for(mit it = monstersAt.begin(); it != monstersAt.end(); it++) |   for(mit it = monstersAt.begin(); it != monstersAt.end(); it++) | ||||||
| @@ -2833,7 +2833,7 @@ EX void virtualRebase(shmup::monster *m) { | |||||||
|   virtualRebase(m->base, m->at); |   virtualRebase(m->base, m->at); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| EX hookset<bool(shmup::monster*, string&)> *hooks_describe; | EX hookset<bool(shmup::monster*, string&)> hooks_describe; | ||||||
|  |  | ||||||
| EX void addShmupHelp(string& out) { | EX void addShmupHelp(string& out) { | ||||||
|   if(shmup::mousetarget && sqdist(mouseh, tC0(shmup::mousetarget->pat)) < .1) { |   if(shmup::mousetarget && sqdist(mouseh, tC0(shmup::mousetarget->pat)) < .1) { | ||||||
|   | |||||||
| @@ -83,7 +83,7 @@ int musfadeval = 2000; | |||||||
|  |  | ||||||
| eLand cid = laNone; | eLand cid = laNone; | ||||||
|  |  | ||||||
| hookset<bool(eLand&)> *hooks_music; | hookset<bool(eLand&)> hooks_music; | ||||||
|  |  | ||||||
| bool music_out_of_focus = false; | bool music_out_of_focus = false; | ||||||
|  |  | ||||||
| @@ -129,7 +129,7 @@ EX void handlemusic() { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
| hookset<bool(eLand&)> *hooks_resetmusic; | hookset<bool(eLand&)> hooks_resetmusic; | ||||||
|  |  | ||||||
| EX void resetmusic() { | EX void resetmusic() { | ||||||
|   if(audio && musicvolume) { |   if(audio && musicvolume) { | ||||||
| @@ -218,7 +218,7 @@ string wheresounds = SOUNDDESTDIR; | |||||||
| string wheresounds = HYPERPATH "sounds/"; | string wheresounds = HYPERPATH "sounds/"; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| hookset<bool(const string& s, int vol)> *hooks_sound; | hookset<bool(const string& s, int vol)> hooks_sound; | ||||||
|  |  | ||||||
| EX void playSound(cell *c, const string& fname, int vol) { | EX void playSound(cell *c, const string& fname, int vol) { | ||||||
|   LATE( hr::playSound(c, fname, vol); ) |   LATE( hr::playSound(c, fname, vol); ) | ||||||
|   | |||||||
| @@ -76,7 +76,7 @@ bool do_use_special_land() { | |||||||
|   } |   } | ||||||
|  |  | ||||||
| /** \brief Hooks for welcomeMessage. Return true to capture. */ | /** \brief Hooks for welcomeMessage. Return true to capture. */ | ||||||
| EX hookset<bool()> *hooks_welcome_message; | EX hookset<bool()> hooks_welcome_message; | ||||||
|  |  | ||||||
| /** \brief Print the welcome message during the start of game. Depends on the current mode and other settings. */ | /** \brief Print the welcome message during the start of game. Depends on the current mode and other settings. */ | ||||||
| EX void welcomeMessage() { | EX void welcomeMessage() { | ||||||
| @@ -144,7 +144,7 @@ EX void welcomeMessage() { | |||||||
|   } |   } | ||||||
|  |  | ||||||
| /** \brief These hooks are called at the start of initgame. */ | /** \brief These hooks are called at the start of initgame. */ | ||||||
| EX hookset<void()> *hooks_initgame; | EX hookset<void()> hooks_initgame; | ||||||
|  |  | ||||||
| /** \brief initialize the game */ | /** \brief initialize the game */ | ||||||
| EX void initgame() { | EX void initgame() { | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								tour.cpp
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								tour.cpp
									
									
									
									
									
								
							| @@ -115,7 +115,7 @@ EX function<bool(eLand)> showland; | |||||||
| EX string slidecommand; | EX string slidecommand; | ||||||
|  |  | ||||||
| /** \brief hooks to execute after calling presentation */ | /** \brief hooks to execute after calling presentation */ | ||||||
| EX hookset<void(int)> *hooks_slide; | EX hookset<void(int)> hooks_slide; | ||||||
|  |  | ||||||
| /** \brief call action(mode) for the current slide. Also sets up some default stuff */ | /** \brief call action(mode) for the current slide. Also sets up some default stuff */ | ||||||
| EX void presentation(presmode mode) { | EX void presentation(presmode mode) { | ||||||
| @@ -377,7 +377,7 @@ EX namespace ss { | |||||||
|  |  | ||||||
|   string slidechars = "abcdefghijklmnopqrsvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789!@#$%^&*("; |   string slidechars = "abcdefghijklmnopqrsvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ23456789!@#$%^&*("; | ||||||
|    |    | ||||||
|   EX hookset<int(bool)> *hooks_extra_slideshows; |   EX hookset<int(bool)> hooks_extra_slideshows; | ||||||
|  |  | ||||||
|   EX void slideshow_menu() { |   EX void slideshow_menu() { | ||||||
|     dialog::init(XLAT("slideshows"), forecolor, 150, 100); |     dialog::init(XLAT("slideshows"), forecolor, 150, 100); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Arthur O'Dwyer
					Arthur O'Dwyer