| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- const int PAINT_STEP_UPDATE = 16;
- const int PAINT_SELECTION_KEY = KEY_C;
- bool EditorPaintSelectionShow = false;
- int EditorPaintSelectionUITimeToUpdate = 0;
- UIElement@ EditorPaintSelectionUIContainer = null;
- BorderImage@ paintSelectionImage = null;
- IntVector2 paintSelectionBrushDefaultSize(96,96);
- IntVector2 paintSelectionBrushCurrentSize = paintSelectionBrushDefaultSize;
- IntVector2 paintSelectionBrushMinSize(64,64);
- IntVector2 paintSelectionBrushMaxSize(512,512);
- IntVector2 paintSelectionBrushStepSizeChange(16,16);
- void CreatePaintSelectionContainer()
- {
- if (editorScene is null) return;
- EditorPaintSelectionUIContainer = UIElement();
- EditorPaintSelectionUIContainer.position = IntVector2(0,0);
- EditorPaintSelectionUIContainer.size = IntVector2(graphics.width,graphics.height);
- EditorPaintSelectionUIContainer.priority = -5;
- EditorPaintSelectionUIContainer.focusMode = FM_NOTFOCUSABLE;
- EditorPaintSelectionUIContainer.bringToBack = true;
- EditorPaintSelectionUIContainer.name ="DebugPaintSelectionContainer";
- EditorPaintSelectionUIContainer.temporary = true;
- ui.root.AddChild(EditorPaintSelectionUIContainer);
- }
- void CreatePaintSelectionTool()
- {
- paintSelectionImage = BorderImage("Icon");
- paintSelectionImage.temporary = true;
- paintSelectionImage.SetFixedSize(paintSelectionBrushDefaultSize.x,paintSelectionBrushDefaultSize.y);
- paintSelectionImage.texture = cache.GetResource("Texture2D", "Textures/Editor/SelectionCircle.png");
- paintSelectionImage.imageRect = IntRect(0,0,512,512);
- paintSelectionImage.priority = -5;
- paintSelectionImage.color = Color(1,1,1);
- paintSelectionImage.bringToBack = true;
- paintSelectionImage.enabled = false;
- paintSelectionImage.selected = false;
- paintSelectionImage.visible = true;
- EditorPaintSelectionUIContainer.AddChild(paintSelectionImage);
- }
- void UpdatePaintSelection()
- {
- PaintSelectionCheckKeyboard();
- // Early out if disabled
- if (!EditorPaintSelectionShow) return;
- if (editorScene is null || EditorPaintSelectionUITimeToUpdate > time.systemTime) return;
- EditorPaintSelectionUIContainer = ui.root.GetChild("DebugPaintSelectionContainer");
- if (EditorPaintSelectionUIContainer is null)
- {
- CreatePaintSelectionContainer();
- CreatePaintSelectionTool();
- }
- if (EditorPaintSelectionUIContainer !is null)
- {
- // Set visibility for all origins
- EditorPaintSelectionUIContainer.visible = EditorPaintSelectionShow;
- if (viewportMode!=VIEWPORT_SINGLE)
- EditorPaintSelectionUIContainer.visible = false;
- if (EditorPaintSelectionShow)
- {
- IntVector2 mp = input.mousePosition;
- paintSelectionImage.position = IntVector2(mp.x - (paintSelectionBrushCurrentSize.x * 0.5f), mp.y - (paintSelectionBrushCurrentSize.y * 0.5f));
- }
- }
- EditorPaintSelectionUITimeToUpdate = time.systemTime + PAINT_STEP_UPDATE;
- }
- void PaintSelectionCheckKeyboard()
- {
- bool key = input.keyPress[PAINT_SELECTION_KEY];
- if (key && ui.focusElement is null)
- {
- EditorPaintSelectionShow = !EditorPaintSelectionShow;
- if (EditorPaintSelectionUIContainer !is null)
- EditorPaintSelectionUIContainer.visible = EditorPaintSelectionShow;
- if (EditorPaintSelectionShow)
- {
- // When we start paint selection we change editmode to select
- editMode = EDIT_SELECT;
- //selectedNodes.Clear();
- // and also we show origins for proper origins update
- ShowOrigins(true);
- toolBarDirty = true;
- }
- }
- else if (EditorPaintSelectionShow && ui.focusElement is null)
- {
- if (editMode != EDIT_SELECT)
- {
- EditorPaintSelectionShow = false;
- EditorPaintSelectionUIContainer.visible = false;
- }
- }
- if (input.mouseButtonDown[MOUSEB_RIGHT])
- {
- EditorPaintSelectionShow = false;
- if (EditorPaintSelectionUIContainer !is null)
- EditorPaintSelectionUIContainer.visible = false;
- }
- }
- void SelectOriginsByPaintSelection(IntVector2 curPos, float brushRadius, bool isOperationAddToSelection = true)
- {
- if (!EditorPaintSelectionShow || EditorPaintSelectionUIContainer is null) return;
- for (int i=0; i < originsNodes.length; i++)
- {
- Vector3 v1(originsIcons[i].position.x, originsIcons[i].position.y, 0);
- Vector3 v2(curPos.x - ORIGINOFFSETICON.x, curPos.y - ORIGINOFFSETICON.y, 0);
- float distance = (v1 - v2).length;
- bool isThisOriginInCircle = distance < brushRadius ? true : false;
- int nodeID = originsIcons[i].vars[ORIGIN_NODEID_VAR].GetInt();
- if (isThisOriginInCircle)
- {
- WeakHandle handle = editorScene.GetNode(nodeID);
- if (handle.Get() !is null)
- {
- Node@ node = handle.Get();
- if (isOperationAddToSelection)
- {
- if (node !is null && isThisNodeOneOfSelected(node) == false)
- SelectNode(node, true);
- }
- else // Deselect origins operation
- {
- if (node !is null && isThisNodeOneOfSelected(node) == true)
- DeselectNode(node);
- }
- }
- }
- }
- }
- void HandlePaintSelectionMouseMove(StringHash eventType, VariantMap& eventData)
- {
- if (!EditorPaintSelectionShow || EditorPaintSelectionUIContainer is null) return;
- int x = eventData["X"].GetInt();
- int y = eventData["Y"].GetInt();
- float r = (paintSelectionBrushCurrentSize.x * 0.5);
- IntVector2 mousePos(x,y);
- // Select by mouse
- if (input.mouseButtonDown[MOUSEB_LEFT] && input.qualifierDown[QUAL_CTRL] != true)
- {
- SelectOriginsByPaintSelection(mousePos, r, true);
- }
- // Deselect by mouse
- else if (input.mouseButtonDown[MOUSEB_LEFT] && input.qualifierDown[QUAL_CTRL] == true)
- {
- SelectOriginsByPaintSelection(mousePos, r, false);
- }
- }
- void HandlePaintSelectionWheel(StringHash eventType, VariantMap& eventData)
- {
- if (!EditorPaintSelectionShow || EditorPaintSelectionUIContainer is null) return;
- int wheelValue = eventData["Wheel"].GetInt();
- if (wheelValue != 0)
- {
- if (wheelValue > 0)
- {
- paintSelectionBrushCurrentSize = paintSelectionBrushCurrentSize - paintSelectionBrushStepSizeChange;
- paintSelectionBrushCurrentSize = IntVector2(Max(paintSelectionBrushCurrentSize.x, paintSelectionBrushMinSize.x), Max(paintSelectionBrushCurrentSize.y, paintSelectionBrushMinSize.y));
- }
- else if (wheelValue < 0)
- {
- paintSelectionBrushCurrentSize = paintSelectionBrushCurrentSize + paintSelectionBrushStepSizeChange;
- paintSelectionBrushCurrentSize = IntVector2(Min(paintSelectionBrushCurrentSize.x, paintSelectionBrushMaxSize.x), Min(paintSelectionBrushCurrentSize.y, paintSelectionBrushMaxSize.y));
- }
- paintSelectionImage.SetFixedSize(paintSelectionBrushCurrentSize.x, paintSelectionBrushCurrentSize.y);
- }
- }
|