@@ -67,6 +67,7 @@ Player::Player(bool m_isFakeClient, int m_slot, const char* m_name, uint64 m_xui
6767 this ->language = g_Config->FetchValue <std::string>(" core.language" );
6868
6969 centerMessageEvent = g_gameEventManager->CreateEvent (" show_survival_respawn_status" , true );
70+ menu_renderer = new MenuRenderer (this );
7071
7172 centerMessageEvent->SetUint64 (" duration" , 1 );
7273 centerMessageEvent->SetInt (" userid" , this ->slot );
@@ -78,18 +79,7 @@ Player::~Player()
7879{
7980 this ->isFakeClient = true ;
8081 g_gameEventManager->FreeEvent (centerMessageEvent);
81- if (menuTextID != 0 ) {
82- g_pVGUI->DeleteScreenText (menuTextID);
83- }
84- if (menuPanelID != 0 ) {
85- g_pVGUI->DeleteScreenPanel (menuPanelID);
86- }
87- if (menuFooterID != 0 ) {
88- g_pVGUI->DeleteScreenText (menuFooterID);
89- }
90- if (menuPanelExtendID != 0 ) {
91- g_pVGUI->DeleteScreenPanel (menuPanelExtendID);
92- }
82+ if (menu_renderer) delete menu_renderer;
9383}
9484
9585CBasePlayerController* Player::GetController ()
@@ -375,187 +365,6 @@ void Player::SetButtons(uint64_t new_buttons)
375365 }
376366}
377367
378- bool Player::HasMenuShown () { return (this ->menu != nullptr ); }
379- Menu* Player::GetMenu () { return this ->menu ; }
380-
381- int Player::GetPage () { return this ->page ; }
382- void Player::SetPage (int pg)
383- {
384- this ->page = pg;
385- this ->selected = 0 ;
386- this ->menu ->RegeneratePage (this ->slot , this ->page , this ->selected );
387- this ->RegenerateMenu ();
388- }
389- int Player::GetSelection () { return this ->selected ; }
390- void Player::MoveSelection ()
391- {
392- if (this ->page == 0 )
393- return ;
394-
395- int itemsPerPage = this ->menu ->GetItemsOnPage (this ->page );
396- ++this ->selected ;
397- if (itemsPerPage == this ->selected )
398- this ->selected = 0 ;
399-
400- this ->menu ->RegeneratePage (this ->slot , this ->page , this ->selected );
401- this ->RegenerateMenu ();
402- }
403-
404- void Player::RegenerateMenu ()
405- {
406- auto menuText = g_pVGUI->GetScreenText (menuTextID);
407- if (!menuText) return ;
408-
409- menuText->SetText (this ->menu ->GeneratedItems (this ->slot , this ->page ));
410-
411- auto menuFooter = g_pVGUI->GetScreenText (menuFooterID);
412- if (!menuFooter) return ;
413- menuFooter->SetText (this ->menu ->GenerateFooter (this ->page ));
414- }
415-
416- void Player::ShowMenu (std::string menuid)
417- {
418- if (this ->menu != nullptr )
419- return ;
420-
421- Menu* m = g_MenuManager->FetchMenu (menuid);
422- if (m == nullptr )
423- return ;
424-
425- this ->menu = m;
426- this ->page = 1 ;
427- this ->selected = 0 ;
428-
429- this ->menu ->RegeneratePage (this ->slot , this ->page , this ->selected );
430-
431- menuTextID = g_pVGUI->RegisterScreenText ();
432- menuPanelID = g_pVGUI->RegisterScreenPanel ();
433- menuPanelExtendID = g_pVGUI->RegisterScreenPanel ();
434- menuFooterID = g_pVGUI->RegisterScreenText ();
435-
436- auto menuText = g_pVGUI->GetScreenText (menuTextID);
437- auto menuPanel = g_pVGUI->GetScreenPanel (menuPanelID);
438- auto menuPanelExtend = g_pVGUI->GetScreenPanel (menuPanelExtendID);
439- auto menuFooter = g_pVGUI->GetScreenText (menuFooterID);
440-
441- menuFooter->Create (Color (255 ,255 ,255 ,255 ));
442- menuFooter->SetupViewForPlayer (this );
443-
444- menuText->Create (this ->menu ->GetColor ());
445- menuText->SetupViewForPlayer (this );
446- RegenerateMenu ();
447- menuText->SetPosition (0.14 , 0.68 );
448-
449- menuFooter->SetPosition (0.14 , 0.27 );
450-
451- menuPanel->Create (Color (18 , 18 , 18 , 255 ));
452- menuPanel->SetupViewForPlayer (this );
453- menuPanel->SetText (" █" );
454- menuPanel->SetPosition (0.13 , 0.7 );
455-
456- menuPanelExtend->Create (Color (18 , 18 , 18 , 255 ));
457- menuPanelExtend->SetupViewForPlayer (this );
458- menuPanelExtend->SetText (" █" );
459- menuPanelExtend->SetPosition (0.17 , 0.7 );
460- }
461-
462- void Player::HideMenu ()
463- {
464- if (this ->menu == nullptr )
465- return ;
466-
467- this ->page = 0 ;
468- this ->selected = 0 ;
469- if (this ->menu ->IsTemporary ())
470- {
471- std::string menuID = this ->menu ->GetID ();
472- g_MenuManager->UnregisterMenu (menuID);
473- }
474- this ->menu = nullptr ;
475-
476- g_pVGUI->DeleteScreenText (menuFooterID);
477- g_pVGUI->DeleteScreenText (menuTextID);
478- g_pVGUI->DeleteScreenPanel (menuPanelID);
479- g_pVGUI->DeleteScreenPanel (menuPanelExtendID);
480-
481- menuTextID = 0 ;
482- menuPanelID = 0 ;
483- menuFooterID = 0 ;
484- menuPanelExtendID = 0 ;
485- }
486-
487- void Player::PerformMenuAction (std::string button)
488- {
489- if (!this ->HasMenuShown ())
490- return ;
491-
492- if (button == g_Config->FetchValue <std::string>(" core.menu.buttons.scroll" ))
493- {
494- CCSPlayerController* controller = this ->GetPlayerController ();
495- CSingleRecipientFilter filter (this ->slot );
496- if (controller)
497- controller->EmitSoundFilter (filter, g_Config->FetchValue <std::string>(" core.menu.sound.scroll.name" ), 1.0 , g_Config->FetchValue <double >(" core.menu.sound.scroll.volume" ));
498-
499- this ->MoveSelection ();
500- this ->RegenerateMenu ();
501- }
502- else if (!g_Config->FetchValue <bool >(" core.menu.buttons.exit.option" ) && button == g_Config->FetchValue <std::string>(" core.menu.buttons.exit.button" ))
503- {
504- CCSPlayerController* controller = this ->GetPlayerController ();
505- CSingleRecipientFilter filter (this ->slot );
506- if (controller)
507- controller->EmitSoundFilter (filter, g_Config->FetchValue <std::string>(" core.menu.sound.exit.name" ), 1.0 , g_Config->FetchValue <double >(" core.menu.sound.exit.volume" ));
508- this ->HideMenu ();
509- }
510- else if (button == g_Config->FetchValue <std::string>(" core.menu.buttons.use" ))
511- {
512- std::string cmd = this ->GetMenu ()->GetCommandFromOption (this ->GetPage (), this ->GetSelection ());
513- CCSPlayerController* controller = this ->GetPlayerController ();
514- CSingleRecipientFilter filter (this ->slot );
515- if (controller && cmd != " menuexit" )
516- controller->EmitSoundFilter (filter, g_Config->FetchValue <std::string>(" core.menu.sound.use.name" ), 1.0 , g_Config->FetchValue <double >(" core.menu.sound.use.volume" ));
517- if (cmd == " menunext" )
518- {
519- this ->SetPage (this ->GetPage () + 1 );
520- this ->RegenerateMenu ();
521- }
522- else if (cmd == " menuback" )
523- {
524- this ->SetPage (this ->GetPage () - 1 );
525- this ->RegenerateMenu ();
526- }
527- else if (g_Config->FetchValue <bool >(" core.menu.buttons.exit.option" ) && cmd == " menuexit" )
528- {
529- CCSPlayerController* controller = this ->GetPlayerController ();
530- CSingleRecipientFilter filter (this ->slot );
531- if (controller)
532- controller->EmitSoundFilter (filter, g_Config->FetchValue <std::string>(" core.menu.sound.exit.name" ), 1.0 , g_Config->FetchValue <double >(" core.menu.sound.exit.volume" ));
533- this ->HideMenu ();
534- }
535- else if (g_MenuManager->FetchMenu (cmd))
536- {
537- this ->HideMenu ();
538- this ->ShowMenu (cmd);
539- }
540- else if (starts_with (cmd, " sw_" ))
541- {
542- CCommand tokenizedArgs;
543- tokenizedArgs.Tokenize (cmd.c_str ());
544-
545- std::vector<std::string> cmdString = TokenizeCommand (cmd);
546- cmdString.erase (cmdString.begin ());
547-
548- std::string commandName = replace (tokenizedArgs[0 ], " sw_" , " " );
549-
550- Command* cmd = g_commandsManager->FetchCommand (commandName);
551- if (cmd)
552- cmd->Execute (this ->slot , cmdString, true , " sw_" );
553- }
554- else if (cmd != " " )
555- this ->PerformCommand (cmd);
556- }
557- }
558-
559368void Player::PerformCommand (std::string command)
560369{
561370 engine->ClientCommand (this ->GetSlot (), command.c_str ());
0 commit comments