/// <summary> /// Safely invokes the <see cref="LeftScreenBorder"/> event with the given <paramref name="border"/>. /// Protects against plugin thrown exceptions. /// </summary> /// <param name="border">The border that was left.</param> void InvokeLeftScreenBorder(ScreenBorder border) { try { LeftScreenBorder?.Invoke(border); } catch (Exception e) { Urho.IO.Log.Write(LogLevel.Warning, $"There was an unexpected exception during the invocation of {nameof(LeftScreenBorder)}: {e.Message}"); } }
public void FlipScreen(ScreenBorder borderPosition) { switch (borderPosition) { case ScreenBorder.Top: if (Math.Abs(transform.position.y) < 0.1f) { break; } transform.position = new Vector2( transform.position.x, transform.position.y + OffsetY); break; case ScreenBorder.Bottom: transform.position = new Vector2( transform.position.x, transform.position.y - OffsetY); break; case ScreenBorder.Left: transform.position = new Vector2( transform.position.x - OffsetX, transform.position.y); break; case ScreenBorder.Right: transform.position = new Vector2( transform.position.x + OffsetX, transform.position.y); break; default: throw new ArgumentOutOfRangeException( nameof(borderPosition), borderPosition, null); } }
/// <summary> /// Invoked when the mouse cursor enters area near the game window border. /// </summary> /// <param name="border">Which border area the cursor entered</param> void OnScreenBorderEntered(ScreenBorder border) { if (!MouseBorderCameraMovement) { return; } Vector2 horizontalMovement = camera.StaticHorizontalMovement; switch (border) { case ScreenBorder.Top: horizontalMovement.Y += CameraScrollSensitivity; activeCameraMovement.BorderMovementUp = true; break; case ScreenBorder.Bottom: horizontalMovement.Y -= CameraScrollSensitivity; activeCameraMovement.BorderMovementDown = true; break; case ScreenBorder.Left: horizontalMovement.X -= CameraScrollSensitivity; activeCameraMovement.BorderMovementLeft = true; break; case ScreenBorder.Right: horizontalMovement.X += CameraScrollSensitivity; activeCameraMovement.BorderMovementRight = true; break; default: throw new ArgumentOutOfRangeException(nameof(border), border, null); } camera.SetStaticHorizontalMovement(horizontalMovement); }
/// <summary> /// Sets the size of the screen grid. /// </summary> /// <param name="width">The width of the grid in screens.</param> /// <param name="height">The height of the grid in screens.</param> /// <param name="mapX">The location of the map editor.</param> /// <param name="mapY">The location of the map editor.</param> public void SetSize(int width, int height, int mapX, int mapY) { int newCount = width * height - 1; int diff = screens.Count - newCount; // Destroy extra screens for (int i = 0; i < diff; i++) { ScreenControl removedControl = screens[screens.Count - 1]; Controls.Remove(removedControl); removedControl.Dispose(); removedControl.SelectedObjectChanged -= new EventHandler(ScreenControl_SelectedObjectChanged); removedControl.SelectionDragged -= new EventHandler(ScreenControl_SelectionDragged); screens.Remove(removedControl); } // Create needed screens for (int i = 0; i > diff; i--) { ScreenControl newControl = new ScreenControl(); newControl.Rom = rom; newControl.Size = new Size(256, 256); newControl.SelectedObjectChanged += new EventHandler(ScreenControl_SelectedObjectChanged); newControl.SelectionDragged += new EventHandler(ScreenControl_SelectionDragged); screens.Add(newControl); Controls.Add(newControl); } ScreenBorder.SendToBack(); // position screens, specify indecies int screenIndex = 0; for (int sy = 0; sy < height; sy++) { for (int sx = 0; sx < width; sx++) { if (sx == mapX && sy == mapY) { mapEditor.Bounds = new Rectangle(2 + sx * 258, sy * 258, 256, 256); } else { screens[screenIndex].Bounds = new Rectangle(2 + sx * 258, 2 + sy * 258, 256, 256); screens[screenIndex].Tag = screenIndex; screens[screenIndex].Show(); screenIndex++; } } } // Update variables gridSize = new Size(width, height); mapEditorLocation = new Point(mapX, mapY); mapEditor_LocationIndex = mapX + mapY * width; MapEditor.SelectionSize = new Size(width, height); ScreenBorder.Location = new Point(screens[0].Left - 2, screens[0].Top - 2); screens[0].BackColor = SystemColors.Highlight; screens[0].ForeColor = SystemColors.HighlightText; selectedScreenIndex = 0; }
public PlayerMovedOutOfScreenSignal(ScreenBorder borderPosition) { BorderPosition = borderPosition; }
/// <summary> /// Invoked when the mouse cursor leaves an area near the game window border. /// </summary> /// <param name="border">The border area the cursor left.</param> void OnScreenBorderLeft(ScreenBorder border) { if (!MouseBorderCameraMovement) { return; } Vector2 horizontalMovement = camera.StaticHorizontalMovement; switch (border) { case ScreenBorder.Top: if (!activeCameraMovement.BorderMovementUp) { return; } activeCameraMovement.BorderMovementUp = false; horizontalMovement.Y -= CameraScrollSensitivity; if (FloatHelpers.FloatsEqual(horizontalMovement.Y, 0)) { horizontalMovement.Y = 0; } break; case ScreenBorder.Bottom: if (!activeCameraMovement.BorderMovementDown) { return; } activeCameraMovement.BorderMovementDown = false; horizontalMovement.Y += CameraScrollSensitivity; if (FloatHelpers.FloatsEqual(horizontalMovement.Y, 0)) { horizontalMovement.Y = 0; } break; case ScreenBorder.Left: if (!activeCameraMovement.BorderMovementLeft) { return; } activeCameraMovement.BorderMovementLeft = false; horizontalMovement.X += CameraScrollSensitivity; if (FloatHelpers.FloatsEqual(horizontalMovement.X, 0)) { horizontalMovement.X = 0; } break; case ScreenBorder.Right: if (!activeCameraMovement.BorderMovementRight) { return; } activeCameraMovement.BorderMovementRight = false; horizontalMovement.X -= CameraScrollSensitivity; if (FloatHelpers.FloatsEqual(horizontalMovement.X, 0)) { horizontalMovement.X = 0; } break; default: throw new ArgumentOutOfRangeException(nameof(border), border, null); } camera.SetStaticHorizontalMovement(horizontalMovement); }