private void Load() { Spriter = LoadContent <Spriter>(scmlPath); if (Spriter.Atlases == null || Spriter.Atlases.Length == 0) { return; } atlases = new Dictionary <int, SpriterAtlas>(); infos = new Dictionary <SpriterAtlas, Dictionary <string, ImageInfo> >(); foreach (var atlasRef in Spriter.Atlases) { String path = FormatPath(atlasRef.Name); SpriterAtlas atlas = content.Load <SpriterAtlas>(path); atlases[atlasRef.Id] = atlas; Dictionary <string, ImageInfo> imageInfos = new Dictionary <string, ImageInfo>(); infos[atlas] = imageInfos; foreach (ImageInfo info in atlas.ImageInfos) { imageInfos[info.Name] = info; } } }
private void GetUsedFiles(Spriter.Animation animation, HashSet<Spriter.File> files) { foreach(var timeline in animation.Timelines) { GetUsedFiles(timeline, files); } }
private static IEnumerable <SdnFileEntry> LoadAssets(Spriter spriter, string rootFolder, SpriterDotNetBehaviour spriterDotNetBehaviour, bool andAssignAudioClips) { for (int i = 0; i < spriter.Folders.Length; ++i) { SpriterFolder folder = spriter.Folders[i]; for (int j = 0; j < folder.Files.Length; ++j) { SpriterFile file = folder.Files[j]; string path = rootFolder; path += "/"; path += file.Name; SdnFileEntry entry = new SdnFileEntry { FolderId = folder.Id, FileId = file.Id }; if (file.Type == SpriterFileType.Sound) { spriterDotNetBehaviour.StartCoroutine(GetAudioClip(entry, path, spriterDotNetBehaviour, andAssignAudioClips)); } else { entry.Sprite = LoadNewSprite(path); } yield return(entry); } } }
private static SpriterEntity FetchOrCacheSpriterEntityDataFromFile(string path, string entityName, SpriterDotNetBehaviour spriterDotNetBehaviour) { if (SpriterEntityDatas.TryGetValue(new PathToEntity(path, entityName), out SpriterEntityData cachedEntityData)) { spriterDotNetBehaviour.SpriterData = cachedEntityData.data; return(cachedEntityData.entity); } string data = File.ReadAllText(path); Spriter spriter = SpriterReader.Default.Read(data); string rootFolder = Path.GetDirectoryName(path); SpriterEntity requestedEntity = null; foreach (SpriterEntity entity in spriter.Entities) { bool isRequestedEntity = entity.Name == entityName; SpriterData spriterData = CreateSpriterData(spriter, rootFolder, spriterDotNetBehaviour, isRequestedEntity); SpriterEntityData entityData = new SpriterEntityData(entity, spriterData); SpriterEntityDatas[new PathToEntity(path, entity.Name)] = entityData; if (isRequestedEntity) { requestedEntity = entity; spriterDotNetBehaviour.SpriterData = spriterData; } } return(requestedEntity); }
private void Load() { string data = File.ReadAllText(content.RootDirectory + "/" + scmlPath + ".scml"); Spriter = SpriterReader.Default.Read(data); if (Spriter.Atlases == null || Spriter.Atlases.Length == 0) { return; } atlases = new Dictionary <int, TexturePackerSheet>(); infos = new Dictionary <TexturePackerSheet, Dictionary <string, ImageInfo> >(); foreach (var atlasRef in Spriter.Atlases) { string path = FormatPath(atlasRef.Name); string atlasData = File.ReadAllText(content.RootDirectory + "/" + path); TexturePackerSheet atlas = TexturePackerSheetReader.Read(atlasData); atlases[atlasRef.Id] = atlas; Dictionary <string, ImageInfo> imageInfos = new Dictionary <string, ImageInfo>(); infos[atlas] = imageInfos; foreach (ImageInfo info in atlas.ImageInfos) { imageInfos[info.Name] = info; } } }
private static void CreateSprites(SpriterEntity entity, ChildData cd, Spriter spriter, GameObject parent) { int maxObjects = GetDrawablesCount(entity); cd.Sprites = new GameObject[maxObjects]; cd.SpritePivots = new GameObject[maxObjects]; cd.SpriteTransforms = new Transform[maxObjects]; cd.SpritePivotTransforms = new Transform[maxObjects]; for (int i = 0; i < maxObjects; ++i) { GameObject pivot = new GameObject("Pivot " + i); GameObject child = new GameObject("Sprite " + i); pivot.SetParent(parent); child.SetParent(pivot); cd.SpritePivots[i] = pivot; cd.Sprites[i] = child; cd.SpritePivotTransforms[i] = pivot.transform; cd.SpriteTransforms[i] = child.transform; child.transform.localPosition = Vector3.zero; child.AddComponent <SpriteRenderer>(); } }
private static int GetDrawablesCount(SpriterAnimation animation, SpriterMainlineKey key) { int drawablesCount = 0; foreach (SpriterObjectRef obj in key.ObjectRefs) { SpriterTimeline timeline = animation.Timelines[obj.TimelineId]; if (timeline.ObjectType == SpriterObjectType.Sprite) { ++drawablesCount; } else if (timeline.ObjectType == SpriterObjectType.Entity) { Spriter spriter = animation.Entity.Spriter; HashSet <SpriterAnimation> animations = new HashSet <SpriterAnimation>(); foreach (SpriterTimelineKey timelineKey in timeline.Keys) { SpriterObject spriterObject = timelineKey.ObjectInfo; SpriterAnimation newAnim = spriter.Entities[spriterObject.EntityId].Animations[spriterObject.AnimationId]; if (!animations.Contains(newAnim)) { animations.Add(newAnim); } } IEnumerable <int> drawableCount = animations.Select <SpriterAnimation, int>(GetDrawablesCount); drawablesCount += drawableCount.Max(); } } return(drawablesCount); }
private void GetUsedFiles(Spriter.Entity entity, HashSet<Spriter.File> files) { foreach(var animation in entity.Animations) { GetUsedFiles(animation, files); } }
private static IEnumerable <SdnFileEntry> LoadAssets(Spriter spriter, string rootFolder) { for (int i = 0; i < spriter.Folders.Length; ++i) { SpriterFolder folder = spriter.Folders[i]; for (int j = 0; j < folder.Files.Length; ++j) { SpriterFile file = folder.Files[j]; string path = rootFolder; path += "/"; path += file.Name; SdnFileEntry entry = new SdnFileEntry { FolderId = folder.Id, FileId = file.Id }; if (file.Type == SpriterFileType.Sound) { entry.Sound = ContentLoader.Load <AudioClip>(path); } else { entry.Sprite = ContentLoader.Load <Sprite>(path); } yield return(entry); } } }
public void Init_IfCalledOnASpriterWithAFullHierarchy_SetsTimelineKeyObjectInfosToThePivotsFromTheFiles() { var spriter = new Spriter() { Folders = new[] { new SpriterFolder() { Id = 0, Files = new[] { new SpriterFile() { Id = 0, PivotX = 0.25f, PivotY = 0.75f } } } }, Entities = new[] { new SpriterEntity() { Animations = new [] { new SpriterAnimation() { Timelines = new [] { new SpriterTimeline() { Keys = new[] { new SpriterTimelineKey() { ObjectInfo = new SpriterObject() { FolderId = 0, FileId = 0, PivotX = float.NaN, PivotY = float.NaN } } } } } } } } } }; SpriterParser.Init(spriter); var objectInfo = spriter.Entities.First().Animations.First().Timelines.First().Keys.First().ObjectInfo; objectInfo.PivotX.Should().Be(0.25f); objectInfo.PivotY.Should().Be(0.75f); }
protected override void LoadContent() { base.LoadContent(); spriteBatch = new SpriteBatch(GraphicsDevice); spriteFont = Content.Load <SpriteFont>(FontName); Vector2 charPosition = new Vector2(Width / 2.0f, Height / 1.5f); foreach (var pair in Scmls) { string scmlPath = pair.Key; string spriterName = pair.Value; string data = File.ReadAllText(scmlPath); Spriter spriter = SpriterParser.Parse(data); foreach (SpriterEntity entity in spriter.Entities) { var animator = new MonogameSpriterAnimator(entity, charPosition, spriteBatch, GraphicsDevice); RegisterTextures(animator, spriter, spriterName); animators.Add(animator); } } currentAnimator = animators.First(); currentAnimator.EventTriggered += CurrentAnimator_EventTriggered; }
public void Init_IfCalledOnASpriterWithAFullHierarchy_SetsTimelineKeyObjectInfosToThePivotsFromTheFiles() { var spriter = new Spriter() { Folders = new[] { new SpriterFolder() { Id = 0, Files = new[] { new SpriterFile() { Id = 0, PivotX = 0.25f, PivotY = 0.75f } } } }, Entities = new[] { new SpriterEntity() { Animations = new [] { new SpriterAnimation() { Timelines = new [] { new SpriterTimeLine() { Keys = new[] { new SpriterTimeLineKey() { ObjectInfo = new SpriterObjectInfo () { FolderId = 0, FileId = 0, PivotX = float.NaN, PivotY = float.NaN } } } } } } } } } }; SpriterParser.Init(spriter); var objectInfo = spriter.Entities.First().Animations.First().Timelines.First().Keys.First().ObjectInfo; objectInfo.PivotX.Should().Be(0.25f); objectInfo.PivotY.Should().Be(0.75f); }
private static SpriterData CreateSpriterData(Spriter spriter, string rootFolder, SpriterDotNetBehaviour spriterDotNetBehaviour, bool andAssignAudioClips) { SpriterData data = ScriptableObject.CreateInstance <SpriterData>(); data.Spriter = spriter; data.FileEntries = LoadAssets(spriter, rootFolder, spriterDotNetBehaviour, andAssignAudioClips).ToArray(); return(data); }
public virtual Spriter Parse(string data) { data = FixBadNanValue(data); XmlSerializer serializer = new XmlSerializer(typeof(Spriter)); using (TextReader reader = new StringReader(data)) { Spriter spriter = serializer.Deserialize(reader) as Spriter; return(spriter); } }
private static SpriterData CreateSpriterData(Spriter spriter, string rootFolder, string name) { SpriterData data = ScriptableObject.CreateInstance <SpriterData>(); data.Spriter = spriter; data.FileEntries = LoadAssets(spriter, rootFolder).ToArray(); AssetDatabase.CreateAsset(data, rootFolder + "/" + name + ".asset"); AssetDatabase.SaveAssets(); return(data); }
//1. Parse out all used file/folder ids public CharacterMap BuildMap(Spriter.Entity entity, GameObject root) { var files = new HashSet<Spriter.File>(); GetUsedFiles(entity, files); //Build a character map from the used sprites var charMap = root.AddComponent<CharacterMap>(); foreach(var file in files) { var fileMap = new FileMap { FilePath = file.Name, Sprite = file.GetSprite() }; charMap.SetFile(file.Folder.Id, file.Id, fileMap); } return charMap; }
private static void CreateTags(Spriter spriter) { if (spriter.Tags == null) { return; } SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty tags = tagManager.FindProperty("tags"); foreach (SpriterElement tag in spriter.Tags) { AddTag(tags, tag.Name); } tagManager.ApplyModifiedProperties(); }
private static void CreatePoints(SpriterEntity entity, ChildData cd, Spriter spriter, GameObject parent) { GameObject pointRoot = new GameObject("Points"); pointRoot.SetParent(parent); int count = GetPointsCount(entity); cd.Points = new GameObject[count]; for (int i = 0; i < count; ++i) { GameObject point = new GameObject("Point " + i); point.SetParent(pointRoot); cd.Points[i] = point; } }
private static void CreateSpriter(string path) { string data = File.ReadAllText(path); Spriter spriter = SpriterReader.Default.Read(data); string rootFolder = Path.GetDirectoryName(path); string name = Path.GetFileNameWithoutExtension(path); SpriterData spriterData = CreateSpriterData(spriter, rootFolder, name); foreach (SpriterEntity entity in spriter.Entities) { GameObject go = new GameObject(entity.Name); GameObject sprites = new GameObject(ObjectNameSprites); GameObject metadata = new GameObject(ObjectNameMetadata); SpriterDotNetBehaviour behaviour = go.AddComponent <SpriterDotNetBehaviour>(); behaviour.UseNativeTags = UseNativeTags; if (HasSound(entity)) { go.AddComponent <AudioSource>(); } sprites.SetParent(go); metadata.SetParent(go); ChildData cd = new ChildData(); CreateSprites(entity, cd, spriter, sprites); CreateCollisionRectangles(entity, cd, spriter, metadata); CreatePoints(entity, cd, spriter, metadata); behaviour.EntityIndex = entity.Id; behaviour.enabled = true; behaviour.SpriterData = spriterData; behaviour.ChildData = cd; GameObject prefab = CreatePrefab(go, rootFolder); EntityImported(entity, prefab); } if (UseNativeTags) { CreateTags(spriter); } }
protected virtual void Init(Spriter spriter) { foreach (SpriterEntity entity in spriter.Entities) { entity.Spriter = spriter; if (entity.ObjectInfos == null) { entity.ObjectInfos = new SpriterObjectInfo[0]; } foreach (SpriterAnimation animation in entity.Animations) { animation.Entity = entity; InitInfos(animation); InitVarDefs(animation); } } }
/// <summary> /// LoadContent wird einmal pro Spiel aufgerufen und ist der Platz, wo /// Ihr gesamter Content geladen wird. /// </summary> protected override void LoadContent() { // Erstellen Sie einen neuen SpriteBatch, der zum Zeichnen von Texturen verwendet werden kann. spriteBatch = new SpriteBatch(GraphicsDevice); loader1 = new SpriterLoader(this); //player1 = new SpriterPlayer(Spriter.getSpriter("monster/basic.scml", loader1), 0, loader1); Spriter spriter = new Spriter("monster/basic.scml", loader1); player1 = new SpriterPlayer(spriter.getSpriterData(), 0, loader1); player1.setAnimation("dash", 0, 0); player1.setFrameSpeed(20); this.drawer = new SpriterDrawer(this.graphics); this.drawer.batch = this.spriteBatch; this.drawer.loader = this.loader1; }
private void RegisterTextures(MonogameSpriterAnimator animator, Spriter spriter, string spriterName) { foreach (SpriterFolder folder in spriter.Folders) { foreach (SpriterFile file in folder.Files) { string path = FormatPath(folder, file, spriterName); if (file.Type == SpriterFileType.Sound) { SoundEffect sound = LoadContent <SoundEffect>(path); animator.Register(folder.Id, file.Id, sound); } else { Texture2D texture = LoadContent <Texture2D>(path); if (texture != null) { animator.Register(folder.Id, file.Id, texture); } } } } }
public void Preprocess(Spriter spriter) { Init(spriter); }
private void RegisterTextures(MonogameSpriterAnimator animator, Spriter spriter, string spriterName) { foreach (SpriterFolder folder in spriter.Folders) { foreach (SpriterFile file in folder.Files) { string path = FormatPath(folder, file, spriterName); Texture2D texture = null; try { texture = Content.Load<Texture2D>(path); } catch { Debug.WriteLine("Missing Texture: " + path); } if (texture == null) continue; animator.Register(folder.Id, file.Id, texture); } } }
public virtual void SetSprite(Spriter spriter, SpriterFolder folder, SpriterFile file, TSprite sprite) { IAssetProvider <TSprite> provider = SpriteProviders.GetOrCreate(spriter); provider.Set(folder.Id, file.Id, sprite); }
private void GetUsedFiles(Spriter.Timeline timeline, HashSet<Spriter.File> files) { files.UnionWith(timeline.Keys.OfType<Spriter.SpriteTimelineKey>().Select(k => k.File)); }
public virtual void SetSound(Spriter spriter, SpriterFolder folder, SpriterFile file, TSound sound) { IAssetProvider <TSound> provider = SoundProviders.GetOrCreate(spriter); provider.Set(folder.Id, file.Id, sound); }
private static void CreateCollisionRectangles(SpriterEntity entity, ChildData cd, Spriter spriter, GameObject parent) { if (entity.ObjectInfos == null) { return; } var boxes = entity.ObjectInfos.Where(o => o.ObjectType == SpriterObjectType.Box).ToList(); if (boxes.Count == 0) { return; } GameObject boxRoot = new GameObject("Boxes"); boxRoot.SetParent(parent); cd.BoxPivots = new GameObject[boxes.Count]; cd.Boxes = new GameObject[boxes.Count]; cd.BoxTransforms = new Transform[boxes.Count]; cd.BoxPivotTransforms = new Transform[boxes.Count]; for (int i = 0; i < boxes.Count; ++i) { GameObject pivot = new GameObject("Pivot " + i); GameObject child = new GameObject("Box " + i); pivot.SetParent(boxRoot); child.SetParent(pivot); cd.BoxPivots[i] = pivot; cd.Boxes[i] = child; cd.BoxPivotTransforms[i] = pivot.transform; cd.BoxTransforms[i] = child.transform; child.AddComponent <BoxCollider2D>(); } }
public IndexModel(IHostingEnvironment env) { _sprite = new Spriter(env.WebRootPath); }