X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fminigames%2Fcl_minigames.qh;h=602c7973585c1510e3903b4d6fe1d5d6d696ebaa;hb=4ee2807b2d8f808928ef14b3e814945b3edb4350;hp=0c1740127b3bb8156d8d39c3d707ce5066440381;hpb=7bae88d09fbd53cce732e31633aea92671b43699;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/minigames/cl_minigames.qh b/qcsrc/common/minigames/cl_minigames.qh index 0c1740127..602c79735 100644 --- a/qcsrc/common/minigames/cl_minigames.qh +++ b/qcsrc/common/minigames/cl_minigames.qh @@ -1,7 +1,4 @@ -#ifndef CL_MINIGAMES_H -#define CL_MINIGAMES_H - -#include "../../dpdefs/keycodes.qh" +#pragma once // Get a square in the center of the avaliable area // \note macro to pass by reference pos and mySize @@ -48,25 +45,25 @@ bool minigame_hud_mouse_in(vector pos, vector sz); // Like drawstring, but wrapping words to fit maxwidth // returns the size of the drawn area // align selects the string alignment (0 = left, 0.5 = center, 1 = right) -vector minigame_drawstring_wrapped( float maxwidth, vector pos, string text, +vector minigame_drawstring_wrapped( float maxwidth, vector pos, string text, vector fontsize, vector color, float theAlpha, int drawflags, float align ); // Like drawcolorcodedstring, but wrapping words to fit maxwidth // returns the size of the drawn area // align selects the string alignment (0 = left, 0.5 = center, 1 = right) -vector minigame_drawcolorcodedstring_wrapped( float maxwidth, vector pos, +vector minigame_drawcolorcodedstring_wrapped( float maxwidth, vector pos, string text, vector fontsize, float theAlpha, int drawflags, float align ); // Like drawstring but truncates the text to fit maxwidth -void minigame_drawstring_trunc(float maxwidth, vector pos, string text, +void minigame_drawstring_trunc(float maxwidth, vector pos, string text, vector fontsize, vector color, float theAlpha, int drawflags ); // Like drawcolorcodedstring but truncates the text to fit maxwidth -void minigame_drawcolorcodedstring_trunc(float maxwidth, vector pos, string text, +void minigame_drawcolorcodedstring_trunc(float maxwidth, vector pos, string text, vector fontsize, float theAlpha, int drawflags ); // like drawpic but pos represent the center rather than the topleft corner -void minigame_drawpic_centered( vector pos, string texture, vector sz, +void minigame_drawpic_centered( vector pos, string texture, vector sz, vector color, float thealpha, int drawflags ); // Get full path of a minigame texture @@ -79,9 +76,6 @@ string minigame_texture(string name); // For minigame_player: player server slot, don't use for anything else .float minigame_playerslot; -// register all minigames -void initialize_minigames(); - // client-side minigame session cleanup void deactivate_minigame(); @@ -93,29 +87,43 @@ entity minigame_self; // Whethere there's an active minigame float minigame_isactive() { - return active_minigame != world; + return active_minigame != NULL; } // Execute a minigame command #define minigame_cmd(...) minigame_cmd_workaround(0,__VA_ARGS__) void minigame_cmd_workaround(float dummy, string...cmdargc); -// Read a minigame entity from the server -void ent_read_minigame(); - -// Prompt the player to play in the current minigame +// Prompt the player to play in the current minigame // (ie: it's their turn and they should get back to the minigame) void minigame_prompt(); float HUD_MinigameMenu_IsOpened(); -void HUD_MinigameMenu_Close(); +void HUD_MinigameMenu_Close(entity this, entity actor, entity trigger); float HUD_Minigame_Showpanels(); // Adds a game-specific entry to the menu void HUD_MinigameMenu_CustomEntry(entity parent, string message, string event_arg); #define FOREACH_MINIGAME_ENTITY(entityvar) \ - entityvar=world; \ - while( (entityvar = findentity(entityvar,owner,active_minigame)) ) - -#endif + entityvar=NULL; \ + while( (entityvar = findentity(entityvar,owner,active_minigame)) ) + + +REGISTRY(Minigames, BITS(4)) +#define Minigames_from(i) _Minigames_from(i, NULL) +REGISTER_REGISTRY(Minigames) +REGISTRY_CHECK(Minigames) +#define REGISTER_MINIGAME(name,nicename) \ + REGISTER(Minigames, MINIGAME_##name, m_id, new_pure(minigame_descriptor)); \ + void name##_hud_board(vector, vector); \ + void name##_hud_status(vector, vector); \ + int name##_client_event(entity, string, ...); \ + REGISTER_INIT(MINIGAME_##name) { \ + this.netname = strzone(strtolower(#name)); \ + this.message = nicename; \ + this.minigame_hud_board = name##_hud_board; \ + this.minigame_hud_status = name##_hud_status; \ + this.minigame_event = name##_client_event; \ + } \ + REGISTER_INIT(MINIGAME_##name)