Ejemplo n.º 1
0
    void LoadLevel( MapCurve curve, int mapIndex )
    {
        if( currentLevel != null )
            currentLevel.Unload();

        currentLevel = Level.Load( mapCurve.Levels[ mapIndex ] );
        currentLevelIndex = mapIndex;
    }
Ejemplo n.º 2
0
        protected void UpdateCamera()
        {
            base.OnRender();

            //float outCurveTime;

            //Update camera orientation
            if (Map.Instance != null)
            {
                //moveTime = Time;

                Vec3 position;
                Vec3 forward;
                //Vec3 up;
                Degree fov;

                MapCamera mapCamera = GetMapCamera();
                if (mapCamera == null)
                {
                    return;
                }

                //iNCIN
                if (cameraCurves == null)
                {
                    return;
                }

                //curve /////////////////////////////////////////////////////////////
                MapCurve mapCurve = (MapCurve)Entities.Instance.GetByName("MM_Curve"); //insert curve name here

                if (moveTime >= mapCurve.GetCurveMaxTime())
                {
                    moveTime -= mapCurve.GetCurveMaxTime();
                }

                mapCamera.Position = mapCurve.CalculateCurvePointByTime(moveTime);
                mapCamera.Rotation = mapCurve.CalculateCurveRotationByTime(moveTime);

                //real Camera/////////////////////////////////////////////////////////////
                position = mapCamera.Position;
                forward  = mapCamera.Rotation * new Vec3(1, 0, 0);
                fov      = mapCamera.Fov;

                if (fov == 0)
                {
                    fov = Map.Instance.Fov;
                }

                Camera camera = RendererWorld.Instance.DefaultCamera;
                camera.NearClipDistance = Map.Instance.NearFarClipDistance.Minimum;
                camera.FarClipDistance  = Map.Instance.NearFarClipDistance.Maximum;
                camera.FixedUp          = Vec3.ZAxis;
                camera.Fov       = fov;
                camera.Position  = position;
                camera.Direction = forward;
            }
        }
Ejemplo n.º 3
0
        protected override void OnDeleteSubscribedToDeletionEvent(Entity entity)
        {
            base.OnDeleteSubscribedToDeletionEvent(entity);

            if (way == entity)
            {
                way = null;
            }
        }
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnDeleteSubscribedToDeletionEvent(Entity)"/></summary>
        protected override void OnDeleteSubscribedToDeletionEvent(Entity entity)
        {
            base.OnDeleteSubscribedToDeletionEvent(entity);

            if (entity == mapCamera)
                mapCamera = null;
            if (entity == mapCurve)
                mapCurve = null;
        }
        //

        protected override void OnDeleteSubscribedToDeletionEvent(Entity entity)
        {
            base.OnDeleteSubscribedToDeletionEvent(entity);

            if (way == entity)
                way = null;
            if (activateRegion == entity)
                activateRegion = null;
        }
        //
        protected override void OnRelatedEntityDelete( Entity entity )
        {
            base.OnRelatedEntityDelete( entity );

            if( way == entity )
                way = null;
            if( activateRegion == entity )
                activateRegion = null;
        }
Ejemplo n.º 7
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnRelatedEntityDelete(Entity)"/></summary>
        protected override void OnRelatedEntityDelete( Entity entity )
        {
            base.OnRelatedEntityDelete( entity );

            if( entity == mapCamera )
                mapCamera = null;
            if( entity == mapCurve )
                mapCurve = null;
        }
Ejemplo n.º 8
0
    void LoadLevel(MapCurve curve, int mapIndex)
    {
        if (currentLevel != null)
        {
            currentLevel.Unload();
        }

        currentLevel      = Level.Load(mapCurve.Levels[mapIndex]);
        currentLevelIndex = mapIndex;
    }
Ejemplo n.º 9
0
        private void UpdateCameramain()
        {
            //Update camera orientation
            if (Map.Instance != null)
            {
                moveTime = Time;

                Vec3   position;
                Vec3   forward;
                Degree fov;

                MapCamera mapCamera = GetMapCamera();
                if (mapCamera == null)
                {
                    return;
                }

                //curve
                MapCurve mapCurve = (MapCurve)Entities.Instance.GetByName("MM_Curve"); //Insert curve name here

                if (moveTime >= mapCurve.GetCurveMaxTime())
                {
                    moveTime -= mapCurve.GetCurveMaxTime();
                }

                if (moveTime < 0)
                {
                    moveTime = 0;
                }

                mapCamera.Position = mapCurve.CalculateCurvePointByTime(moveTime);
                mapCamera.Rotation = mapCurve.CalculateCurveRotationByTime(moveTime);

                //real Camera/////////////////////////////////////////////////////////////
                position = mapCamera.Position;
                forward  = mapCamera.Rotation * new Vec3(1, 0, 0);
                fov      = mapCamera.Fov;

                if (fov == 0)
                {
                    fov = Map.Instance.Fov;
                }

                // damn /////////////////////////////////////////////////////////////////
                Camera camera = RendererWorld.Instance.DefaultCamera;
                camera.NearClipDistance = Map.Instance.NearFarClipDistance.Minimum;
                camera.FarClipDistance  = Map.Instance.NearFarClipDistance.Maximum;
                camera.FixedUp          = Vec3.ZAxis;
                camera.Fov       = fov;
                camera.Position  = position;
                camera.Direction = forward;// LookAt( position + forward * 100 );
            }
        }
Ejemplo n.º 10
0
        void Task(MapCurve way)
        {
            task_way = way;
            task_current_waypoint = null;

            if (task_way != null)
            {
                task_current_waypoint = task_way;
            }

            ResetTask();
        }
Ejemplo n.º 11
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnRelatedEntityDelete(Entity)"/></summary>
        protected override void OnRelatedEntityDelete(Entity entity)
        {
            base.OnRelatedEntityDelete(entity);

            if (entity == mapCamera)
            {
                mapCamera = null;
            }
            if (entity == mapCurve)
            {
                mapCurve = null;
            }
        }
Ejemplo n.º 12
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnDeleteSubscribedToDeletionEvent(Entity)"/></summary>
        protected override void OnDeleteSubscribedToDeletionEvent(Entity entity)
        {
            base.OnDeleteSubscribedToDeletionEvent(entity);

            if (entity == mapCamera)
            {
                mapCamera = null;
            }
            if (entity == mapCurve)
            {
                mapCurve = null;
            }
        }
Ejemplo n.º 13
0
        //

        protected override void OnRelatedEntityDelete(Entity entity)
        {
            base.OnRelatedEntityDelete(entity);

            if (way == entity)
            {
                way = null;
            }
            if (activateRegion == entity)
            {
                activateRegion = null;
            }
        }
Ejemplo n.º 14
0
        private void DoGeneralTask(MapCurve way)
        {
            TaskWay         = way;
            CurrentWayPoint = null;

            if (TaskWay != null && CurrentWayPoint == null)
            {
                CurrentWayPoint = TaskWay;
            }
            if (CurrentWayPoint != null)
            {
                firstWay = false;
            }
        }
Ejemplo n.º 15
0
        private void DoGeneralTask(GeneralTaskTypes type, MapCurve way)
        {
            generalTaskType            = type;
            generalTaskWay             = way;
            generalTaskCurrentWayPoint = null;

            if (generalTaskWay != null)
            {
                generalTaskCurrentWayPoint = generalTaskWay;
            }

            //if( generalTaskType == GeneralTaskTypes.None )
            ResetMoveTask();
        }
Ejemplo n.º 16
0
        public void ActivateWayMovement()
        {
            MapCurve way = null;

            {
                EntityComponent_ForTankDemo component = (EntityComponent_ForTankDemo)
                                                        ControlledObject.Component_GetFirstWithType(typeof(EntityComponent_ForTankDemo));
                if (component != null)
                {
                    way = component.Way;
                }
            }

            if (way != null)
            {
                DoGeneralTask(GeneralTaskTypes.WayMove, way);
            }
        }
Ejemplo n.º 17
0
        public void ActivateWayMovement()
        {
            MapCurve way = null;

            {
                TankGameExtendedProperties extendedProperties =
                    ControlledObject.ExtendedProperties as TankGameExtendedProperties;
                if (extendedProperties != null)
                {
                    way = extendedProperties.Way;
                }
            }

            if (way != null)
            {
                DoGeneralTask(GeneralTaskTypes.WayMove, way);
            }
        }
Ejemplo n.º 18
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);
            SubscribeToTickEvent();

            MapCurve way = null;

            {
                EntityComponent_SSDC component = (EntityComponent_SSDC)
                                                 ControlledObject.Component_GetFirstWithType(typeof(EntityComponent_SSDC));
                if (component != null)
                {
                    way = component.Way;
                }
            }

            if (way != null)
            {
                Task(way);
            }
        }
Ejemplo n.º 19
0
        private void GetMapCameraCurvePoint(out MapCurvePoint point, float MapCameraCurvePointTime)
        {
            point = null;
            //MapCameraCurvePointTime = 0;
            MapCurve mapCurve = (MapCurve)Entities.Instance.GetByName("MM_Curve");

            //MapCameraCurvePoint curvepoint;

            //for(int i = 0; i < mapCurve.Points.Count; i++)
            foreach (MapCurvePoint curvepoint in mapCurve.Points)
            {
                //curvepoint = mapCurve.Points.

                if (curvepoint.Time >= mapCurve.GetCurveTimeRange().Minimum&&
                    curvepoint.Time >= mapCurve.GetCurveTimeRange().Maximum)
                {
                    point = curvepoint;
                    return;
                }
            }
        }
Ejemplo n.º 20
0
 private void DoGeneralTask(GeneralTaskTypes type, MapCurve way)
 {
     generalTaskType = type;
 }
Ejemplo n.º 21
0
        void DoGeneralTask( GeneralTaskTypes type, MapCurve way )
        {
            generalTaskType = type;
            generalTaskWay = way;
            generalTaskCurrentWayPoint = null;

            if( generalTaskWay != null )
                generalTaskCurrentWayPoint = generalTaskWay;

            //if( generalTaskType == GeneralTaskTypes.None )
            ResetMoveTask();
        }
Ejemplo n.º 22
0
 private void DoGeneralTask(GeneralTaskTypes type, MapCurve way)
 {
     generalTaskType = type;
 }
Ejemplo n.º 23
0
        private void DoGeneralTask(GeneralTaskTypes type, MapCurve way)
        {
            generalTaskType = type;
            generalTaskWay = way;
            generalTaskCurrentWayPoint = null;

            switch (generalTaskType)
            {
                case GeneralTaskTypes.Battle:
                case GeneralTaskTypes.EnemyFlag:
                case GeneralTaskTypes.Leave:
                case GeneralTaskTypes.None:
                case GeneralTaskTypes.Patrol:
                case GeneralTaskTypes.PrimaryTargets:
                case GeneralTaskTypes.SecondaryTargets:
                case GeneralTaskTypes.TeamFlag:
                case GeneralTaskTypes.WayMove:
                    {
                        if (generalTaskWay != null)
                            generalTaskCurrentWayPoint = generalTaskWay;
                        break;
                    }
            }
            if (generalTaskType == GeneralTaskTypes.None)
                ResetMoveTask();
        }
Ejemplo n.º 24
0
        /// <summary>
        /// Finds the nearest point to a map curve.
        /// </summary>
        /// <param name="destPos">The point to which is searched the nearest.</param>
        /// <param name="mapCurve">The map curve.</param>
        /// <returns>The nearest point to a map curve.</returns>
        Vec3 GetNearestPointToMapCurve( Vec3 destPos, MapCurve mapCurve )
        {
            //Calculate cached points
            if( observeCameraMapCurvePoints != mapCurve )
            {
                observeCameraMapCurvePoints = mapCurve;

                observeCameraMapCurvePointsList.Clear();

                float curveLength = 0;
                {
                    ReadOnlyCollection<MapCurvePoint> points = mapCurve.Points;
                    for( int n = 0; n < points.Count - 1; n++ )
                        curveLength += ( points[ n ].Position - points[ n + 1 ].Position ).LengthFast();
                }

                float step = 1.0f / curveLength / 100;
                for( float c = 0; c < 1; c += step )
                    observeCameraMapCurvePointsList.Add( mapCurve.CalculateCurvePointByCoefficient( c ) );
            }

            //calculate nearest point
            Vec3 nearestPoint = Vec3.Zero;
            float nearestDistanceSqr = float.MaxValue;

            foreach( Vec3 point in observeCameraMapCurvePointsList )
            {
                float distanceSqr = ( point - destPos ).LengthSqr();
                if( distanceSqr < nearestDistanceSqr )
                {
                    nearestPoint = point;
                    nearestDistanceSqr = distanceSqr;
                }
            }
            return nearestPoint;
        }
Ejemplo n.º 25
0
        private void DoGeneralTask(MapCurve way)
        {
            TaskWay = way;
            CurrentWayPoint = null;

            if (TaskWay != null && CurrentWayPoint == null)
            {
                CurrentWayPoint = TaskWay;
            }
            if (CurrentWayPoint != null)
            {
                firstWay = false;
            }
        }
Ejemplo n.º 26
0
        private void GraphicPanel_OnMouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (DrawMode.Checked)
                {
                    createdCurve = new MapCurve();
                    createdCurve.AddPoint(e.Location);
                    curves.Add(createdCurve);
                }
                else
                {
                    if (LinkToFH.Checked)
                    {
                        if (EditTile.Checked || EditObj.Checked)
                        {
                            MapFootholds group = Map.Instance.layers[(int)Layer.Value].GetFootholdGroupAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                            if (group != null)
                            {
                                foreach (MapItem s in selected)
                                {
                                    s.Object.SetInt("zM", group.ID);
                                    if (s is ICached) (s as ICached).Cache();
                                }
                                if (selectedGroup != null)
                                {
                                    selectedGroup.Selected = false;
                                }
                                selectedGroup = group;
                                selectedGroup.Selected = true;
                            }
                        }
                        return;
                    }
                    else if (FootholdsCreator.Checked)
                    {
                        if (EditFH.Checked)
                        {
                            MapFootholdDesign fh = Map.Instance.layers[(int)Layer.Value].GetFootholdDesignAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                            if (fh != null)
                            {
                                if (!FHCreating.Contains(fh))
                                {
                                    FHCreating.Add(fh);
                                }
                            }
                            else
                            {
                                if (FHCreating.Count > 0)
                                {
                                    CreateFootholds(FHCreating);
                                    FHCreating.Clear();
                                }
                            }
                        }
                        else if (EditLR.Checked)
                        {
                            MapLRDesign lr = Map.Instance.layers[(int)Layer.Value].GetLRDesignAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                            if (lr != null && !LRCreating.Contains(lr))
                            {
                                if (LRCreating.Count > 0)
                                {
                                    if (LRCreating[0].GetX() == lr.GetX() && LRCreating[0].ladder == lr.ladder)
                                    {
                                        LRCreating.Add(lr);
                                        CreateLRs(LRCreating);
                                        LRCreating.Clear();
                                    }
                                }
                                else
                                {
                                    LRCreating.Add(lr);
                                }
                            }
                            else
                            {
                                LRCreating.Clear();
                            }
                        }
                        return;
                    }
                    //GraphicPanel.Focus();
                    if (EditMode.Checked && Map.Instance != null && !dragged)
                    {
                        if (EditTile.Checked || EditObj.Checked || EditLife.Checked || EditReactor.Checked || EditBack.Checked)
                        {
                            if (Map.Instance.layers[(int)Layer.Value].GetItemAt((int)(e.X / Zoom), (int)(e.Y / Zoom)) == null)
                            {
                                draggingSelection = true;
                                selectingX = e.X;
                                selectingY = e.Y;
                                if (!CtrlPressed && !ShiftPressed)
                                {
                                    Deselect();
                                }
                            }
                            else
                            {
                                if (CtrlPressed && selected.Count > 0)
                                {
                                    MapItem at = Map.Instance.layers[(int)Layer.Value].GetItemAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                                    if (at != null)
                                    {
                                        if (selected.Contains(at))
                                        {
                                            selected.Remove(at);
                                            at.Selected = false;
                                            if (selected.Count == 0) Deselect();
                                            else if (selected.Count == 1 && EditObj.Checked) toolStripStatusLabel1.Text = "Z: " + selected[0].Object.GetInt("z");

                                        }
                                        else
                                        {
                                            selected.Add(at);
                                            at.Selected = true;
                                            toolStripStatusLabel1.Text = "";
                                        }
                                    }
                                }
                                else
                                {
                                    if (EditTile.Checked && selected.Count == 1 && selected[0].IsPointInArea((int)(e.X / Zoom), (int)(e.Y / Zoom)))
                                    {
                                        dragged = true;
                                        selectedDragged = selected[0];
                                        sX = e.X;
                                        sY = e.Y;
                                    }
                                    else
                                    {
                                        MapItem at = Map.Instance.layers[(int)Layer.Value].GetItemAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                                        if (selected.Count > 1 && at != null && (selected.Contains(at)))
                                        {
                                            dragged = true;
                                            selectedDragged = at;
                                            sX = e.X;
                                            sY = e.Y;
                                        }
                                        else
                                        {
                                            Deselect();
                                            if (at != null)
                                            {
                                                selected.Add(at);
                                                at.Selected = true;
                                                if (EditObj.Checked)
                                                    toolStripStatusLabel1.Text = "Z: " + at.Object.GetInt("z");
                                            }
                                        }
                                    }
                                }
                            }
                            if (EditTile.Checked) Map.Instance.layers[(int)Layer.Value].OrderTiles();
                        }
                        else if (EditFH.Checked)
                        {
                            if (Map.Instance.layers[(int)Layer.Value].GetConnectionAt((int)(e.X / Zoom), (int)(e.Y / Zoom)).Count == 0)
                            {
                                draggingSelection = true;
                                selectingX = e.X;
                                selectingY = e.Y;
                                if (!CtrlPressed && !ShiftPressed)
                                {
                                    Deselect();
                                }
                            }
                            else
                            {
                                if (CtrlPressed && selected.Count > 0)
                                {
                                    List<MapFootholdSide> list = Map.Instance.layers[(int)Layer.Value].GetConnectionAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                                    if (list.Count > 0)
                                    {
                                        if (selected.Contains(list[0]))
                                        {
                                            foreach (MapFootholdSide f in list)
                                            {
                                                selected.Remove(f);
                                                f.Selected = false;
                                            }
                                            if (selected.Count == 0) Deselect();

                                        }
                                        else
                                        {
                                            foreach (MapFootholdSide f in list)
                                            {
                                                selected.Add(f);
                                                f.Selected = true;
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    List<MapFootholdSide> list = Map.Instance.layers[(int)Layer.Value].GetConnectionAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                                    if (selected.Count > 2 && list.Count > 0 && selected.Contains(list[0]))
                                    {
                                        dragged = true;
                                        selectedDragged = list[0];
                                        if (list.Count > 1)
                                            selectedDragged2 = list[1];
                                        sX = e.X;
                                        sY = e.Y;
                                    }
                                    else
                                    {
                                        Deselect();
                                        if (list.Count > 0)
                                        {
                                            foreach (MapFootholdSide f in list)
                                            {
                                                selected.Add(f);
                                                f.Selected = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else if (EditLR.Checked)
                        {
                            MapLRSide lr = Map.Instance.layers[(int)Layer.Value].GetLRSideAt((int)(e.X / Zoom), (int)(e.Y / Zoom));
                            if (lr != null && selected.Contains(lr))
                            {
                                dragged = true;
                                selectedDragged = lr;
                                sX = e.X;
                                sY = e.Y;
                            }
                            else
                            {
                                Deselect();
                                if (lr != null)
                                {
                                    selected.Add(lr);
                                    lr.Selected = true;
                                }
                            }
                        }
                        else if (EditSeat.Checked || EditPortal.Checked || EditToolTip.Checked || EditClock.Checked)
                        {
                            MapItem item = null;

                            item = Map.Instance.GetItemAt((int)(e.X / Zoom), (int)(e.Y / Zoom));

                            if (item != null && selected.Contains(item))
                            {
                                dragged = true;
                                selectedDragged = item;
                                sX = e.X;
                                sY = e.Y;
                            }
                            else
                            {
                                Deselect();
                                if (item != null)
                                {
                                    selected.Add(item);
                                    item.Selected = true;
                                }
                            }
                        }
                    }
                    if (selected.Count > 0)
                    {
                        bool clickedIn = false;
                        foreach (MapItem s in selected)
                        {
                            if (s.IsPointInArea((int)(e.X / Zoom), (int)(e.Y / Zoom)))
                            {
                                clickedIn = true;
                            }
                        }
                        if (clickedIn)
                        {
                            dragged = true;
                            sX = e.X;
                            sY = e.Y;
                            lastX = e.X;
                            lastY = e.Y;
                        }
                    }
                    if (selected.Count == 1)
                    {
                        toolStripStatusLabel1.Text = selected[0].ToString();
                    }
                }

                if (scrolling)
                {
                    scrolling = false;
                    Cursor = Cursors.Default;
                }
            }
            else if (e.Button == MouseButtons.Middle)
            {
                wheelClicked = true;
                scrolling = true;
                scrollingDragged = false;
                scrollPosition = new Point(e.X - ShiftX, e.Y - ShiftY);
                if (vScrollBar1.Visible && hScrollBar1.Visible)
                {
                    Cursor = Cursors.NoMove2D;
                }
                else if (vScrollBar1.Visible)
                {
                    Cursor = Cursors.NoMoveVert;
                }
                else if (hScrollBar1.Visible)
                {
                    Cursor = Cursors.NoMoveHoriz;
                }
                else
                {
                    scrolling = false;
                }
            }
        }
Ejemplo n.º 27
0
        private void GraphicPanel_OnMouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (DrawMode.Checked)
                {
                    if (!createdCurve.Close()) curves.Remove(createdCurve);
                    else
                    {
                        try
                        {
                            createdCurve.Simplify();
                        }
                        catch
                        {
                            curves.Remove(createdCurve);
                        }
                    }
                    createdCurve = null;
                }
                else
                {
                    MagnetDisable();
                    if (draggingSelection)
                    {
                        if (selectingX != e.X && selectingY != e.Y)
                        {

                            int x1 = (int)(selectingX / Zoom), x2 = (int)(e.X / Zoom);
                            int y1 = (int)(selectingY / Zoom), y2 = (int)(e.Y / Zoom);
                            if (x1 > x2)
                            {
                                x1 = (int)(e.X / Zoom);
                                x2 = (int)(selectingX / Zoom);
                            }
                            if (y1 > y2)
                            {
                                y1 = (int)(e.Y / Zoom);
                                y2 = (int)(selectingY / Zoom);
                            }
                            List<MapItem> items;
                            if (EditFH.Checked)
                            {
                                items = Map.Instance.layers[(int)Layer.Value].GetConnectionsAt(new Rectangle(x1, y1, x2 - x1, y2 - y1));
                            }
                            else
                            {
                                items = Map.Instance.layers[(int)Layer.Value].GetItemsAt(new Rectangle(x1, y1, x2 - x1, y2 - y1));
                            }

                            foreach (MapItem item in items)
                            {
                                if (selected.Contains(item) && CtrlPressed)
                                {
                                    selected.Remove(item);
                                    item.Selected = false;
                                }
                                else if (!selected.Contains(item))
                                {
                                    selected.Add(item);
                                    item.Selected = true;
                                }
                            }

                            if (selected.Count == 1 && EditObj.Checked) toolStripStatusLabel1.Text = "Z: " + selected[0].Object.GetInt("z");
                        }
                        draggingSelection = false;
                        TempChanged.Clear();
                    }
                    else
                    {
                        if (dragged && (sX != e.X || sY != e.Y))
                        {
                            undo.Push(new ActionMove(new List<MapItem>(selected), e.X - sX, e.Y - sY));
                            redo.Clear();
                        }
                        dragged = false;
                        if (selectedDragged != null)
                        {
                            if (e.X == sX && e.Y == sY)
                            {
                                Deselect();
                                selected.Add(selectedDragged);
                                selectedDragged.Selected = true;
                                if (selectedDragged2 != null)
                                {
                                    selected.Add(selectedDragged2);
                                    selectedDragged2.Selected = true;
                                }
                                if (EditObj.Checked)
                                    toolStripStatusLabel1.Text = "Z: " + selectedDragged.Object.GetInt("z");
                            }
                            selectedDragged = null;
                            selectedDragged2 = null;
                        }
                    }
                    if (EditTile.Checked) Map.Instance.layers[(int)Layer.Value].OrderTiles();
                }
            }
            else if (e.Button == MouseButtons.Middle)
            {
                wheelClicked = false;
                if (scrollingDragged)
                {
                    scrolling = false;
                    Cursor = Cursors.Default;
                }
            }
        }