Esempio n. 1
0
 /// <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}");
     }
 }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <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;
 }
Esempio n. 6
0
        /// <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);
        }