////////////////////////////////////////////////////////////////////////////////////////////////
		/*--------------------------------------------------------------------------------------------*/
		internal void Build(MenuState pMenuState, ICustomSegment pCustomSeg, ICustomPalm pCustomPalm) {
			vMenuState = pMenuState;
			vArcState = vMenuState.Arc;
			vLeftRot = Quaternion.identity;
			vRightRot = Quaternion.AngleAxis(180, Vector3.up);

			var palmObj = new GameObject("Palm");
			palmObj.transform.SetParent(gameObject.transform, false);
			vUiPalm = palmObj.AddComponent<UiPalm>();
			vUiPalm.Build(vArcState, pCustomPalm);

			var arcObj = new GameObject("Arc");
			arcObj.transform.SetParent(gameObject.transform, false);
			vUiArc = arcObj.AddComponent<UiArc>();
			vUiArc.Build(vArcState, pCustomSeg);

			vMenuState.OnSideChange += HandleSideChange;
		}
		/*--------------------------------------------------------------------------------------------*/
		public void Start() {
			if ( vFailed ) {
				return;
			}

			vMenuState = new MenuState(InputProvider, NavigationProvider.GetRoot(),
				CustomizationProvider.GetInteractionSettings());

			var menuObj = new GameObject("Menu");
			menuObj.transform.SetParent(gameObject.transform, false);
			vUiMenu = menuObj.AddComponent<UiMenu>();
			vUiMenu.Build(vMenuState, CustomizationProvider, CustomizationProvider);

			var cursorObj = new GameObject("Cursor");
			cursorObj.transform.SetParent(gameObject.transform, false);
			vUiCursor = cursorObj.AddComponent<UiCursor>();
			vUiCursor.Build(vMenuState.Arc, vMenuState.Cursor,
				CustomizationProvider, OptionalCameraReference);

			((HovercastState)State).SetReferences(vMenuState, menuObj.transform, cursorObj.transform);
		}
		/*--------------------------------------------------------------------------------------------*/
		public void SetReferences(MenuState pMenuState, Transform pMenuTx, Transform pCursorTx) {
			vMenuState = pMenuState;
			MenuTransform = pMenuTx;
			CursorTransform = pCursorTx;
		}