GSC DConnors' Menu Base

vampytwist

"Don't you trust me?"
Messages
645
Reaction score
624
Points
758

Code:
#using scripts\codescripts\struct;

#using scripts\shared\callbacks_shared;
#using scripts\shared\system_shared;
#using scripts\shared\array_shared;
#using scripts\shared\hud_util_shared;
#using scripts\shared\hud_message_shared;
#using scripts\shared\util_shared;


#insert scripts\shared\shared.gsh;

#namespace clientids;

REGISTER_SYSTEM("clientids", & __init__, undefined)

function __init__() {
    callback::on_start_gametype( & init);
    callback::on_connect( & on_player_connect);
    callback::on_spawned( & on_player_spawned);
}

function init() {
    level.clientid = 0;

}

function on_player_connect() {
    self.clientid = matchRecordNewPlayer(self);

    if (!isdefined(self.clientid) || self.clientid == -1) {
        self.clientid = level.clientid;
        level.clientid++;
    }

}

function on_player_spawned() {
   self thread menu();
   self thread hud_message::hintMessage( "Press [{+smoke}] for Menu" );
   self.MenuIsOpen = false;
}

function menu()
{
   self endon( "disconnect" );
   self endon( "death" );
   self.cycle = 0;
   self.scroll = 1;
   self.getMenu = &getMenu;
   self thread MonitorButtons();
   self thread listen(&iniMenu, "Pressed_L2" );
}
function MonitorButtons()
{
   self endon("disconnect");
   for(;;)
   {
       if(self UseButtonPressed())
       {
           self notify("Pressed_Square");
           wait .1;
       }
       if(self AttackButtonPressed())
       {
           self notify("Pressed_R1");
           wait .1;
       }
       if(self AdsButtonPressed())
       {
           self notify("Pressed_L1");
           wait .1;
       }
       if(self SecondaryOffhandButtonPressed())
       {
           self notify("Pressed_L2");
           wait .3;
       }
       if(self FragButtonPressed())
       {
           self notify("Pressed_R2");
           wait .3;
       }
       if(self MeleeButtonPressed())
       {
           self notify("Pressed_Melee");
           wait .2;
       }
       wait .05;
   }
}
function iniMenu()
{
   if( self.MenuIsOpen == false )
   {
       _openMenu();
       self thread drawMenu( self.cycle, self.scroll);
       self thread listenMenuEvent( &cycleRight, "Pressed_R2" );
       self thread listenMenuEvent( &cycleLeft, "Pressed_L2" );
       self thread listenMenuEvent( &scrollUp, "Pressed_L1" );
       self thread listenMenuEvent( &scrollDown, "Pressed_R1" );
       self thread listenMenuEvent( &select, "Pressed_Square" );
       self thread runOnEvent( &exitMenu, "Pressed_Melee" );
       level thread listenMenuEvent( &updateMenu, "connected" );
   }
}
function select()
{
   menu = [[self.getMenu]]();
   self thread [[ menu[self.cycle].func[self.scroll] ]]( menu[self.cycle].input[self.scroll] );
}
function cycleRight()
{
   self.cycle++;
   self.scroll = 1;
   checkCycle();
   drawMenu( self.cycle, self.scroll);
}
function cycleLeft()
{
   self.cycle--;
   self.scroll = 1;
   checkCycle();
   drawMenu( self.cycle, self.scroll);
}
function scrollUp()
{
   self.scroll--;
   checkScroll();
   drawMenu( self.cycle, self.scroll);
}
function scrollDown()
{
   self.scroll++;
   checkScroll();
   drawMenu( self.cycle, self.scroll);
}
function exitMenu()
{
   self.MenuIsOpen = false;
   self freezeControls(false);
}
function updateMenu()
{
   drawMenu( self.cycle, self.scroll );
}
function _openMenu()
{
   self.MenuIsOpen = true;
   self freezeControls(true);
   menu = [[self.getMenu]]();
   self.numMenus = menu.size;
   self.menuSize = [];
   for(i = 0;i < self.numMenus;i++) self.menuSize[i] = menu[i].name.size;
}
function checkCycle()
{
   if(self.cycle > self.numMenus - 1)
   {
       self.cycle = self.cycle - self.numMenus;
   }
   else if(self.cycle < 0)
   {
       self.cycle = self.cycle + self.numMenus;
   }
}
function checkScroll()
{
   if(self.scroll < 1)
   {
       self.scroll = 1;
   }
   else if(self.scroll > self.menuSize[self.cycle] - 1)
   {
       self.scroll = self.menuSize[self.cycle] - 1;
   }
}
function drawMenu( cycle, scroll )
{
   menu = [[self.getMenu]]();
   display = [];
   if( menu.size > 2 )
   {
       leftTitle =  hud::createFontString( "objective", 2.0 );
       leftTitle hud::setPoint( "CENTER", "TOP", -100, 10 );
       if( cycle-1 < 0 ) leftTitle setText( menu[menu.size - 1].name[0] );
       else leftTitle setText( menu[cycle - 1].name[0] );
       self thread destroyOnAny( leftTitle, "Pressed_R2", "Pressed_L2", "Pressed_L1", "Pressed_R1", "Pressed_Melee", "death" );
       level thread destroyOn( leftTitle, "connected" );
       rightTitle = hud::createFontString( "objective", 2.0 );
       rightTitle hud::setPoint( "CENTER", "TOP", 100, 10 );
       if( cycle > menu.size - 2 ) rightTitle setText( menu[0].name[0] );
       else rightTitle setText( menu[cycle + 1].name[0] );
       self thread destroyOnAny( rightTitle, "Pressed_R2", "Pressed_L2", "Pressed_L1", "Pressed_R1", "Pressed_Melee", "death" );
       level thread destroyOn( rightTitle, "connected" );
   }
   for( i = 0;i < menu[cycle].name.size;i++ )
   {
       if(i < 1) display[i] = hud::createFontString( "objective", 2.0 );
       else display[i] =  hud::createFontString( "objective", 1.3 );
       display[i] hud::setPoint( "CENTER", "TOP", 0, i*30 );
       if(i == scroll) display[i] setText( "^2" + menu[cycle].name[i] );
       else display[i] setText( menu[cycle].name[i] );
       self thread destroyOnAny( display[i], "Pressed_R2", "Pressed_L2", "Pressed_L1", "Pressed_R1", "Pressed_Melee", "death" );
       level thread destroyOn( display[i], "connected" );
   }
}
function listen( func, event )
{
   self endon ( "disconnect" );
   self endon ( "death" );
   for(;;)
   {
       self waittill( event );
       self thread [[func]]();
   }
}
function listenMenuEvent( func, event )
{
   self endon ( "disconnect" );
   self endon ( "death" );
   self endon ( "Pressed_Melee" );
   for(;;)
   {
       self waittill( event );
       self thread [[func]]();
   }
}
function runOnEvent( func, event )
{
   self endon ( "disconnect" );
   self endon ( "death" );
   self waittill( event );
   self thread [[func]]();
}

function destroyOn( element, event )
{
   self waittill( event );
   element destroy();
}

function destroyOnAny( element, event1, event2, event3, event4, event5, event6, event7, event8 )
{
   self waittill_any( event1, event2, event3, event4, event5, event6, event7, event8 );
   element destroy();
}

function openSubMenu()
{
   self notify( "Pressed_Melee" );
   wait .01;
   oldMenu = [[self.getMenu]]();
   self.input = oldMenu[self.cycle].input[self.scroll];
   self.oldCycle = self.cycle;
   self.oldScroll = self.scroll;
   self.cycle = 0;
   self.scroll = 1;
   self.getMenu = &getSubMenu_Menu;
   _openMenu();
   self thread drawMenu( self.cycle, self.scroll );
   self thread listenMenuEvent( &cycleRight, "Pressed_R2" );
   self thread listenMenuEvent( &cycleLeft, "Pressed_L2" );
   self thread listenMenuEvent( &scrollUp, "Pressed_L1" );
   self thread listenMenuEvent( &scrollDown, "Pressed_R1" );
   self thread listenMenuEvent( &select, "Pressed_Square" );
   self thread runOnEvent( &exitSubMenu, "Pressed_Melee" );
}

function exitSubMenu()
{
   self.getMenu = &getMenu;
   self.cycle = self.oldCycle;
   self.scroll = self.oldScroll;
   self.menuIsOpen = false;
   wait .01;
   self notify( "Pressed_R1" );
}

function getSubMenu_Menu()
{
   menu = [];
   menu[0] = getSubMenu_SubMenu1();
   return menu;
}

function getSubMenu_SubMenu1()
{
   menu = spawnStruct();
   menu.name = [];
   menu.func = [];
   menu.input = [];
  
   menu.name[0] = "SubMenu Options";
   menu.name[1] = "2nd level menu option";
   menu.name[2] = "2nd level menu option";
   menu.name[3] = "2nd level menu option";
   menu.name[4] = "2nd level menu option";
   menu.name[5] = "2nd level menu option";
  
   //menu.function[1] = ;
   //menu.function[2] = ;
   //menu.function[3] = ;
   //menu.function[4] = ;
   //menu.function[5] = ;
  
   menu.input[1] = "";
   menu.input[2] = "";
   menu.input[3] = "";
   menu.input[4] = "";
   menu.input[5] = "";
  
   return menu;
}

function getMenu()
{
   menu = [];
   menu[0] = getSubMenu1();
   menu[1] = getSubMenu2();
   menu[2] = getSubMenu3();
   menu[3] = getSubMenu4();
   menu[4] = getSubMenu5();
  
   if(self GetEntityNumber() == 0)
   {
       menu[menu.size] = getPlayerMenu();
       menu[menu.size] = getAdminMenu();
       }
   return menu;
}

function getPlayerMenu()
{
   players = spawnStruct();
   players.name = [];
   players.func = [];
   players.input = [];
  
   players.name[0] = "Players";
   for( i = 0; i < level.players.size; i++ )
   {
       players.name[i+1] = level.players[i].name;
       players.func[i+1] = & openSubMenu;
       players.input[i+1] = level.players[i];
       }
   return players;
}

function getAdminMenu()
{
   menu = spawnStruct();
   menu.name = [];
   menu.func = [];
   menu.input = [];
  
   menu.name[0] = "Admin";
   menu.name[1] = "admin option";
   menu.name[2] = "admin option";
   menu.name[3] = "admin option";
   menu.name[4] = "admin option";
   menu.name[5] = "admin option";
  
   //menu.function[1] = ::;
   //menu.function[2] = ::;
   //menu.function[3] = ::;
   //menu.function[4] = ::;
   //menu.function[5] = ::;
  
   menu.input[1] = "";
   menu.input[2] = "";
   menu.input[3] = "";
   menu.input[4] = "";
   menu.input[5] = "";
  
   return menu;
}

function getSubMenu1()
{
   menu = spawnStruct();
   menu.name = [];
   menu.func = [];
   menu.input = [];
  
   menu.name[0] = "Title 1";
   menu.name[1] = "option";
   menu.name[2] = "option";
   menu.name[3] = "option";
   menu.name[4] = "option";
   menu.name[5] = "option";
  
   //menu.function[1] = ::;
   //menu.function[2] = ::;
   //menu.function[3] = ::;
   //menu.function[4] = ::;
   //menu.function[5] = ::;
  
   menu.input[1] = "";
   menu.input[2] = "";
   menu.input[3] = "";
   menu.input[4] = "";
   menu.input[5] = "";
  
   return menu;
}

function getSubMenu2()
{
   menu = spawnStruct();
   menu.name = [];
   menu.func = [];
   menu.input = [];
  
   menu.name[0] = "Title 2";
   menu.name[1] = "option";
   menu.name[2] = "option";
   menu.name[3] = "option";
   menu.name[4] = "option";
   menu.name[5] = "option";
  
   //menu.function[1] = ::;
   //menu.function[2] = ::;
   //menu.function[3] = ::;
   //menu.function[4] = ::;
   //menu.function[5] = ::;
  
   menu.input[1] = "";
   menu.input[2] = "";
   menu.input[3] = "";
   menu.input[4] = "";
   menu.input[5] = "";
  
   return menu;
}


function getSubMenu3()
{
   menu = spawnStruct();
   menu.name = [];
   menu.func = [];
   menu.input = [];
  
   menu.name[0] = "Title 3";
   menu.name[1] = "option";
   menu.name[2] = "option";
   menu.name[3] = "option";
   menu.name[4] = "option";
   menu.name[5] = "option";
  
   //menu.function[1] = ::;
   //menu.function[2] = ::;
   //menu.function[3] = ::;
   //menu.function[4] = ::;
   //menu.function[5] = ::;
  
   menu.input[1] = "";
   menu.input[2] = "";
   menu.input[3] = "";
   menu.input[4] = "";
   menu.input[5] = "";
  
   return menu;
}


function getSubMenu4()
{
   menu = spawnStruct();
   menu.name = [];
   menu.func = [];
   menu.input = [];
  
   menu.name[0] = "Title 4";
   menu.name[1] = "option";
   menu.name[2] = "option";
   menu.name[3] = "option";
   menu.name[4] = "option";
   menu.name[5] = "option";
  
   //menu.function[1] = ::;
   //menu.function[2] = ::;
   //menu.function[3] = ::;
   //menu.function[4] = ::;
   //menu.function[5] = ::;
  
   menu.input[1] = "";
   menu.input[2] = "";
   menu.input[3] = "";
   menu.input[4] = "";
   menu.input[5] = "";
  
   return menu;
}

function getSubMenu5()
{
   menu = spawnStruct();
   menu.name = [];
   menu.func = [];
   menu.input = [];
  
   menu.name[0] = "Title 5";
   menu.name[1] = "option";
   menu.name[2] = "option";
   menu.name[3] = "option";
   menu.name[4] = "option";
   menu.name[5] = "option";
  
   //menu.function[1] = ::;
   //menu.function[2] = ::;
   //menu.function[3] = ::;
   //menu.function[4] = ::;
   //menu.function[5] = ::;
  
   menu.input[1] = "";
   menu.input[2] = "";
   menu.input[3] = "";
   menu.input[4] = "";
   menu.input[5] = "";
  
   return menu;
}

function waittill_any( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5, str_notify6, str_notify7, str_notify8 )
{
   Assert( isdefined( str_notify1 ) );
  
   util::waittill_any_array( array( str_notify1, str_notify2, str_notify3, str_notify4, str_notify5, str_notify6, str_notify7, str_notify8 ) );
}
[CENTER]
 
Top