Beispiel #1
0
        private void OnSceneGui(SceneView sv)
        {
            DrawControls();

            tileMap = FindObjectOfType <QuadTileMap>();

            _selectionTile.gameObject.SetActive(editMode != LevelEditMode.None);

            Event e = Event.current;
            // Convert mouse position to world position by finding point where y = 0.
            Ray     ray             = HandleUtility.GUIPointToWorldRay(e.mousePosition);
            Vector3 pos             = ray.origin - (ray.origin.y / ray.direction.y) * ray.direction;
            Vector3 snappedPosition = QuadTileMap.GetPositionClosestTo(pos);

            _selectionTile.transform.position = snappedPosition;

            _selectionTile.UpdateHeight(height);
            ModeChanged();

            int controlId = GUIUtility.GetControlID(FocusType.Passive);

            if (e.GetTypeForControl(controlId) == EventType.ScrollWheel && e.control)
            {
                if (e.delta.y > 0)
                {
                    DecreaseHeight();
                }
                else if (e.delta.y < 0)
                {
                    IncreaseHeight();
                }
                e.Use();
            }

            if (e.GetTypeForControl(controlId) == EventType.KeyDown && e.control)
            {
                switch (e.keyCode)
                {
                case NON_KEY:
                    editMode = LevelEditMode.None;
                    break;

                case ADD_KEY:
                    editMode = LevelEditMode.Add;
                    break;

                case REM_KEY:
                    editMode = LevelEditMode.Delete;
                    break;
                }

                e.Use();
                Repaint();
            }

            if (e.GetTypeForControl(controlId) == EventType.MouseDown)
            {
                if (e.button == 0)
                {
                    switch (editMode)
                    {
                    case LevelEditMode.Add:
                        tileMap.AddTile(snappedPosition, brush, height);
                        break;

                    case LevelEditMode.Delete:
                        tileMap.DeleteTile(snappedPosition);
                        break;

                    case LevelEditMode.None:
                        return;
                    }
                }
            }

            lastSnappedPosition = snappedPosition;
        }