Пример #1
0
 /// <summary>
 /// Proceeds to the next step of creating a trigger
 /// </summary>
 private void CreateTrigger()
 {
     if (step == 1)
     {
         step++;
         currentBox[0] = camera.CameraToGlobalPos(Mouse.GetState().X, Mouse.GetState().Y);
     }
     else if (step == 2)
     {
         step = 3;
         currentBox[1] = camera.CameraToGlobalPos(Mouse.GetState().X, Mouse.GetState().Y);
         windowOpen = true;
         TriggerEditor editor = new TriggerEditor();
         editor.Location = controls.Location;
         System.Windows.Forms.DialogResult result = editor.ShowDialog();
         TriggerInformation info = new TriggerInformation((int)currentBox[0].X, (int)currentBox[0].Y, (int)currentBox[1].X, (int)currentBox[1].Y, editor.Name, editor.ObjectIDs, editor.WhenTrigger);
         triggerInfo.Add(info);
         windowOpen = false;
         controls.CreatingTrigger = false;
         step = 1;
     }
 }
Пример #2
0
        /// <summary>
        /// Updates mouse-dependent actions
        /// </summary>
        private void UpdateMouseStuff()
        {
            if (windowOpen)
                return;

            #region Mouse left

            if (Mouse.GetState().LeftButton == ButtonState.Pressed && MouseInBounds())
            {
                if (!mleftPressed)
                {
                    if (Keyboard.GetState().IsKeyUp(Keys.LeftShift)) // Make sure not changing bounds
                    {
                        if (!changingBounds)
                        {
                            if (controls.Tab == 0)
                            {
                                if (controls.CreatingMap)
                                    CreateMap();
                                else if (controls.CreatingCam)
                                    CreateCam();
                                else if (controls.CreatingTrigger)
                                    CreateTrigger();
                            }
                            else if (controls.Tab == 1 && selectedTexture != null)
                                CreateTile();
                            else if (controls.Tab == 2 && (selectedTexture != null || movedObject != null))
                                CreateObject();
                        }
                        else
                            FinishChangingBounds();
                    }
                    else
                    {
                        if (!changingBounds)
                            StartChangingBounds();
                        else
                            FinishChangingBounds();
                    }
                }
                mleftPressed = true;
            }
            else
                mleftPressed = false;

            #endregion

            #region Mouse right

            if (Mouse.GetState().RightButton == ButtonState.Pressed)
            {
                if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                    RemoveThings();
                else if (controls.Tab == 2 && !windowOpen && !mRightPressed && currentObject == null)
                {
                    bool foundObj = false;
                    mRightPressed = true;
                    foreach (ObjectInformation obj in objInfo)
                    {
                        Rectangle boundingBox = new Rectangle((int)camera.GlobalToCameraPos((int)(obj.Position.X - ObjectTextures[obj.Texture].Width * camera.TotalScale / 2), (int)(obj.Position.Y - ObjectTextures[obj.Texture].Height * camera.TotalScale / 2)).X,
                                                              (int)camera.GlobalToCameraPos((int)(obj.Position.X - ObjectTextures[obj.Texture].Width * camera.TotalScale / 2), (int)(obj.Position.Y - ObjectTextures[obj.Texture].Height * camera.TotalScale / 2)).Y,
                                                              (int)(ObjectTextures[obj.Texture].Width * camera.TotalScale),
                                                              (int)(ObjectTextures[obj.Texture].Width * camera.TotalScale));
                        if (boundingBox.Contains(Mouse.GetState().X, Mouse.GetState().Y))
                        {
                            MouseState state = Mouse.GetState();
                            rcMenu = new RightClickMenu(obj, state.X, state.Y, objMenuChoices);
                            foundObj = true;
                            break;
                        }
                    }
                    if (!foundObj)
                        rcMenu = null;
                }
                else if (controls.Tab == 0 && !windowOpen && !mRightPressed)
                {
                    mRightPressed = true;
                    TriggerInformation selected = null;
                    TriggerEditor editor = null;

                    foreach (TriggerInformation trigger in triggerInfo)
                    {
                        Vector2 camToGlob = camera.CameraToGlobalPos(Mouse.GetState().X, Mouse.GetState().Y);
                        Vector2 topleft = new Vector2(trigger.Bounds.Left, trigger.Bounds.Top);
                        Vector2 topright = new Vector2(trigger.Bounds.Right, trigger.Bounds.Top);
                        Vector2 bottomleft = new Vector2(trigger.Bounds.Left, trigger.Bounds.Bottom);
                        Vector2 bottomright = new Vector2(trigger.Bounds.Right, trigger.Bounds.Bottom);
                        if ((camToGlob - topleft).Length() <= 5 || (camToGlob - topright).Length() <= 5 || (camToGlob - bottomleft).Length() <= 5 || (camToGlob - bottomright).Length() <= 5)
                        {
                            selected = trigger;
                            controls.CreatingTrigger = true;
                            windowOpen = true;
                            editor = new TriggerEditor();
                            editor.Location = controls.Location;
                            ((System.Windows.Forms.TextBox)editor.Controls["txtName"]).Text = trigger.Name;
                            ((System.Windows.Forms.TextBox)editor.Controls["txtObjects"]).Text = trigger.ObjID[0].ToString();
                            for (int i = 1; i < trigger.ObjID.Length; i++)
                                ((System.Windows.Forms.TextBox)editor.Controls["txtObjects"]).Text += "," + trigger.ObjID[i].ToString();
                            if (trigger.WhenTrigger == 0)
                                ((System.Windows.Forms.RadioButton)((System.Windows.Forms.GroupBox)editor.Controls["groupBox1"]).Controls["radContinuous"]).Checked = true;
                            else if (trigger.WhenTrigger == 1)
                                ((System.Windows.Forms.RadioButton)((System.Windows.Forms.GroupBox)editor.Controls["groupBox1"]).Controls["radEnter"]).Checked = true;
                            else
                                ((System.Windows.Forms.RadioButton)((System.Windows.Forms.GroupBox)editor.Controls["groupBox1"]).Controls["radLeave"]).Checked = true;
                            System.Windows.Forms.DialogResult result = editor.ShowDialog();
                            TriggerInformation info = new TriggerInformation((int)currentBox[0].X, (int)currentBox[0].Y, (int)currentBox[1].X, (int)currentBox[1].Y, editor.Name, editor.ObjectIDs, editor.WhenTrigger);
                            triggerInfo.Add(info);
                            windowOpen = false;
                            controls.CreatingTrigger = false;
                            break;
                        }
                    }

                    if (selected != null)
                    {
                        selected.Name = editor.Name;
                        selected.ObjID = editor.ObjectIDs;
                        selected.WhenTrigger = editor.WhenTrigger;
                    }
                }
            }
            else
                mRightPressed = false;
            #endregion

            #region Rotating

            // Rotate selection counterclockwise
            if (Keyboard.GetState().IsKeyUp(Keys.LeftShift))
            {
                if (Keyboard.GetState().IsKeyDown(Keys.A))
                {
                    if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                    {
                        if (!rotOnceLeft)
                        {
                            selTexRotation = SnapAngle(true);
                            rotOnceLeft = true;
                        }
                    }
                    else
                        selTexRotation -= 0.05f;
                }
                // Rotate selection clockwise
                else if (Keyboard.GetState().IsKeyDown(Keys.D))
                {
                    rotOnceLeft = false;
                    if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                    {
                        if (!rotOnceRight)
                        {
                            selTexRotation = SnapAngle(false);
                            rotOnceRight = true;
                        }
                    }
                    else
                        selTexRotation += 0.05f;
                }
                else
                {
                    rotOnceLeft = false;
                    rotOnceRight = false;
                }
                while (selTexRotation < 0)
                    selTexRotation += MathHelper.TwoPi;
                while (selTexRotation >= MathHelper.TwoPi)
                    selTexRotation -= MathHelper.TwoPi;
            }

            #endregion

            #region Scaling

            // Scale selection
            if (Keyboard.GetState().IsKeyDown(Keys.LeftShift))
            {
                if (Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                {
                    selTexScale.X = selTexScale.Y = 1f;
                    selTexRotation = 0f;
                    selTexEffect = SpriteEffects.None;
                }

                if (Keyboard.GetState().IsKeyDown(Keys.D))
                    selTexScale.X += 0.1f;
                else if (Keyboard.GetState().IsKeyDown(Keys.A) && selTexScale.Length() > 0.05f)
                    selTexScale.X -= 0.1f;
                if (Keyboard.GetState().IsKeyDown(Keys.W))
                    selTexScale.Y += 0.1f;
                else if (Keyboard.GetState().IsKeyDown(Keys.S) && selTexScale.Length() > 0.05f)
                    selTexScale.Y -= 0.1f;
            }
            else
            {
                if (Keyboard.GetState().IsKeyDown(Keys.W))
                    selTexScale *= 1.03f;
                else if (Keyboard.GetState().IsKeyDown(Keys.S) && selTexScale.Length() > 0.05f)
                    selTexScale /= 1.03f;
            }

            #endregion

            #region Flipping

            // Flip selection
            if (Keyboard.GetState().IsKeyDown(Keys.X))
            {
                if (!xPressed)
                {
                    xPressed = true;
                    selTexEffect = (selTexEffect == SpriteEffects.None ? SpriteEffects.FlipHorizontally : SpriteEffects.None);
                }
            }
            else
                xPressed = false;

            #endregion

            #region Layer

            // Change selected layer
            Keys[] pressedKeys = Keyboard.GetState().GetPressedKeys();
            if (pressedKeys.Count() > 0)
                if (pressedKeys[0] >= Keys.D0 && pressedKeys[0] <= Keys.D9)
                    layer = float.Parse(Enum.GetName(typeof(Keys), pressedKeys[0]).Substring(1)) / 9.0f;

            #endregion

            #region Camera controls

            // Zoom
            DScroll = Mouse.GetState().ScrollWheelValue - prevScrollTotal;
            if (DScroll != 0 && Keyboard.GetState().IsKeyDown(Keys.LeftControl))
                camera.Zoom(0.05f * Math.Sign(DScroll) + 1);
            prevScrollTotal = Mouse.GetState().ScrollWheelValue;

            // Pan
            if (Mouse.GetState().MiddleButton == ButtonState.Pressed)
                camera.Pan(Mouse.GetState().X - prevMX, Mouse.GetState().Y - prevMY);
            prevMX = Mouse.GetState().X;
            prevMY = Mouse.GetState().Y;

            #endregion
        }