
<manialink name="Overlay_MenuBackground" version="3">

<!-- @Component start share-menu-navigation -->
<framemodel id="share-menu-navigation">
		</framemodel>
<!-- @Component end share-menu-navigation -->

<!-- @Component start trackmania-home-background-2 -->
<framemodel id="trackmania-home-background-2">
<stylesheet>
	<style class="trackmania-home-background-2-class-fullscreen" size="320 180" halign="center" valign="center" />
</stylesheet>
<frame class="trackmania-home-background-2-class-component-container">
	<quad class="trackmania-home-background-2-class-fullscreen" z-index="1" bgcolor="000000" fullscreen="1" />
	<frame z-index="2">
		<frame z-index="1">
			<quad id="trackmania-home-background-2-quad-background-transition" class="trackmania-home-background-2-class-fullscreen" z-index="1" />
			<quad id="trackmania-home-background-2-quad-background-active" class="trackmania-home-background-2-class-fullscreen" z-index="2" />
		</frame>

		<frame z-index="2">
			<quad id="trackmania-home-background-2-quad-foreground-transition" class="trackmania-home-background-2-class-fullscreen" z-index="1" />
			<quad id="trackmania-home-background-2-quad-foreground-active" class="trackmania-home-background-2-class-fullscreen" z-index="2" />
		</frame>
		<!-- Cannot use `C_Private_Class_Fullscreen` class, properties of the camera must be set directly on the node -->
		<camera id="trackmania-home-background-2-camera-scene" z-index="3" size="320 180" halign="center" valign="center" fullscreen="1" />
	</frame>
	<!-- This dark gradient at the bottom of the screen allows the game version text to be displayed over bright backgrounds -->
	<quad pos="0 -91" size="320 20" halign="center" valign="bottom" style="Bgs1" substyle="BgGradBottom" opacity="0.5" z-index="3"/>
	<!-- Special `id` for C++ that will create a blurred background for non 16:9 aspect ratios -->
	<quad id="maniaplanet.BlurContentsDivider" z-index="4" hidden="1" />
</frame>
</framemodel>
<!-- @Component end trackmania-home-background-2 -->

<!-- @Component start router -->
<framemodel id="router">
		</framemodel>
<!-- @Component end router -->

<stylesheet>
	<style class="background" size="320 180" halign="center" valign="center" />
</stylesheet>
<frame id="frame-global" z-index="-10.">
	<frameinstance id="frame-home-background" modelid="trackmania-home-background-2" z-index="0" />
	<frame hidden="0" z-index="10" >
		<quad id="quad-main-background" class="background" hidden="0" z-index="7" fullscreen="1" bgcolor="00000000" image="{{{BgImageUrl}}}"/>
	</frame>
	<frame id="frame-main-background-animated" z-index="2">
<!--		<quad class="background" pos="-640 0" bgcolor="0008" opacity="0.5" />
		<quad class="background" pos="-320 0" bgcolor="0008" opacity="0.5" />
		<quad class="background" bgcolor="0008" opacity="0.5" />
		<quad class="background" pos="320 0" bgcolor="0008" opacity="0.5" />
		<quad class="background" pos="640 0" bgcolor="0008" opacity="0.5" /> -->
 		<quad class="background" colorize="{{{BgColour}}}" pos="-640 0" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/MainBackgrounds/Background_Menu.dds" />
		<quad class="background" colorize="{{{BgColour}}}" pos="-320 0" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/MainBackgrounds/Background_Menu.dds" />
		<quad class="background" colorize="{{{BgColour}}}" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/MainBackgrounds/Background_Menu.dds" />
		<quad class="background" colorize="{{{BgColour}}}" pos="320 0" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/MainBackgrounds/Background_Menu.dds" />
		<quad class="background" colorize="{{{BgColour}}}" pos="640 0" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/MainBackgrounds/Background_Menu.dds" />
	</frame>
	<quad id="quad-settings-background" class="background" z-index="3" fullscreen="1" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/PageProfile/UI_profile_background_map_gradients.dds" />
	<quad id="quad-profile-background" class="background" z-index="4" fullscreen="1" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/PageProfile/UI_profile_background_map_gradients.dds" />
	<quad id="quad-garage-background" class="background" z-index="4" fullscreen="1" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/PageProfile/UI_profile_background_map_gradients.dds" />
	<quad id="quad-club-edition-background" class="background" z-index="4" fullscreen="1" image="file://Media/Manialinks/Nadeo/Trackmania/Menus/PageProfile/UI_profile_background_map_gradients.dds" />
	<quad id="quad-black-background" class="background" z-index="4" fullscreen="1" bgcolor="000000" />
	<quad id="quad-dimmer" class="background" z-index="5" fullscreen="1" bgcolor="000514" opacity="0."/>
</frame>

<script><!--

// @Component start share-menu-navigation
// /*

#Include "Libs/Nadeo/CMGame/Menus/ShareMenuNavigation_ML.Script.txt" as ShareMenuNavigation_ShareMenuNavigation
		
// */
// @Component end share-menu-navigation

// @Component start trackmania-home-background-2
// /*

#Include "Libs/Nadeo/Trackmania/Components/HomeBackground_Patch.Script.txt" as Trackmania_HomeBackground2
		
// */
// @Component end trackmania-home-background-2

// @Component start router
// /*

#Include "Libs/Nadeo/CMGame/Menus/Router_ML.Script.txt" as Router_Router
#Include "Libs/Nadeo/CMGame/Utils/Platform.Script.txt" as Platform
#Include "Libs/Nadeo/CMGame/Utils/Config.Script.txt" as Config
#Include "Libs/Nadeo/CMGame/Utils/TimeOfDay.Script.txt" as TimeOfDay
// */
// @Component end router

#Include "AnimLib" as AL
#Include "ColorLib" as CL

#Struct K_Controls {
	CMlFrame Frame_HomeBackground;
	CMlQuad Quad_MainBackground;
	CMlFrame Frame_MainBackgroundAnimated;
	CMlQuad[] Quad_MainBackgroundAnimatedList;
	CMlQuad Quad_SettingsBackground;
	CMlQuad Quad_ProfileBackground;
	CMlQuad Quad_GarageBackground;
	CMlQuad Quad_ClubEditionBackground;
	CMlQuad Quad_BlackBackground;
	CMlQuad Quad_Dimmer;
}
#Struct K_MenuBackground {
	K_Controls Controls;
	Integer ActiveDisplayMode;
	Integer OldDisplayMode;
	Real ActiveDimmerOpacity;
	Real OldDimmerOpacity;
	Integer TransitionEndTime;
}

#Struct K_Config {
	Text ConfigName;
	Text APIBaseUrl;
	Text APICoreUrl;
	Text APIMeetUrl;
	Text WebsiteAdminClubUrl;
	Text WebsitePlayersPageUrl;
	Text WebsiteOnlineServicesStatusPage;
	Text ScriptEnvironment;
	Text BuildEnvironment;
	Text DefaultSubscription;
	Text DefaultMasterZone;
	Text OfflineCampaignJsonName;
	Integer MinBronzeMedalNbToPlayRanked;
	Text RankedMode;
	Text[] Features;
	// Do not forget to update the MergeConfig() function with any new property added to the structure!
	// also update Config.dev.json, Config.production.json, Config.production-cn.json, Config.production-lt.json and Config.uat.json
	// also update the struct here: https://gitlab.nadeo.org/nadeo-live/maniaplanet-live-scripts/-/blob/dev/Scripts/Libs/Nadeo/System/Settings/SettingsStructs.Script.txt#L51
	// also update the console parameters here: https://console.online.ubisoft.org/
	// also update the `C_ConfigStructVersion` constant
}

#Const C_DisplayMode_Null 0
#Const C_DisplayMode_MainBackground 1
#Const C_DisplayMode_HomeBackground 2
#Const C_DisplayMode_SettingsBackground 3
#Const C_DisplayMode_ProfileBackground 4
#Const C_DisplayMode_GarageBackground 5
#Const C_DisplayMode_ClubEditionBackground 6
#Const C_DisplayMode_BlackBackground 7

#Const C_DimmerOpacity_Default 0.
#Const C_BackgroundRotationTime 240000

#Const C_BackgroundTransitionDuration 250

#Const C_ImageUrl "{{{ImageUrl}}}"
#Const C_IsVideo True

#Const C_DayTimesColors [
	0.000 => "C40E1D",
	0.059 => "FFFFFF",
	0.248 => "7F9DFF",
	0.436 => "00B1FF",
	0.564 => "00B1FF",
	0.781 => "FF9EF2",
	1.000 => "C40E1D"
]

#Const C_BgType_Static 0
#Const C_BgType_Dynamic 1

#Const C_BgType {{{BgType}}}


// @Component start share-menu-navigation
// /*

***MainLoop***
***
ShareMenuNavigation_ShareMenuNavigation::MainLoop(This);
***
		
// */
// @Component end share-menu-navigation

// @Component start trackmania-home-background-2
// /*

***MainInit***
***
Trackmania_HomeBackground2::Private_MainInit(This, C_ImageUrl, C_IsVideo);
***

***MainLoop***
***
Trackmania_HomeBackground2::Private_MainLoop(This, C_ImageUrl, C_IsVideo);
***

// */
// @Component end trackmania-home-background-2

// @Component start router
// /*

***MainLoop***
***
Router_Router::MainLoop(This);
***
		
// */
// @Component end router

Real Private_PreviousTime(Real _Time) {
	declare Real Prev;
	for (Time => Hex in C_DayTimesColors) {
		if (Time < _Time) Prev = Time;
	}
	return Prev;
}

Real Private_NextTime(Real _Time) {
	declare Real Next;
	for (Time => Hex in C_DayTimesColors) {
		if (Time > _Time) {
			Next = Time;
			break;
		}
	}
	return Next;
}

Real Private_GetMixPercent(Real _Time) {
	declare Real PrevTime = Private_PreviousTime(_Time);
	declare Real NextTime = Private_NextTime(_Time);
	return (_Time-PrevTime)/(NextTime-PrevTime);
}

Vec3 Private_BlendColors(Text _Col1, Text _Col2, Real _MixPercent) {
	declare Vec3 Color1 = CL::Hex6ToRgb(_Col1);
	declare Vec3 Color2 = CL::Hex6ToRgb(_Col2);
	declare Vec3 New;
	New.X = _MixPercent * (Color2.X - Color1.X) + Color1.X;
	New.Y = _MixPercent * (Color2.Y - Color1.Y) + Color1.Y;
	New.Z = _MixPercent * (Color2.Z - Color1.Z) + Color1.Z;
	return New;
}

Void Private_RedrawQuadVisibility(CMlQuad _Quad, Boolean _Visible, Integer _TransitionDuration) {
	AnimMgr.Flush(_Quad);

	declare Real Opacity = 0.;
	if (_Visible) {
		Opacity = 1.;
	}

	if (_TransitionDuration > 0) {
		AnimMgr.Add(_Quad, "<a opacity=\""^Opacity^"\" hidden=\""^!_Visible^"\" />", _TransitionDuration, CAnimManager::EAnimManagerEasing::QuadIn);
	} else {
		_Quad.Opacity = Opacity;
		_Quad.Visible = _Visible;
	}
}

Real Private_GetBackgroundZIndex(Integer _Background, Integer _OldDisplayMode, Integer _NewDisplayMode) {
	if (_Background == C_DisplayMode_HomeBackground) return 1.;
	else if (_Background == _NewDisplayMode) return 2.;
	else if (_Background == _OldDisplayMode) return 3.;
	return 0.;
}

K_MenuBackground Private_TransitionEnd(K_MenuBackground _MenuBackground) {
	if (_MenuBackground.TransitionEndTime < 0) return _MenuBackground;

	declare K_MenuBackground MenuBackground = _MenuBackground;

	MenuBackground.TransitionEndTime = -1;

	switch (_MenuBackground.OldDisplayMode) {
		case C_DisplayMode_MainBackground: {
			Private_RedrawQuadVisibility(_MenuBackground.Controls.Quad_MainBackground, False, 0);
			for (Quad_MainBackgroundAnimated in _MenuBackground.Controls.Quad_MainBackgroundAnimatedList) {
				Private_RedrawQuadVisibility(Quad_MainBackgroundAnimated, False, 0);
			}
		}
		case C_DisplayMode_HomeBackground: {
			Trackmania_HomeBackground2::SetIsEnabled(This, _MenuBackground.Controls.Frame_HomeBackground, False);
		}
		case C_DisplayMode_SettingsBackground: {
			Private_RedrawQuadVisibility(_MenuBackground.Controls.Quad_SettingsBackground, False, 0);
		}
		case C_DisplayMode_ProfileBackground: {
			Private_RedrawQuadVisibility(_MenuBackground.Controls.Quad_ProfileBackground, False, 0);
		}
		case C_DisplayMode_GarageBackground: {
			Private_RedrawQuadVisibility(_MenuBackground.Controls.Quad_GarageBackground, False, 0);
		}
		case C_DisplayMode_ClubEditionBackground: {
			Private_RedrawQuadVisibility(_MenuBackground.Controls.Quad_ClubEditionBackground, False, 0);
		}
		case C_DisplayMode_BlackBackground: {
			Private_RedrawQuadVisibility(_MenuBackground.Controls.Quad_BlackBackground, False, 0);
		}
	}

	return MenuBackground;
}

Void Private_TransitionStart_HomeBackground(K_MenuBackground _MenuBackground) {
	if (_MenuBackground.ActiveDisplayMode == C_DisplayMode_HomeBackground || _MenuBackground.OldDisplayMode == C_DisplayMode_HomeBackground) {
		Trackmania_HomeBackground2::SetIsEnabled(This, _MenuBackground.Controls.Frame_HomeBackground, True);
	} else {
		Trackmania_HomeBackground2::SetIsEnabled(This, _MenuBackground.Controls.Frame_HomeBackground, False);
	}
}

Void Private_TransitionStart_Quad(K_MenuBackground _MenuBackground, CMlQuad _Quad, Integer _DisplayMode, Integer _TransitionDuration) {
	if (_MenuBackground.ActiveDisplayMode == _DisplayMode || _MenuBackground.OldDisplayMode == _DisplayMode) {
		if (_MenuBackground.OldDisplayMode == C_DisplayMode_HomeBackground) {
			Private_RedrawQuadVisibility(_Quad, False, 0);
			Private_RedrawQuadVisibility(_Quad, True, _TransitionDuration);
		} else {
			Private_RedrawQuadVisibility(_Quad, True, 0);
			if (_MenuBackground.OldDisplayMode == _DisplayMode && _MenuBackground.ActiveDisplayMode != _DisplayMode) {
				Private_RedrawQuadVisibility(_Quad, False, _TransitionDuration);
			}
		}
	} else {
		Private_RedrawQuadVisibility(_Quad, False, 0);
	}
}


Void Private_TransitionStart_MainBackground(K_MenuBackground _MenuBackground, Integer _TransitionDuration) {
	Private_TransitionStart_Quad(_MenuBackground, _MenuBackground.Controls.Quad_MainBackground, C_DisplayMode_MainBackground, _TransitionDuration);
	for (Quad_MainBackgroundAnimated in _MenuBackground.Controls.Quad_MainBackgroundAnimatedList) {
		Private_TransitionStart_Quad(_MenuBackground, Quad_MainBackgroundAnimated, C_DisplayMode_MainBackground, _TransitionDuration);
	}
}

Void Private_TransitionStart_SettingsBackground(K_MenuBackground _MenuBackground, Integer _TransitionDuration) {
	Private_TransitionStart_Quad(_MenuBackground, _MenuBackground.Controls.Quad_SettingsBackground, C_DisplayMode_SettingsBackground, _TransitionDuration);
}

Void Private_TransitionStart_ProfileBackground(K_MenuBackground _MenuBackground, Integer _TransitionDuration) {
	Private_TransitionStart_Quad(_MenuBackground, _MenuBackground.Controls.Quad_ProfileBackground, C_DisplayMode_ProfileBackground, _TransitionDuration);
}

Void Private_TransitionStart_GarageBackground(K_MenuBackground _MenuBackground, Integer _TransitionDuration) {
	Private_TransitionStart_Quad(_MenuBackground, _MenuBackground.Controls.Quad_GarageBackground, C_DisplayMode_GarageBackground, _TransitionDuration);
}

Void Private_TransitionStart_ClubEditionBackground(K_MenuBackground _MenuBackground, Integer _TransitionDuration) {
	Private_TransitionStart_Quad(_MenuBackground, _MenuBackground.Controls.Quad_ClubEditionBackground, C_DisplayMode_ClubEditionBackground, _TransitionDuration);
}

Void Private_TransitionStart_BlackBackground(K_MenuBackground _MenuBackground, Integer _TransitionDuration) {
	Private_TransitionStart_Quad(_MenuBackground, _MenuBackground.Controls.Quad_BlackBackground, C_DisplayMode_BlackBackground, _TransitionDuration);
}

Void Private_TransitionStart_Dimmer(K_MenuBackground _MenuBackground, Real _Opacity, Integer _TransitionDuration) {
	AnimMgr.Flush(_MenuBackground.Controls.Quad_Dimmer);
	if (_TransitionDuration > 0) {
		AnimMgr.Add(_MenuBackground.Controls.Quad_Dimmer, "<a opacity=\""^_Opacity^"\" />", _TransitionDuration, CAnimManager::EAnimManagerEasing::QuadIn);
	} else {
		_MenuBackground.Controls.Quad_Dimmer.Opacity = _Opacity;
	}
}

K_MenuBackground Private_TransitionStart(K_MenuBackground _MenuBackground, Integer _TransitionDuration) {
	declare K_MenuBackground MenuBackground = _MenuBackground;

	MenuBackground.TransitionEndTime = Now + _TransitionDuration;

	_MenuBackground.Controls.Frame_HomeBackground.ZIndex = Private_GetBackgroundZIndex(C_DisplayMode_HomeBackground, _MenuBackground.OldDisplayMode, _MenuBackground.ActiveDisplayMode);
	_MenuBackground.Controls.Quad_MainBackground.ZIndex = Private_GetBackgroundZIndex(C_DisplayMode_MainBackground, _MenuBackground.OldDisplayMode, _MenuBackground.ActiveDisplayMode);
	_MenuBackground.Controls.Frame_MainBackgroundAnimated.ZIndex = Private_GetBackgroundZIndex(C_DisplayMode_MainBackground, _MenuBackground.OldDisplayMode, _MenuBackground.ActiveDisplayMode) + 1;
	_MenuBackground.Controls.Quad_SettingsBackground.ZIndex = Private_GetBackgroundZIndex(C_DisplayMode_SettingsBackground, _MenuBackground.OldDisplayMode, _MenuBackground.ActiveDisplayMode);
	_MenuBackground.Controls.Quad_ProfileBackground.ZIndex = Private_GetBackgroundZIndex(C_DisplayMode_ProfileBackground, _MenuBackground.OldDisplayMode, _MenuBackground.ActiveDisplayMode);
	_MenuBackground.Controls.Quad_GarageBackground.ZIndex = Private_GetBackgroundZIndex(C_DisplayMode_GarageBackground, _MenuBackground.OldDisplayMode, _MenuBackground.ActiveDisplayMode);
	_MenuBackground.Controls.Quad_ClubEditionBackground.ZIndex = Private_GetBackgroundZIndex(C_DisplayMode_ClubEditionBackground, _MenuBackground.OldDisplayMode, _MenuBackground.ActiveDisplayMode);
	_MenuBackground.Controls.Quad_BlackBackground.ZIndex = Private_GetBackgroundZIndex(C_DisplayMode_BlackBackground, _MenuBackground.OldDisplayMode, _MenuBackground.ActiveDisplayMode);

	Private_TransitionStart_HomeBackground(MenuBackground);
	Private_TransitionStart_MainBackground(MenuBackground, _TransitionDuration);
	Private_TransitionStart_SettingsBackground(MenuBackground, _TransitionDuration);
	Private_TransitionStart_ProfileBackground(MenuBackground, _TransitionDuration);
	Private_TransitionStart_GarageBackground(MenuBackground, _TransitionDuration);
	Private_TransitionStart_ClubEditionBackground(MenuBackground, _TransitionDuration);
	Private_TransitionStart_BlackBackground(MenuBackground, _TransitionDuration);

	return MenuBackground;
}

K_MenuBackground Private_UpdateDisplayMode(K_MenuBackground _MenuBackground, Integer _NewDisplayMode, Boolean _IsInit) {
	if (!_IsInit && _MenuBackground.ActiveDisplayMode == _NewDisplayMode) return _MenuBackground;

	declare K_MenuBackground MenuBackground = _MenuBackground;
	MenuBackground = Private_TransitionEnd(MenuBackground);
	MenuBackground.OldDisplayMode = MenuBackground.ActiveDisplayMode;
	MenuBackground.ActiveDisplayMode = _NewDisplayMode;
	MenuBackground = Private_TransitionStart(MenuBackground, C_BackgroundTransitionDuration);

	Trackmania_HomeBackground2::SetIsInputEnabled(_MenuBackground.Controls.Frame_HomeBackground, MenuBackground.ActiveDisplayMode == C_DisplayMode_HomeBackground);

	return MenuBackground;
}

K_MenuBackground Private_UpdateDimmerOpacity(K_MenuBackground _MenuBackground, Real _NewDimmerOpacity, Boolean _IsInit) {
	if (!_IsInit && _MenuBackground.ActiveDimmerOpacity == _NewDimmerOpacity) return _MenuBackground;

	declare K_MenuBackground MenuBackground = _MenuBackground;
	MenuBackground.OldDimmerOpacity = MenuBackground.ActiveDimmerOpacity;
	MenuBackground.ActiveDimmerOpacity = _NewDimmerOpacity;
	Private_TransitionStart_Dimmer(MenuBackground, _NewDimmerOpacity, C_BackgroundTransitionDuration);

	return MenuBackground;
}

K_MenuBackground Private_ApplyRouteDisplayMode(K_MenuBackground _MenuBackground, Integer[Text] _RoutesDisplayModes, Text _Route, Boolean _IsInit) {
	return Private_UpdateDisplayMode(
		_MenuBackground,
		_RoutesDisplayModes.get(_Route, C_DisplayMode_MainBackground),
		_IsInit
	);
}

K_MenuBackground Private_ApplyRouteDimmerOpacity(K_MenuBackground _MenuBackground, Real[Text] _RoutesDimmerOpacities, Text _Route, Boolean _IsInit) {
	return Private_UpdateDimmerOpacity(
		_MenuBackground,
		_RoutesDimmerOpacities.get(_Route, C_DimmerOpacity_Default),
		_IsInit
	);
}

***MainInit***
***
declare Integer[Text] OverlayMenuBackground_RoutesDisplayModes for LocalUser = [];
declare Real[Text] OverlayMenuBackground_RoutesDimmerOpacities for LocalUser = [];
declare Integer OverlayMenuBackground_RoutesDisplayModesUpdate for LocalUser = 0;
declare Integer OverlayMenuBackground_RoutesDimmerOpacitiesUpdate for LocalUser = 0;

declare K_MenuBackground MenuBackground;
declare Text CurrentRoutePath;
declare Integer RoutesDisplayModesUpdate;
declare Integer RoutesDimmerOpacitiesUpdate;
declare Text SkinOptions;
declare Text SkinName;
declare Text SkinUrl;
declare Vec3 SkinColor;
declare Text PilotOptions;
declare Text PilotName;
declare Text PilotUrl;
declare Vec3 PilotColor;
***

***MainStart***
***
MenuBackground = K_MenuBackground {
	Controls = K_Controls {
		Frame_HomeBackground = (Page.GetFirstChild("frame-home-background") as CMlFrame),
		Quad_MainBackground = (Page.GetFirstChild("quad-main-background") as CMlQuad),
		Frame_MainBackgroundAnimated = (Page.GetFirstChild("frame-main-background-animated") as CMlFrame),
		Quad_MainBackgroundAnimatedList = [],
		Quad_SettingsBackground = (Page.GetFirstChild("quad-settings-background") as CMlQuad),
		Quad_ProfileBackground = (Page.GetFirstChild("quad-profile-background") as CMlQuad),
		Quad_GarageBackground = (Page.GetFirstChild("quad-garage-background") as CMlQuad),
		Quad_ClubEditionBackground = (Page.GetFirstChild("quad-club-edition-background") as CMlQuad),
		Quad_BlackBackground = (Page.GetFirstChild("quad-black-background") as CMlQuad),
		Quad_Dimmer = (Page.GetFirstChild("quad-dimmer") as CMlQuad)
	},
	ActiveDisplayMode = C_DisplayMode_Null,
	OldDisplayMode = C_DisplayMode_Null,
	ActiveDimmerOpacity = C_DimmerOpacity_Default,
	OldDimmerOpacity = C_DimmerOpacity_Default,
	TransitionEndTime = -1
};
for (Control in MenuBackground.Controls.Frame_MainBackgroundAnimated.Controls) {
	MenuBackground.Controls.Quad_MainBackgroundAnimatedList.add(Control as CMlQuad);
}

CurrentRoutePath = Router_Router::GetCurrentRoutePath(This);
RoutesDisplayModesUpdate = OverlayMenuBackground_RoutesDisplayModesUpdate;
RoutesDimmerOpacitiesUpdate = OverlayMenuBackground_RoutesDimmerOpacitiesUpdate;
SkinOptions = LocalUser.Prestige_SkinOptions;
SkinName = LocalUser.Model_CarSport_SkinName;
SkinUrl = LocalUser.Model_CarSport_SkinUrl;
SkinColor = LocalUser.Color;
PilotOptions = LocalUser.Character_SkinOptions;
PilotName = LocalUser.Model_CharacterPilot_SkinName;
PilotUrl = LocalUser.Model_CharacterPilot_SkinUrl;
PilotColor = LocalUser.Color;

MenuBackground = Private_ApplyRouteDisplayMode(MenuBackground, OverlayMenuBackground_RoutesDisplayModes, CurrentRoutePath, True);
MenuBackground = Private_ApplyRouteDimmerOpacity(MenuBackground, OverlayMenuBackground_RoutesDimmerOpacities, CurrentRoutePath, True);
***

***MainLoop***
***
if (PageIsVisible) {
	if (C_BgType == C_BgType_Dynamic) {
		for (Quad in MenuBackground.Controls.Quad_MainBackgroundAnimatedList) {
			Quad.Colorize = Private_BlendColors(C_DayTimesColors[Private_PreviousTime(TimeOfDay::GetDayProgression())], C_DayTimesColors[Private_NextTime(TimeOfDay::GetDayProgression())], Private_GetMixPercent(TimeOfDay::GetDayProgression()));
		}
	}
	
	if (MenuBackground.Controls.Quad_MainBackground.Opacity > 0.) {
		MenuBackground.Controls.Frame_MainBackgroundAnimated.RelativePosition_V3.X = AL::EaseLinear(Now % C_BackgroundRotationTime, 0., 320., C_BackgroundRotationTime);
	}
	if (MenuBackground.TransitionEndTime >= 0 && Now >= MenuBackground.TransitionEndTime) {
		MenuBackground = Private_TransitionEnd(MenuBackground);
	}
	if (CurrentRoutePath != Router_Router::GetCurrentRoutePath(This) ||
		RoutesDisplayModesUpdate != OverlayMenuBackground_RoutesDisplayModesUpdate ||
		RoutesDimmerOpacitiesUpdate != OverlayMenuBackground_RoutesDimmerOpacitiesUpdate
	) {
		CurrentRoutePath = Router_Router::GetCurrentRoutePath(This);
		RoutesDisplayModesUpdate = OverlayMenuBackground_RoutesDisplayModesUpdate;
		RoutesDimmerOpacitiesUpdate = OverlayMenuBackground_RoutesDimmerOpacitiesUpdate;
		MenuBackground = Private_ApplyRouteDisplayMode(MenuBackground, OverlayMenuBackground_RoutesDisplayModes, CurrentRoutePath, False);
		MenuBackground = Private_ApplyRouteDimmerOpacity(MenuBackground, OverlayMenuBackground_RoutesDimmerOpacities, CurrentRoutePath, False);

		if (
			SkinOptions != LocalUser.Prestige_SkinOptions ||
			SkinName != LocalUser.Model_CarSport_SkinName ||
			SkinUrl != LocalUser.Model_CarSport_SkinUrl ||
			SkinColor != LocalUser.Color
		) {
			SkinOptions = LocalUser.Prestige_SkinOptions;
			SkinName = LocalUser.Model_CarSport_SkinName;
			SkinUrl = LocalUser.Model_CarSport_SkinUrl;
			SkinColor = LocalUser.Color;
			Trackmania_HomeBackground2::UpdateCar(This, MenuBackground.Controls.Frame_HomeBackground);
		}

		if (
			PilotOptions != LocalUser.Character_SkinOptions ||
			PilotName != LocalUser.Model_CharacterPilot_SkinName ||
			PilotUrl != LocalUser.Model_CharacterPilot_SkinUrl ||
			PilotColor != LocalUser.Color
		) {
			PilotOptions = LocalUser.Character_SkinOptions;
			PilotName = LocalUser.Model_CharacterPilot_SkinName;
			PilotUrl = LocalUser.Model_CharacterPilot_SkinUrl;
			PilotColor = LocalUser.Color;
			Trackmania_HomeBackground2::UpdatePilot(This, MenuBackground.Controls.Frame_HomeBackground);
		}
	}
}
***


Void ManiaView_DoNothing() {}

main() {
	+++MainInit+++
	+++MainStart+++
	while (True) {
		yield;
		+++MainLoop+++
	}
	+++MainEnd+++
}
--></script>
</manialink>
