// Use this for initialization void Start() { selectedColor = new Texture2D(32,32); selectedColorStyle = new GUIStyle(); sheetData = new SpriteSheetData(); sheetData.Initialize(); SetPalettes(); canvas.material.mainTexture = sheetData.buffered; //NewCanvas(); //GUI Elements Console.Bind("spriteEdit", 0, 0, 250, 120); Window newWindow = new Window(); newWindow.Initialize("spriteEdit", 0, 0, 120, 25, Toolbar, Window.Align.TopLeft); GUIManager.windows.Add(newWindow); newWindow = new Window(); newWindow.Initialize("spriteEdit", 0, 0, 290, 90, Palette, Window.Align.BottomLeft); GUIManager.windows.Add(newWindow); newWindow = new Window(); newWindow.Initialize("spriteEdit", 0, 0, 138, 74, Swatches, Window.Align.Bottom); GUIManager.windows.Add(newWindow); mainColor = new RGBColor(); mainColor.SetColor(0,0,0); selectedColorStyle.normal.background = selectedColor; }
public static SpriteSheetData Parse(string rawfile) { SpriteSheetFileReader sfr = new SpriteSheetFileReader(rawfile); SpriteSheetData sd = new SpriteSheetData(sfr); return(sd); }
public Animation(Texture2D texture, SpriteSheetData spriteSheetData, int direction = 0, bool isPlayer = false) { var spriteWidth = spriteSheetData.Width; var spriteHeight = spriteSheetData.Height; var objectTexture = texture; var objectAtlas = TextureAtlas.Create("objectAtlas", objectTexture, spriteWidth, spriteHeight); var animationFactory = new SpriteSheetAnimationFactory(objectAtlas); for (int i = 0; i < spriteSheetData.AnimationName.Count; i++) { animationFactory.Add(spriteSheetData.AnimationName[i], new SpriteSheetAnimationData(spriteSheetData.FrameArray[i], spriteSheetData.FrameDuration[i], spriteSheetData.IsLooping[i])); } if (isPlayer) { objectAnimated = new AnimatedSprite(animationFactory, HUD.PlayerCurrentState.ToString()); } else { objectAnimated = new AnimatedSprite(animationFactory, "Idle"); } objectSprite = objectAnimated; objectSprite.Origin = Vector2.Zero; if (direction == (int)Direction.Right) { objectAnimated.Effect = SpriteEffects.None; } else { objectAnimated.Effect = SpriteEffects.FlipHorizontally; } }
public override void Initialize() { speed = 1; for (var i = 0; i < 64; i++) { posX[i] = position.X; posY[i] = position.Y; } spriteSheetData = new SpriteSheetData(16, 24, new List <string> { "Down", "DownRight", "Right", "UpRight", "Up", "UpLeft", "Left", "DownLeft" }, new List <int[]> { new[] { 0, 1 }, new[] { 2, 3 }, new[] { 4, 5 }, new[] { 6, 7 }, new[] { 8, 9 }, new[] { 10, 11 }, new[] { 12, 13 }, new[] { 14, 15 } }, new List <float> { 0.2f, 0.2f, 0.2f, 0.2f, 0.2f, 0.2f, 0.2f, 0.2f }, new List <bool> { true, true, true, true, true, true, true, true }); base.Initialize(); }
public void ShouldReadSpriteSheetFile() { string rawFile = Helpers.Helpers.LoadFile(@"Player04.png.meta"); SpriteSheetData spriteSheetData = SpriteParser.Parse(rawFile); spriteSheetData.FileFormatVersion.Should().Be("2"); spriteSheetData.FileGuid.Should().Be("9a3cf21915996f441b213e88de546e32"); }
public void ShouldMapSpriteNames() { string rawFile = Helpers.Helpers.LoadFile(@"Player04.png.meta"); SpriteSheetData spriteSheetData = SpriteParser.Parse(rawFile); spriteSheetData.NamesMap.Should().HaveCount(66); spriteSheetData.NamesMap["PL04_Left_Walk0"].Should().Be("21300000"); spriteSheetData.NamesMap["PL04_DownRight_Walk0"].Should().Be("21300022"); }
public void ShouldPopulatePivot() { string rawFile = Helpers.Helpers.LoadFile(@"Player04.png.meta"); SpriteSheetData spriteSheetData = SpriteParser.Parse(rawFile); SpriteData sd = spriteSheetData.SpritesMap["PL04_Left_Walk0"]; sd.Pivot.X.Should().Be(0.5f); sd.Pivot.Y.Should().Be(0); }
public void ShouldGetAnimationFramesATTStab() { string rawFile = Helpers.Helpers.LoadFile(@"Player04.png.meta"); SpriteSheetData spriteSheetData = SpriteParser.Parse(rawFile); List <string> frames = spriteSheetData.GetAnimationFrames("PL04_UpLeft_ATTStab").ToList(); frames.Should().HaveCount(2); frames[0].Should().Be("PL04_UpLeft_ATTStab1"); frames[1].Should().Be("PL04_UpLeft_ATTStab2"); }
public void ShouldGetAnimationFramesDownRight() { string rawFile = Helpers.Helpers.LoadFile(@"Player04.png.meta"); SpriteSheetData spriteSheetData = SpriteParser.Parse(rawFile); List <string> frames = spriteSheetData.GetAnimationFrames("PL04_DownRight_Walk").ToList(); frames.Should().HaveCount(3); frames[0].Should().Be("PL04_DownRight_Walk0"); frames[1].Should().Be("PL04_DownRight_Walk1"); frames[2].Should().Be("PL04_DownRight_Walk2"); }
public void ShouldPopulateRect() { string rawFile = Helpers.Helpers.LoadFile(@"Player04.png.meta"); SpriteSheetData spriteSheetData = SpriteParser.Parse(rawFile); SpriteData sd = spriteSheetData.SpritesMap["PL04_Left_Walk0"]; sd.Rect.X.Should().Be(5); sd.Rect.Y.Should().Be(473); sd.Rect.Width.Should().Be(10); sd.Rect.Height.Should().Be(35); }
internal Dictionary <string, PixelSet> CutFrames(SpriteSheetData spriteSheetData) { Dictionary <string, PixelSet> pixelSet = new Dictionary <string, PixelSet>(); Dictionary <string, SpriteData> spriteFrames = spriteSheetData.SpritesMap; foreach (KeyValuePair <string, SpriteData> kvp in spriteFrames) { PixelSet set = Cut(kvp.Value.Rect); pixelSet.Add(kvp.Key, set); } return(pixelSet); }
public override void Initialize() { spriteSheetData = new SpriteSheetData(16, 24, new List <string> { "Down", "DownRight", "Right", "UpRight", "Up", "UpLeft", "Left", "DownLeft" }, new List <int[]> { new[] { 0, 1 }, new[] { 2, 3 }, new[] { 4, 5 }, new[] { 6, 7 }, new[] { 8, 9 }, new[] { 10, 11 }, new[] { 12, 13 }, new[] { 14, 15 } }, new List <float> { 0.2f, 0.2f, 0.2f, 0.2f, 0.2f, 0.2f, 0.2f, 0.2f }, new List <bool> { true, true, true, true, true, true, true, true }); }
private static GameAsset LoadSpriteSheet(SpriteSheetData sheet_data) { var sheet = new SpriteSheet(sheet_data.ImageData, sheet_data.ImageWidth, sheet_data.ImageHeight, sheet_data.CellSize) { Id = sheet_data.Id }; if (sheet_data.SpriteMap.Count > 0) { foreach (var sprite_pair in sheet_data.SpriteMap) { sheet.MapNamedSprite(sprite_pair.Key, sprite_pair.Value); } } return(sheet); }
public void ShouldCreateSprite() { string rawFile = Helpers.Helpers.LoadFile(@"Player04.png.meta"); SpriteSheetData spriteSheetData = SpriteParser.Parse(rawFile); spriteSheetData.SpritesMap.Should().HaveCount(64); SpriteData sd = spriteSheetData.SpritesMap["PL04_Left_Walk0"]; sd.Name.Should().Be("PL04_Left_Walk0"); sd.SpriteID.Should().Be("2f9a5b012f5af2747902bba879ef1838"); sd.Alignment.Should().Be(7); sd = spriteSheetData.SpritesMap["PL04_DownLeft_ATTSwipe1"]; sd.Name.Should().Be("PL04_DownLeft_ATTSwipe1"); sd.SpriteID.Should().Be("a358f9531f7322f4881de90b59bd397d"); sd.Alignment.Should().Be(9); }
public static SpriteSheetData GetSpriteData(string path, TextAsset spriteSheetDataFile) { if (spriteSheetDataFile != null) { string[] entries = spriteSheetDataFile.text.Split( new string[] { "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); string entry = entries.FirstOrDefault(x => x.StartsWith(Path.GetFileName(path))); if (!string.IsNullOrEmpty(entry)) { string[] entryData = entry.Split(','); var data = new SpriteSheetData(); try { float width = int.Parse(entryData[1]); float height = int.Parse(entryData[2]); data.Size = new Vector2(width, height); // number of frames is optional uint frames = 0; if (entryData.Length > 3) { if (uint.TryParse(entryData[3], out frames)) { data.Frames = frames; } } return(data); } catch { Debug.LogError("Invalid sprite data at line: " + Array.IndexOf(entries, entry) + ", (" + entry + ")"); } } } return(null); }
public static void Main(string[] args) { var parameters = new SpriteSheetData { Id = 1, SpriteSheetTextureName = "characters", Frames = new SpriteSheetFrame[73] }; for (int i = 0; i < 23; i++) { parameters.Frames[i] = new SpriteSheetFrame(i * 32, 0, 32, 32); } for (int i = 0; i < 23; i++) { parameters.Frames[i + 23] = new SpriteSheetFrame(i * 32, 1, 32, 32); } for (int i = 0; i < 23; i++) { parameters.Frames[i + 46] = new SpriteSheetFrame(i * 32, 2, 32, 32); } for (int i = 0; i < 4; i++) { parameters.Frames[i + 69] = new SpriteSheetFrame(i * 32, 3, 32, 32); } string json = JsonConvert.SerializeObject(parameters, Formatting.Indented); var animDefs = new AnimationDefinitionData[11]; var animDef = new AnimationDefinitionData("WalkingBabyRight") { Frames = new AnimationFrame[18] }; for (int i = 0; i < 18; i++) { animDef.Frames[i] = new AnimationFrame(1, i, 200.0d); } animDefs[0] = animDef; animDef = new AnimationDefinitionData("WalkingBabyLeft") { Frames = new AnimationFrame[18] }; for (int i = 0; i < 18; i++) { animDef.Frames[i] = new AnimationFrame(1, i, 200.0d, SpriteEffects.FlipHorizontally); } animDefs[1] = animDef; animDef = new AnimationDefinitionData("WalkingBabyUp") { Frames = new AnimationFrame[5] }; for (int i = 0; i < 5; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 18, 200.0d, SpriteEffects.FlipHorizontally); } animDefs[2] = animDef; animDef = new AnimationDefinitionData("WalkingKingRight") { Frames = new AnimationFrame[18] }; for (int i = 0; i < 18; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 23, 200.0d); } animDefs[3] = animDef; animDef = new AnimationDefinitionData("WalkingKingLeft") { Frames = new AnimationFrame[18] }; for (int i = 0; i < 18; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 23, 200.0d, SpriteEffects.FlipHorizontally); } animDefs[4] = animDef; animDef = new AnimationDefinitionData("WalkingKingUp") { Frames = new AnimationFrame[5] }; for (int i = 0; i < 5; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 23 + 18, 200.0d, SpriteEffects.FlipHorizontally); } animDefs[5] = animDef; animDef = new AnimationDefinitionData("WalkingExplorerRight") { Frames = new AnimationFrame[18] }; for (int i = 0; i < 18; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 46, 200.0d); } animDefs[6] = animDef; animDef = new AnimationDefinitionData("WalkingExplorerLeft") { Frames = new AnimationFrame[18] }; for (int i = 0; i < 18; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 46, 200.0d, SpriteEffects.FlipHorizontally); } animDefs[7] = animDef; animDef = new AnimationDefinitionData("WalkingExplorerUp") { Frames = new AnimationFrame[5] }; for (int i = 0; i < 5; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 46 + 18, 200.0d, SpriteEffects.FlipHorizontally); } animDefs[8] = animDef; animDef = new AnimationDefinitionData("MovingSnakeRight") { Frames = new AnimationFrame[4] }; for (int i = 0; i < 4; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 69, 200.0d); } animDefs[9] = animDef; animDef = new AnimationDefinitionData("MovingSnakeLeft") { Frames = new AnimationFrame[4] }; for (int i = 0; i < 4; i++) { animDef.Frames[i] = new AnimationFrame(1, i + 69, 200.0d, SpriteEffects.FlipHorizontally); } animDefs[10] = animDef; json = JsonConvert.SerializeObject(animDefs, Formatting.Indented); }
public static void ApplyDefaultTextureSettings( SpriteSettings prefs, bool changePivot, bool changePackingTag) { if (prefs == null) { return; } foreach (var obj in Selection.objects) { if (!AssetDatabase.Contains(obj)) { continue; } string path = AssetDatabase.GetAssetPath(obj); var importer = AssetImporter.GetAtPath(path) as TextureImporter; if (importer == null) { continue; } // Try to slice it var fileName = Path.GetFileNameWithoutExtension(path); SpriteSheetData spriteSheetData = GetSpriteData(path, prefs.SpritesheetDataFile); // When we have text file data if (spriteSheetData != null) { var gridRects = InternalSpriteUtility.GenerateGridSpriteRectangles( AssetDatabase.LoadAssetAtPath(path, typeof(Texture2D)) as Texture2D, Vector2.zero, spriteSheetData.Size, Vector2.zero); var spriteSheet = importer.spritesheet ?? new SpriteMetaData[gridRects.Length]; if (importer.spritesheet != null) { spriteSheet = spriteSheet.Concat(new SpriteMetaData[Mathf.Max(0, gridRects.Length - importer.spritesheet.Length)]).ToArray(); } for (var i = 0; i < spriteSheet.Length; i++) { bool sliceExists = importer.spritesheet != null && i < importer.spritesheet.Length; bool changed = changePivot || !(sliceExists); spriteSheet[i] = new SpriteMetaData { alignment = changed ? (int)prefs.Pivot : spriteSheet[i].alignment, pivot = changed ? prefs.CustomPivot : spriteSheet[i].pivot, name = sliceExists ? spriteSheet[i].name : fileName + "_" + Array.IndexOf(gridRects, gridRects[i]), rect = gridRects[i] }; } // If we don't do this it won't update the new sprite meta data importer.spriteImportMode = SpriteImportMode.Single; importer.spriteImportMode = SpriteImportMode.Multiple; if (spriteSheetData.Frames > 0) { importer.spritesheet = spriteSheet.Take((int)spriteSheetData.Frames).ToArray(); } else { importer.spritesheet = spriteSheet; } } else if (importer.spritesheet != null && changePivot) // for existing sliced sheets without data in the text file and wantint to change pivot { var spriteSheet = new SpriteMetaData[importer.spritesheet.Length]; for (int i = 0; i < importer.spritesheet.Length; i++) { var spriteMetaData = importer.spritesheet[i]; spriteMetaData.alignment = (int)prefs.Pivot; spriteMetaData.pivot = prefs.CustomPivot; spriteSheet[i] = spriteMetaData; } importer.spritesheet = spriteSheet; } else { importer.spriteImportMode = SpriteImportMode.Single; } TextureImporterSettings settings = new TextureImporterSettings(); importer.ReadTextureSettings(settings); settings.filterMode = prefs.FilterMode; settings.wrapMode = prefs.WrapMode; settings.mipmapEnabled = prefs.GenerateMipMaps; settings.textureFormat = prefs.TextureFormat; settings.maxTextureSize = prefs.MaxSize; settings.spritePixelsPerUnit = prefs.PixelsPerUnit; settings.spriteExtrude = (uint)Mathf.Clamp(prefs.ExtrudeEdges, 0, 32); settings.spriteMeshType = prefs.SpriteMeshType; if (changePivot) { settings.spriteAlignment = (int)prefs.Pivot; if (prefs.Pivot == SpriteAlignment.Custom) { settings.spritePivot = prefs.CustomPivot; } } if (changePackingTag) { importer.spritePackingTag = prefs.PackingTag; } importer.SetTextureSettings(settings); #if UNITY_5_0 importer.SaveAndReimport(); #else AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate); #endif EditorUtility.SetDirty(obj); } }
private void InportFromUnity(object sender, EventArgs e) { string filename = @"C:\GitHub\eWolfPixel\Pixel\eWolfUnity3DParser.UnitTests\TestingData\Player04.png"; SpriteSheetData spriteSheetData = SpriteParser.ParseLoad(filename + ".meta"); // spin up a bitmap reader to read the image and create pixelSets for each sprite. PixelSet image = ServiceLocator.Instance.GetService <IPixelLoader>().LoadImage(filename); Dictionary <string, PixelSet> frames = image.CutFrames(spriteSheetData); ProjectHolder projectHolder = ServiceLocator.Instance.GetService <ProjectHolder>(); AnimationDetails ad = new AnimationDetails($"Walk", "\\Root\\Char1"); projectHolder.Items.Add(ad); ad.PostLoadFix(); // PL04_DownLeft_Walk0 List <PixelSet> leftWalk = new List <PixelSet>(); leftWalk.Add(frames["PL04_Left_Walk0"]); leftWalk.Add(frames["PL04_Left_Walk1"]); leftWalk.Add(frames["PL04_Left_Walk0"]); leftWalk.Add(frames["PL04_Left_Walk2"]); AddFrameToAnim(Directions8Way.Left, ad, leftWalk); List <PixelSet> downLeftWalk = new List <PixelSet>(); downLeftWalk.Add(frames["PL04_DownLeft_Walk0"]); downLeftWalk.Add(frames["PL04_DownLeft_Walk1"]); downLeftWalk.Add(frames["PL04_DownLeft_Walk0"]); downLeftWalk.Add(frames["PL04_DownLeft_Walk2"]); AddFrameToAnim(Directions8Way.DownLeft, ad, downLeftWalk); List <PixelSet> downRightWalk = new List <PixelSet>(); downRightWalk.Add(frames["PL04_DownRight_Walk0"]); downRightWalk.Add(frames["PL04_DownRight_Walk1"]); downRightWalk.Add(frames["PL04_DownRight_Walk0"]); downRightWalk.Add(frames["PL04_DownRight_Walk2"]); AddFrameToAnim(Directions8Way.DownRight, ad, downRightWalk); List <PixelSet> rightWalk = new List <PixelSet>(); rightWalk.Add(frames["PL04_Right_Walk0"]); rightWalk.Add(frames["PL04_Right_Walk1"]); rightWalk.Add(frames["PL04_Right_Walk0"]); rightWalk.Add(frames["PL04_Right_Walk2"]); AddFrameToAnim(Directions8Way.Right, ad, rightWalk); List <PixelSet> upLeftWalk = new List <PixelSet>(); upLeftWalk.Add(frames["PL04_UpLeft_Walk0"]); upLeftWalk.Add(frames["PL04_UpLeft_Walk1"]); upLeftWalk.Add(frames["PL04_UpLeft_Walk0"]); upLeftWalk.Add(frames["PL04_UpLeft_Walk2"]); AddFrameToAnim(Directions8Way.UpLeft, ad, upLeftWalk); List <PixelSet> upWalk = new List <PixelSet>(); upWalk.Add(frames["PL04_Up_Walk0"]); upWalk.Add(frames["PL04_Up_Walk1"]); upWalk.Add(frames["PL04_Up_Walk0"]); upWalk.Add(frames["PL04_Up_Walk2"]); AddFrameToAnim(Directions8Way.Up, ad, upWalk); List <PixelSet> downWalk = new List <PixelSet>(); downWalk.Add(frames["PL04_Down_Walk0"]); downWalk.Add(frames["PL04_Down_Walk1"]); downWalk.Add(frames["PL04_Down_Walk0"]); downWalk.Add(frames["PL04_Down_Walk2"]); AddFrameToAnim(Directions8Way.Down, ad, downWalk); List <PixelSet> upRightWalk = new List <PixelSet>(); upRightWalk.Add(frames["PL04_UpRight_Walk0"]); upRightWalk.Add(frames["PL04_UpRight_Walk1"]); upRightWalk.Add(frames["PL04_UpRight_Walk0"]); upRightWalk.Add(frames["PL04_UpRight_Walk2"]); AddFrameToAnim(Directions8Way.UpRight, ad, upRightWalk); ad.Save(projectHolder.ProjectPath); }
// Start is called before the first frame update private void Awake() { EntityManager manager = World.DefaultGameObjectInjectionWorld.EntityManager; EntityArchetype archetype = manager.CreateArchetype( typeof(Translation), typeof(UniqueAnimationData), typeof(AnimationClip), typeof(SpriteSheetData), typeof(MeshData) ); NativeArray <Entity> entities = new NativeArray <Entity>(10000, Allocator.Temp); manager.CreateEntity(archetype, entities); MeshData mesh = new MeshData(1, 1, 0); foreach (Entity e in entities) { manager.SetComponentData(e, new Translation() { Value = new float3(Random.Range(-11f, 10.5f), Random.Range(-5f, 4.5f), 0) }); manager.SetSharedComponentData(e, mesh); // //Calculate uvs // //Width and height will be static per sheet, TODO cache these SpriteSheetData spriteSheetData = new SpriteSheetData() { TotalCells = 16, CellsPerRow = 4, GridUVs = new Vector2() }; // //Calculate uvs // //Width and height will be static per sheet, TODO cache these float uvWidth = 1f / spriteSheetData.CellsPerRow; float uvHeight = 1 / math.ceil(((float)spriteSheetData.TotalCells / (float)spriteSheetData.CellsPerRow)); spriteSheetData.GridUVs.x = uvWidth; spriteSheetData.GridUVs.y = uvHeight; manager.SetComponentData(e, new SpriteSheetData() { TotalCells = spriteSheetData.TotalCells, CellsPerRow = spriteSheetData.CellsPerRow, GridUVs = spriteSheetData.GridUVs }); var animationClips = manager.AddBuffer <AnimationClip>( e); //TODO make this a shared buffer between all meeple entities if possible?? AnimationClip walkDown = new AnimationClip(AnimationDirection.Right, 0, 4, .25f); AnimationClip walkLeft = new AnimationClip(AnimationDirection.Right, 4, 4, 1); animationClips.Add(walkDown); animationClips.Add(walkLeft); manager.SetComponentData(e, new UniqueAnimationData() { currentClip = Random.Range(0, 2) == 0 ? walkDown : walkLeft, currentFrame = Random.Range(0, 4), FrameTimer = Random.Range(0f, 1f), offsetUVs = new Vector2() }); } entities.Dispose(); }