private void DrawGridInfo(Rect parent) { PIAImageData imageData = PIASession.Instance.ImageData; //GRID INFO RECT float gridInfoRectHeight = 40; Rect gridInfoRect = new Rect(0, parent.height - gridInfoRectHeight, parent.width, gridInfoRectHeight); //DRAWING STUFF GUI.DrawTexture(gridInfoRect, blackBarBG); GUILayout.BeginArea(gridInfoRect); { GUILayout.FlexibleSpace(); GUILayout.BeginHorizontal(); { GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); { GUILayout.Label("[" + imageData.Width + "x" + imageData.Height + "]", skin.GetStyle("editorbutton2")); GUILayout.Label(mouseCellCoordinate.ToString(), skin.GetStyle("editorbutton2")); } GUILayout.EndVertical(); GUILayout.FlexibleSpace(); } GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); } GUILayout.EndArea(); }
public PIATexture AddTexture(PIAImageData imageData, int layerIndex) { PIATexture texture = new PIATexture(); texture.Init(imageData.Width, imageData.Height, layerIndex); textures.Add(texture); return(texture); }
public void Init(PIAImageData _imageData) { textures = new List <PIATexture>(); frameTexture = PIATexture.CreateBlank(_imageData.Width, _imageData.Height); frameTextureWithFilters = PIATexture.CreateBlank(_imageData.Width, _imageData.Height); // we make sure every time a new frame is created it contains the same amount of sub-textures // as the layers in the image for (int i = 0; i < _imageData.Layers.Count; i++) { AddTexture(_imageData, i); } }
public PIAFrame GetFrameOrFirst() { // get the current frame in animator // if it doesn't exist returns the first frame (maybe it gets deleted?) PIAFrame output; imageData = PIASession.Instance.ImageData; if (currentFrameInPreview < imageData.Frames.Count) { output = imageData.Frames[currentFrameInPreview] == null ? imageData.Frames[0] : imageData.Frames[currentFrameInPreview]; } else { output = imageData.Frames[0]; } return(output); }
private void OpenAsset(ref PIAImageData asset) { string path = EditorUtility.OpenFilePanelWithFilters("Select Asset", "Assets/", new string[] { "ASSET", "asset" }); if (string.IsNullOrEmpty(path)) { return; } string internalPath = FileUtil.GetProjectRelativePath(path); if (string.IsNullOrEmpty(internalPath)) { EditorUtility.DisplayDialog("No Path Found", "Be sure to place your asset inside 'Asset/'.", "Ok"); return; } asset = AssetDatabase.LoadAssetAtPath <PIAImageData>(internalPath); }
private void DrawFrames(Rect parent) { PIAImageData imageData = PIASession.Instance.ImageData; Vector2 offset = new Vector2(20, 20); Vector2 bgSize = new Vector2(15, 15); // FRAME RECT float frameRectPositionX = offset.x; float frameRectPositionY = offset.y; float frameRectWidth = 100; float frameRectHeight = frameRectWidth; float spaceBetweenFrames = 25; // FRAME INDEX RECT float frameNumberRectWidth = 22; float frameNumberRectHeight = 22; // DELETE RECT float deleteFrameRectWidth = 32; float deleteFrameRectHeight = 32; Vector2 deleteFrameRectOffset = new Vector2(2, 2); // DUPLICATE RECT float duplicateFrameRectWidth = 32; float duplicateFrameRectHeight = 32; Vector2 duplicateFrameRectOffset = new Vector2(2, 2); // MOVE UP RECT float moveFrameUpRectWidth = 32; float moveFrameUpRectHeight = 32; Vector2 moveFrameUpRectOffset = new Vector2(2, 2); // MOVE DOWN RECT float moveFrameDownRectWidth = 32; float moveFrameDownRectHeight = 32; Vector2 moveFrameDownRectOffset = new Vector2(2, 2); // ADD FRAME RECT float addFrameIconRectWidth = 40; float addFrameIconRectHeight = 40; // SCROLL VIEW RECT Rect viewRect = new Rect(0, 0, parent.width, (frameRectHeight + spaceBetweenFrames) * (imageData.Frames.Count + 1) + offset.y); Rect sliderRect = new Rect(0, 0, parent.width, parent.height - offset.y); // caching and changing default gui skins for scroll view GUIStyle nativeVerticalScrollbarThumb = GUI.skin.verticalScrollbarThumb; GUI.skin.verticalScrollbarThumb.normal.background = PIATextureDatabase.Instance.GetTexture("empty"); GUIStyle nativeVerticalScrollbarDownButton = GUI.skin.verticalScrollbarDownButton; GUI.skin.verticalScrollbarDownButton.normal.background = PIATextureDatabase.Instance.GetTexture("empty"); GUIStyle nativeVerticalScrollbarUpButton = GUI.skin.verticalScrollbarUpButton; GUI.skin.verticalScrollbarUpButton.normal.background = PIATextureDatabase.Instance.GetTexture("empty"); // DRAWING FRAMES framesSlider = GUI.BeginScrollView(sliderRect, framesSlider, viewRect, false, false, skin.GetStyle("horizontalscrollbar"), skin.GetStyle("verticalscrollbar")); { for (int i = 0; i < imageData.Frames.Count; i++) { var item = imageData.Frames[i]; // refreshing rects Rect frameRect = new Rect(frameRectPositionX, frameRectPositionY, frameRectWidth, frameRectHeight); Rect frameBGRect = new Rect(frameRect.x - bgSize.x / 2, frameRect.y - bgSize.y / 2, frameRect.width + bgSize.x, frameRect.height + bgSize.y); Rect frameNumberBGRect = new Rect(frameBGRect.xMax, frameBGRect.center.y - frameNumberRectHeight / 2, frameNumberRectWidth, frameNumberRectHeight); Rect deleteFrameRect = new Rect(frameRect.xMax - deleteFrameRectWidth - deleteFrameRectOffset.x, frameRect.y + deleteFrameRectOffset.y, deleteFrameRectWidth, deleteFrameRectHeight); Rect duplicateFrameRect = new Rect(frameRect.xMax - duplicateFrameRectWidth - duplicateFrameRectOffset.x, frameRect.yMax - duplicateFrameRectOffset.y - duplicateFrameRectHeight, duplicateFrameRectWidth, duplicateFrameRectHeight); Rect moveFrameUpFrameRect = new Rect(frameRect.x + moveFrameUpRectOffset.x, frameRect.y + moveFrameUpRectOffset.y, moveFrameUpRectWidth, moveFrameUpRectHeight); Rect moveFrameDownFrameRect = new Rect(frameRect.x + moveFrameDownRectOffset.x, frameRect.yMax - moveFrameDownRectOffset.y - moveFrameDownRectHeight, moveFrameDownRectWidth, moveFrameDownRectHeight); // INDEX NUMBER GUI.DrawTexture(frameNumberBGRect, blackBarBG); GUI.Label(frameNumberBGRect, i.ToString(), skin.GetStyle("editorbutton2")); // BG GUI.DrawTexture(frameBGRect, blackBarBG); // FRAME CONTENT EditorGUI.DrawTextureTransparent(frameRect, imageData.Frames[i].GetFrameTexture()); if (PIAInputArea.IsMouseInsideRect(frameBGRect)) { if (imageData.Frames.Count > 1) { // DELETE if (GUI.Button(deleteFrameRect, GUIContent.none, skin.GetStyle("deleteframe"))) { PIASession.Instance.ImageData.RemoveFrame(i); } Rect deleteFrameGlobalRect = PIATooltipUtility.ChildToGlobalRect(deleteFrameRect, parent); Rect deleteFrameTooltipRect = new Rect(0, 0, 50, 22.5f); PIATooltip deleteFrameTooltip = new PIATooltip(deleteFrameTooltipRect, "Delete"); PIATooltip.SetPositionPreset(ref deleteFrameTooltip, deleteFrameGlobalRect, PIATooltip.PIATooltipPreset.Right); PIATooltipUtility.AddTooltip(deleteFrameGlobalRect, deleteFrameTooltip); } // DUPLICATE if (GUI.Button(duplicateFrameRect, GUIContent.none, skin.GetStyle("copyframe"))) { PIAFrame newFrame = PIASession.Instance.ImageData.AddFrame(); newFrame.CopyFrom(item); } Rect duplicateFrameGlobalRect = PIATooltipUtility.ChildToGlobalRect(duplicateFrameRect, parent); Rect duplicateFrameTooltipRect = new Rect(0, 0, 75, 22.5f); PIATooltip duplicateFrameTooltip = new PIATooltip(duplicateFrameTooltipRect, "Duplicate"); PIATooltip.SetPositionPreset(ref duplicateFrameTooltip, duplicateFrameGlobalRect, PIATooltip.PIATooltipPreset.Up); PIATooltipUtility.AddTooltip(duplicateFrameGlobalRect, duplicateFrameTooltip); // MOVE UP if (i > 0) { if (GUI.Button(moveFrameUpFrameRect, GUIContent.none, skin.GetStyle("moveframup"))) { imageData.MoveFrameUp(i); } Rect moveFrameUpGlobalRect = PIATooltipUtility.ChildToGlobalRect(moveFrameUpFrameRect, parent); Rect moveFrameUpTooltipRect = new Rect(0, 0, 75, 22.5f); PIATooltip moveFrameUpTooltip = new PIATooltip(moveFrameUpTooltipRect, "Move up"); PIATooltip.SetPositionPreset(ref moveFrameUpTooltip, moveFrameUpGlobalRect, PIATooltip.PIATooltipPreset.Left); PIATooltipUtility.AddTooltip(moveFrameUpGlobalRect, moveFrameUpTooltip); } // MOVE DOWN if (i < imageData.Frames.Count - 1) { if (GUI.Button(moveFrameDownFrameRect, GUIContent.none, skin.GetStyle("moveframedown"))) { imageData.MoveFrameDown(i); } Rect moveFrameDownGlobalRect = PIATooltipUtility.ChildToGlobalRect(moveFrameDownFrameRect, parent); Rect moveFrameDownTooltipRect = new Rect(0, 0, 90, 22.5f); PIATooltip moveFrameDownTooltip = new PIATooltip(moveFrameDownTooltipRect, "Move down"); PIATooltip.SetPositionPreset(ref moveFrameDownTooltip, moveFrameDownGlobalRect, PIATooltip.PIATooltipPreset.Left); PIATooltipUtility.AddTooltip(moveFrameDownGlobalRect, moveFrameDownTooltip); } } // FRAME SELECTION BG if (GUI.Button(frameBGRect, GUIContent.none, skin.GetStyle("bglayerbutton"))) { PIASession.Instance.ImageData.CurrentFrameIndex = i; } frameRectPositionY += frameRectHeight + spaceBetweenFrames; // FRAME SELECTION OVERLAY if (i == PIASession.Instance.ImageData.CurrentFrameIndex) { GUI.Label(frameBGRect, GUIContent.none, skin.GetStyle("selectedframeoverlay")); } } // ADD NEW FRAME Rect addFrameRect = new Rect(frameRectPositionX, frameRectPositionY, frameRectWidth, frameRectHeight); Rect addFrameBGRect = new Rect(addFrameRect.x - bgSize.x / 2, addFrameRect.y - bgSize.y / 2, addFrameRect.width + bgSize.x, addFrameRect.height + bgSize.y); Rect addFrameBGLabelIcon = new Rect(addFrameRect.center.x - addFrameIconRectWidth / 2, addFrameRect.center.y - addFrameIconRectHeight / 2, addFrameIconRectWidth, addFrameIconRectHeight); GUI.DrawTexture(addFrameBGRect, blackBarBG); GUI.Label(addFrameBGLabelIcon, GUIContent.none, skin.GetStyle("addframe")); if (GUI.Button(addFrameRect, GUIContent.none, skin.GetStyle("bglayerbutton"))) { PIASession.Instance.ImageData.AddFrame(); } frameRectPositionY += frameRectHeight + spaceBetweenFrames; } GUI.EndScrollView(); // resetting scroll view gui skin GUI.skin.verticalScrollbarThumb = nativeVerticalScrollbarThumb; GUI.skin.verticalScrollbarDownButton = nativeVerticalScrollbarDownButton; GUI.skin.verticalScrollbarUpButton = nativeVerticalScrollbarUpButton; }
public Texture2D GetFrameTextureWithLayerFilters() { // in case we load from a saved asset if (frameTextureWithFilters == null) { frameTextureWithFilters = PIATexture.CreateBlank(PIASession.Instance.ImageData.Width, PIASession.Instance.ImageData.Height); } // clean up PIATexture.Wipe(frameTextureWithFilters); PIAImageData imageData = PIASession.Instance.ImageData; frameTextureWithFilters.filterMode = FilterMode.Point; // caching hidden layers indexes List <int> hiddenLayersIndex = new List <int>(); foreach (var item in imageData.Layers) { if (item.Hidden == true) { hiddenLayersIndex.Add(item.Index); } } // ordering up textures so the last layer is always drawn on top of the first layer textures = textures.OrderBy(x => x.LayerIndex).ToList(); int currentLayerTextureIndex = 0; // building the filtered texture from each sub-texture (layer) in the frame for (int i = 0; i < textures.Count; i++) { var item = textures[i]; // skipping hidden layers if (hiddenLayersIndex.Contains(item.LayerIndex)) { continue; } // if the sub-texture index is NOT the current selected index it gets painted transparent (alpha/2) if (imageData.CurrentLayer != item.LayerIndex) { for (int x = 0; x < PIASession.Instance.ImageData.Width; x++) { for (int y = 0; y < PIASession.Instance.ImageData.Height; y++) { Color pixelColor = item.Texture.GetPixel(x, y); pixelColor.a = pixelColor.a / 2; if (pixelColor.a > 0) { frameTextureWithFilters.SetPixel(x, y, pixelColor); } } } } else { currentLayerTextureIndex = i; } } // drawing current layer texture for (int x = 0; x < PIASession.Instance.ImageData.Width; x++) { for (int y = 0; y < PIASession.Instance.ImageData.Height; y++) { Color pixelColor = textures[currentLayerTextureIndex].Texture.GetPixel(x, y); if (pixelColor.a > 0) { frameTextureWithFilters.SetPixel(x, y, pixelColor); } } } frameTextureWithFilters.Apply(); return(frameTextureWithFilters); }
public PIATexture AddTexture() { PIAImageData imageData = PIASession.Instance.ImageData; return(AddTexture(imageData, imageData.CurrentLayer)); }