X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fminigames%2Fcl_minigames.qc;h=b88d219916edc4bd764e085467e1a9a0ec099701;hb=d666ce9b927add9e9c0b4751ca8ac7a9780ea478;hp=e9a8a4b414a2ce93778765da2601870846bfc884;hpb=c3fcc8bea8d62c9f319ddc2ae44f7c3344c282ff;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/minigames/cl_minigames.qc b/qcsrc/common/minigames/cl_minigames.qc index e9a8a4b41..b88d21991 100644 --- a/qcsrc/common/minigames/cl_minigames.qc +++ b/qcsrc/common/minigames/cl_minigames.qc @@ -4,10 +4,10 @@ void minigame_hud_simpleboard(vector pos, vector mySize, string board_texture) { if(panel.current_panel_bg != "0" && panel.current_panel_bg != "") - draw_BorderPicture(pos - '1 1 0' * panel_bg_border, - panel.current_panel_bg, - mySize + '1 1 0' * 2 * panel_bg_border, - panel_bg_color, panel_bg_alpha, + draw_BorderPicture(pos - '1 1 0' * panel_bg_border, + panel.current_panel_bg, + mySize + '1 1 0' * 2 * panel_bg_border, + panel_bg_color, panel_bg_alpha, '1 1 0' * (panel_bg_border/BORDER_MULTIPLIER)); drawpic(pos, board_texture, mySize, '1 1 1', panel_bg_alpha, DRAWFLAG_NORMAL); } @@ -51,15 +51,15 @@ void initialize_minigames() minig.classname = "minigame_descriptor"; \ minig.netname = strzone(strtolower(#name)); \ minig.message = nicename; \ - minig.minigame_hud_board = minigame_hud_board_##name; \ - minig.minigame_hud_status = minigame_hud_status_##name; \ - minig.minigame_event = minigame_event_##name; \ + minig.minigame_hud_board = name##_hud_board; \ + minig.minigame_hud_status = name##_hud_status; \ + minig.minigame_event = name##_client_event; \ if ( !last_minig ) minigame_descriptors = minig; \ else last_minig.list_next = minig; \ last_minig = minig; - + REGISTERED_MINIGAMES - + #undef MINIGAME } @@ -80,6 +80,7 @@ string minigame_texture(string name) #define MSLE_CLEAN_Byte(x) #define MSLE_CLEAN_Char(x) #define MSLE_CLEAN_Short(x) +#define MSLE_CLEAN_Long(x) #define MSLE_CLEAN_Coord(x) #define MSLE_CLEAN_Angle(x) #define MSLE_CLEAN_Float(x) @@ -87,14 +88,14 @@ string minigame_texture(string name) #define MSLE_CLEAN_Vector2D(x) #define MSLE(Name,Fields) \ - void msle_entremove_##Name() { strunzone(self.netname); Fields } + void msle_entremove_##Name() { SELFPARAM(); strunzone(self.netname); Fields } MINIGAME_SIMPLELINKED_ENTITIES #undef MSLE #undef FIELD void minigame_autoclean_entity(entity e) { - dprint("CL Auto-cleaned: ",ftos(num_for_edict(e)), " (",e.classname,")\n"); + LOG_TRACE("CL Auto-cleaned: ",ftos(num_for_edict(e)), " (",e.classname,")\n"); remove(e); } @@ -102,11 +103,12 @@ void HUD_MinigameMenu_CurrentButton(); bool auto_close_minigamemenu; void deactivate_minigame() { - if ( !active_minigame || active_minigame != self ) + if ( !active_minigame ) return; + active_minigame.minigame_event(active_minigame,"deactivate"); entity e = world; - while( (e = findentity(e, owner, self)) ) + while( (e = findentity(e, owner, active_minigame)) ) if ( e.minigame_autoclean ) { minigame_autoclean_entity(e); @@ -124,6 +126,12 @@ void deactivate_minigame() HUD_MinigameMenu_CurrentButton(); } +void minigame_entremove() +{SELFPARAM(); + if ( self == active_minigame ) + deactivate_minigame(); +} + void activate_minigame(entity minigame) { if ( !minigame ) @@ -131,28 +139,26 @@ void activate_minigame(entity minigame) deactivate_minigame(); return; } - + if ( !minigame.descriptor || minigame.classname != "minigame" ) { - dprint("Trying to activate unregistered minigame ",minigame.netname," in client\n"); + LOG_TRACE("Trying to activate unregistered minigame ",minigame.netname," in client\n"); return; } - + if ( minigame == active_minigame ) return; - + if ( active_minigame ) { - entity olds = minigame_self; deactivate_minigame(); - minigame_self = olds; } - + if ( minigame_self.owner != minigame ) minigame_self = world; active_minigame = minigame; active_minigame.minigame_event(active_minigame,"activate"); - + if ( HUD_MinigameMenu_IsOpened() ) HUD_MinigameMenu_CurrentButton(); else @@ -163,7 +169,7 @@ void activate_minigame(entity minigame) } void minigame_player_entremove() -{ +{SELFPARAM(); if ( self.owner == active_minigame && self.minigame_playerslot == player_localentnum ) deactivate_minigame(); } @@ -172,7 +178,6 @@ vector ReadVector2D() { vector v; v_x = ReadCoord(); v_y = ReadCoord(); v_z = 0; vector ReadVector() { vector v; v_x = ReadCoord(); v_y = ReadCoord(); v_z = ReadCoord(); return v; } string() ReadString_Raw = #366; string ReadString_Zoned() { return strzone(ReadString_Raw()); } -#define ReadFloat ReadCoord #define ReadString ReadString_Zoned #define FIELD(Flags, Type,Name) if ( sf & (Flags) ) self.Name = Read##Type(); #define MSLE(Name,Fields) \ @@ -185,36 +190,36 @@ string ReadString_Zoned() { return strzone(ReadString_Raw()); } Fields \ } void minigame_read_owner() -{ +{SELFPARAM(); string owner_name = ReadString_Raw(); self.owner = world; do self.owner = find(self.owner,netname,owner_name); while ( self.owner && self.owner.classname != "minigame" ); if ( !self.owner ) - dprint("Got a minigame entity without a minigame!\n"); + LOG_TRACE("Got a minigame entity without a minigame!\n"); } void ent_read_minigame() -{ +{SELFPARAM(); float sf = ReadByte(); if ( sf & MINIG_SF_CREATE ) { self.classname = msle_classname(ReadShort()); self.netname = ReadString_Zoned(); } - + entity minigame_ent = world; - + if ( self.classname == "minigame" ) { minigame_ent = self; - + if ( sf & MINIG_SF_CREATE ) { - self.entremove = deactivate_minigame; + self.entremove = minigame_entremove; self.descriptor = minigame_get_descriptor(ReadString_Raw()); if ( !self.descriptor ) - dprint("Got a minigame without a client-side descriptor!\n"); + LOG_TRACE("Got a minigame without a client-side descriptor!\n"); else self.minigame_event = self.descriptor.minigame_event; } @@ -230,16 +235,16 @@ void ent_read_minigame() minigame_read_owner(); float ent = ReadLong(); self.minigame_playerslot = ent; - dprint("Player: ",GetPlayerName(ent-1),"\n"); - + LOG_TRACE("Player: ",GetPlayerName(ent-1),"\n"); + activate = (ent == player_localnum+1 && self.owner && self.owner != active_minigame); - + } minigame_ent = self.owner; - + if ( sf & MINIG_SF_UPDATE ) self.team = ReadByte(); - + if ( activate ) { minigame_self = self; @@ -247,15 +252,17 @@ void ent_read_minigame() } } MINIGAME_SIMPLELINKED_ENTITIES - + if ( minigame_ent ) minigame_ent.minigame_event(minigame_ent,"network_receive",self,sf); - - dprint("CL Reading entity: ",ftos(num_for_edict(self)), - " classname:",self.classname," enttype:",ftos(self.enttype) ); - dprint(" sf:",ftos(sf)," netname:",self.netname,"\n\n"); + + if ( sf & MINIG_SF_CREATE ) + { + LOG_TRACE("CL Reading entity: ",ftos(num_for_edict(self)), + " classname:",self.classname," enttype:",ftos(self.enttype) ); + LOG_TRACE(" sf:",ftos(sf)," netname:",self.netname,"\n\n"); + } } -#undef ReadFloat #undef ReadString #undef FIELD #undef MSLE @@ -276,10 +283,10 @@ string minigame_getWrappedLine(float w, vector theFontSize, textLengthUpToWidth_ } take_until = textLengthUpToWidth(s, w, theFontSize, tw); - + if ( take_until > strlen(s) ) take_until = strlen(s); - + for ( int i = 0; i < take_until; i++ ) if ( substring(s,i,1) == "\n" ) { @@ -287,7 +294,7 @@ string minigame_getWrappedLine(float w, vector theFontSize, textLengthUpToWidth_ skip = 1; break; } - + if ( take_until > 0 || skip > 0 ) { if ( skip == 0 && take_until < strlen(s) ) @@ -302,7 +309,7 @@ string minigame_getWrappedLine(float w, vector theFontSize, textLengthUpToWidth_ skip = 1; } } - + getWrappedLine_remaining = substring(s, take_until+skip, strlen(s) - (take_until+skip)); if(getWrappedLine_remaining == "") getWrappedLine_remaining = string_null; @@ -317,9 +324,9 @@ string minigame_getWrappedLine(float w, vector theFontSize, textLengthUpToWidth_ } } -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 ) -{ +{ getWrappedLine_remaining = text; vector mypos = pos; while ( getWrappedLine_remaining ) @@ -336,7 +343,7 @@ vector minigame_drawstring_wrapped( float maxwidth, vector pos, string text, return mypos; } -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 ) { getWrappedLine_remaining = text; @@ -355,21 +362,21 @@ vector minigame_drawcolorcodedstring_wrapped( float maxwidth, vector pos, return mypos; } -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 ) { string line = textShortenToWidth(text,maxwidth,fontsize,stringwidth_nocolors); drawstring(pos, line, fontsize, color, theAlpha, drawflags); } -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 ) { string line = textShortenToWidth(text,maxwidth,fontsize,stringwidth_colors); drawcolorcodedstring(pos, line, fontsize, theAlpha, drawflags); } -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 ) { drawpic( pos-sz/2, texture, sz, color, thealpha, drawflags ); @@ -387,7 +394,7 @@ void minigame_cmd_workaround(float dummy, string...cmdargc) localcmd(strcat(cmd,"\n")); } -// 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() { @@ -396,4 +403,4 @@ void minigame_prompt() HUD_Notify_Push(sprintf("minigames/%s/icon_notif",active_minigame.descriptor.netname), _("It's your turn"), ""); } -} \ No newline at end of file +}