1 #using scripts\codescripts\struct;
3 #using scripts\shared\lui_shared;
4 #using scripts\shared\util_shared;
6 #insert scripts\shared\shared.gsh;
12 if ( isdefined(
self.parent ) &&
self.parent == element )
15 if ( isdefined(
self.parent ) )
18 self.parent = element;
21 if ( isdefined(
self.point ) )
22 self setPoint(
self.point,
self.relativePoint,
self.xOffset,
self.yOffset );
34 element.index =
self.children.size;
35 self.children[
self.children.size] = element;
40 element.parent = undefined;
42 if (
self.children[
self.children.size-1] != element )
44 self.children[element.index] =
self.children[
self.children.size-1];
45 self.children[element.index].index = element.index;
47 self.children[
self.children.size-1] = undefined;
49 element.index = undefined;
53 function setPoint( point, relativePoint, xOffset, yOffset, moveTime )
55 if ( !isdefined( moveTime ) )
61 self moveOverTime( moveTime );
63 if ( !isdefined( xOffset ) )
65 self.xOffset = xOffset;
67 if ( !isdefined( yOffset ) )
69 self.yOffset = yOffset;
73 self.alignX =
"center";
74 self.alignY =
"middle";
86 self.alignY =
"bottom";
94 self.alignX =
"right";
100 self.alignX =
"right";
106 self.alignX =
"left";
111 self.alignX =
"center";
116 self.alignY =
"bottom";
117 self.alignX =
"right";
122 self.alignY =
"bottom";
123 self.alignX =
"left";
127 /# println(
"^3Warning: unknown point passed to setPoint(): " + point ); #/
131 if ( !isdefined( relativePoint ) )
132 relativePoint = point;
134 self.relativePoint = relativePoint;
136 relativeX =
"center";
137 relativeY =
"middle";
139 switch( relativePoint )
149 relativeY =
"bottom";
174 relativeX =
"center";
179 relativeY =
"bottom";
185 relativeY =
"bottom";
190 /# println(
"^3Warning: unknown relativePoint passed to setPoint(): " + relativePoint ); #/
194 if ( element == level.uiParent )
196 self.horzAlign = relativeX;
197 self.vertAlign = relativeY;
201 self.horzAlign = element.horzAlign;
202 self.vertAlign = element.vertAlign;
206 if ( relativeX == element.alignX )
211 else if ( relativeX ==
"center" || element.alignX ==
"center" )
213 offsetX = int(element.width / 2);
214 if ( relativeX ==
"left" || element.alignX ==
"right" )
221 offsetX = element.width;
222 if ( relativeX ==
"left" )
227 self.x = element.x + (offsetX * xFactor);
229 if ( relativeY == element.alignY )
234 else if ( relativeY ==
"middle" || element.alignY ==
"middle" )
236 offsetY = int(element.height / 2);
237 if ( relativeY ==
"top" || element.alignY ==
"bottom" )
244 offsetY = element.height;
245 if ( relativeY ==
"top" )
250 self.y = element.y + (offsetY * yFactor);
252 self.x +=
self.xOffset;
253 self.y +=
self.yOffset;
255 switch (
self.elemType )
261 self.barFrame
setPoint( point, relativePoint, xOffset, yOffset );
271 self.bar.horzAlign =
self.horzAlign;
272 self.bar.vertAlign =
self.vertAlign;
274 self.bar.alignX =
"left";
275 self.bar.alignY =
self.alignY;
278 if (
self.alignX ==
"left" )
280 else if (
self.alignX ==
"right" )
281 self.bar.x =
self.x -
self.width;
283 self.bar.x =
self.x - int(
self.width / 2);
285 if (
self.alignY ==
"top" )
287 else if (
self.alignY ==
"bottom" )
296 if (
self.elemType ==
"bar" )
303 barWidth = int(
self.width * barFrac + 0.5);
308 self.bar.frac = barFrac;
309 self.bar setShader(
self.bar.shader, barWidth,
self.height );
311 assert( barWidth <=
self.width,
"barWidth <= self.width: " + barWidth +
" <= " +
self.width +
" - barFrac was " + barFrac );
314 if ( isdefined( rateOfChange ) && barWidth <
self.width )
316 if ( rateOfChange > 0 )
319 assert( ((1 - barFrac) / rateOfChange) > 0,
"barFrac: " + barFrac +
"rateOfChange: " + rateOfChange );
320 self.bar scaleOverTime( (1 - barFrac) / rateOfChange,
self.width,
self.height );
322 else if ( rateOfChange < 0 )
325 assert( (barFrac / (-1 * rateOfChange)) > 0,
"barFrac: " + barFrac +
"rateOfChange: " + rateOfChange );
326 self.bar scaleOverTime( barFrac / (-1 * rateOfChange), 1,
self.height );
329 self.bar.rateOfChange = rateOfChange;
330 self.bar.lastUpdateTime = getTime();
336 fontElem = newClientHudElem(
self );
337 fontElem.elemType =
"font";
338 fontElem.font = font;
339 fontElem.fontscale = fontScale;
343 fontElem.height = int(level.fontHeight * fontScale);
344 fontElem.xOffset = 0;
345 fontElem.yOffset = 0;
346 fontElem.children = [];
348 fontElem.hidden =
false;
355 if ( isdefined( team ) )
356 fontElem = newTeamHudElem( team );
358 fontElem = newHudElem();
360 fontElem.elemType =
"font";
361 fontElem.font = font;
362 fontElem.fontscale = fontScale;
366 fontElem.height = int(level.fontHeight * fontScale);
367 fontElem.xOffset = 0;
368 fontElem.yOffset = 0;
369 fontElem.children = [];
371 fontElem.hidden =
false;
378 if ( isdefined( team ) )
379 timerElem = newTeamHudElem( team );
381 timerElem = newHudElem();
382 timerElem.elemType =
"timer";
383 timerElem.font = font;
384 timerElem.fontscale = fontScale;
388 timerElem.height = int(level.fontHeight * fontScale);
389 timerElem.xOffset = 0;
390 timerElem.yOffset = 0;
391 timerElem.children = [];
393 timerElem.hidden =
false;
400 timerElem = newClientHudElem(
self );
401 timerElem.elemType =
"timer";
402 timerElem.font = font;
403 timerElem.fontscale = fontScale;
407 timerElem.height = int(level.fontHeight * fontScale);
408 timerElem.xOffset = 0;
409 timerElem.yOffset = 0;
410 timerElem.children = [];
412 timerElem.hidden =
false;
419 iconElem = newClientHudElem(
self );
420 iconElem.elemType =
"icon";
423 iconElem.width = width;
424 iconElem.height = height;
425 iconElem.xOffset = 0;
426 iconElem.yOffset = 0;
427 iconElem.children = [];
429 iconElem.hidden =
false;
431 if ( isdefined( shader ) )
432 iconElem setShader( shader, width, height );
440 if ( isdefined( team ) )
441 iconElem = newTeamHudElem( team );
443 iconElem = newHudElem();
444 iconElem.elemType =
"icon";
447 iconElem.width = width;
448 iconElem.height = height;
449 iconElem.xOffset = 0;
450 iconElem.yOffset = 0;
451 iconElem.children = [];
453 iconElem.hidden =
false;
455 if ( isdefined( shader ) )
456 iconElem setShader( shader, width, height );
464 if ( isdefined( team ) )
465 barElem = newTeamHudElem( team );
467 barElem = newHudElem();
471 barElem.color = color;
473 barElem.shader =
"progress_bar_fill";
474 barElem setShader(
"progress_bar_fill", width, height );
475 barElem.hidden =
false;
476 if ( isdefined( flashFrac ) )
478 barElem.flashFrac = flashFrac;
482 if ( isdefined( team ) )
483 barElemFrame = newTeamHudElem( team );
485 barElemFrame = newHudElem();
486 barElemFrame.elemType =
"icon";
489 barElemFrame.width = width;
490 barElemFrame.height = height;
491 barElemFrame.xOffset = 0;
492 barElemFrame.yOffset = 0;
493 barElemFrame.bar = barElem;
494 barElemFrame.barFrame = barElemFrame;
495 barElemFrame.children = [];
496 barElemFrame.sort = -1;
497 barElemFrame.color = (1,1,1);
499 if ( isdefined( selected ) )
500 barElemFrame setShader(
"progress_bar_fg_sel", width, height );
502 barElemFrame setShader(
"progress_bar_fg", width, height );
503 barElemFrame.hidden =
false;
505 if ( isdefined( team ) )
506 barElemBG = newTeamHudElem( team );
508 barElemBG = newHudElem();
509 barElemBG.elemType =
"bar";
512 barElemBG.width = width;
513 barElemBG.height = height;
514 barElemBG.xOffset = 0;
515 barElemBG.yOffset = 0;
516 barElemBG.bar = barElem;
517 barElemBG.barFrame = barElemFrame;
518 barElemBG.children = [];
520 barElemBG.color = (0,0,0);
521 barElemBG.alpha = 0.5;
523 barElemBG setShader(
"progress_bar_bg", width, height );
524 barElemBG.hidden =
false;
531 barElem = newClientHudElem(
self );
535 barElem.color = color;
537 barElem.shader =
"progress_bar_fill";
538 barElem setShader(
"progress_bar_fill", width, height );
539 barElem.hidden =
false;
540 if ( isdefined( flashFrac ) )
542 barElem.flashFrac = flashFrac;
546 barElemFrame = newClientHudElem(
self );
547 barElemFrame.elemType =
"icon";
550 barElemFrame.width = width;
551 barElemFrame.height = height;
552 barElemFrame.xOffset = 0;
553 barElemFrame.yOffset = 0;
554 barElemFrame.bar = barElem;
555 barElemFrame.barFrame = barElemFrame;
556 barElemFrame.children = [];
557 barElemFrame.sort = -1;
558 barElemFrame.color = (1,1,1);
561 barElemFrame.hidden =
false;
563 barElemBG = newClientHudElem(
self );
564 barElemBG.elemType =
"bar";
565 if ( !level.splitScreen )
570 barElemBG.width = width;
571 barElemBG.height = height;
572 barElemBG.xOffset = 0;
573 barElemBG.yOffset = 0;
574 barElemBG.bar = barElem;
575 barElemBG.barFrame = barElemFrame;
576 barElemBG.children = [];
578 barElemBG.color = (0,0,0);
579 barElemBG.alpha = 0.5;
581 if ( !level.splitScreen )
582 barElemBG setShader(
"progress_bar_bg", width + 4, height + 4 );
584 barElemBG setShader(
"progress_bar_bg", width + 0, height + 0 );
585 barElemBG.hidden =
false;
592 frac =
self.bar.frac;
593 if (isdefined(
self.bar.rateOfChange))
595 frac += (getTime() -
self.bar.lastUpdateTime) *
self.bar.rateOfChange;
596 if (frac > 1) frac = 1;
597 if (frac < 0) frac = 0;
604 bar =
createBar( (1, 1, 1), level.primaryProgressBarWidth, level.primaryProgressBarHeight );
605 if ( level.splitScreen )
606 bar
setPoint(
"TOP", undefined, level.primaryProgressBarX, level.primaryProgressBarY);
608 bar
setPoint(
"CENTER", undefined, level.primaryProgressBarX, level.primaryProgressBarY);
615 if ( level.splitScreen )
616 text
setPoint(
"TOP", undefined, level.primaryProgressBarTextX, level.primaryProgressBarTextY);
618 text
setPoint(
"CENTER", undefined, level.primaryProgressBarTextX, level.primaryProgressBarTextY);
626 secondaryProgressBarHeight = GetDvarInt(
"scr_secondaryProgressBarHeight", level.secondaryProgressBarHeight );
627 secondaryProgressBarX = GetDvarInt(
"scr_secondaryProgressBarX", level.secondaryProgressBarX );
628 secondaryProgressBarY = GetDvarInt(
"scr_secondaryProgressBarY", level.secondaryProgressBarY );
630 bar =
createBar( (1, 1, 1), level.secondaryProgressBarWidth, secondaryProgressBarHeight );
631 if ( level.splitScreen )
632 bar
setPoint(
"TOP", undefined, secondaryProgressBarX, secondaryProgressBarY);
634 bar
setPoint(
"CENTER", undefined, secondaryProgressBarX, secondaryProgressBarY);
641 secondaryProgressBarTextX = GetDvarInt(
"scr_btx", level.secondaryProgressBarTextX );
642 secondaryProgressBarTextY = GetDvarInt(
"scr_bty", level.secondaryProgressBarTextY );
645 if ( level.splitScreen )
646 text
setPoint(
"TOP", undefined, secondaryProgressBarTextX, secondaryProgressBarTextY);
648 text
setPoint(
"CENTER", undefined, secondaryProgressBarTextX, secondaryProgressBarTextY);
656 bar =
createServerBar( (1,0,0), level.teamProgressBarWidth, level.teamProgressBarHeight, undefined, team );
657 bar
setPoint(
"TOP", undefined, 0, level.teamProgressBarY);
663 text
setPoint(
"TOP", undefined, 0, level.teamProgressBarTextY);
670 self.bar.flashFrac = flashFrac;
680 if (
self.alpha != 0 )
683 if (
self.elemType ==
"bar" ||
self.elemType ==
"bar_shader" )
685 self.bar.hidden =
true;
686 if (
self.bar.alpha != 0 )
689 self.barFrame.hidden =
true;
690 if (
self.barFrame.alpha != 0 )
691 self.barFrame.alpha = 0;
702 if (
self.elemType ==
"bar" ||
self.elemType ==
"bar_shader" )
704 if (
self.alpha != .5 )
707 self.bar.hidden =
false;
708 if (
self.bar.alpha != 1 )
711 self.barFrame.hidden =
false;
712 if (
self.barFrame.alpha != 1 )
713 self.barFrame.alpha = 1;
717 if (
self.alpha != 1 )
725 self endon (
"death" );
732 if (
self.frac >=
self.flashFrac )
736 self fadeOverTime(0.3);
739 self fadeOverTime(0.3);
746 if ( !
self.hidden &&
self.alpha != 1 )
759 for ( index = 0; index <
self.children.size; index++ )
761 if ( isdefined(
self.children[index] ) )
762 tempChildren[tempChildren.size] =
self.children[index];
765 for ( index = 0; index < tempChildren.size; index++ )
768 if (
self.elemType ==
"bar" ||
self.elemType ==
"bar_shader" )
779 self setShader( shader,
self.width,
self.height );
790 self.height = height;
796 self.height = height;
801 for ( index = 0; index <
self.children.size; index++ )
803 child =
self.children[index];
804 child
setPoint( child.point, child.relativePoint, child.xOffset, child.yOffset );
811 if ( player IsSplitscreen() )
816 ypos = ypos - (90 + iconsize * (3 - verIndex));
817 xpos = xpos - (10 + iconsize * horIndex);
820 icon
setPoint(
"BOTTOM RIGHT",
"BOTTOM RIGHT", xpos, ypos );
821 icon.horzalign =
"user_right";
822 icon.vertalign =
"user_bottom";
823 icon.archived =
false;
824 icon.foreground =
false;
832 if ( player IsSplitscreen() )
837 ypos = ypos - (90 + iconsize * (3 - verIndex));
838 xpos = xpos - (10 + iconsize * horIndex);
840 self setPoint(
"BOTTOM RIGHT",
"BOTTOM RIGHT", xpos, ypos );
841 self.horzalign =
"user_right";
842 self.vertalign =
"user_bottom";
843 self.archived =
false;
844 self.foreground =
false;
850 self setPoint(
"RIGHT",
"LEFT", xCoord, 0 );
857 text
setPoint(
"RIGHT",
"LEFT", xCoord, 0 );
858 text.archived =
false;
859 text.alignX =
"right";
860 text.alignY =
"middle";
861 text.foreground =
false;
870 iconElem.alpha = alpha;
872 iconElem setShader( icon, iconsize, iconsize );
874 if ( isdefined( textElem ) )
876 textElem.alpha = alpha;
878 textElem setText( text );
884 if ( isdefined( fadeTime ) )
886 if ( !isdefined( hideTextOnly ) || !hideTextOnly )
888 iconElem fadeOverTime( fadeTime );
890 if ( isdefined( textElem ) )
892 textElem fadeOverTime( fadeTime );
896 if ( !isdefined( hideTextOnly ) || !hideTextOnly )
899 if ( isdefined( textElem ) )
906 self LUINotifyEvent( &
"show_perk_notification", 0 );
912 assert( game[
"state"] !=
"postgame" );
914 if ( !isdefined(
self.perkicon ) )
920 if ( !isdefined(
self.perkicon[ index ] ) )
922 assert( !isdefined(
self.perkname[ index ] ) );
934 if ( perk ==
"perk_null" || perk ==
"weapon_null" || perk ==
"specialty_null" )
940 assert( isdefined( level.perkNames[ perk ] ), perk );
945 showLoadoutAttribute(
self.perkicon[ index ], perk, alpha,
self.perkname[ index ], level.perkNames[ perk ] );
947 self.perkicon[ index ] moveOverTime( 0.3 );
948 self.perkicon[ index ].x = -5;
949 self.perkicon[ index ].hidewheninmenu =
true;
951 self.perkname[ index ] moveOverTime( 0.3 );
952 self.perkname[ index ].x = -40;
953 self.perkname[ index ].hidewheninmenu =
true;
958 if ( !isdefined (fadeTime ) )
961 if ( level.perksEnabled == 1)
963 if ( game[
"state"] ==
"postgame" )
967 if ( isdefined(
self.perkicon ) )
970 assert( !isdefined(
self.perkicon[ index ] ) );
971 assert( !isdefined(
self.perkname[ index ] ) );
975 assert( isdefined(
self.perkicon[ index ] ) );
976 assert( isdefined(
self.perkname[ index ] ) );
978 if ( isdefined(
self.perkicon ) && isdefined(
self.perkicon[ index ] ) && isdefined(
self.perkname ) && isdefined(
self.perkname[ index ] ) )
988 assert( game[
"state"] !=
"postgame" );
990 if ( !isdefined(
self.killstreakIcon ) )
991 self.killstreakIcon = [];
993 if ( !isdefined(
self.killstreakIcon[ index ] ) )
998 self.killstreakIcon[ index ] =
createLoadoutIcon(
self, 3,
self.killstreak.size - 1 - index, xpos, ypos );
1001 if ( killstreak ==
"killstreak_null" || killstreak ==
"weapon_null" )
1007 assert( isdefined( level.killstreakIcons[ killstreak ] ), killstreak );
1019 if ( game[
"state"] ==
"postgame" )
1022 assert( !isdefined(
self.killstreakIcon[ index ] ) );
1025 assert( isdefined(
self.killstreakIcon[ index ] ) );
1035 self.horzAlign =
"user_left";
1036 self.vertAlign =
"user_top";
1038 self.alignX =
"left";
1039 self.alignY =
"top";