예제 #1
0
    void OnSceneGUI()
    {
        Event e = Event.current;

        //Debug.Log("type " + e.type + ", ismouse " + e.isMouse + ", button " + e.button);

        // Is edit mode enabled  ?
        if (IsEditModeEnabled)
        {
            // Catch window focus.
            int controlID = GUIUtility.GetControlID(FocusType.Passive);
            if (e.type == EventType.Layout)
            {
                HandleUtility.AddDefaultControl(controlID);
                return;
            }

            // Release mouse
            if (e.type == EventType.MouseUp && e.button == editMapButtonID)
            {
                _isDragging = false;
            }

            // paint.
            if ((e.type == EventType.MouseDrag || e.type == EventType.MouseDown) && e.button == editMapButtonID)
            {
                float rayDistance;
                Ray   ray   = HandleUtility.GUIPointToWorldRay(e.mousePosition);
                Plane plane = new Plane(new Vector3(0, 1, 0), 0);
                if (plane.Raycast(ray, out rayDistance))
                {
                    Vector3 point = ray.GetPoint(rayDistance);

                    //Debug.Log("type " + e.type + ", ismouse " + e.isMouse + ", button " + e.button);

                    if (e.type == EventType.MouseDrag && _isDragging)
                    {
                        if (TargetMap.EditHexagon(_lastMousePosition, point, _typeIdBrush, _heightBrush, _paintLayer))
                        {
                            MapModified();
                        }
                    }
                    else
                    {
                        if (TargetMap.EditHexagon(point, _typeIdBrush, _heightBrush, _paintLayer))
                        {
                            MapModified();
                        }
                        _isDragging = true;
                    }

                    _lastMousePosition = point;
                }
                e.Use();
            }
        }
    }