Home

Awesome

About

This is a small UI framework based on Noesis GUI Engine for Unity (tested in Unity 2023.x).

Dependencies

Usage

UI Flow Settings

Open a Project Settings->Game->UI Flow to get layouts settings: <img src="docs/images/ui-flow-settings.png" title="UI Flow Settings in Project Settings">

Layout Settings

<img src="docs/images/layout-settings.png" title="UI Layout settings">

Layout Relationship Matrix

<p align="center"> <img src="docs/images/relationship-matrix.png" title="UI Layout Relationship matrix"> </p>

Each row in the layout relationship matrix say us how Noesis should draw each layout relatively another, where true value say us that this layout should be drawn or not otherwise.

Open View

Each view model can be registered only with one View type per Layout.

var viewModel = new SomeViewModel();
UIFlowUtility.ShowView<SomeViewModel, SomeView>(viewModel, UILayout.HUD);

Close View

UIFlowUtility.HideView(this, UILayout.HUD); // where this - some view model

or

UIFlowUtility.HideView<ViewModelType>(UILayout.HUD); // where ViewModelType - is view model of showed view

Register View Type

This allow register (warm-up) only view type without view opening.

UIFlowUtility.RegisterView<SomeViewModel, SomeView>(UILayout.HUD);

Unregister View Type

UIFlowUtility.UnregisterView<SomeView>(UILayout.HUD);

Custom View Model

Each view model that can be showed in UI Layout should inherit the BaseLayoutContentViewModel.

public sealed class CustomViewModel : BaseLayoutContentViewModel
{
}

Custom View

Each view that can be showed in UI Layout should inherit the LayoutContentView.

public partial class CustomView : LayoutContentView
{
   public CustomView()
   {
       InitializeComponent();
   }

#if NOESIS
   private void InitializeComponent()
   {
       NoesisUnity.LoadComponent(this);
   }
#endif
}

For XAML:

<views:LayoutContentView xmlns:views="clr-namespace:UIFlow.Runtime.Layouts.Views" x:Class="CustomView"
                         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
                         x:Name="Root" d:DesignWidth="1920" d:DesignHeight="1080">
    <Grid>
    </Grid>
</views:LayoutContentView>

Custom View Show/Hide Animation

Each view that inherits LayoutContentView can has Show and/or Hide animation (storyboard). For this we should determine style for our custom view and set storyboard for ShowStoryboard and/or HideStoryboard dependency properties.

<views:LayoutContentView.Style>
   <Style>
       <Style.Resources>
           <Storyboard x:Key="ShowAnimation">
               <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0.0" To="1.0" Duration="0:0:0.3"/>
           </Storyboard>
           <Storyboard x:Key="HideAnimation">
               <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:0.3"/>
           </Storyboard>
       </Style.Resources>
       <Setter Property="views:LayoutContentView.ShowStoryboard" Value="{StaticResource ShowAnimation}"/>
       <Setter Property="views:LayoutContentView.HideStoryboard" Value="{StaticResource HideAnimation}"/>
   </Style>
</views:LayoutContentView.Style>

Custom Layout View Model

Each custom layout view model should inherit ILayoutViewModel (or it's implementations - BaseLayoutViewModel or SingleContentLayoutViewModel) and sets it to Layout settings in Project Settings.

public sealed class CustomLayoutViewModel : SingleContentLayoutViewModel
{
}

Custom Layout View

A custom layout view can be any User Control.

public partial class CustomLayoutView : UserControl
{
   public CustomLayoutView()
   {
       InitializeComponent();
   }

#if NOESIS
   private void InitializeComponent()
   {
       NoesisUnity.LoadComponent(this);
   }
#endif
}

For XAML:

<UserControl x:Class="CustomLayoutView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
             x:Name="Root" d:DesignWidth="1920" d:DesignHeight="1080">
    <Grid>
    </Grid>
</UserControl>

Get custom Layout Id

UIFlowUtility.GetLayoutId<CustomLayoutViewModel>(); // where CustomLayoutViewModel is viewModel type of custom layout

or

UIFlowUtility.GetLayoutId(typeof(CustomLayoutViewModel)); // where CustomLayoutViewModel is viewModel type of custom layout