X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fminigames%2Fcl_minigames_hud.qc;h=1608f471da24f10c4e09e32bcb8a8e1ef0345e71;hb=9082ada7a643e2ccb491fc7d1ec13cb55763b476;hp=1d82ca2034a1dbc8f4c49253e5290fed3f9bd425;hpb=61d746760851b92ea6124dcc179c0f5178b62169;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/minigames/cl_minigames_hud.qc b/qcsrc/common/minigames/cl_minigames_hud.qc index 1d82ca203..1608f471d 100644 --- a/qcsrc/common/minigames/cl_minigames_hud.qc +++ b/qcsrc/common/minigames/cl_minigames_hud.qc @@ -1,5 +1,6 @@ #include "cl_minigames_hud.qh" +#include #include #include "minigames.qh" @@ -25,17 +26,24 @@ bool HUD_mouse_over(entity somepanel) // Draws the minigame game board void HUD_MinigameBoard () { - entity hud_minigame = world; + if (!HUD_MinigameMenu_IsOpened()) + return; + + entity hud_minigame = NULL; if(!autocvar__hud_configure) + { + if (!active_minigame) + return; hud_minigame = active_minigame.descriptor; + } else hud_minigame = minigame_get_descriptor("nmm"); if ( !hud_minigame ) return; - HUD_Panel_UpdateCvars(); + HUD_Panel_LoadCvars(); vector pos, mySize; @@ -51,17 +59,24 @@ void HUD_MinigameBoard () // Draws the minigame status panel void HUD_MinigameStatus () { - entity hud_minigame = world; + if (!HUD_MinigameMenu_IsOpened()) + return; + + entity hud_minigame = NULL; if(!autocvar__hud_configure) + { + if (!active_minigame) + return; hud_minigame = active_minigame.descriptor; + } else hud_minigame = minigame_get_descriptor("nmm"); if ( !hud_minigame ) return; - HUD_Panel_UpdateCvars(); + HUD_Panel_LoadCvars(); vector pos, mySize; @@ -113,10 +128,10 @@ entity HUD_MinigameMenu_activeitem; // Click the given item void HUD_MinigameMenu_Click(entity menuitem) -{SELFPARAM(); +{ if ( menuitem ) { - WITHSELF(menuitem, menuitem.use()); + menuitem.use(menuitem, NULL, NULL); } } @@ -141,13 +156,13 @@ void HUD_MinigameMenu_EraseEntry ( entity e ) HUD_MinigameMenu_last_entry = e.list_prev; if ( HUD_MinigameMenu_activeitem == e ) - HUD_MinigameMenu_activeitem = world; + HUD_MinigameMenu_activeitem = NULL; - remove(e); + delete(e); } // Minigame menu options: create entry -entity HUD_MinigameMenu_SpawnEntry(string s, vector offset, vector fontsize, vector color,void() click) +entity HUD_MinigameMenu_SpawnEntry(string s, vector offset, vector fontsize, vector color,void(entity, entity, entity) click) { entity entry = spawn(); entry.message = s; @@ -161,7 +176,7 @@ entity HUD_MinigameMenu_SpawnEntry(string s, vector offset, vector fontsize, vec } // Spawn a child entry of a collapsable entry -entity HUD_MinigameMenu_SpawnSubEntry(string s, void() click, entity parent) +entity HUD_MinigameMenu_SpawnSubEntry(string s, void(entity, entity, entity) click, entity parent) { vector item_fontsize = hud_fontsize*1.25; vector item_offset = '1 0 0' * item_fontsize_x; @@ -172,43 +187,43 @@ entity HUD_MinigameMenu_SpawnSubEntry(string s, void() click, entity parent) } // Click action for Create sub-entries -void HUD_MinigameMenu_ClickCreate_Entry() -{SELFPARAM(); - minigame_cmd("create ",self.netname); +void HUD_MinigameMenu_ClickCreate_Entry(entity this, entity actor, entity trigger) +{ + minigame_cmd("create ", this.netname); } // Helper click action for collapsible entries // returns true when you have to create the sub-entries -bool HUD_MinigameMenu_Click_ExpandCollapse() -{SELFPARAM(); +bool HUD_MinigameMenu_Click_ExpandCollapse(entity this) +{ entity e; - if ( self.flags & 2 ) + if ( this.flags & 2 ) { if ( HUD_MinigameMenu_activeitem && - HUD_MinigameMenu_activeitem.owner == self ) - HUD_MinigameMenu_activeitem = world; - self.flags &= ~2; - for ( e = self.list_next; e != world && e.owner == self; e = self.list_next ) + HUD_MinigameMenu_activeitem.owner == this ) + HUD_MinigameMenu_activeitem = NULL; + this.flags &= ~2; + for ( e = this.list_next; e != NULL && e.owner == this; e = this.list_next ) { if ( e.flags & 2 ) HUD_MinigameMenu_Click(e); - self.list_next = e.list_next; - remove(e); + this.list_next = e.list_next; + delete(e); } - if ( self.list_next ) - self.list_next.list_prev = self; + if ( this.list_next ) + this.list_next.list_prev = this; else - HUD_MinigameMenu_last_entry = self; + HUD_MinigameMenu_last_entry = this; } else { - for ( e = HUD_MinigameMenu_entries; e != world; e = e.list_next ) + for ( e = HUD_MinigameMenu_entries; e != NULL; e = e.list_next ) { - if ( e.flags & 2 && e.origin_x == self.origin_x) + if ( e.flags & 2 && e.origin_x == this.origin_x) HUD_MinigameMenu_Click(e); } - self.flags |= 2; + this.flags |= 2; return true; } @@ -216,14 +231,14 @@ bool HUD_MinigameMenu_Click_ExpandCollapse() } // Click action for the Create menu -void HUD_MinigameMenu_ClickCreate() -{SELFPARAM(); - if ( HUD_MinigameMenu_Click_ExpandCollapse() ) +void HUD_MinigameMenu_ClickCreate(entity this, entity actor, entity trigger) +{ + if ( HUD_MinigameMenu_Click_ExpandCollapse(this) ) { entity curr; - entity prev = self; + entity prev = this; FOREACH(Minigames, true, { - curr = HUD_MinigameMenu_SpawnSubEntry(it.message, HUD_MinigameMenu_ClickCreate_Entry, self); + curr = HUD_MinigameMenu_SpawnSubEntry(it.message, HUD_MinigameMenu_ClickCreate_Entry, this); curr.netname = it.netname; curr.model = strzone(minigame_texture(strcat(it.netname,"/icon"))); HUD_MinigameMenu_InsertEntry( curr, prev ); @@ -233,26 +248,26 @@ void HUD_MinigameMenu_ClickCreate() } // Click action for Join sub-entries -void HUD_MinigameMenu_ClickJoin_Entry() -{SELFPARAM(); - minigame_cmd("join ",self.netname); - HUD_MinigameMenu_EraseEntry(self); +void HUD_MinigameMenu_ClickJoin_Entry(entity this, entity actor, entity trigger) +{ + minigame_cmd("join ",this.netname); + HUD_MinigameMenu_EraseEntry(this); } // Click action for the Join menu -void HUD_MinigameMenu_ClickJoin() -{SELFPARAM(); - if ( HUD_MinigameMenu_Click_ExpandCollapse() ) +void HUD_MinigameMenu_ClickJoin(entity this, entity actor, entity trigger) +{ + if ( HUD_MinigameMenu_Click_ExpandCollapse(this) ) { - entity e = world; + entity e = NULL; entity curr; - entity prev = self; + entity prev = this; while( (e = find(e,classname,"minigame")) ) { if ( e != active_minigame ) { curr = HUD_MinigameMenu_SpawnSubEntry( - e.netname, HUD_MinigameMenu_ClickJoin_Entry, self ); + e.netname, HUD_MinigameMenu_ClickJoin_Entry, this ); curr.netname = e.netname; curr.model = strzone(minigame_texture(strcat(e.descriptor.netname,"/icon"))); HUD_MinigameMenu_InsertEntry( curr, prev ); @@ -265,37 +280,37 @@ void HUD_MinigameMenu_ClickJoin() /*// Temporary placeholder for un-implemented Click actions void HUD_MinigameMenu_ClickNoop() { - dprint("Placeholder for ",self.message,"\n"); + dprint("Placeholder for ",this.message,"\n"); }*/ // Click action for Quit -void HUD_MinigameMenu_ClickQuit() +void HUD_MinigameMenu_ClickQuit(entity this, entity actor, entity trigger) { deactivate_minigame(); minigame_cmd("end"); } // Click action for Invite sub-entries -void HUD_MinigameMenu_ClickInvite_Entry() -{SELFPARAM(); - minigame_cmd("invite #",self.netname); +void HUD_MinigameMenu_ClickInvite_Entry(entity this, entity actor, entity trigger) +{ + minigame_cmd("invite #",this.netname); } // Click action for the Invite menu -void HUD_MinigameMenu_ClickInvite() -{SELFPARAM(); - if ( HUD_MinigameMenu_Click_ExpandCollapse() ) +void HUD_MinigameMenu_ClickInvite(entity this, entity actor, entity trigger) +{ + if ( HUD_MinigameMenu_Click_ExpandCollapse(this) ) { entity e; - entity prev = self; + entity prev = this; for(int i = 0; i < maxclients; ++i) { if ( player_localnum != i && playerslots[i] && entcs_GetName(i) != "" && - !findfloat(world,minigame_playerslot,i+1) && playerslots[i].ping ) + !findfloat(NULL,minigame_playerslot,i+1) && playerslots[i].ping ) { e = HUD_MinigameMenu_SpawnSubEntry( strzone(entcs_GetName(i)), HUD_MinigameMenu_ClickInvite_Entry, - self ); + this ); e.flags |= 1; e.netname = strzone(ftos(i+1)); e.origin_x *= 2; @@ -306,10 +321,10 @@ void HUD_MinigameMenu_ClickInvite() } } -void HUD_MinigameMenu_ClickCustomEntry() -{SELFPARAM(); +void HUD_MinigameMenu_ClickCustomEntry(entity this, entity actor, entity trigger) +{ if ( active_minigame ) - active_minigame.minigame_event(active_minigame,"menu_click",self.netname); + active_minigame.minigame_event(active_minigame,"menu_click",this.netname); } // Adds a game-specific entry to the menu @@ -323,17 +338,17 @@ void HUD_MinigameMenu_CustomEntry(entity parent, string menumessage, string even } // Click action for the Current Game menu -void HUD_MinigameMenu_ClickCurrentGame() -{SELFPARAM(); - if ( HUD_MinigameMenu_Click_ExpandCollapse() ) +void HUD_MinigameMenu_ClickCurrentGame(entity this, entity actor, entity trigger) +{ + if ( HUD_MinigameMenu_Click_ExpandCollapse(this) ) { HUD_MinigameMenu_InsertEntry( HUD_MinigameMenu_SpawnSubEntry( - _("Quit"), HUD_MinigameMenu_ClickQuit, self ), self); + _("Quit"), HUD_MinigameMenu_ClickQuit, this ), this); - active_minigame.minigame_event(active_minigame,"menu_show",self); + active_minigame.minigame_event(active_minigame,"menu_show",this); HUD_MinigameMenu_InsertEntry( HUD_MinigameMenu_SpawnSubEntry( - _("Invite"), HUD_MinigameMenu_ClickInvite, self), self); + _("Invite"), HUD_MinigameMenu_ClickInvite, this), this); } } // Whether the minigame menu panel is open @@ -343,22 +358,19 @@ bool HUD_MinigameMenu_IsOpened() } // Close the minigame menu panel -void HUD_MinigameMenu_Close() +void HUD_MinigameMenu_Close(entity this, entity actor, entity trigger) { if ( HUD_MinigameMenu_IsOpened() ) { entity e, p; - for ( e = HUD_MinigameMenu_entries; e != world; e = p ) + for ( e = HUD_MinigameMenu_entries; e != NULL; e = p ) { p = e.list_next; - remove(e); + delete(e); } - HUD_MinigameMenu_entries = world; - HUD_MinigameMenu_last_entry = world; - HUD_MinigameMenu_activeitem = world; - if(autocvar_hud_cursormode) - if ( !autocvar__hud_configure ) - setcursormode(0); + HUD_MinigameMenu_entries = NULL; + HUD_MinigameMenu_last_entry = NULL; + HUD_MinigameMenu_activeitem = NULL; } } @@ -368,7 +380,7 @@ void HUD_MinigameMenu_CurrentButton() entity e; if ( active_minigame ) { - for ( e = HUD_MinigameMenu_last_entry; e != world; e = e.list_prev ) + for ( e = HUD_MinigameMenu_last_entry; e != NULL; e = e.list_prev ) if ( e.classname == "hud_minigamemenu_exit" ) { HUD_MinigameMenu_EraseEntry(e); @@ -384,7 +396,7 @@ void HUD_MinigameMenu_CurrentButton() else { entity p; - for ( e = HUD_MinigameMenu_last_entry; e != world; e = p.list_prev ) + for ( e = HUD_MinigameMenu_last_entry; e != NULL; e = p.list_prev ) { p = e; if ( e.classname == "hud_minigamemenu_current" ) @@ -396,7 +408,7 @@ void HUD_MinigameMenu_CurrentButton() break; } } - for ( e = HUD_MinigameMenu_last_entry; e != world; e = e.list_prev ) + for ( e = HUD_MinigameMenu_last_entry; e != NULL; e = e.list_prev ) if ( e.classname == "hud_minigamemenu_exit" ) return; entity exit = HUD_MinigameMenu_SpawnEntry( @@ -409,7 +421,7 @@ void HUD_MinigameMenu_CurrentButton() // Open the minigame menu panel void HUD_MinigameMenu_Open() { - if ( !HUD_MinigameMenu_IsOpened() ) + if ( !mv_active && !HUD_MinigameMenu_IsOpened() ) { HUD_MinigameMenu_InsertEntry( HUD_MinigameMenu_SpawnEntry( _("Create"), '0 0 0', hud_fontsize*1.5,'0.7 0.84 1', HUD_MinigameMenu_ClickCreate), @@ -418,18 +430,16 @@ void HUD_MinigameMenu_Open() _("Join"),'0 0 0',hud_fontsize*1.5,'0.7 0.84 1', HUD_MinigameMenu_ClickJoin), HUD_MinigameMenu_last_entry ); HUD_MinigameMenu_CurrentButton(); - HUD_MinigameMenu_activeitem = world; - if(autocvar_hud_cursormode) - setcursormode(1); + HUD_MinigameMenu_activeitem = NULL; } } // Handles mouse input on to minigame menu panel void HUD_MinigameMenu_MouseInput() { - panel = HUD_PANEL(MINIGAME_MENU); + panel = HUD_PANEL(MINIGAMEMENU); - HUD_Panel_UpdateCvars(); + HUD_Panel_LoadCvars(); if(panel_bg_padding) { @@ -441,9 +451,9 @@ void HUD_MinigameMenu_MouseInput() panel_pos_y += hud_fontsize_y*2; - HUD_MinigameMenu_activeitem = world; + HUD_MinigameMenu_activeitem = NULL; vector sz; - for ( e = HUD_MinigameMenu_entries; e != world; e = e.list_next ) + for ( e = HUD_MinigameMenu_entries; e != NULL; e = e.list_next ) { sz = eX*panel_size_x + eY*e.size_y; if ( e.model ) @@ -472,13 +482,20 @@ void HUD_MinigameMenu_DrawColoredEntry(vector pos, string s, vector fontsize) // Minigame menu panel UI void HUD_MinigameMenu () { + if (mv_active) + { + if (HUD_MinigameMenu_IsOpened()) + HUD_MinigameMenu_Close(NULL, NULL, NULL); + return; + } + if ( !HUD_MinigameMenu_IsOpened() ) return; - HUD_Panel_UpdateCvars(); + HUD_Panel_LoadCvars(); HUD_Scale_Disable(); - HUD_Panel_DrawBg(1); + HUD_Panel_DrawBg(); if(panel_bg_padding) { @@ -493,7 +510,7 @@ void HUD_MinigameMenu () vector offset; float itemh; vector imgsz = '22 22 0'; // NOTE: if changed, edit where HUD_MinigameMenu_activeitem is selected - for ( entity e = HUD_MinigameMenu_entries; e != world; e = e.list_next ) + for ( entity e = HUD_MinigameMenu_entries; e != NULL; e = e.list_next ) { color = e.colormod; @@ -535,17 +552,24 @@ void HUD_MinigameMenu () void HUD_MinigameHelp() { + if (!HUD_MinigameMenu_IsOpened()) + return; + string help_message; if(!autocvar__hud_configure) + { + if (!active_minigame) + return; help_message = active_minigame.message; + } else - help_message = "Minigame message"; + help_message = _("Minigame message"); if ( !help_message ) return; - HUD_Panel_UpdateCvars(); + HUD_Panel_LoadCvars(); vector pos, mySize; @@ -575,7 +599,7 @@ float HUD_Minigame_InputEvent(float bInputType, float nPrimary, float nSecondary { mousepos_x = nPrimary; mousepos_y = nSecondary; - if ( minigame_isactive() && HUD_mouse_over(HUD_PANEL(MINIGAME_BOARD)) ) + if ( active_minigame && HUD_mouse_over(HUD_PANEL(MINIGAMEBOARD)) ) active_minigame.minigame_event(active_minigame,"mouse_moved",mousepos); return true; @@ -598,22 +622,22 @@ float HUD_Minigame_InputEvent(float bInputType, float nPrimary, float nSecondary } // allow some binds - string con_keys; - con_keys = findkeysforcommand("toggleconsole", 0); + string con_keys = findkeysforcommand("toggleconsole", 0); int keys = tokenize(con_keys); // findkeysforcommand returns data for this - for (int i = 0; i < keys; ++i) + int i; + for (i = 0; i < keys; ++i) { if(nPrimary == stof(argv(i))) return false; } - if ( minigame_isactive() && ( bInputType == 0 || bInputType == 1 ) ) + if ( active_minigame && ( bInputType == 0 || bInputType == 1 ) ) { string device = ""; string action = bInputType == 0 ? "pressed" : "released"; if ( nPrimary >= K_MOUSE1 && nPrimary <= K_MOUSE16 ) { - if ( HUD_mouse_over(HUD_PANEL(MINIGAME_BOARD)) ) + if ( HUD_mouse_over(HUD_PANEL(MINIGAMEBOARD)) ) device = "mouse"; } else @@ -629,7 +653,7 @@ float HUD_Minigame_InputEvent(float bInputType, float nPrimary, float nSecondary if ( bInputType == 0 ) { if ( nPrimary == K_MOUSE1 && HUD_MinigameMenu_activeitem && - HUD_mouse_over(HUD_PANEL(MINIGAME_MENU)) ) + HUD_mouse_over(HUD_PANEL(MINIGAMEMENU)) ) { HUD_MinigameMenu_Click(HUD_MinigameMenu_activeitem); return true; @@ -667,7 +691,7 @@ float HUD_Minigame_InputEvent(float bInputType, float nPrimary, float nSecondary } else if ( nPrimary == K_ESCAPE ) { - HUD_MinigameMenu_Close(); + HUD_MinigameMenu_Close(NULL, NULL, NULL); return true; } } @@ -682,21 +706,6 @@ void HUD_Minigame_Mouse() if( !HUD_MinigameMenu_IsOpened() || autocvar__hud_configure || mv_active ) return; - if(!autocvar_hud_cursormode) - { - mousepos = mousepos + getmousepos() * autocvar_menu_mouse_speed; - - mousepos_x = bound(0, mousepos_x, vid_conwidth); - mousepos_y = bound(0, mousepos_y, vid_conheight); - } - - if ( HUD_MinigameMenu_IsOpened() && HUD_mouse_over(HUD_PANEL(MINIGAME_MENU)) ) + if ( HUD_MinigameMenu_IsOpened() && HUD_mouse_over(HUD_PANEL(MINIGAMEMENU)) ) HUD_MinigameMenu_MouseInput(); - - draw_cursor_normal(mousepos, '1 1 1', panel_fg_alpha); -} - -bool HUD_Minigame_Showpanels() -{ - return (HUD_MinigameMenu_IsOpened() && minigame_isactive()); }