/// <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); }
/// <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); } } }