enum ENcartDistricts
{
	WATSON = 0,
	CITY_CENTER = 1,
	JAPAN_TOWN = 2,
	HEYWOOD = 3,
	PACIFICA = 4,
	SANTO_DOMINGO = 5,
	ERROR = 6,
}

enum ENcartStations
{
	NONE = 0,
	ARASAKA_WATERFRONT = 1,
	LITTLE_CHINA_HOSPITAL = 2,
	LITTLE_CHINA_NORTH = 3,
	LITTLE_CHINA_SOUTH = 4,
	JAPAN_TOWN_NORTH = 5,
	JAPAN_TOWN_SOUTH = 6,
	DOWNTOWN_NORTH = 7,
	ARROYO = 8,
	CITY_CENTER = 9,
	ARASAKA_TOWER = 10,
	WELLSPRINGS = 11,
	GLEN_NORTH = 12,
	GLEN_SOUTH = 13,
	VISTA_DEL_REY = 14,
	RANCHO_CORONADO = 15,
	LITTLE_CHINA_MEGABUILDING = 16,
	CHARTER_HILL = 17,
	GLEN_EBUNIKE = 18,
	PACIFICA_STADIUM = 19,
}

struct ncartStationListDef
{
	editable var m_station : ENcartStations;
}

struct ncartLineListDef
{
	editable var m_lineNumber : Uint32;
	editable var m_lineColor : Color;
	const editable var m_stationsList : array< ncartStationListDef >;
	editable var m_lineSymbolWidget : inkWidgetRef;
	editable var m_lineIsLooped : Bool;
}

class NcartTrainLineListInkController extends NcartTrainInkControllerBase
{
	private const editable var m_LinesList : array< ncartLineListDef >;
	private editable var m_ActiveMetroLineNumberFactName : CName;
	private editable var m_ActiveMetroStationNumberFactName : CName;
	private editable var m_MetroStoppingFactName : CName;
	private editable var m_MetroReverseDirectionFact : CName;
	private var m_root : weak< inkCompoundWidget >;
	private var m_questsSystem : weak< QuestsSystem >;
	private var m_activeStationListenerId : Uint32;
	private var m_activeLineListenerId : Uint32;
	private var m_StopListenerId : Uint32;
	private var m_StationListSetUp : Bool;
	private var m_lastDestination : Int32;
	default m_lastDestination = -1;
	private var m_currentActiveStation : Int32;
	default m_currentActiveStation = -1;
	private var m_activeStationWidget : Int32;
	private editable var m_ncartLogo : inkImageRef;
	private editable var m_ncartLogoDeco : inkImageRef;
	private editable var m_ncartLogoDecoFrame1 : inkImageRef;
	private editable var m_ncartLogoDecoFrame2 : inkImageRef;
	private editable var m_ncartLogoDecoFrame3 : inkImageRef;
	private editable var m_ncartLogoDecoFrame4 : inkImageRef;
	private editable var m_line_loop_symbol : inkImageRef;
	private editable var m_ncartDecoAccent1 : inkImageRef;
	private editable var m_ncartDecoAccent2 : inkImageRef;
	private editable var m_ncartDecoAccent3 : inkImageRef;
	private editable var m_ncartDecoAccent4 : inkImageRef;
	private editable var m_ncartTextLogo : inkImageRef;
	private editable var m_ncartDirectionArrowsList : inkHorizontalPanelRef;
	private editable var m_ncartLineStationList : inkHorizontalPanelRef;
	private var cachedLine : Uint32;

	protected event OnInitialize()
	{
		var ownerObject : GameObject;
		super.OnInitialize();
		ownerObject = ( ( GameObject )( GetOwnerEntity() ) );
		m_questsSystem = GameInstance.GetQuestsSystem( ownerObject.GetGame() );
		m_activeStationListenerId = m_questsSystem.RegisterListener( m_ActiveMetroLineNumberFactName, this, 'OnMetroActiveLineChangeEvent' );
		m_activeLineListenerId = m_questsSystem.RegisterListener( m_ActiveMetroStationNumberFactName, this, 'OnMetroActiveStationChangeEvent' );
		m_StopListenerId = m_questsSystem.RegisterListener( m_MetroStoppingFactName, this, 'OnMetroArrivingAtStationEvent' );
		m_root = ( ( inkCompoundWidget )( GetRootWidget() ) );
		UpdateMetroLine( ( ( Uint32 )( m_questsSystem.GetFact( m_ActiveMetroLineNumberFactName ) ) ) );
	}

	protected event OnUninitialize()
	{
		m_questsSystem.UnregisterListener( m_ActiveMetroStationNumberFactName, m_activeStationListenerId );
		m_questsSystem.UnregisterListener( m_ActiveMetroLineNumberFactName, m_activeLineListenerId );
		m_questsSystem.UnregisterListener( m_MetroStoppingFactName, m_activeLineListenerId );
	}

	protected event OnMetroActiveLineChangeEvent( factValue : Int32 ) {}

	protected event OnMetroActiveStationChangeEvent( factValue : Int32 ) {}

	protected event OnMetroArrivingAtStationEvent( factValue : Int32 )
	{
		var activeStation : Int32;
		if( factValue == 1 )
		{
			SignalTrainStop();
		}
		else
		{
			activeStation = m_questsSystem.GetFact( m_ActiveMetroStationNumberFactName );
			if( m_currentActiveStation != activeStation )
			{
				MarkNextStationOnLine( m_questsSystem.GetFact( m_ActiveMetroStationNumberFactName ) );
			}
		}
	}

	private function UpdateMetroLine( activeLine : Uint32 )
	{
		var i : Int32;
		for( i = 0; i < m_LinesList.Size(); i += 1 )
		{
			if( m_LinesList[ i ].m_lineNumber == activeLine )
			{
				inkImageRef.SetTintColor( m_ncartLogo, m_LinesList[ i ].m_lineColor );
				inkWidgetRef.SetTintColor( m_LinesList[ i ].m_lineSymbolWidget, m_LinesList[ i ].m_lineColor );
				inkWidgetRef.SetOpacity( m_LinesList[ i ].m_lineSymbolWidget, 1.0 );
				inkImageRef.SetTintColor( m_ncartLogoDeco, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartLogoDecoFrame1, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartLogoDecoFrame2, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartLogoDecoFrame3, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartLogoDecoFrame4, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartDecoAccent1, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartDecoAccent2, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartDecoAccent3, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartDecoAccent4, m_LinesList[ i ].m_lineColor );
				inkImageRef.SetTintColor( m_ncartTextLogo, m_LinesList[ i ].m_lineColor );
				if( m_LinesList[ i ].m_lineIsLooped == true )
				{
					inkImageRef.SetTintColor( m_line_loop_symbol, m_LinesList[ i ].m_lineColor );
					inkImageRef.SetOpacity( m_line_loop_symbol, 1.0 );
				}
				else
				{
					inkImageRef.SetOpacity( m_line_loop_symbol, 0.0 );
				}
				cachedLine = ( ( Uint32 )( i ) );
			}
		}
		PaintDirectionArrows( ( ( Int32 )( cachedLine ) ) );
		m_StationListSetUp = PopulateStationList( ( ( Int32 )( cachedLine ) ) );
		if( m_StationListSetUp == true )
		{
			MarkNextStationOnLine( m_questsSystem.GetFact( m_ActiveMetroStationNumberFactName ) );
		}
	}

	private function PaintDirectionArrows( line : Int32 )
	{
		var i : Int32;
		var arrow : weak< inkWidget >;
		if( !( inkHorizontalPanelRef.IsValid( m_ncartDirectionArrowsList ) ) )
		{
			return;
		}
		while( i < inkHorizontalPanelRef.GetNumChildren( m_ncartDirectionArrowsList ) )
		{
			arrow = inkHorizontalPanelRef.GetWidgetByIndex( m_ncartDirectionArrowsList, i );
			arrow.SetTintColor( m_LinesList[ line ].m_lineColor );
			i += 1;
		}
		PlayDirectionArrows();
	}

	private function PlayDirectionArrows()
	{
		var animSetup : inkAnimOptions;
		animSetup.loopInfinite = true;
		animSetup.loopType = inkanimLoopType.Cycle;
		animSetup.dependsOnTimeDilation = true;
		if( ( ( Uint32 )( m_questsSystem.GetFact( m_MetroReverseDirectionFact ) ) ) == 0 )
		{
			PlayLibraryAnimation( 'direction_right', animSetup );
		}
		else
		{
			PlayLibraryAnimation( 'direction_left', animSetup );
		}
	}

	private function PopulateStationList( line : Int32 ) : Bool
	{
		var i : Int32;
		var lineStationsList : array< ncartStationListDef >;
		var widget : weak< inkWidget >;
		lineStationsList = m_LinesList[ line ].m_stationsList;
		if( lineStationsList.Size() == 0 )
		{
			return false;
		}
		for( i = 0; i < lineStationsList.Size(); i += 1 )
		{
			if( i == ( lineStationsList.Size() - 1 ) )
			{
				widget = SpawnFromLocal( inkHorizontalPanelRef.Get( m_ncartLineStationList ), 'station_end' );
				widget.SetHAlign( inkEHorizontalAlign.Fill );
				PaintStationMarker( ( ( inkCompoundWidget )( widget ) ), m_LinesList[ line ].m_lineColor, GetDistrictColor( GetMetroStationDistrict( lineStationsList[ i ].m_station ) ) );
			}
			else
			{
				widget = SpawnFromLocal( inkHorizontalPanelRef.Get( m_ncartLineStationList ), 'station' );
				widget.SetHAlign( inkEHorizontalAlign.Fill );
				PaintStationMarker( ( ( inkCompoundWidget )( widget ) ), m_LinesList[ line ].m_lineColor, GetDistrictColor( GetMetroStationDistrict( lineStationsList[ i ].m_station ) ) );
			}
		}
		return true;
	}

	private function PaintStationMarker( widget : weak< inkCompoundWidget >, lineColor : Color, districtColor : Color )
	{
		var markshape : weak< inkWidget >;
		var connector : weak< inkWidget >;
		var nameBar : weak< inkWidget >;
		var DistrictBar : weak< inkWidget >;
		var color : Color;
		color = m_LinesList[ ( ( Int32 )( cachedLine ) ) ].m_lineColor;
		markshape = widget.GetWidgetByPath( inkWidgetPath.Build( 'mark', 'mark_shape' ) );
		if( markshape != NULL )
		{
			markshape.SetTintColor( color );
		}
		connector = widget.GetWidgetByPath( inkWidgetPath.Build( 'connector' ) );
		if( connector != NULL )
		{
			connector.SetTintColor( color );
		}
		DistrictBar = widget.GetWidgetByPath( inkWidgetPath.Build( 'connector_district' ) );
		if( DistrictBar != NULL )
		{
			DistrictBar.SetTintColor( districtColor );
		}
		nameBar = widget.GetWidgetByPath( inkWidgetPath.Build( 'StationNameCanvas', 'name_bar_45' ) );
		if( nameBar != NULL )
		{
			nameBar.SetTintColor( color );
		}
		DistrictBar = widget.GetWidgetByPath( inkWidgetPath.Build( 'StationNameCanvas', 'StationNamePane', 'station_name_box_1' ) );
		if( DistrictBar != NULL )
		{
			DistrictBar.SetTintColor( color );
		}
		DistrictBar = widget.GetWidgetByPath( inkWidgetPath.Build( 'StationNameCanvas', 'StationNamePane', 'station_name_box_2' ) );
		if( DistrictBar != NULL )
		{
			DistrictBar.SetTintColor( color );
		}
		DistrictBar = widget.GetWidgetByPath( inkWidgetPath.Build( 'StationNameCanvas', 'StationNamePane', 'station_name_box_3' ) );
		if( DistrictBar != NULL )
		{
			DistrictBar.SetTintColor( color );
		}
	}

	private function MarkNextStationOnLine( activeStation : Int32 )
	{
		var i, stationSetAsNext : Int32;
		var activeStationFound : Bool;
		var lineStationsList : array< ncartStationListDef >;
		var directionReverse, isLooped, newLoop : Bool;
		isLooped = m_LinesList[ ( ( Int32 )( cachedLine ) ) ].m_lineIsLooped;
		lineStationsList = m_LinesList[ ( ( Int32 )( cachedLine ) ) ].m_stationsList;
		directionReverse = ( ( Uint32 )( m_questsSystem.GetFact( m_MetroReverseDirectionFact ) ) ) > 0;
		m_currentActiveStation = activeStation;
		for( i = 0; i < lineStationsList.Size(); i += 1 )
		{
			if( GetMetroStationNumber( lineStationsList[ i ].m_station ) == activeStation )
			{
				if( !( activeStationFound ) )
				{
					activeStationFound = true;
					if( !( directionReverse ) )
					{
						stationSetAsNext = i + 1;
						m_activeStationWidget = i + 1;
					}
					else
					{
						stationSetAsNext = i - 1;
						m_activeStationWidget = i - 1;
					}
					if( isLooped )
					{
						if( stationSetAsNext > ( lineStationsList.Size() - 1 ) )
						{
							stationSetAsNext = 0;
							m_activeStationWidget = 0;
							newLoop = true;
						}
					}
					MarkStationActive( stationSetAsNext );
				}
			}
		}
		if( newLoop )
		{
			MarkStationInactive( ( ( inkCompoundWidget )( inkHorizontalPanelRef.GetWidgetByIndex( m_ncartLineStationList, m_lastDestination ) ) ), true );
			newLoop = false;
		}
		else
		{
			MarkStationInactive( ( ( inkCompoundWidget )( inkHorizontalPanelRef.GetWidgetByIndex( m_ncartLineStationList, m_lastDestination ) ) ), false );
		}
		m_lastDestination = stationSetAsNext;
		m_questsSystem.SetFact( 'ue_metro_next_station', GetMetroStationNumber( lineStationsList[ stationSetAsNext ].m_station ) );
	}

	private function MarkStationActive( stationPosition : Int32 )
	{
		var stationName : inkText;
		var stationNameString : String;
		var widget : inkCompoundWidget;
		var warningWidget : inkWidget;
		widget = ( ( inkCompoundWidget )( inkHorizontalPanelRef.GetWidgetByIndex( m_ncartLineStationList, stationPosition ) ) );
		stationName = ( ( inkText )( widget.GetWidgetByPath( inkWidgetPath.Build( 'StationNameCanvas', 'StationNamePane', 'StationNameWrapper', 'StatioName' ) ) ) );
		stationNameString = GetMetroStationLocalizedName( m_LinesList[ ( ( Int32 )( cachedLine ) ) ].m_stationsList[ stationPosition ].m_station );
		if( IsStringNumber( stationNameString ) && !( IsStringValid( stationNameString ) ) )
		{
			stationName.SetLocalizedTextString( stationNameString );
		}
		else
		{
			stationName.SetText( stationNameString );
		}
		if( m_LinesList[ ( ( Int32 )( cachedLine ) ) ].m_stationsList[ stationPosition ].m_station == ENcartStations.PACIFICA_STADIUM )
		{
			warningWidget = widget.GetWidgetByPath( inkWidgetPath.Build( 'StationNameCanvas', 'StationNamePane', 'StationNameWrapper', 'warningIcon1' ) );
			warningWidget.SetOpacity( 1.0 );
			warningWidget = widget.GetWidgetByPath( inkWidgetPath.Build( 'StationNameCanvas', 'StationNamePane', 'StationNameWrapper', 'warningIcon2' ) );
			warningWidget.SetOpacity( 1.0 );
		}
		if( stationPosition < ( m_LinesList[ ( ( Int32 )( cachedLine ) ) ].m_stationsList.Size() - 1 ) )
		{
			PlayLibraryAnimationOnAutoSelectedTargets( 'HighlightStation', widget );
		}
		else
		{
			PlayLibraryAnimationOnAutoSelectedTargets( 'HighlightStationEnd', widget );
		}
	}

	private function MarkStationInactive( widget : weak< inkCompoundWidget >, lastStation : Bool )
	{
		if( !( lastStation ) )
		{
			PlayLibraryAnimationOnAutoSelectedTargets( 'HighlightStationRemove', widget );
		}
		else
		{
			PlayLibraryAnimationOnAutoSelectedTargets( 'HighlightStationRemoveEnd', widget );
		}
	}

	private function PlayAnimationInReverse() : inkAnimOptions
	{
		var playbackOptionsOverrideData : inkAnimOptions;
		var playbackUpdateData : PlaybackOptionsUpdateData;
		playbackOptionsOverrideData.playReversed = true;
		playbackOptionsOverrideData.loopInfinite = false;
		playbackOptionsOverrideData.loopType = inkanimLoopType.None;
		playbackUpdateData.m_playbackOptions = playbackOptionsOverrideData;
		return playbackOptionsOverrideData;
	}

	private function SignalTrainStop()
	{
		var station : weak< inkCompoundWidget >;
		station = ( ( inkCompoundWidget )( inkHorizontalPanelRef.GetWidgetByIndex( m_ncartLineStationList, m_activeStationWidget ) ) );
		if( inkHorizontalPanelRef.GetNumChildren( m_ncartLineStationList ) > m_activeStationWidget )
		{
			PlayLibraryAnimationOnAutoSelectedTargets( 'TrainStop', station );
		}
		else
		{
			PlayLibraryAnimationOnAutoSelectedTargets( 'TrainStopEnd', station );
		}
	}

}

class NcartTrainInkControllerBase extends DeviceInkGameControllerBase
{

	protected const function GetDistrictColor( district : ENcartDistricts ) : Color
	{
		var color : Color;
		switch( district )
		{
			case ENcartDistricts.WATSON:
				color = Color( 124, 35, 26, 255 );
			break;
			case ENcartDistricts.CITY_CENTER:
				color = Color( 240, 236, 128, 255 );
			break;
			case ENcartDistricts.JAPAN_TOWN:
				color = Color( 164, 110, 38, 255 );
			break;
			case ENcartDistricts.HEYWOOD:
				color = Color( 11, 174, 94, 255 );
			break;
			case ENcartDistricts.PACIFICA:
				color = Color( 169, 47, 122, 255 );
			break;
			case ENcartDistricts.SANTO_DOMINGO:
				color = Color( 67, 32, 143, 255 );
			break;
		}
		return color;
	}

	protected const function GetDistrictLocalizedName( district : ENcartDistricts ) : String
	{
		switch( district )
		{
			case ENcartDistricts.WATSON:
				return "LocKey#10947";
			case ENcartDistricts.CITY_CENTER:
				return "LocKey#10950";
			case ENcartDistricts.JAPAN_TOWN:
				return "LocKey#10948";
			case ENcartDistricts.HEYWOOD:
				return "LocKey#10945";
			case ENcartDistricts.PACIFICA:
				return "LocKey#10946";
			case ENcartDistricts.SANTO_DOMINGO:
				return "LocKey#10949";
		}
		return "";
	}

	protected const function GetMetroStationNumber( stationName : ENcartStations ) : Int32
	{
		switch( stationName )
		{
			case ENcartStations.ARASAKA_WATERFRONT:
				return 1;
			case ENcartStations.LITTLE_CHINA_HOSPITAL:
				return 2;
			case ENcartStations.LITTLE_CHINA_NORTH:
				return 3;
			case ENcartStations.LITTLE_CHINA_SOUTH:
				return 4;
			case ENcartStations.JAPAN_TOWN_NORTH:
				return 5;
			case ENcartStations.JAPAN_TOWN_SOUTH:
				return 6;
			case ENcartStations.DOWNTOWN_NORTH:
				return 7;
			case ENcartStations.ARROYO:
				return 8;
			case ENcartStations.CITY_CENTER:
				return 9;
			case ENcartStations.ARASAKA_TOWER:
				return 10;
			case ENcartStations.WELLSPRINGS:
				return 11;
			case ENcartStations.GLEN_NORTH:
				return 12;
			case ENcartStations.GLEN_SOUTH:
				return 13;
			case ENcartStations.VISTA_DEL_REY:
				return 14;
			case ENcartStations.RANCHO_CORONADO:
				return 15;
			case ENcartStations.LITTLE_CHINA_MEGABUILDING:
				return 16;
			case ENcartStations.CHARTER_HILL:
				return 17;
			case ENcartStations.GLEN_EBUNIKE:
				return 18;
			case ENcartStations.PACIFICA_STADIUM:
				return 19;
		}
		return 0;
	}

	protected const function GetMetroStationLocalizedName( stationName : ENcartStations ) : String
	{
		switch( stationName )
		{
			case ENcartStations.ARASAKA_WATERFRONT:
				return "LocKey#95277";
			case ENcartStations.LITTLE_CHINA_HOSPITAL:
				return "LocKey#95260";
			case ENcartStations.LITTLE_CHINA_NORTH:
				return "LocKey#95261";
			case ENcartStations.LITTLE_CHINA_SOUTH:
				return "LocKey#95262";
			case ENcartStations.JAPAN_TOWN_NORTH:
				return "LocKey#95259";
			case ENcartStations.JAPAN_TOWN_SOUTH:
				return "LocKey#95263";
			case ENcartStations.DOWNTOWN_NORTH:
				return "LocKey#95264";
			case ENcartStations.ARROYO:
				return "LocKey#95265";
			case ENcartStations.CITY_CENTER:
				return "LocKey#95266";
			case ENcartStations.ARASAKA_TOWER:
				return "LocKey#95267";
			case ENcartStations.WELLSPRINGS:
				return "LocKey#95268";
			case ENcartStations.GLEN_NORTH:
				return "LocKey#95269";
			case ENcartStations.GLEN_SOUTH:
				return "LocKey#95270";
			case ENcartStations.VISTA_DEL_REY:
				return "LocKey#95271";
			case ENcartStations.RANCHO_CORONADO:
				return "LocKey#95272";
			case ENcartStations.LITTLE_CHINA_MEGABUILDING:
				return "LocKey#95273";
			case ENcartStations.CHARTER_HILL:
				return "LocKey#95274";
			case ENcartStations.GLEN_EBUNIKE:
				return "LocKey#95275";
			case ENcartStations.PACIFICA_STADIUM:
				return "LocKey#95276";
		}
		return "";
	}

	protected const function GetMetroStationDistrict( stationName : ENcartStations ) : ENcartDistricts
	{
		switch( stationName )
		{
			case ENcartStations.ARASAKA_WATERFRONT:
				return ENcartDistricts.WATSON;
			case ENcartStations.LITTLE_CHINA_HOSPITAL:
				return ENcartDistricts.WATSON;
			case ENcartStations.LITTLE_CHINA_NORTH:
				return ENcartDistricts.WATSON;
			case ENcartStations.LITTLE_CHINA_SOUTH:
				return ENcartDistricts.WATSON;
			case ENcartStations.JAPAN_TOWN_NORTH:
				return ENcartDistricts.JAPAN_TOWN;
			case ENcartStations.JAPAN_TOWN_SOUTH:
				return ENcartDistricts.JAPAN_TOWN;
			case ENcartStations.DOWNTOWN_NORTH:
				return ENcartDistricts.CITY_CENTER;
			case ENcartStations.ARROYO:
				return ENcartDistricts.SANTO_DOMINGO;
			case ENcartStations.CITY_CENTER:
				return ENcartDistricts.CITY_CENTER;
			case ENcartStations.ARASAKA_TOWER:
				return ENcartDistricts.CITY_CENTER;
			case ENcartStations.WELLSPRINGS:
				return ENcartDistricts.HEYWOOD;
			case ENcartStations.GLEN_NORTH:
				return ENcartDistricts.HEYWOOD;
			case ENcartStations.GLEN_SOUTH:
				return ENcartDistricts.HEYWOOD;
			case ENcartStations.VISTA_DEL_REY:
				return ENcartDistricts.HEYWOOD;
			case ENcartStations.RANCHO_CORONADO:
				return ENcartDistricts.SANTO_DOMINGO;
			case ENcartStations.LITTLE_CHINA_MEGABUILDING:
				return ENcartDistricts.WATSON;
			case ENcartStations.CHARTER_HILL:
				return ENcartDistricts.HEYWOOD;
			case ENcartStations.GLEN_EBUNIKE:
				return ENcartDistricts.HEYWOOD;
			case ENcartStations.PACIFICA_STADIUM:
				return ENcartDistricts.PACIFICA;
		}
		return ENcartDistricts.WATSON;
	}

	protected const function GetMetroStationEnumFromNumber( stationNumber : Int32 ) : ENcartStations
	{
		switch( stationNumber )
		{
			case 1:
				return ENcartStations.ARASAKA_WATERFRONT;
			case 2:
				return ENcartStations.LITTLE_CHINA_HOSPITAL;
			case 3:
				return ENcartStations.LITTLE_CHINA_NORTH;
			case 4:
				return ENcartStations.LITTLE_CHINA_SOUTH;
			case 5:
				return ENcartStations.JAPAN_TOWN_NORTH;
			case 6:
				return ENcartStations.JAPAN_TOWN_SOUTH;
			case 7:
				return ENcartStations.DOWNTOWN_NORTH;
			case 8:
				return ENcartStations.ARROYO;
			case 9:
				return ENcartStations.CITY_CENTER;
			case 10:
				return ENcartStations.ARASAKA_TOWER;
			case 11:
				return ENcartStations.WELLSPRINGS;
			case 12:
				return ENcartStations.GLEN_NORTH;
			case 13:
				return ENcartStations.GLEN_SOUTH;
			case 14:
				return ENcartStations.VISTA_DEL_REY;
			case 15:
				return ENcartStations.RANCHO_CORONADO;
			case 16:
				return ENcartStations.LITTLE_CHINA_MEGABUILDING;
			case 17:
				return ENcartStations.CHARTER_HILL;
			case 18:
				return ENcartStations.GLEN_EBUNIKE;
			case 19:
				return ENcartStations.PACIFICA_STADIUM;
		}
		return ENcartStations.NONE;
	}

	protected const function GetMetroStationLocalizedNameByNumber( stationNumber : Int32 ) : String
	{
		switch( stationNumber )
		{
			case 1:
				return "LocKey#95277";
			case 2:
				return "LocKey#95260";
			case 3:
				return "LocKey#95261";
			case 4:
				return "LocKey#95262";
			case 5:
				return "LocKey#95259";
			case 6:
				return "LocKey#95263";
			case 7:
				return "LocKey#95264";
			case 8:
				return "LocKey#95265";
			case 9:
				return "LocKey#95266";
			case 10:
				return "LocKey#95267";
			case 11:
				return "LocKey#95268";
			case 12:
				return "LocKey#95269";
			case 13:
				return "LocKey#95270";
			case 14:
				return "LocKey#95271";
			case 15:
				return "LocKey#95272";
			case 16:
				return "LocKey#95273";
			case 17:
				return "LocKey#95274";
			case 18:
				return "LocKey#95275";
			case 19:
				return "LocKey#95276";
		}
		return "";
	}

}

