etqw-sdk/base/guis/game/limbo/limbo.gui

1686 lines
58 KiB
Plaintext
Raw Normal View History

2008-05-29 00:00:00 +00:00
// NEVER use "player.<propname>" properties in the limbo menu
// Many "player." properties represent the local player OR
// the player that the local player is spectating
// ALWAYS use the limbo.<propname> equivalents as they only ever
// refer to the local player
// XOXOXO - jrad
#include <guis/common/utility.include>
#include <guis/common/materials.include>
#include <guis/common/colors.include>
#include <guis/game/limbo/colors.include>
#include <guis/game/limbo/limbo.include>
#include <guis/game/limbo/materials.include>
#include <guis/game/limbo/stats.include>
#include <guis/game/hud/text.include>
#include <guis/game/chat.include>
#include <guis/mainmenu/defines.include>
#include <guis/mainmenu/effects.include>
#include <guis/mainmenu/materials.include>
#include <guis/mainmenu/utility.include>
#include <guis/game/game_materials.include>
#include <guis/mainmenu/cvars.include>
#include <guis/mainmenu/components/button.include>
#include <guis/mainmenu/components/check.include>
#include <guis/mainmenu/components/dialog.include>
#include <guis/mainmenu/components/dropdown.include>
#include <guis/mainmenu/components/edit.include>
#include <guis/mainmenu/components/group.include>
#include <guis/mainmenu/components/list.include>
#include <guis/mainmenu/components/menu.include>
#include <guis/mainmenu/components/icon.include>
#include <guis/mainmenu/components/label.include>
#include <guis/mainmenu/components/radio.include>
#include <guis/mainmenu/components/slider.include>
#include <guis/mainmenu/components/tab_page.include>
#include <guis/mainmenu/components/tooltip.include>
#include <guis/mainmenu/components/window.include>
// Proficiency Tabs
#define PT_ROLE 1
#define PT_PROFICIENCY 2
// Game Info
#define GI_CAMPAIGN 1
#define GI_STATS 2
#define GI_ADMIN 3
#define GI_VOTE 4
// Player Info
#define PI_INFO 1
#define PI_CHAT 2
gui limbo {
properties {
float flags = immediate( flags ) | GUI_SHOWCURSOR | GUI_FULLSCREEN | GUI_TOOLTIPS | GUI_INHIBIT_GAME_WORLD | GUI_CATCH_ALL_EVENTS;
float mapZoomLevel = 1;
float numAvailableWeapons = 0;
string teamSelection = "";
string lastTeamSelection = "";
string classSelection = "";
float weaponSelection = 0;
float weaponSelectionKey = 0;
float activeWeaponSelection = 0;
float activeWeaponSelectionKey = 0;
string bindContext = "menu";
float trainingMode = 0;
float checkCookie = false;
string voiceOver = "";
float volumeScale = 0;
handle noLimitText = localize( "guis/mainmenu/nolimit" );
handle disabledText = localize( "guis/mainmenu/botsdisabled" );
string respawnTimerText;
float twoHandedBank; // cached handle for the two-handed weapon bank
float allowKeyBindings = icompare( focusedWindow, "edtChat" ) == false;
float playZone = 0;
float modelDragging = false;
string flashButton = "";
handle gradMaterial = cacheMaterial( "btnGradAdd", "_3h button_grad_add" );
handle facFillMaterial = cacheMaterial( "facFill", "_frame faction" );
handle facLineMaterial = cacheMaterial( "facLine", "_frame faction_line" );
handle facGradMaterial = cacheMaterial( "facGrad", "_frame faction_grad" );
handle facHiGradMaterial = cacheMaterial( "facHiGrad", "_3h faction_hi_grad" );
handle profBackMaterial = cacheMaterial( "profBack", "_st prof_starback" );
handle profIconMaterial = cacheMaterial( "profStar", "_st prof_star" );
handle levelPreview = cacheMaterial( "levelPreview", "levelshot" );
handle campaignPreview = cacheMaterial( "campPreview", "campaignshot" );
handle criticalClass = cacheMaterial( "critClass", "critical_class" );
}
_dialog_container
// init window classes
_btn_init
_chk_init
_dlg_init
_wnd_init
_lst_init
_rad_init
_tabs_init
materials {
"prof_star" "guis/assets/icons/icons_sheet1, rect( 64, 96, 16, 16 )"
"prof_starback" "guis/assets/icons/icons_sheet1, rect( 80, 96, 16, 16 )"
"prof_fieldops" "guis/assets/icons/stats, rect( 0, 0, 32, 32 )"
"prof_soldier" "guis/assets/icons/stats, rect( 32, 0, 32, 32 )"
"prof_engineer" "guis/assets/icons/stats, rect( 64, 0, 32, 32 )"
"prof_medic" "guis/assets/icons/stats, rect( 96, 0, 32, 32 )"
"prof_covertops" "guis/assets/icons/stats, rect( 128, 0, 32, 32 )"
"prof_battlesense" "guis/assets/icons/stats, rect( 224, 0, 32, 32 )"
"prof_weapon_handling" "guis/assets/icons/stats, rect( 160, 0, 32, 32 )"
"prof_vehicle" "guis/assets/icons/stats, rect( 192, 0, 32, 32 )"
"logostrogg" "guis/assets/limbo/logostrogg"
"logogdf" "guis/assets/limbo/logogdf"
"logospec" "guis/assets/limbo/logo"
"stats_separator" "guis/assets/mainmenu/sheet_add, rect( 227, 224, 2, 16 )"
"lagicon" "hud/icons/lagicon"
"obj01" "hud/objectives/marker_01"
"obj02" "hud/objectives/marker_02"
"obj03" "hud/objectives/marker_03"
"obj04" "hud/objectives/marker_04"
"obj05" "hud/objectives/marker_05"
"critical_class" "guis/assets/icons/icons_sheet1, rect( 32, 0, 16, 16 )"
"documents" "hud/icons/missionsystem/obj_document"
"bot" "guis/assets/icons/icons_sheet1, rect( 80, 0, 16, 16 )"
"objective_highlight" "hud/icons/missionsystem/obj_highlight"
}
timeline limboVoice {
properties {
float active = false;
}
onTime 500 {
if( player.serverIsRepeater == false ) {
gui.stopVoice();
gui.checkCookie = true;
gui.voiceOver = "enter_limbo";
gui.postNamedEvent( "startVoice" );
}
}
/*onTime 14000 {
if( player.serverIsRepeater == false ) {
gui.checkCookie = true;
gui.voiceOver = "welcome_1";
gui.postNamedEvent( "startVoice" );
}
}*/
}
timeline stroggTeamVoice {
properties {
float active = false;
}
onTime 0 {
gui.timeline.limboVoice.active = false;
gui.timeline.limboVoice.resetTime( 0 );
gui.voiceOver = "team_strogg";
gui.postNamedEvent( "startVoice" );
}
onTime 14000 {
gui.stopVoice();
gui.voiceOver = "welcome_2";
gui.postNamedEvent( "startVoice" );
}
/*onTime 29000 {
gui.stopVoice();
gui.voiceOver = "welcome_3";
gui.postNamedEvent( "startVoice" );
}*/
}
timeline gdfTeamVoice {
properties {
float active = false;
}
onTime 0 {
gui.timeline.limboVoice.active = false;
gui.timeline.limboVoice.resetTime( 0 );
gui.voiceOver = "team_gdf";
gui.postNamedEvent( "startVoice" );
}
onTime 16000 {
gui.stopVoice();
gui.voiceOver = "welcome_2";
gui.postNamedEvent( "startVoice" );
}
/*onTime 29000 {
gui.stopVoice();
gui.voiceOver = "welcome_3";
gui.postNamedEvent( "startVoice" );
}*/
}
atmospheres {
"limbo" ""
}
_menu_icons
_limbo_materials
_player_upgrade_icons
sounds {
"bad" "sounds/ui/main/bad"
"interaction" "sounds/ui/main/interaction"
"spawnSelect" "sounds/ui/main/select_01"
// VO's
"enter_limbo" "sounds/tooltips/limbo/enter_limbo"
"team_gdf" "sounds/tooltips/limbo/team_gdf"
"team_strogg" "sounds/tooltips/limbo/team_strogg"
"aggressor" "sounds/tooltips/limbo/aggressor"
"technician" "sounds/tooltips/limbo/technician"
"constructor" "sounds/tooltips/limbo/constructor"
"oppressor" "sounds/tooltips/limbo/oppressor"
"infiltrator" "sounds/tooltips/limbo/infiltrator"
"soldier" "sounds/tooltips/limbo/soldier"
"medic" "sounds/tooltips/limbo/medic"
"engineer" "sounds/tooltips/limbo/engineer"
"fieldops" "sounds/tooltips/limbo/fieldops"
"covertops" "sounds/tooltips/limbo/covertops"
"welcome_1" "sounds/tooltips/tooltip_introductory1/info"
"welcome_2" "sounds/tooltips/tooltip_introductory2/info"
"welcome_3" "sounds/tooltips/tooltip_introductory3/info"
}
events {
onCVarChanged "g_trainingMode" {
trainingMode = gui.getCVarFloat( "g_trainingMode" );
}
onCVarChanged "g_tooltipVolumeScale" {
volumeScale = gui.getCVarFloat( "g_tooltipVolumeScale" );
}
onActivate {
trainingMode = gui.getCVarFloat( "g_trainingMode" );
volumeScale = gui.getCVarFloat( "g_tooltipVolumeScale" );
gui.flashTeams.postNamedEvent( "stopFlash" );
gui.flashClasses.postNamedEvent( "stopFlash" );
gui.flashClass.postNamedEvent( "stopFlash" );
twoHandedBank = getWeaponBankForName( "twohanded" );
if( player.serverIsRepeater == false ) {
teamSelection = immediate( limbo.teamName );
if( icompare( teamSelection, "spec" ) == false ) {
lastTeamSelection = immediate( teamSelection );
}
classSelection = limbo.role;
weaponList.postNamedEvent( "updateList" );
weaponList.currentSelection = weaponList.findItemDataInt( limbo.weaponIndex, 0 );
postNamedEvent( "remapClasses" );
postNamedEvent( "updateTimers" );
playerModel_RenderModel.postNamedEvent( "updateModel" );
playerModel_Weapon.postNamedEvent( "updateModel" );
edtChat.allowDeactivate = false;
edtChat.allowUnfocus = true;
focusedWindow = "";
} else {
teamSelection = "spec";
}
_set_tab_page_fast( gameInfo, GI_CAMPAIGN )
if( player.serverIsRepeater == false ) {
if( globals.gameHud.wantAdmin ) {
_set_tab_page_fast( gameInfo, GI_ADMIN )
}
if( globals.gameHud.wantVote ) {
_set_tab_page_fast( gameInfo, GI_VOTE )
}
}
globals.gameHud.wantAdmin = 0;
globals.gameHud.wantVote = 0;
playZone = limbo.defaultPlayZone;
timeline.limboVoice.active = true;
timeline.limboVoice.resetTime( 0 );
fadeSoundClass( 2, volumeScale, 500 ); // tooltip VO
}
onDeactivate {
fadeSoundClass( 1, -60, 500 );
fadeSoundClass( 2, 0, 500 ); // tooltip VO
postNamedEvent( "stopVoice" );
}
onNamedEvent "deploy" {
if( icompare( teamSelection, "spec" ) == 1 ) {
consoleCommand( "clientTeam spec" + _newline );
deactivate();
} else {
if( icompare( classSelection, "spec" ) == 0 ) {
consoleCommand( "clientTeam " + teamSelection + _newline );
consoleCommand( "clientClass " + classSelection + " " + toString( weaponSelectionKey, 0 ) + _newline );
activeWeaponSelection = immediate( weaponSelection );
activeWeaponSelectionKey = immediate( weaponSelectionKey );
deactivate();
}
}
}
onPropertyChanged "limbo.teamName" {
postNamedEvent( "updateTimers" );
}
onNamedEvent "updateTimers" {
if ( icompare( teamSelection, "gdf" ) ) {
respawnTimerText = msToHMS( globals.gameHud.gdfRespawnTime - player.gameTime );
return;
}
if ( icompare( teamSelection, "strogg" ) ) {
respawnTimerText = msToHMS( globals.gameHud.stroggRespawnTime - player.gameTime );
return;
}
respawnTimerText = "";
}
onPropertyChanged "teamSelection" {
postNamedEvent( "remapClasses" );
}
onNamedEvent "remapClasses" {
if( icompare( teamSelection, "spec" ) == false ) {
classSelection = gui.getEquivalentClass( lastTeamSelection, teamSelection, classSelection );
}
}
onPropertyChanged "classSelection" {
postNamedEvent( "stopVoice" );
numAvailableWeapons = getNumWeaponPackages( classSelection );
if( icompare( classSelection, limbo.role ) ) {
weaponSelection = immediate( activeWeaponSelection );
weaponSelectionKey = immediate( activeWeaponSelectionKey );
} else {
weaponSelection = 0;
weaponSelectionKey = 0;
}
updateLimboProficiency( classSelection );
}
onNamedEvent "startVoice" {
if ( !sdnet.hasActiveUser || player.serverIsRepeater ) {
return;
}
if ( compare( gui.voiceOver, "" ) == true ) {
return;
}
if ( checkCookie || trainingMode == false ) {
if ( compare( sdnet.getProfileString( "vo_" + gui.voiceOver, "0" ), "1" ) == true ) {
return;
}
}
if( ( gui.getCVarInt( "g_playTooltipSound" ) == 0 ) || ( ( gui.getCVarInt( "g_playTooltipSound" ) == 1 ) && ( player.isSinglePlayer == false ) ) ) {
return;
}
// flash teams
if ( compare( gui.voiceOver, "enter_limbo" ) == true ) {
gui.flashTeams.postNamedEvent( "startFlash" );
gui.flashClasses.postNamedEvent( "stopFlash" );
gui.flashClass.postNamedEvent( "stopFlash" );
}
// flash classes
if ( compare( gui.voiceOver, "team_gdf" ) == true || compare( gui.voiceOver, "team_strogg" ) == true ) {
gui.flashTeams.postNamedEvent( "stopFlash" );
gui.flashClasses.postNamedEvent( "startFlash" );
gui.flashClass.postNamedEvent( "stopFlash" );
}
// flash class
if ( compare( gui.voiceOver, "enter_limbo" ) == false && compare( gui.voiceOver, "team_gdf" ) == false && compare( gui.voiceOver, "team_strogg" ) == false && compare( gui.voiceOver, "welcome_1" ) == false && compare( gui.voiceOver, "welcome_2" ) == false && compare( gui.voiceOver, "welcome_3" ) == false ) {
gui.flashTeams.postNamedEvent( "stopFlash" );
gui.flashClasses.postNamedEvent( "stopFlash" );
gui.flashClass.postNamedEvent( "startFlash" );
}
gui.playVoice( gui.voiceOver );
sdnet.setProfileString( "vo_" + gui.voiceOver, "1" );
gui.voiceOver = "";
gui.checkCookie = false;
}
onNamedEvent "stopVoice" {
gui.timeline.stroggTeamVoice.active = false;
gui.timeline.stroggTeamVoice.resetTime( 0 );
gui.timeline.gdfTeamVoice.active = false;
gui.timeline.gdfTeamVoice.resetTime( 0 );
gui.flashTeams.postNamedEvent( "stopFlash" );
gui.flashClasses.postNamedEvent( "stopFlash" );
gui.flashClass.postNamedEvent( "stopFlash" );
gui.stopVoice();
}
onNamedEvent "resetVoiceTutorial" {
if ( !sdnet.hasActiveUser ) {
return;
}
sdnet.setProfileString( "vo_enter_limbo", "0" );
sdnet.setProfileString( "vo_team_gdf", "0" );
sdnet.setProfileString( "vo_team_strogg", "0" );
sdnet.setProfileString( "vo_aggressor", "0" );
sdnet.setProfileString( "vo_technician", "0" );
sdnet.setProfileString( "vo_constructor", "0" );
sdnet.setProfileString( "vo_oppressor", "0" );
sdnet.setProfileString( "vo_infiltrator", "0" );
sdnet.setProfileString( "vo_soldier", "0" );
sdnet.setProfileString( "vo_medic", "0" );
sdnet.setProfileString( "vo_engineer", "0" );
sdnet.setProfileString( "vo_fieldops", "0" );
sdnet.setProfileString( "vo_covertops", "0" );
sdnet.setProfileString( "vo_welcome_1", "0" );
sdnet.setProfileString( "vo_welcome_2", "0" );
sdnet.setProfileString( "vo_welcome_3", "0" );
sdnet.setProfileString( "vo_sounds/tooltips/upgrade_new_weapon/info", "0" );
sdnet.setProfileString( "vo_sounds/tooltips/upgrade_now_available/info", "0" );
sdnet.setProfileString( "vo_sounds/tooltips/upgrade_on_respawn/info", "0" );
}
}
windowDef desktop {
properties {
color backColor = COLOR_BACKGROUND;
float flags = immediate( flags ) | WF_CAPTURE_KEYS;
rect rect = 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT;
float allowEvents = gui.modalDialogActive == false;
}
events {
onPropertyChanged "gui.allowKeyBindings" {
if( gui.allowKeyBindings ) {
flags = immediate( flags ) | WF_CAPTURE_KEYS;
} else {
flags = immediate( flags ) & ~WF_CAPTURE_KEYS;
}
}
onKeyDown "bind_limbomenu" {
gui.postNamedEvent( "deploy" );
}
onAccept {
gui.postNamedEvent( "deploy" );
}
onKeyDown "del" "kp_del" {
gui.consoleCommand( "kill" + _newline );
gui.postNamedEvent( "deploy" );
}
onKeyDown "bindkill" {
gui.consoleCommand( "kill" + _newline );
gui.postNamedEvent( "deploy" );
}
onPropertyChanged "limbo.teamName" {
if( icompare( gui.teamSelection, "spec" ) == false ) {
gui.lastTeamSelection = immediate( gui.teamSelection );
}
gui.teamSelection = immediate( limbo.teamName );
}
onKeyDown "[" {
_set_tab_page( classInfo, PT_ROLE );
}
onKeyDown "]" {
_set_tab_page( classInfo, PT_PROFICIENCY );
}
onPropertyChanged "limbo.role" {
gui.classSelection = immediate( limbo.role );
}
onKeyUp "mouse1" {
if ( gui.modelDragging == true || gui.flashClass.timeline.default.active == false ) {
gui.playerModel_RenderModel.modelRotation.y = immediate( gui.playerModel_RenderModel.modelRotation.y );
}
}
onNavForward {
gui.lstSpawnPoints.postNamedEvent( "nextPoint" );
}
onNavBackward {
gui.lstSpawnPoints.postNamedEvent( "prevPoint" );
}
onQueryTooltip {
if( gui.classSelection.isVisible() ) {
if( containsPoint( "0, gui.playerInfoSurround.absoluteRect.y, gui.playerInfoSurround.absoluteRect.w, gui.respawnTimerText.absoluteRect.y - gui.playerInfoSurround.absoluteRect.y" , gui.cursorPos.x, gui.cursorPos.y ) ) {
tooltipText = localizeArgs( "guis/mainmenu/tooltips/quickclass" );
return;
}
if( gui.lytSpawnPointsStatic.isVisible() && containsPoint( gui.lytSpawnPointsStatic.absoluteRect, gui.cursorPos.x, gui.cursorPos.y ) ) {
tooltipText = localizeArgs( "guis/mainmenu/tooltips/quickspawn", gui.getKeyBind( "_menuNavForward", "menu" ), gui.getKeyBind( "_menuAccept", "menu" ) );
return;
}
}
if( player.serverIsRepeater == false ) {
if( containsPoint( "0, gui.respawnTimerText.absoluteRect.y, gui.respawnTimerText.absoluteRect.w, gui.screenDimensions.y - gui.respawnTimerText.absoluteRect.y", gui.cursorPos.x, gui.cursorPos.y ) ) {
tooltipText = localizeArgs( "guis/mainmenu/tooltips/quickaccept", gui.getKeyBind( "_menuAccept", "menu" ), gui.getKeyBind( "_limbomenu", "" ), gui.getKeyBind( "_menuCancel", "menu" ) );
return;
}
if( containsPoint( "0, 0, gui.deploySurround.rect.w, gui.screenDimensions.y", gui.cursorPos.x, gui.cursorPos.y ) ) {
tooltipText = localizeArgs( "guis/mainmenu/tooltips/quickteam" );
return;
}
}
tooltipText = gui.blankWStr;
}
}
}
windowDef leftSurround {
properties {
rect rect = 0, 0, 220, SCREEN_HEIGHT;
float allowEvents = gui.modalDialogActive == false;
float allowChildEvents = gui.modalDialogActive == false;
}
_team_button( strogg, "8", "game/strogg", "game/strogg", PADDING, PADDING, COLOR_STROGG_SELECTED, COLOR_STROGG_SELECTED_GRADIENT )
events {
onPropertyChanged "player.serverIsRepeater" {
postNamedEvent( "updateState" );
}
onActivate {
postNamedEvent( "updateState" );
}
onNamedEvent "updateState" {
if( player.serverIsRepeater ) {
colorMultiplier.a = 0.15;
allowEvents = false;
} else {
colorMultiplier.a = 1;
allowEvents = true;
}
}
}
_end_team_button
_team_button( spec, "9", "game/spectator", "game/spectators", _to_right_of( btnStrogg ) + PADDING, PADDING, COLOR_SPEC_SELECTED, COLOR_SPEC_SELECTED_GRADIENT )
_end_team_button
_team_button( gdf, "0", "game/gdf", "game/gdf", _to_right_of( btnSpec ) + PADDING, PADDING, COLOR_GDF_SELECTED, COLOR_GDF_SELECTED_GRADIENT )
events {
onPropertyChanged "player.serverIsRepeater" {
postNamedEvent( "updateState" );
}
onActivate {
postNamedEvent( "updateState" );
}
onNamedEvent "updateState" {
if( player.serverIsRepeater ) {
colorMultiplier.a = 0.15;
allowEvents = false;
} else {
colorMultiplier.a = 1;
allowEvents = true;
}
}
}
_end_team_button
_button( AutoJoin, PADDING, _to_bottom_of( btnStrogg ) + 2, 212, 14 )
properties {
handle localizedText = localize( "guis/limbo/autojoin" );
float gdfCount = 0;
float stroggCount = 0;
float flags = WF_CAPTURE_KEYS;
}
events {
onNamedEvent "onAction" {
if( icompare( gui.teamSelection, "spec" ) == 0 ) {
gui.lastTeamSelection = immediate( gui.teamSelection );
}
gui.consoleCommand( "clientTeam auto" + _newline );
gui.playGameSound( "system/button/click" );
gui.deactivate();
}
onKeyDown "a" {
postNamedEvent( "onAction" );
}
}
_end_button
//class selection
windowDef classSelection {
properties {
float visible = icompare( gui.teamSelection, "spec" ) == false;
}
windowDef playerInfoSurround {
properties {
rect rect = PADDING, _to_bottom_of( btnAutoJoin ) + 2, _fill_to_right_of( leftSurround ), 36;
rect rankIconRect = absoluteRect.x + 2, absoluteRect.y + 2, 28, 28;
rect textRect = absoluteRect.x + 32, absoluteRect.y, absoluteRect.w, absoluteRect.h;
handle rankIcoMaterial;
}
events {
onPropertyChanged "limbo.rankMaterial" {
rankIcoMaterial = gui.cacheMaterial( name + "rankIco", "_st " + limbo.rankMaterial );
}
onPreDraw {
drawCachedMaterial( gui.wndFillMaterial, absoluteRect, COLOR_NAME_PANEL_FILL );
drawCachedMaterial( gui.wndLineMaterial, absoluteRect, COLOR_NAME_PANEL_LINE );
drawCachedMaterial( gui.gradMaterial, absoluteRect, COLOR_NAME_PANEL_GRADIENT );
drawCachedMaterial( rankIcoMaterial, rankIconRect, COLOR_WHITE );
drawLocalizedText( limbo.rank, textRect, COLOR_WHITE, 12, DTF_LEFT | DTF_TOP | DTF_SINGLELINE );
gui.scriptPushFloat( false );
}
}
windowDef playerTitle {
properties {
rect rect = 32, 16, _fill_to_right_of( playerInfoSurround ), 16;
float fontSize = 16;
wstring text = toWStr( limbo.name );
vec2 textAlignment = TA_LEFT, TA_VCENTER;
float flags = immediate( flags ) | WF_TRUNCATE_TEXT;
}
}
}
//class buttons
windowDef classSurround {
properties {
rect rect = PADDING, _to_bottom_of( playerInfoSurround ) + PADDING, _fill_to_right_of( leftSurround ), 290;
color borderColor = COLOR_LINES;
string material = "_frame faction_line";
}
windowDef GDFClasses {
properties {
float visible = icompare( gui.teamSelection, "gdf" );
}
_class_button( soldier, gdf, PADDING, $evalfloat( 2 * PADDING ), 1 )
_class_button( medic, gdf, _to_right_of( btnClassSoldier ), $evalfloat( 2 * PADDING ), 2 )
_class_button( engineer, gdf, _to_right_of( btnClassMedic ), $evalfloat( 2 * PADDING ), 3 )
_class_button( fieldops, gdf, _to_right_of( btnClassEngineer ), $evalfloat( 2 * PADDING ), 4 )
_class_button( covertops, gdf, _to_right_of( btnClassFieldops ), $evalfloat( 2 * PADDING ), 5 )
}
windowDef StroggClasses {
properties {
float visible = icompare( gui.teamSelection, "strogg" );
}
_class_button( aggressor, strogg, PADDING, $evalfloat( 2 * PADDING ), 1 )
_class_button( technician, strogg, _to_right_of( btnClassAggressor ), $evalfloat( 2 * PADDING ), 2 )
_class_button( constructor, strogg, _to_right_of( btnClassTechnician ), $evalfloat( 2 * PADDING ), 3 )
_class_button( oppressor, strogg, _to_right_of( btnClassConstructor ), $evalfloat( 2 * PADDING ), 4 )
_class_button( infiltrator, strogg, _to_right_of( btnClassOppressor ), $evalfloat( 2 * PADDING ), 5 )
}
_tab_container( classInfo, PT_ROLE, PADDING, _to_bottom_of( btnClassSoldier ) + PADDING, _fill_to_right_of( classSurround ), _fill_to_bottom_of( classSurround ) - PADDING )
_tab_page( role, localize( "guis/limbo/role" ), classInfo, PT_ROLE, 2, 0 )
windowDef classTitle {
properties {
rect rect = PADDING * 1.5, PADDING, 110, 16;
float fontSize = 12;
handle localizedText = localize( "game/classes/" + gui.classSelection );
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
}
_scrollable_localized_text( ClassText, localize( "blank" ), $evalfloat( PADDING * 2 ), _to_bottom_of( classTitle ), _fill_to_right_of( tabpRoleContent ), 63, "noborder" )
properties {
color foreColor = COLOR_TAB_CONTENT_TEXT;
}
events {
onPropertyChanged "gui.classSelection" {
if( compare( gui.classSelection, "spectating" ) == false ) {
localizedText = localize( "game/classes/" + gui.classSelection + "_blurb" );
} else {
localizedText = localize( "blank" );
}
}
}
_end_scrollable_text
windowDef weaponTitle {
properties {
rect rect = PADDING * 1.5, _client_dimension( tabpRoleContent, height ) * 0.42, 150, 16;
float fontSize = 12;
handle localizedText = localize( "guis/limbo/main_weapon" );
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
}
windowDef weaponList {
type list;
properties {
rect rect = 4, _to_bottom_of( weaponTitle ), _fill_to_right_of( tabpRoleContent ), 128;
color backColor = 0, 0, 0, 0;
float fontSize = 12;
color backColor = 0, 0, 0, 0;
float fixedRowHeight = 28;
float rowSpacing = 2;
float flags = WF_AUTO_SIZE_HEIGHT;
rect itemRect;
color itemColor;
float drawItem;
wstring toolTipText = localizeArgs( "guis/limbo/clicktochange" );
color selectedItemForeColor = COLOR_WHITE;
vec2 hoverItem;
vec4 transitionStart;
float initialized = false;
}
events {
onCreate {
insertColumn( gui.blankWStr, 68, 0 ); // Icon
insertColumn( toWStr( "<width = 100%>" ), 0, 1 ); // Item
initialized = true;
}
onNamedEvent "setupItems" {
if( initialized ) {
clearTransitions( -1, -1 );
setItemForeColor( COLOR_ACTIVE_TAB_FILL_LEFT, -1, 0 );
setItemForeColor( COLOR_TAB_CONTENT_TEXT, -1, 1 );
setItemMaterialSize( "68, 17", -1, 0 );
setItemTextFlags( DTF_LEFT | DTF_VCENTER | DTF_SINGLELINE, -1, 0 );
setItemTextFlags( DTF_LEFT | DTF_VCENTER | DTF_SINGLELINE, -1, 1 );
}
}
onPropertyChanged "gui.classSelection" "gui.teamSelection" "gui.weaponSelection" {
postNamedEvent( "updateList" );
}
onQueryToolTip {
hoverItem = getItemAtPoint( gui.cursorPos.x, gui.cursorPos.y );
if( hoverItem.x == currentSelection ) {
toolTipText = gui.blankWStr;
} else {
toolTipText = localizeArgs( "guis/limbo/clicktochange" );
}
}
onNamedEvent "updateList" {
clearItems();
gui.scriptPushString( gui.classSelection );
gui.scriptPushFloat( -1 );
gui.scriptPushFloat( gui.twoHandedBank );
fillFromEnumerator( "inventoryList" );
postNamedEvent( "setupItems" );
currentSelection = immediate( gui.weaponSelection );
}
onPropertyChanged "currentSelection" {
postNamedEvent( "setupItems" );
callSuper();
if( currentSelection >= 0 && currentSelection < numItems ) {
gui.weaponSelection = immediate( currentSelection );
gui.weaponSelectionKey = getItemDataInt( gui.weaponSelection, 0, 0 );
gui.playGameSound( "accept" );
}
}
onPropertyChanged "limbo.weaponIndex" {
currentSelection = findItemDataInt( limbo.weaponIndex, 0 );
}
onKeyUp "mouse1" {
// gui.playGameSound( "accept" );
}
onDrawItemBackground {
drawItem = gui.scriptGetFloatResult();
itemColor = gui.scriptGetVec4Result();
itemRect = gui.scriptGetVec4Result();
drawCachedMaterial( gui.wndFillMaterial, itemRect, COLOR_WEAPON_FILL );
drawCachedMaterial( gui.gradMaterial, itemRect, COLOR_WEAPON_GRADIENT );
drawCachedMaterial( gui.gradMaterial, itemRect, getItemTransitionVec4Result( LTP_PROPERTY_1, COLOR_INVISIBLE, drawItem, 0 ) );
drawCachedMaterial( gui.wndLineMaterial, itemRect, getItemTransitionVec4Result( LTP_PROPERTY_0, COLOR_WEAPON_LINE, drawItem, 0 ) );
}
onDrawSelectedBackground {
drawItem = gui.scriptGetFloatResult();
itemRect = gui.scriptGetVec4Result();
drawCachedMaterial( gui.wndFillMaterial, itemRect, COLOR_ACTIVE_WEAPON_FILL );
drawCachedMaterial( gui.gradMaterial, itemRect, COLOR_ACTIVE_WEAPON_GRADIENT );
drawCachedMaterial( gui.gradMaterial, itemRect, getItemTransitionVec4Result( LTP_PROPERTY_1, COLOR_INVISIBLE, drawItem, 0 ) );
drawCachedMaterial( gui.wndLineMaterial, itemRect, COLOR_ACTIVE_WEAPON_LINE );
}
onEnterItem {
hoverItem.x = gui.scriptGetFloatResult();
hoverItem.y = gui.scriptGetFloatResult();
transitionStart = getItemTransitionVec4Result( LTP_PROPERTY_0, COLOR_WEAPON_LINE, hoverItem.x, 0 );
transitionItemVec4( LTP_PROPERTY_0, transitionStart, COLOR_ACTIVE_WEAPON_LINE, ACTIVATE_TRANSITION_TIME, "", hoverItem.x, 0 );
transitionStart = getItemTransitionVec4Result( LTP_PROPERTY_1, COLOR_INVISIBLE, hoverItem.x, 0 );
transitionItemVec4( LTP_PROPERTY_1, transitionStart, COLOR_WEAPON_GRADIENT, ACTIVATE_TRANSITION_TIME, "", hoverItem.x, 0 );
if( hoverItem.x != currentSelection ) {
gui.playGameSound( "boop" );
}
}
onExitItem {
hoverItem.x = gui.scriptGetFloatResult();
hoverItem.y = gui.scriptGetFloatResult();
transitionStart = getItemTransitionVec4Result( LTP_PROPERTY_0, COLOR_WHITE, hoverItem.x, 0 );
transitionItemVec4( LTP_PROPERTY_0, transitionStart, COLOR_WEAPON_LINE, ACTIVATE_TRANSITION_TIME, "", hoverItem.x, 0 );
transitionStart = getItemTransitionVec4Result( LTP_PROPERTY_1, COLOR_ACTIVE_WEAPON_GRADIENT, hoverItem.x, 0 );
transitionItemVec4( LTP_PROPERTY_1, transitionStart, COLOR_INVISIBLE, ACTIVATE_TRANSITION_TIME, "", hoverItem.x, 0 );
}
}
}
_end_tab_page
_tab_page( prof, localize( "guis/limbo/prof" ), classInfo, PT_PROFICIENCY, _to_right_of( tabpRole ), 0 )
windowDef xpTitle {
properties {
rect rect = PADDING * 1.5, PADDING, 150, 16;
float fontSize = 12;
handle localizedText = localize( "game/classes/" + gui.classSelection );
handle xpText = localize( "guis/game/scoreboard/xp" );
vec2 textAlignment = TA_LEFT, TA_VCENTER;
float flags = immediate( flags ) | WF_AUTO_SIZE_WIDTH;
}
events {
onPostDraw {
drawLocalizedText( xpText, "absoluteRect.x + absoluteRect.w + 2, absoluteRect.y, 32, absoluteRect.h", COLOR_WHITE, fontSize, DTF_LEFT | DTF_SINGLELINE | DTF_VCENTER );
}
}
}
windowDef XPCount {
properties {
rect rect = $evalfloat( PADDING * 3 ), _to_bottom_of( xpTitle ) + 1, 32, 12;
color foreColor = COLOR_TAB_CONTENT_TEXT;
float fontSize = 12;
vec2 textAlignment = TA_RIGHT, TA_VCENTER;
wstring text = toWString( limbo.proficiencyXP0, 0 );
}
}
windowDef XPProgress {
properties {
rect rect = _to_right_of( XPCount ) + 3, gui.XPCount.rect.y - 1, _fill_to_right_of( tabpProfContent ), 12;
rect fillRect = absoluteRect.x + 2, absoluteRect.y + 2, ( absoluteRect.w * max( 0.0f, min( limbo.proficiencyPercent0, 1.0f ) ) ) - 4, absoluteRect.h - 4;
rect textRect = absoluteRect.x + absoluteRect.w + 4, absoluteRect.y + 2, absoluteRect.w, absoluteRect.h;
handle gradMaterial = gui.cacheMaterial( "xpgrad", "_st button_grad_c" );
}
events {
onPreDraw {
clipToRect( fillRect );
drawCachedMaterial( gui.btnFillMaterial, absoluteRect, COLOR_PROGRESS_FILL );
drawCachedMaterial( gradMaterial, absoluteRect, COLOR_PROGRESS_GRADIENT );
unclipRect();
drawCachedMaterial( gui.btnLineMaterial, absoluteRect, COLOR_PROGRESS_LINES );
gui.scriptPushFloat( false );
}
}
}
windowDef skillsTitle {
properties {
rect rect = PADDING * 1.5, 39, 150, 16;
float fontSize = 12;
handle localizedText = localize( "guis/limbo/rank_levels" );
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
}
_proficiency_bar( 0, $evalfloat( PADDING * 2 ), _to_bottom_of( skillsTitle ), localizeArgs( "game/classes/" + gui.classSelection ) )
_rewards( 0, gui.prof0.rect.x + PADDING, _to_bottom_of( prof0 ) - 4 )
_end_rewards
_proficiency_bar( 1, _right( tabpProfContent ), _to_bottom_of( skillsTitle ), localizeArgs( "game/proficiency/battlesense" ) )
_rewards( 1, gui.prof1.rect.x + PADDING, _to_bottom_of( prof1 ) - 4 )
_end_rewards
_proficiency_bar( 2, $evalfloat( PADDING * 2 ), _to_bottom_of( rewards0 ) + $evalfloat( 4 * PADDING ), localizeArgs( "game/proficiency/lightweapons" ) )
_rewards( 2, gui.prof2.rect.x + PADDING, _to_bottom_of( prof2 ) - 4 )
_end_rewards
_proficiency_bar( 3, _right( tabpProfContent ), _to_bottom_of( rewards1 ) + $evalfloat( 4 * PADDING ), localizeArgs( "game/proficiency/vehicle" ) )
_rewards( 3, gui.prof3.rect.x + PADDING, _to_bottom_of( prof3 ) - 4 )
_end_rewards
_end_tab_page
_end_tab_container
}
}
windowDef contentSpectator {
properties {
float visible = icompare( gui.teamSelection, "spec" ) == true;
}
windowDef specInfoSurround {
properties {
rect rect = PADDING, _to_bottom_of( btnAutoJoin ) + 2, _fill_to_right_of( leftSurround ), 36;
}
events {
onPreDraw {
drawCachedMaterial( gui.wndFillMaterial, absoluteRect, COLOR_TAB_FILL );
drawCachedMaterial( gui.wndLineMaterial, absoluteRect, COLOR_TAB_LINE );
drawCachedMaterial( gui.gradMaterial, absoluteRect, COLOR_ACTIVE_TAB_FILL_LEFT );
gui.scriptPushFloat( true );
}
}
windowDef lblSpectating {
properties {
rect rect = PADDING, PADDING, _fill_to_right_of( specInfoSurround ), 12;
handle localizedText = localize( "guis/limbo/currently_spectating" );
float fontSize = 12;
vec2 textAlignment = TA_LEFT, TA_VCENTER;
}
}
windowDef spectatorList {
type marquee;
properties {
rect rect = PADDING, _to_bottom_of( lblSpectating ) + 2, _fill_to_right_of( specInfoSurround ), 14;
float fontSize = 12;
color forecolor = 1,1,1,0.7;
vec2 textAlignment = TA_LEFT, TA_VCENTER;
float speed = 9;
}
timeline {
onTime 500 {
text = toWStr( gui.getSpectatorList() );
resetTime( 0 );
}
}
}
}
windowDef spectatorSurround {
properties {
rect rect = PADDING, _to_bottom_of( specInfoSurround ) + PADDING, _fill_to_right_of( leftSurround ), _fill_to_bottom_of( leftSurround );
}
events {
onPreDraw {
drawCachedMaterial( gui.facFillMaterial, absoluteRect, COLOR_ACTIVE_TAB_FILL_LEFT );
drawCachedMaterial( gui.facLineMaterial, absoluteRect, COLOR_LINES );
gui.scriptPushFloat( true );
}
}
windowDef lstStrogg {
type list;
properties {
rect rect = PADDING, PADDING, _fill_to_right_of( spectatorSurround ), 166;
wstring toolTipText = gui.blankWStr;
}
_teamListColumns( "strogg" )
_list_scrollbar( Strogg )
events {
onEnterItem {
// pop row/column
gui.scriptGetFloatResult();
gui.scriptGetFloatResult();
toolTipText = localizeArgs( "guis/limbo/dblclicktospectate" );
}
onExitItem {
// pop row/column
gui.scriptGetFloatResult();
gui.scriptGetFloatResult();
toolTipText = gui.blankWStr;
}
}
}
windowDef lstGDF {
type list;
properties {
rect rect = PADDING, _to_bottom_of( lstStrogg ), _fill_to_right_of( spectatorSurround ), 166;
wstring toolTipText = gui.blankWStr;
}
_teamListColumns( "gdf" )
_list_scrollbar( GDF )
events {
onEnterItem {
// pop row/column
gui.scriptGetFloatResult();
gui.scriptGetFloatResult();
toolTipText = localizeArgs( "guis/limbo/dblclicktospectate" );
}
onExitItem {
// pop row/column
gui.scriptGetFloatResult();
gui.scriptGetFloatResult();
toolTipText = gui.blankWStr;
}
}
_end_list
_deploy_button( spectate, localize( "guis/limbo/spectate" ), PADDING, _bottom( spectatorSurround ), _fill_to_right_of( spectatorSurround ) )
properties {
wstring toolTipText = localizeArgs( "guis/limbo/clicktospectate" );
}
_end_deploy_button
}
}
windowDef respawnTimerText {
properties {
wstring text = localizeArgs( "game/reinforcements", toWStr( gui.respawnTimerText ) );
float fontSize = 12;
rect rect = gui.leftSurround.rect.x, _to_bottom_of( classSurround ) + 4, _fill_to_right_of( leftSurround ), 10;
color foreColor = COLOR_WHITE;
float visible = player.warmup == false && icompare( limbo.teamName, "spec" ) == false && icompare( gui.teamSelection, "spec" ) == false;
}
}
windowDef deploySurround {
properties {
rect rect = PADDING, _to_bottom_of( respawnTimerText ), gui.classSurround.rect.w, _fill_to_bottom_of( leftSurround );
color borderColor = COLOR_LINES;
string material = "_frame faction_line";
float visible = icompare( gui.teamSelection, "spec" ) == false;
}
_deploy_button( deploy, localize( "guis/limbo/deploy" ), PADDING, PADDING, _fill_to_right_of( deploySurround ) )
_end_deploy_button
windowDef btnSuicide {
properties {
rect rect = PADDING, _bottom( deploySurround ), _fill_to_right_of( deploySurround ), 24;
float visible = icompare( gui.teamSelection, "spec" ) == 0;
color foreColor = 1, 1, 1, 0.4;
handle localizedText = localize( "guis/limbo/respawn" );
color gradColor = COLOR_BLACK;
wstring toolTipText = localizeArgs( "guis/limbo/clicktosuicide" );
}
events {
onCreate {
gradColor.a = 0;
}
onPreDraw {
drawCachedMaterial( gui.wndFillMaterial, absoluteRect, COLOR_RESPAWN_FILL );
drawCachedMaterial( gui.gradMaterial, absoluteRect, gradColor );
drawCachedMaterial( gui.wndLineMaterial, absoluteRect, COLOR_RESPAWN_LINE );
drawLocalizedText( localizedText, absoluteRect, foreColor, 12, DTF_CENTER | DTF_VCENTER | DTF_SINGLELINE );
gui.scriptPushFloat( false );
}
onKeyDown "mouse1" {
gui.playGameSound( "click" );
gui.consoleCommand( "kill" + _newline );
gui.postNamedEvent( "deploy" );
}
onMouseEnter {
gradColor = transition( gradColor, COLOR_ACTIVE_RESPAWN_FILL, ACTIVATE_TRANSITION_TIME );
foreColor.a = transition( foreColor.a, 1, ACTIVATE_TRANSITION_TIME );
gui.playGameSound( "boop" );
}
onMouseExit {
gradColor = transition( gradColor, COLOR_BLACK, ACTIVATE_TRANSITION_TIME );
foreColor.a = transition( foreColor.a, 0.4, ACTIVATE_TRANSITION_TIME );
}
}
}
}
}
windowDef rightSurround {
properties {
rect rect = _to_right_of( leftSurround ), PADDING, _fill_to_right_of( desktop ), _fill_to_bottom_of( desktop );
string material = "_frame faction_line";
color borderColor = COLOR_LINES;
float allowEvents = gui.modalDialogActive == false;
float allowChildEvents = gui.modalDialogActive == false;
}
_tab_container( gameInfo, GI_CAMPAIGN, PADDING, PADDING, _fill_to_right_of( rightSurround ), _fill_to_bottom_of( rightSurround ) )
#include <guis/game/limbo/tabpages/campaign_info.include>
#include <guis/game/limbo/tabpages/player_stats.include>
#include <guis/game/limbo/tabpages/voting.include>
#include <guis/game/limbo/tabpages/admin.include>
_end_tab_container
}
#if 0
windowDef matchTimer {
properties {
wstring text = toWStr( msToHMS( limbo.matchTime ) );
float fontSize = 14;
rect rect = gui.MapBorderInner.rect.w - rect.w, gui.MapBorderInner.rect.h + 10, 50, 12;
vec2 textAlignment = TA_RIGHT, TA_VCENTER;
color foreColor = 1, 1, 1, 1;
}
}
}
#endif
//==========================================
//
//character model goes here, above other windows but below weapon selection
windowDef playerModel {
type renderWorld;
properties {
rect rect = 134 , 112, 240, 278;
float visible = icompare( gui.teamSelection, "spec" ) == 0 && gui.tabpCampaignContent.visible;
string atmosphere = "limbo";
string modelname = "";
//float borderwidth = 1;
}
windowDef playerModel_Camera {
type renderCamera;
properties {
float fov = 10;
}
}
windowDef playerModel_RenderModel {
type renderModel;
properties {
string animName = "menu";
vec3 modelRotation = 0, 50, 0;
vec3 modelOrigin = 370, 0, -47;
}
events {
onPropertyChanged "modelName" "gui.teamSelection" {
if( compare( gui.teamSelection, "gdf" ) ) {
modelRotation = 0, 180, 0;
} else {
modelRotation = 0, 180, 0;
}
}
onPropertyChanged "gui.teamSelection" "gui.classSelection" "gui.weaponSelection" {
postNamedEvent( "updateModel" );
}
onNamedEvent "updateModel" {
if ( compare( gui.teamSelection, "spec" ) == 0 && compare( gui.classSelection, "spec" ) == 0 ) {
skinName = gui.getClassSkin( gui.classSelection );
modelName = immediate( "models/players/" + gui.teamSelection + "/" + gui.classSelection );
animClass = immediate( "player_" + gui.teamSelection + "_" + gui.classSelection );
animName = gui.getWeaponData( gui.classSelection, gui.twoHandedBank, 0, gui.weaponSelection, "anim_limbomenu" );
}
}
}
windowDef playerModel_Weapon {
type renderModel;
properties {
string animName = "idle";
float visible = compare( modelName, "" ) != 1;
}
events {
onPropertyChanged "gui.weaponSelection" "gui.classSelection" {
postNamedEvent( "updateModel" );
}
onNamedEvent "updateModel" {
modelName = gui.getWeaponData( gui.classSelection, gui.twoHandedBank, 0, gui.weaponSelection, "model_world" );
bindJoint = gui.getWeaponData( gui.classSelection, gui.twoHandedBank, 0, gui.weaponSelection, "joint_attach" );
}
}
}
}
windowDef playerModel_RenderLight {
type renderLight;
properties {
// Rim Light
vec3 lightOrigin = 400, 25, 40;
color lightColor = 2,2.5,3,0;
}
}
windowDef playerModel_RenderLight1 {
type renderLight;
properties {
// Key Light
vec3 lightOrigin = 315, -89, 48;
color lightColor = 1.4,1.4,1.3,0;
}
}
windowDef playerModel_RenderLight2 {
type renderLight;
properties {
// Light up selector
vec3 lightOrigin = 300, -80, -40;
color lightColor = 0,0,0,0;
}
}
windowDef playerModel_RenderLight3 {
type renderLight;
properties {
vec3 lightOrigin = 100, -21, -40;
color lightColor = 0,0,0,0;
}
}
windowDef playerModelControl {
properties {
rect rect = ( 0.5 * gui.playerModel.rect.w ) - 24, ( 0.5 * gui.playerModel.rect.h ) - 120, 64, 220;
vec2 anchor;
float dragging = false;
}
events {
onPropertyChanged "dragging" {
if ( dragging ) {
gui.modelDragging = true;
}
}
onPropertyChanged "gui.playerModel_RenderModel.modelRotation.y" {
anchor.x = immediate( gui.cursorPos.x );
anchor.y = immediate( gui.cursorPos.y );
}
onKeyDown "mouse1" {
anchor.x = immediate( gui.cursorPos.x );
anchor.y = immediate( gui.cursorPos.y );
dragging = true;
gui.playerModel_RenderModel.modelRotation.y = immediate( gui.playerModel_RenderModel.modelRotation.y ) + ( gui.cursorPos.x - anchor.x ) * 0.5;
flags = immediate( flags ) | WF_CAPTURE_MOUSE;
}
onKeyUp "mouse1" {
gui.playerModel_RenderModel.modelRotation.y = immediate( gui.playerModel_RenderModel.modelRotation.y );
dragging = false;
flags = immediate( flags ) & ~WF_CAPTURE_MOUSE;
if( containsPoint( absoluteRect, gui.cursorPos.x, gui.cursorPos.y ) == false ) {
gui.playerModel_RenderLight3.lightColor = transition( gui.playerModel_RenderLight3.lightColor, "0, 0, 0, 1", 150 );
gui.playerModel_RenderLight2.lightColor = transition( gui.playerModel_RenderLight2.lightColor, "0, 0, 0, 0", 150 );
}
}
onMouseEnter {
gui.playerModel_RenderLight3.lightColor = transition( gui.playerModel_RenderLight3.lightColor, "0.2, 0.2, 0.3, 1", 150 );
gui.playerModel_RenderLight2.lightColor = transition( gui.playerModel_RenderLight2.lightColor, "0.4, 0.4, 0.4, 1", 150 );
gui.playGameSound( "boop" );
}
onMouseExit {
if( dragging == false ) {
gui.playerModel_RenderLight3.lightColor = transition( gui.playerModel_RenderLight3.lightColor, "0, 0, 0, 1", 200 );
gui.playerModel_RenderLight2.lightColor = transition( gui.playerModel_RenderLight2.lightColor, "0, 0, 0, 0", 200 );
}
}
}
}
}
//===============================================================
// AdminLogin Popup
//===============================================================
_dialog( AdminLogin, localize( "guis/admin/login" ), _center( desktop, width ), _center( desktop, height ), 220, 100, "noMove", "dim" )
_input_dialog( AdminLogin )
_on_default( AdminLoginOk, AdminLoginCancel )
_label_localized( AdminLogin, localize( "guis/mainmenu/password" ), _left( dlgAdminLogin ), _center( dlgAdminLogin, height ) - $evalfloat( 2 * PADDING ), 80, BUTTON_HEIGHT, "1,1,1,1" )
properties {
vec2 textAlignment = TA_RIGHT, TA_VCENTER;
}
_end_label
_edit( AdminLogin, _right( dlgAdminLogin ), _center( dlgAdminLogin, height ) - $evalfloat( 2 * PADDING ), _client_dimension( dlgAdminLogin, width ) - ( gui.lblAdminLogin.rect.width + PADDING ), BUTTON_HEIGHT )
properties {
float maxTextLength = 64;
float password = true;
}
events {
onPropertyChanged "gui.dlgAdminLogin.visible" {
if ( gui.dlgAdminLogin.visible > 0 ) {
editText = "";
gui.focusedWindow = "edtAdminLogin";
}
}
}
_end_edit
_button( AdminLoginOk, _to_left_of( btnAdminLoginCancel ) - 3, _bottom( dlgAdminLogin ), $evalfloat( BUTTON_WIDTH - 20 ), BUTTON_HEIGHT )
properties {
handle localizedText = localize( "guis/mainmenu/ok" );
}
_button_disable_if( "gui.edtAdminLogin.editText", compare( gui.edtAdminLogin.editText, "" ) )
_button_action(
gui.consoleCommand( "admin login " + _quote + gui.edtAdminLogin.editText + _quote + _newline );
_close_input;
)
_end_button
_button( AdminLoginCancel, _right( dlgAdminLogin ), _bottom( dlgAdminLogin ), $evalfloat( BUTTON_WIDTH - 20 ), BUTTON_HEIGHT )
properties {
handle localizedText = localize( "guis/mainmenu/cancel" );
}
_button_action(
_close_input;
)
_end_button
_end_dialog
_tooltip
_menu( Admin_PlayerCommands, 0, 0, $evalfloat( BUTTON_WIDTH * 1.25 ) + 19, 260 )
_menu_items
_menu_item( toWStr( "<loc ='guis/admin/mutelocally'>" ), "tabpAdmin_PlayersContent", "onMuteLocal" )
_menu_item( toWStr( "<loc ='guis/admin/unmutelocally'>" ), "tabpAdmin_PlayersContent", "onUnmuteLocal" )
_menu_item( toWStr( "<loc ='guis/admin/mutequickchat'>" ), "tabpAdmin_PlayersContent", "onMuteQuickChat" )
_menu_item( toWStr( "<loc ='guis/admin/unmutequickchat'>" ), "tabpAdmin_PlayersContent", "onUnmuteQuickchat" )
if( admin.canSetTeam ) {
if( numItems > 0 ) {
_menu_divider
}
_menu_item( toWStr( "<loc ='guis/admin/makespectator'>" ), "tabpAdmin_PlayersContent", "onMakeSpec" )
_menu_item( toWStr( "<loc ='guis/admin/makegdf'>" ), "tabpAdmin_PlayersContent", "onMakeGDF" )
_menu_item( toWStr( "<loc ='guis/admin/makestrogg'>" ), "tabpAdmin_PlayersContent", "onMakeStrogg" )
}
if( admin.canBan || admin.canWarn || admin.canKick ) {
if( numItems > 0 ) {
_menu_divider
}
if( admin.canKick ) {
_menu_item( toWStr( "<loc ='guis/admin/kick'>" ), "tabpAdmin_PlayersContent", "onKick" )
}
if( admin.canBan ) {
_menu_item( toWStr( "<loc ='guis/admin/ban'>" ), "tabpAdmin_PlayersContent", "onBan" )
}
if( admin.canWarn ) {
_menu_item( toWStr( "<loc ='guis/admin/warn'>" ), "tabpAdmin_PlayersContent", "onWarn" )
}
}
if( admin.canPlayerMute ) {
if( numItems > 0 ) {
_menu_divider
}
_menu_item( toWStr( "<loc ='guis/admin/mute'>" ), "tabpAdmin_PlayersContent", "onPlayerMute" )
_menu_item( toWStr( "<loc ='guis/admin/unmute'>" ), "tabpAdmin_PlayersContent", "onPlayerUnmute" )
}
if( admin.canPlayerMuteVoip ) {
if( numItems > 0 ) {
_menu_divider
}
_menu_item( toWStr( "<loc ='guis/admin/silence'>" ), "tabpAdmin_PlayersContent", "onPlayerVoiPMute" )
_menu_item( toWStr( "<loc ='guis/admin/unsilence'>" ), "tabpAdmin_PlayersContent", "onPlayerVoiPUnmute" )
}
_end_menu_items
_end_menu
windowDef lagged {
properties {
rect rect = SCREEN_WIDTH - 36, 5, 32, 32;
color backColor = COLOR_WHITE;
string material = "lagicon";
vec2 materialScale = -1, 1;
float visible = player.isLagged;
}
}
windowDef flashTeams {
properties {
float alpha = 0;
color foreColor = 0.9 * alpha, 0.8016 * alpha, 0.1133 * alpha, 1;
}
events {
onPreDraw {
if ( timeline.default.active ) {
drawCachedMaterial( gui.facLineMaterial, gui.btnStrogg.absoluteRect, foreColor );
drawCachedMaterial( gui.facLineMaterial, gui.btnSpec.absoluteRect, foreColor );
drawCachedMaterial( gui.facLineMaterial, gui.btnGdf.absoluteRect, foreColor );
}
gui.scriptPushFloat( false );
}
onNamedEvent "stopFlash" {
timeline.default.active = false;
timeline.default.resetTime( 0 );
}
onNamedEvent "startFlash" {
timeline.default.active = true;
timeline.default.resetTime( 0 );
}
}
timeline {
properties {
float active = false;
float endTime;
}
onTime 0 {
endTime = immediate( gui.time ) + 7500;
}
onTime 1000 {
if ( immediate( gui.time ) >= endTime ) {
alpha = transition( alpha, 0, 500 );
active = false;
resetTime( 0 );
return;
}
gui.playGameSound( "boop" );
alpha = transition( 0, 1, 500 );
}
onTime 1500 {
if ( immediate( gui.time ) >= endTime ) {
alpha = transition( alpha, 0, 500 );
active = false;
resetTime( 0 );
return;
}
alpha = transition( 1, 0, 500 );
}
onTime 2000 {
resetTime( 1000 );
}
}
}
windowDef flashClasses {
properties {
float alphaObjective = 0;
color objectiveColor = 0.9 * alphaObjective, 0.8016 * alphaObjective, 0.1133 * alphaObjective, 1;
rect objectiveRectBase = gui.tabpUserInfo_ObjectivesContent.absoluteRect.x - 2, gui.tabpUserInfo_ObjectivesContent.absoluteRect.y - 2, gui.tabpUserInfo_ObjectivesContent.absoluteRect.w + 4, gui.tabpUserInfo_ObjectivesContent.absoluteRect.h + 4;
rect objectiveRect = objectiveRectBase;
float alphaClass = 0;
color classColor = 0.9 * alphaClass, 0.8016 * alphaClass, 0.1133 * alphaClass, 1;
rect classRectBase = gui.btnClassSoldier.absoluteRect.x - 2, gui.btnClassSoldier.absoluteRect.y - 2, gui.btnClassSoldier.absoluteRect.w + 4, gui.btnClassSoldier.absoluteRect.h + 4;
rect classRect = classRectBase;
float drawClass = ( gui.btnStrogg.activeColor.a == 1 || gui.btnGdf.activeColor.a == 1 ) && timeline.default.active;
float drawObjective = timeline.objective.active && gui.tabcGameInfo.currentPage == GI_CAMPAIGN && gui.tabcUserInfo.currentPage == PI_INFO;
}
events {
onPreDraw {
if ( drawClass ) {
drawCachedMaterial( gui.facLineMaterial, classRect, classColor );
}
if ( drawObjective ) {
drawCachedMaterial( gui.facLineMaterial, objectiveRect, objectiveColor );
}
gui.scriptPushFloat( false );
}
onNamedEvent "stopFlash" {
timeline.default.active = false;
timeline.default.resetTime( 0 );
timeline.objective.active = false;
timeline.objective.resetTime( 0 );
gui.lstObjectives.timeline.highlight.active = false;
gui.lstObjectives.timeline.highlight.resetTime( 0 );
}
onNamedEvent "startFlash" {
timeline.default.active = true;
timeline.default.resetTime( 0 );
timeline.objective.active = true;
timeline.objective.resetTime( 0 );
gui.lstObjectives.timeline.highlight.active = true;
gui.lstObjectives.timeline.highlight.resetTime( 0 );
}
}
timeline {
onTime 0 {
alphaClass = 0;
}
onTime 1000 {
if ( gui.tabcGameInfo.currentPage == GI_CAMPAIGN ) {
_set_tab_page( UserInfo, PI_INFO )
gui.playGameSound( "boop" );
}
}
// #1
onTime 7000 {
if ( drawClass ) {
gui.playGameSound( "boop" );
classRect = gui.btnClassSoldier.absoluteRect;
alphaClass = transition( 0, 1, 500 );
}
}
onTime 7500 {
if ( drawClass ) {
alphaClass = transition( 1, 0, 500 );
}
}
// #2
onTime 8000 {
if ( drawClass ) {
gui.playGameSound( "boop" );
classRect = gui.btnClassMedic.absoluteRect;
alphaClass = transition( 0, 1, 500 );
}
}
onTime 8500 {
if ( drawClass ) {
alphaClass = transition( 1, 0, 500 );
}
}
// #3
onTime 9000 {
if ( drawClass ) {
gui.playGameSound( "boop" );
classRect = gui.btnClassEngineer.absoluteRect;
alphaClass = transition( 0, 1, 500 );
}
}
onTime 9500 {
if ( drawClass ) {
alphaClass = transition( 1, 0, 500 );
}
}
// #4
onTime 10000 {
if ( drawClass ) {
gui.playGameSound( "boop" );
classRect = gui.btnClassFieldops.absoluteRect;
alphaClass = transition( 0, 1, 500 );
}
}
onTime 10500 {
if ( drawClass ) {
alphaClass = transition( 1, 0, 500 );
}
}
// #5
onTime 11000 {
if ( drawClass ) {
gui.playGameSound( "boop" );
classRect = gui.btnClassCovertops.absoluteRect;
alphaClass = transition( 0, 1, 500 );
}
}
onTime 11500 {
if ( drawClass ) {
alphaClass = transition( 1, 0, 500 );
}
}
onTime 12001 {
alphaClass = 0;
}
}
timeline objective {
properties {
float active = false;
float endTime;
}
onTime 0 {
endTime = immediate( gui.time ) + 9000;
alphaObjective = 0;
}
onTime 4000 {
if ( immediate( gui.time ) >= endTime ) {
alphaObjective = transition( alphaObjective, 0, 500 );
active = false;
resetTime( 0 );
return;
}
alphaObjective = transition( 0, 1, 500 );
objectiveRect = transition( objectiveRect, gui.tabpUserInfo_ObjectivesContent.absoluteRect, 500 );
}
onTime 4500 {
if ( immediate( gui.time ) >= endTime ) {
alphaObjective = transition( alphaObjective, 0, 500 );
active = false;
resetTime( 0 );
return;
}
alphaObjective = transition( 1, 0, 500 );
objectiveRect = transition( objectiveRect, objectiveRectBase, 500 );
}
onTime 5000 {
resetTime( 4000 );
}
}
}
windowDef flashClass {
properties {
rect flashRect;
float alpha = 0;
color foreColor = 0.9 * alpha, 0.8016 * alpha, 0.1133 * alpha, 1;
float drawClass = ( gui.btnStrogg.activeColor.a == 1 || gui.btnGdf.activeColor.a == 1 ) && gui.tabcClassInfo.currentPage == PT_ROLE;
float active = true;
}
events {
onPreDraw {
if ( active && drawClass ) {
drawCachedMaterial( gui.facLineMaterial, flashRect, foreColor );
}
gui.scriptPushFloat( false );
}
onNamedEvent "stopFlash" {
active = false;
timeline.default.active = false;
timeline.default.resetTime( 0 );
timeline.weaponHighlight.active = false;
timeline.weaponHighlight.resetTime( 0 );
}
onNamedEvent "startFlash" {
// mouse is not dragging the model
gui.modelDragging = false;
active = true;
timeline.default.active = true;
timeline.default.resetTime( 1000 );
timeline.weaponHighlight.active = true;
timeline.weaponHighlight.resetTime( 1000 );
}
}
timeline {
onTime 2000 {
if ( !gui.modelDragging ) {
gui.playerModel_RenderModel.modelRotation.y = transition( 180, 0, 3000 );
}
}
onTime 5000 {
if ( !gui.modelDragging ) {
gui.playerModel_RenderModel.modelRotation.y = transition( 360, 180, 3000 );
}
}
onTime 8000 {
active = false;
}
}
timeline weaponHighlight {
onTime 3000 {
if ( gui.weaponList.numItems >= 1 ) {
_set_tab_page( classInfo, PT_ROLE );
gui.playGameSound( "boop" );
flashRect = gui.weaponList.getItemRect( 0, 1, GIR_FULLWIDTH );
alpha = transition( 1, 0, 1500 );
}
}
onTime 5000 {
if ( gui.weaponList.numItems >= 2 ) {
gui.playGameSound( "boop" );
flashRect = gui.weaponList.getItemRect( 1, 1, GIR_FULLWIDTH );
alpha = transition( 1, 0, 1500 );
}
}
onTime 7000 {
if ( gui.weaponList.numItems >= 3 ) {
gui.playGameSound( "boop" );
flashRect = gui.weaponList.getItemRect( 2, 1, GIR_FULLWIDTH );
alpha = transition( 1, 0, 1500 );
}
}
onTime 9000 {
if ( gui.weaponList.numItems >= 4 ) {
gui.playGameSound( "boop" );
flashRect = gui.weaponList.getItemRect( 3, 1, GIR_FULLWIDTH );
alpha = transition( 1, 0, 1500 );
}
}
}
}
//_voice_reset_button( voiceReset, gui.tabpCampaignContent.absoluteRect.x + 4, gui.tabpCampaignContent.absoluteRect.y + 2, 16, 16, COLOR_VOICE_RESET_BUTTON_FILL, COLOR_VOICE_RESET_BUTTON_LINE )
//_end_voice_reset_button
}