public Guide(ZoomCircle zoomCircle) { this.ParentZoomCircle = zoomCircle; this.IsUpsideDown = false; this.CurrentState = GuideState.CLOSED; this.selectedInfoPanel = 0; }
// Check each ZoomedCircle to see if cursor pressed a button /// <summary> /// Check all ZoomCircles to see if cursor pressed a button /// </summary> /// <param name="tcur">The cursor to check against all ZoomCircles and their buttons</param> /// <returns>Returns a tuple consisting of a ZoomCircle, and a text description of which button on that ZoomCircle the cursor would press. Otherwise, null and emptry string.</returns> public void WouldPushButton(TuioPoint tPoint, out ZoomCircle outZoomCircle, out string outButtonName) { // Check each ZoomedCircle to see if cursor pressed a button Vector2 cursorPosition = new Vector2(tPoint.getScreenX(Settings.RESOLUTION_X), tPoint.getScreenY(Settings.RESOLUTION_Y)); foreach (ZoomCircle zoomedCircle in zoomedCircles.Values) { Vector2 openButtonPosition, closeButtonPosition, tab1, tab2, tab3, tab4; if (zoomedCircle.AttachedGuide.IsLeftward) { openButtonPosition = Settings.CALLOUT_OPEN_BUTTON_LEFT; closeButtonPosition = Settings.CALLOUT_CLOSE_BUTTON_LEFT; if (zoomedCircle.AttachedGuide.IsUpsideDown) { tab1 = -Settings.CALLOUT_TAB1_BUTTON; tab2 = -Settings.CALLOUT_TAB2_BUTTON; tab3 = -Settings.CALLOUT_TAB3_BUTTON; tab4 = -Settings.CALLOUT_TAB4_BUTTON; } else { tab1 = Settings.CALLOUT_TAB1_BUTTON_LEFT; tab2 = Settings.CALLOUT_TAB2_BUTTON_LEFT; tab3 = Settings.CALLOUT_TAB3_BUTTON_LEFT; tab4 = Settings.CALLOUT_TAB4_BUTTON_LEFT; } } else { openButtonPosition = Settings.CALLOUT_OPEN_BUTTON; closeButtonPosition = Settings.CALLOUT_CLOSE_BUTTON; if (zoomedCircle.AttachedGuide.IsUpsideDown) { tab1 = -Settings.CALLOUT_TAB1_BUTTON_LEFT; tab2 = -Settings.CALLOUT_TAB2_BUTTON_LEFT; tab3 = -Settings.CALLOUT_TAB3_BUTTON_LEFT; tab4 = -Settings.CALLOUT_TAB4_BUTTON_LEFT; } else { tab1 = Settings.CALLOUT_TAB1_BUTTON; tab2 = Settings.CALLOUT_TAB2_BUTTON; tab3 = Settings.CALLOUT_TAB3_BUTTON; tab4 = Settings.CALLOUT_TAB4_BUTTON; } } if (zoomedCircle.AttachedGuide.CurrentState == Guide.GuideState.CLOSED) { Vector2 differenceVector = cursorPosition - zoomedCircle.position - openButtonPosition; // If within a certain radius, trigger callout opening for the matched circle if ((int)differenceVector.Length() <= Settings.CALLOUT_DETECTION_RADIUS) { outZoomCircle = zoomedCircle; outButtonName = "open"; return; } //Debug.WriteLine(differenceVector.Length()); } else if (zoomedCircle.AttachedGuide.CurrentState == Guide.GuideState.OPEN) { Vector2 differenceVector = cursorPosition - zoomedCircle.position - closeButtonPosition; if ((int)differenceVector.Length() <= Settings.CALLOUT_DETECTION_RADIUS) { outZoomCircle = zoomedCircle; outButtonName = "close"; return; } differenceVector = cursorPosition - zoomedCircle.position - tab1; if ((Math.Abs(differenceVector.X) <= (Settings.CALLOUT_TAB_WIDTH / 2)) && (Math.Abs(differenceVector.Y) <= (Settings.CALLOUT_TAB_HEIGHT / 2))) { outZoomCircle = zoomedCircle; outButtonName = "tab1"; return; } differenceVector = cursorPosition - zoomedCircle.position - tab2; if ((Math.Abs(differenceVector.X) <= (Settings.CALLOUT_TAB_WIDTH / 2)) && (Math.Abs(differenceVector.Y) <= (Settings.CALLOUT_TAB_HEIGHT / 2))) { outZoomCircle = zoomedCircle; outButtonName = "tab2"; return; } differenceVector = cursorPosition - zoomedCircle.position - tab3; if ((Math.Abs(differenceVector.X) <= (Settings.CALLOUT_TAB_WIDTH / 2)) && (Math.Abs(differenceVector.Y) <= (Settings.CALLOUT_TAB_HEIGHT / 2))) { outZoomCircle = zoomedCircle; outButtonName = "tab3"; return; } differenceVector = cursorPosition - zoomedCircle.position - tab4; if ((Math.Abs(differenceVector.X) <= (Settings.CALLOUT_TAB_WIDTH / 2)) && (Math.Abs(differenceVector.Y) <= (Settings.CALLOUT_TAB_HEIGHT / 2))) { outZoomCircle = zoomedCircle; outButtonName = "tab4"; return; } } } outZoomCircle = null; outButtonName = ""; }
public ZoomCircle addZoomedCircle(int mouseX, int mouseY, long id, float angle = 0f) { ZoomCircle zoomedCircle = new ZoomCircle(gameTime, id); zoomedCircle.OpenAt(mouseX, mouseY, angle, this.GetMovieTimestamp(), this.GetMovieTimestampRaw()); zoomedCircle.UpdateTextures(); zoomedCircles.AddOrUpdate(id, zoomedCircle, (k, v) => v); return zoomedCircle; }