class ShowTwintoneOverrideEvent extends Event { var template : VehicleVisualCustomizationTemplate; var modelName : CName; } class OnTwintoneOverrideClosedEvent extends Event { var template : VehicleVisualCustomizationTemplate; var modelName : CName; } class TwintoneOverrideData extends inkGameNotificationData { var template : VehicleVisualCustomizationTemplate; var modelName : CName; } class TwintoneOverrideGameController extends inkGameController { private editable var m_overrideButtonHit : inkWidgetRef; private editable var m_backButtonHit : inkWidgetRef; private editable var m_templatePreviewContainer : inkWidgetRef; private editable var m_templatePreviewLibraryRef : inkWidgetLibraryReference; private var m_currentTemplatePreview : weak< ColorTemplatePreviewDisplayController >; private var m_overrideData : TwintoneOverrideData; private var m_player : weak< GameObject >; private var m_game : GameInstance; private var m_templateToDelete : VehicleVisualCustomizationTemplate; private var m_outroAnimProxy : inkAnimProxy; protected event OnInitialize() { m_overrideData = ( ( TwintoneOverrideData )( GetRootWidget().GetUserData( 'TwintoneOverrideData' ) ) ); inkWidgetRef.RegisterToCallback( m_overrideButtonHit, 'OnRelease', this, 'OnOverrideRelease' ); inkWidgetRef.RegisterToCallback( m_backButtonHit, 'OnRelease', this, 'OnBackRelease' ); m_game = ( ( GameObject )( GetOwnerEntity() ) ).GetGame(); m_templateToDelete = GetPlayer( m_game ).GetVehicleVisualCustomizationComponent().GetStoredVisualCustomizationTemplate( VehicleVisualCustomizationTemplate.GetType( m_overrideData.template ), 0, m_overrideData.modelName ); m_currentTemplatePreview = ( ( ColorTemplatePreviewDisplayController )( SpawnFromExternal( inkWidgetRef.Get( m_templatePreviewContainer ), inkWidgetLibraryResource.GetPath( m_templatePreviewLibraryRef.widgetLibrary ), m_templatePreviewLibraryRef.widgetItem ).GetController() ) ); m_currentTemplatePreview.SetColorCorrectionEnabled( true ); m_currentTemplatePreview.SetSelected( false ); m_currentTemplatePreview.SetTemplate( m_templateToDelete ); GetRootWidget().SetVisible( true ); PopupStateUtils.SetBackgroundBlur( this, true ); SetTimeDilatation( true ); SetCursorContext( 'Default' ); GetRootWidget().SetVisible( true ); } protected event OnPlayerAttach( player : GameObject ) { m_player = player; m_player.RegisterInputListener( this, 'UI_vehicle_customization_override_proceed' ); m_player.RegisterInputListener( this, 'UI_vehicle_customization_override_cancel' ); GetUIGameDataBlackboard().SetBool( GetAllBlackboardDefs().UIGameData.Popup_TwintoneOverride_IsShown, true ); } protected event OnPlayerDetach( playerPuppet : GameObject ) { Hide(); GetUIGameDataBlackboard().SetBool( GetAllBlackboardDefs().UIGameData.Popup_TwintoneOverride_IsShown, false ); GetPlayerControlledObject().UnregisterInputListener( this ); } protected event OnUninitialize() { inkWidgetRef.UnregisterFromCallback( m_overrideButtonHit, 'OnRelease', this, 'OnOverrideRelease' ); inkWidgetRef.UnregisterFromCallback( m_backButtonHit, 'OnRelease', this, 'OnBackRelease' ); } protected event OnAction( action : ListenerAction, consumer : ListenerActionConsumer ) { var actionName : CName; actionName = ListenerAction.GetName( action ); if( ListenerAction.GetType( action ) == gameinputActionType.BUTTON_RELEASED && actionName == 'UI_vehicle_customization_override_cancel' ) { ListenerActionConsumer.Consume( consumer ); Hide(); } else if( ListenerAction.GetType( action ) == gameinputActionType.BUTTON_RELEASED && actionName == 'UI_vehicle_customization_override_proceed' ) { ListenerActionConsumer.Consume( consumer ); SaveTemplateAndHide(); } } protected event OnOverrideRelease( evt : inkPointerEvent ) { if( evt.IsAction( 'click' ) ) { evt.Handle(); SaveTemplateAndHide(); } } protected event OnBackRelease( evt : inkPointerEvent ) { if( evt.IsAction( 'click' ) ) { evt.Handle(); Hide(); } } private function SaveTemplateAndHide() { var vehicleCustomizationComponent : vehicleVisualCustomizationComponent; if( VehicleVisualCustomizationTemplate.IsValid( m_templateToDelete ) ) { vehicleCustomizationComponent = GetPlayer( m_game ).GetVehicleVisualCustomizationComponent(); vehicleCustomizationComponent.DeleteVisualCustomizationTemplate( m_templateToDelete, m_overrideData.modelName ); Hide(); } } private function Hide() { var playbackOptions : inkAnimOptions; if( m_outroAnimProxy ) { return; } playbackOptions.dependsOnTimeDilation = false; m_outroAnimProxy = PlayLibraryAnimation( 'outro', playbackOptions ); m_outroAnimProxy.RegisterToCallback( inkanimEventType.OnFinish, this, 'OnOutroFinished' ); } protected event OnOutroFinished( proxy : inkAnimProxy ) { GetRootWidget().SetVisible( false ); PopupStateUtils.SetBackgroundBlur( this, false ); SetTimeDilatation( false ); m_overrideData.token.TriggerCallback( m_overrideData ); } protected function SetTimeDilatation( enable : Bool ) { var m_timeDilationProfile : String; m_timeDilationProfile = "radialMenu"; if( enable ) { TimeDilationHelper.SetTimeDilationWithProfile( GetPlayerControlledObject(), m_timeDilationProfile, true, true ); } else { TimeDilationHelper.SetTimeDilationWithProfile( GetPlayerControlledObject(), m_timeDilationProfile, false, false ); } } private function GetUIGameDataBlackboard() : IBlackboard { return GameInstance.GetBlackboardSystem( m_game ).Get( GetAllBlackboardDefs().UIGameData ); } }