private static void ToggleInteractiveSegments(Model model,
                                                      StatueInteraction interaction)
        {
            Func <InteractiveSegment.SegmentType, bool> shouldBeActiveEvaluation = s => false;

            if (model.IsInGuidedModeOrInMixedModeGuided())
            {
                shouldBeActiveEvaluation = segment => segment == model.GetSegmentToGuideTo();
            }
            else
            {
                shouldBeActiveEvaluation = segment =>
                {
                    switch (model.CurrentTourState)
                    {
                    case Model.TourState.Prologue:
                        return(segment == InteractiveSegment.SegmentType.WholeStatue0);

                    case Model.TourState.Tour:
                        return(segment != InteractiveSegment.SegmentType.WholeStatue0 &&
                               segment != InteractiveSegment.SegmentType.Hall8 &&
                               segment != model.CompletedContent.Last());

                    case Model.TourState.Epilogue:
                        return(false);
                    }

                    return(false);
                };
            }

            interaction.SetSegmentsActive(shouldBeActiveEvaluation);
        }
        private static void RenderModel(InteractionUI interactionUi, Model model, StatueInteraction interaction,
                                        Camera camera, AnimatedCursor animatedCursor)
        {
            interactionUi.UpdateCursor(model.HitPosition, model.HitNormal, camera);
            var showCustomCursor = model.CurrentCursorState == Model.CursorState.DwellTimer;

            interactionUi.SetCursorVisible(showCustomCursor);
            animatedCursor.gameObject.SetActive(!showCustomCursor);
            RenderHighlightParticles(model, interaction, interactionUi);
            ToggleInteractiveSegments(model, interaction);
        }
 private static void RenderHighlightParticles(Model model, StatueInteraction interaction,
                                              InteractionUI interactionUi)
 {
     if (model.IsInGuidedModeOrInMixedModeGuided())
     {
         //particles on next segment
         var nextSegment = model.GetSegmentToGuideTo();
         interactionUi.UpdateHighlightedMeshRenderer(nextSegment != null
             ? interaction.GetMeshRender(nextSegment.Value)
             : null);
     }
     else
     {
         //particles on hovered segment
         if (model.CurrentCursorState == Model.CursorState.DwellTimer)
         {
             interactionUi.UpdateHighlightedMeshRenderer(interaction.GetMeshRender(model.HoveredSegment.Value));
         }
         else
         {
             interactionUi.UpdateHighlightedMeshRenderer(null);
         }
     }
 }