Hello!
I am painting on a 2D texture in Editor mode(tex.SetPixels(…)/tex.Apply()). I am painting by cells(15x15). The process is simple: I click on the cell and it changed its color. I could paint by click(one click paints on cell). But it is not comfortable. So I decided to make the following: when I hold the mouse button down the process of painting never stops until I release the mouse. Here are the code that do it:
void OnSceneGUI(SceneView sceneView)
{
EventType evType = Event.current.type;
if (Event.current.button == 0)
{
switch(evType)
{
case EventType.layout:
HandleUtility.AddDefaultControl(GUIUtility.GetControlID(GetHashCode(), FocusType.Passive));
break;
case EventType.mouseDown:
lMouseBtnDown = true;
break;
case EventType.mouseUp:
lMouseBtnDown = false;
break;
case EventType.mouseDrag:
//Event.current.Use();
break;
}
}
if (lMouseBtnDown)
{
OnSceneViewMouseDown();
}
}
void OnSceneViewMouseDown()
{
Vector3 mousePosition = Event.current.mousePosition;
Ray ray = HandleUtility.GUIPointToWorldRay(mousePosition);
mousePosition = ray.origin;
if (dg == null)
InitDebugGrid();
dg.GridCellPaint(mousePosition, passabilityRate);
Event.current.Use();
}
However, this Event.current.Use() ates too much. If I move the mouse across the scene with mouse button down I will not see any result on the screen until I release the button. If I remove .Use() the result of painting would be immediatelly drawn on the screen. But If I remove .Use() also I would select the texture in Scene View. I wonder if there is a possibility to do manual redraw of the SceneView ?
Thank you.