/// <summary>
 /// Get the touched view range.
 /// </summary>
 /// <param name="x">x value of the tap (on pin device)</param>
 /// <param name="y">y value of the tap (on pin device)</param>
 /// <param name="s">visible screen</param>
 /// <returns>touched view range</returns>
 public BrailleIOViewRange GetTouchedViewRange(double x, double y, BrailleIOScreen s)
 {
     if (s != null)
     {
         OrderedDictionary viewRanges = s.GetViewRanges();
         if (viewRanges.Count > 0)
         {
             object[] keys = new object[viewRanges.Keys.Count];
             viewRanges.Keys.CopyTo(keys, 0);
             for (int i = keys.Length - 1; i >= 0; i--)
             {
                 BrailleIOViewRange vr = viewRanges[keys[i]] as BrailleIOViewRange;
                 if (vr != null && vr.IsVisible())
                 {
                     if (x >= vr.GetLeft() && x <= (vr.GetLeft() + vr.GetWidth()))
                     {
                         if (y >= vr.GetTop() && y <= (vr.GetTop() + vr.GetHeight()))
                         {
                             return(vr);
                         }
                     }
                 }
             }
         }
     }
     return(null);
 }
        /// <summary>
        /// get all the visible viewRanges in the currently visible screen containing text.
        /// </summary>
        /// <returns>list of ViewRanges containing text</returns>
        List<BrailleIOViewRange> getAllViews()
        {
            List<BrailleIOViewRange> vrs = new List<BrailleIOViewRange>();
            var screens = io.GetActiveViews();

            foreach (var item in screens)
            {
                if (item is BrailleIOScreen)
                {
                    foreach (var vrPair in ((BrailleIOScreen)item).GetOrderedViewRanges())
                    {
                        if (vrPair.Value != null)
                        {
                            BrailleIOViewRange vr = vrPair.Value;
                            if (vr.IsVisible() && (vr.IsText() || vr.IsOther()))
                            {
                                vrs.Add(vr);
                            }
                        }
                    }
                }
                else if (item is BrailleIOViewRange)
                {
                    BrailleIOViewRange vr = item as BrailleIOViewRange;
                    if (vr.IsVisible() && (vr.IsText() || vr.IsOther()))
                    {
                        vrs.Add(vr);
                    }
                }
            }

            return vrs;
        }
 /// <summary>
 /// Get the active center view of the given screen
 /// </summary>
 /// <param name="screen">screen</param>
 /// <returns>active center view</returns>
 public BrailleIOViewRange GetActiveCenterView(BrailleIOScreen screen)
 {
     if (screen != null)
     {
         BrailleIOViewRange center  = screen.GetViewRange(VR_CENTER_NAME);
         BrailleIOViewRange center2 = screen.GetViewRange(VR_CENTER_2_NAME);
         if (center != null && center.IsVisible())
         {
             return(center);
         }
         else if (center2 != null && center2.IsVisible())
         {
             return(center2);
         }
     }
     return(null);
 }
        /// <summary>
        /// Change visibility of the given view range. Center view range cannot be hidden.
        /// </summary>
        /// <param name="viewName">name of the screen</param>
        /// <param name="viewRangeName">name of the view range</param>
        /// <param name="visible">true if view range should become visible, false if view range should become invisible</param>
        /// <returns>true if successful, false if not successful</returns>
        private bool changeViewVisibility(string viewName, string viewRangeName, bool visible)
        {
            if (!viewRangeName.Equals(VR_CENTER_NAME))
            {
                BrailleIOScreen vs = io.GetView(viewName) as BrailleIOScreen;
                if (vs != null)
                {
                    BrailleIOViewRange vr     = vs.GetViewRange(viewRangeName);
                    BrailleIOViewRange center = vs.GetViewRange(VR_CENTER_NAME);
                    BrailleIOViewRange top    = vs.GetViewRange(VR_TOP_NAME);
                    BrailleIOViewRange bottom = vs.GetViewRange(VR_DETAIL_NAME);

                    if (vr != null && center != null && top != null && bottom != null)
                    {
                        vr.SetVisibility(visible);
                        // change margin of center region
                        if (visible)
                        {
                            if (viewRangeName.Equals(VR_TOP_NAME))
                            {
                                if (bottom.IsVisible())
                                {
                                    center.SetMargin(7, 0);
                                }
                                else
                                {
                                    center.SetMargin(7, 0, 0);
                                }
                            }
                            else if (viewRangeName.Equals(VR_DETAIL_NAME))
                            {
                                if (top.IsVisible())
                                {
                                    center.SetMargin(7, 0);
                                }
                                else
                                {
                                    center.SetMargin(0, 0, 7);
                                }
                            }
                        }
                        else
                        {
                            if (viewRangeName.Equals(VR_TOP_NAME))
                            {
                                if (bottom.IsVisible())
                                {
                                    center.SetMargin(0, 0, 7);
                                }
                                else
                                {
                                    center.SetMargin(0, 0);
                                }
                            }
                            else if (viewRangeName.Equals(VR_DETAIL_NAME))
                            {
                                if (top.IsVisible())
                                {
                                    center.SetMargin(7, 0, 0);
                                }
                                else
                                {
                                    center.SetMargin(0, 0);
                                }
                            }
                        }
                        return(true);
                    }
                }
            }
            audioRenderer.PlayWaveImmediately(StandardSounds.Error); // operation not possible
            return(false);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Called every frame to drive the game logic
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Tick()
        {
            // Push the last update to the screen

            if (!buffers[0].Equals(buffers[1]) || textRegionDirty)
            {
                textRegionDirty = false;
                Render();
            }

            // Update the controllers
            characterController.Update();
            levelController.Update();
            dialogueController.Update();


            // Do the rendering/sound stuff. TODO: Clean this up with views
            buffers[bufferIndex].Clear();

            buffers[bufferIndex].X = (levelModel.Avatar.X + levelModel.Avatar.Width / 2) - buffers[bufferIndex].Width / 2;
            buffers[bufferIndex].Y = (levelModel.Avatar.Y + levelModel.Avatar.Height / 2) - buffers[bufferIndex].Height / 2;

            foreach (WorldObject obj in levelModel.level.Objects)
            {
                if (!obj.isHidden)
                {
                    buffers[bufferIndex].Draw(obj);
                }
            }

            buffers[bufferIndex].Draw(levelModel.Avatar);
            mainRegion.SetMatrix(buffers[bufferIndex].Data);

            bufferIndex = (bufferIndex + 1) % 2;

            if (gameState == GameState.Event && gameDialogue.HasAction())
            {
                if (detailRegion.GetText() != gameDialogue.GetCurrent())
                {
                    detailRegion.SetText(gameDialogue.GetCurrent());
                    textRegionDirty = true;
                    Audio.AbortCurrentSound();
                    Audio.PlaySound(gameDialogue.GetCurrent());
                }

                if (!detailRegion.IsVisible())
                {
                    detailRegion.SetVisibility(true);
                    textRegionDirty = true;
                }
            }
            else
            {
                Audio.AbortCurrentSound();
                detailRegion.SetText(string.Empty);

                if (detailRegion.IsVisible())
                {
                    textRegionDirty = true;
                    detailRegion.SetVisibility(false);
                }
            }
        }