Пример #1
0
    public static List<SpriteData> Parse(string path)
    {
        PListRoot root = PListRoot.Load(path);

        PListDict dic = (PListDict)root.Root;

        if (dic.ContainsKey("frames") && dic.ContainsKey("metadata"))
        {

            //second child content :the big picture information
            PListDict metaDic = (PListDict)dic["metadata"];

            PListString wh = (PListString)metaDic["size"];

            int w = GetFirstInter(wh);
            int h = GetSecondInter(wh);

            //-------------------------------------------------------------

            //first child content
            PListDict framesDic = (PListDict)dic["frames"];

            IEnumerable<string> keys = framesDic.Keys;

            List<SpriteData> sdList = new List<SpriteData>();

            foreach (string k in keys)
            {
                PListDict frameDic = (PListDict)framesDic[k];

                PListString temp = (PListString)frameDic["frame"];

                int x = GetFirstInter(temp);
                int y = GetSecondInter(temp);

                PListBool rotated = (PListBool)frameDic["rotated"];
                bool needRotate = rotated.Value;

                int width = !needRotate ? GetThirdInter(temp) : GetForthInter(temp);
                int height = !needRotate ? GetForthInter(temp) : GetThirdInter(temp);

                SpriteData sd = new SpriteData();
                sd.name = k;
                sd.x = x;
                sd.y = h - height - y;
                sd.width = width;
                sd.height = height;
                sd.rotated = rotated;

                sdList.Add(sd);
            }

            return sdList;
        }
        else
        {
            Debug.LogError("Not a Valid plist file:" + path);
            return null;
        }
    }
Пример #2
0
	public BlockTile(SpriteData left, SpriteData right, SpriteData top, SpriteData bottom, SpriteData front, SpriteData back){
		left_00 = left._00;
		left_01 = left._01;
		left_10 = left._10;
		left_11 = left._11;

		right_00 = right._00;
		right_01 = right._01;
		right_10 = right._10;
		right_11 = right._11;

		top_00 = top._00;
		top_01 = top._01;
		top_10 = top._10;
		top_11 = top._11;

		bottom_00 = bottom._00;
		bottom_01 = bottom._01;
		bottom_10 = bottom._10;
		bottom_11 = bottom._11;

		front_00 = front._00;
		front_01 = front._01;
		front_10 = front._10;
		front_11 = front._11;
			
		back_00 = back._00;
		back_01 = back._01;
		back_10 = back._10;
		back_11 = back._11;
	}
Пример #3
0
        public static void defineSprite(string name, int x, int y, int width, int height, int frameW, int frameH, int offsetX, int offsetY, int sheetW, int sheetH, bool doubled)
        {
            if (sprites == null) sprites = new Dictionary<string, SpriteData>();
            SpriteData data = new SpriteData(x, y, width, height, frameW, frameH, offsetX, offsetY, doubled);
            sprites.Add(name, data);
            RendererUniversal.sheetW = sheetW;
            RendererUniversal.sheetH = sheetH;

            if (name == "white") white = data;
        }
Пример #4
0
    public static void AtlasCreate()
    {
        string[] guids = Selection.assetGUIDs;
        for (int i = 0; i < guids.Length; i++)
        {
            string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]);
            Debug.Log(assetPath);
            string dictPath = Application.dataPath.Replace("Assets", assetPath);
            DirectoryInfo Dir = new DirectoryInfo(dictPath);
            string resPath = UGUIConfig.SpriteDir + Dir.Name;
            if (!Directory.Exists(resPath))
            {
                Directory.CreateDirectory(resPath);
            }

            FileInfo[] infos = Dir.GetFiles("*.png");
            if(infos.Length > 0)
            {
                string dicPath = infos[0].ToString().Remove(0, infos[0].ToString().IndexOf("Assets")).Replace("\\", "/");
                AtlasData atlasData = ScriptableObject.CreateInstance<AtlasData>();
                atlasData.spDataList = new List<SpriteData>();

                foreach (FileInfo f in infos) //查找文件
                {
                    int index = f.ToString().IndexOf("Assets");
                    string modPath = f.ToString().Remove(0, index);
                    modPath = modPath.Replace("\\", "/");

                    TextureImporter texImport = AssetImporter.GetAtPath(modPath) as TextureImporter;
                    texImport.textureType = TextureImporterType.Sprite;
                    texImport.spritePackingTag = new DirectoryInfo(Path.GetDirectoryName(modPath)).Name;
                    texImport.mipmapEnabled = false;
                    AssetDatabase.ImportAsset(modPath);

                    Sprite sprite = AssetDatabase.LoadAssetAtPath(modPath, typeof(Sprite)) as Sprite;
                    SpriteData data = new SpriteData(sprite.name, sprite);
                    atlasData.spDataList.Add(data);
                }
                string prePath = resPath + "/" + new DirectoryInfo(Path.GetDirectoryName(dicPath)).Name + ".asset";
                prePath = prePath.Substring(prePath.IndexOf("Assets"));
                AssetDatabase.CreateAsset(atlasData, prePath);
                AssetDatabase.Refresh();
            }
            else
            {
                Debug.LogError("文件夹下没有png文件!");
                return;
            }
        }
    }
Пример #5
0
 /// <summary>
 /// 將字典傳入,依json表設定資料
 /// </summary>
 public static void SetData(Dictionary<string, SpriteData> _dic)
 {
     string jsonStr = Resources.Load<TextAsset>("Json/Sprite").ToString();
     JsonData jd = JsonMapper.ToObject(jsonStr);
     JsonData items = jd["Sprite"];
     for (int i = 0; i < items.Count; i++)
     {
         SpriteData data = new SpriteData(items[i]);
         string id = data.Name;
         if (_dic.ContainsKey(id))
         {
             Debug.LogWarning("Sprite表的ID重複");
             break;
         }
         _dic.Add(id, data);
     }
 }
Пример #6
0
        public void ShowFiefInterface(ScreenBase screenBase, Hero hero, Action refreshAction)
        {
            this._screenBase = screenBase;

            SpriteData spriteData = UIResourceManager.SpriteData;
            TwoDimensionEngineResourceContext resourceContext = UIResourceManager.ResourceContext;
            ResourceDepot resourceDepot = UIResourceManager.UIResourceDepot;

            spriteData.SpriteCategories["ui_encyclopedia"].Load(resourceContext, resourceDepot);
            spriteData.SpriteCategories["ui_kingdom"].Load(resourceContext, resourceDepot);

            _layer = new GauntletLayer(211);
            _layer.InputRestrictions.SetInputRestrictions(true, InputUsageMask.All);
            _layer.Input.RegisterHotKeyCategory(HotKeyManager.GetCategory("GenericCampaignPanelsGameKeyCategory"));
            _layer.IsFocusLayer = true;
            ScreenManager.TrySetFocus(_layer);
            screenBase.AddLayer(_layer);
            _vm    = new GrantFiefVM(hero, () => this.OnFinalize(refreshAction));
            _movie = _layer.LoadMovie("GrantFief", _vm);
        }
Пример #7
0
        private void applyPolygonData()
        {
            if (this.currentPolygonType == PolygonType.None)
            {
                return;
            }

            IShaderData shaderData;

            switch (this.currentPolygonType)
            {
            case PolygonType.Sprite:
                shaderData = new SpriteData(this.localTransform, this.textureId, this.color, this.clipArea);
                break;

            case PolygonType.Orbit:
                shaderData = new OrbitData(this.minRadius, this.maxRadius, this.color, this.localTransform, this.sprite);
                break;

            case PolygonType.Sdf:
                if (!this.smoothDist.HasValue)
                {
                    throw new InvalidOperationException("Pixel size not defined");
                }
                shaderData = new SdfData(this.localTransform, this.textureId, this.color, this.smoothDist.Value, this.clipArea);
                break;

            default:
                throw new NotImplementedException(this.currentPolygonType.ToString());
            }

            foreach (var layer in this.vertexData)
            {
                this.polygons.Add(new PolygonData(layer.Key, shaderData, layer.Value));
            }

            //clean up
            this.vertexData     = new Dictionary <float, List <float> >();
            this.localTransform = Matrix4.Identity;
            this.smoothDist     = null;
        }
    // Cuts the sprite into its sub-sprites
    public static List <SpriteMetaData> CutSprite(Texture2D sprite, List <SpriteData> cutting_data)
    {
        // Import image
        string          image_path = AssetDatabase.GetAssetPath(sprite);
        TextureImporter importer   = AssetImporter.GetAtPath(image_path) as TextureImporter;

        importer.spriteImportMode = SpriteImportMode.Multiple;

        // Prepare spritesheet
        List <SpriteMetaData> sheet = new List <SpriteMetaData>();
        int source_y = sprite.height;

        // For each sub-sprite
        for (int i = 0; i < cutting_data.Count; i++)
        {
            // Create new sprite metadata
            SpriteMetaData s  = new SpriteMetaData();
            SpriteData     sd = cutting_data[i];

            s.name  = sd.name;
            s.pivot = new Vector2(sd.offsetX, sd.offsetY);
            s.rect  = new Rect(sd.x, source_y - sd.y - sd.height, sd.width, sd.height);

            s.alignment = 0;
            s.border    = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);

            sheet.Add(s);
        }


        // Apply spritesheet
        importer.spritesheet = sheet.ToArray();

        // Apply import settings
        AssetDatabase.StartAssetEditing();
        AssetDatabase.ImportAsset(importer.assetPath);
        AssetDatabase.StopAssetEditing();

        // Return spritesheet
        return(sheet);
    }
Пример #9
0
        public Mouse()
        {
            Transform
            .Create(this);

            Sprite
            .Create(this)
            .SetImage("rufzeichen", 2)
            .SetFrame(1)
            .SetRenderStage(RenderStage.PostBloom);

            SpriteData
            .Create(this)
            .SetOffset(-20, -20);

            MouseFollower
            .Create(this);

            InteractiveVisibility
            .Create(this);
        }
Пример #10
0
 public FairyObject(Room room, Vector2 pos) : base(room, pos, new Vector2(0, 0), new Vector2(32, 32))
 {
     life           = 3;
     cooldown       = 60;
     moving         = true;
     Position      -= new Vector2(0, 16);
     facingRight    = true;
     Sprite         = new SpriteData();
     Sprite.Size    = new Vector2(32, 32);
     animationindex = -16;
     goingUp        = true;
     Hitbox         = new Rectangle(0, 0, 32, 48);
     Sprite.Layer   = Layer;
     fairySprite    = null;
     AssetManager.RequestTexture("fairy", (frames) =>
     {
         fairySprite = frames;
         Sprite.Change(fairySprite);
         Sprite.Speed = 1f / 10;
     });
 }
Пример #11
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            this.spriteBatch = new SpriteBatch(GraphicsDevice);
            this.spriteData  = new SpriteData();

            this.background = Content.Load <Texture2D>(@"Content\Background");

            SpriteInitializer.InitializeSprites(this.spriteData, Content);

            this.emoticon   = new Emoticon("OnfireEmoticon");
            this.sprite     = spriteData.DuplicateSprite(this.emoticon.Name);
            this.uiEmoticon = new UIEmoticon(this.sprite, this.emoticon);
            this.uiEmoticon.Sprite.AnimationIndex = 3;

            this.hero   = new Hero("LightHero");
            this.sprite = spriteData.DuplicateSprite(this.hero.Name);
            this.uiHero = new UIHero(this.sprite, this.hero);

            StartGame();
        }
Пример #12
0
        public static void Load()
        {
            var rd = UIResourceManager.UIResourceDepot;
            var rc = UIResourceManager.ResourceContext;
            var sd = UIResourceManager.SpriteData;

            var spriteData = new SpriteData("entrepreneur-ui-1");

            spriteData.Load(rd);
            var texture = new TaleWorlds.TwoDimension.Texture((TaleWorlds.TwoDimension.ITexture)
                                                              new EngineTexture(
                                                                  TaleWorlds.Engine.Texture.CreateTextureFromPath(
                                                                      @"../../Modules/Entrepreneur/GUI/SpriteSheets/", "entrepreneur-ui-1.png")
                                                                  )
                                                              );

            sd.SpriteCategories.Add("entrepreneur-ui-1", spriteData.SpriteCategories["entrepreneur-ui-1"]);


            sd.SpritePartNames.Add("FinancesIcon", spriteData.SpritePartNames["FinancesIcon"]);
            sd.SpriteNames.Add("FinancesIcon", new SpriteGeneric("FinancesIcon", spriteData.SpritePartNames["FinancesIcon"]));

            sd.SpritePartNames.Add("MapbarLeftFrame", spriteData.SpritePartNames["MapbarLeftFrame"]);
            sd.SpriteNames.Add("MapbarLeftFrame", new SpriteGeneric("MapbarLeftFrame", spriteData.SpritePartNames["MapbarLeftFrame"]));

            sd.SpritePartNames.Add("Entrepreneur.EmptyField", spriteData.SpritePartNames["Entrepreneur.EmptyField"]);
            sd.SpriteNames.Add("Entrepreneur.EmptyField", new SpriteGeneric("Entrepreneur.EmptyField", spriteData.SpritePartNames["Entrepreneur.EmptyField"]));

            sd.SpritePartNames.Add("Entrepreneur.WorkingField", spriteData.SpritePartNames["Entrepreneur.WorkingField"]);
            sd.SpriteNames.Add("Entrepreneur.WorkingField", new SpriteGeneric("Entrepreneur.WorkingField", spriteData.SpritePartNames["Entrepreneur.WorkingField"]));

            sd.SpritePartNames.Add("Entrepreneur.VillagePropertyIcon", spriteData.SpritePartNames["Entrepreneur.VillagePropertyIcon"]);
            sd.SpriteNames.Add("Entrepreneur.VillagePropertyIcon", new SpriteGeneric("Entrepreneur.VillagePropertyIcon", spriteData.SpritePartNames["Entrepreneur.VillagePropertyIcon"]));
            var bettertimeicons = sd.SpriteCategories["entrepreneur-ui-1"];

            bettertimeicons.SpriteSheets.Add(texture);
            bettertimeicons.Load((ITwoDimensionResourceContext)rc, rd);

            UIResourceManager.BrushFactory.Initialize();
        }
Пример #13
0
    void loadSpriteSheet(FileInfo path)
    {
        string[] split    = path.FullName.Split('.');
        string   pathXml  = string.Join(".", split, 0, split.Length - 1) + ".xml";
        string   fileName = path.Name.Split('.')[0];

        Debug.Log(string.Format("Loading \"{0}\" ({1})...", path, fileName));

        byte[] imageData = File.ReadAllBytes(path.FullName);

        Texture2D tex = new Texture2D(2, 2, TextureFormat.ARGB32, false);

        if (tex.LoadImage(imageData))
        {
            tex.filterMode = FilterMode.Point;
        }
        else
        {
            Debug.LogError("Cannot load texture!");
        }

        Debug.Assert(tex != null, "Texture can't be null, invalid sheet map?");

        if (File.Exists(pathXml))
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            XmlReader         reader   = XmlReader.Create(pathXml, settings);

            loadSprites(reader, tex);
        }
        else
        {
            SpriteData data = new SpriteData(new Rect(Vector2.zero, defaultSize), defaultPivot);
            data.name          = fileName;
            sprites[data.name] = new SpriteContainer {
                sprite = Sprite.Create(tex, data.rect, data.pivot), layer = null
            };
            return;
        }
    }
Пример #14
0
        public TileSet AddSpriteDataToTileSet(TileSet set, SpriteData data)
        {
            foreach (var part in data.Parts)
            {
                for (int i = 0; i < part.m_Frames; i++)
                {
                    if (set.FindTileByName(part.m_Name) >= 0)
                    {
                        continue;
                    }

                    var index = set.GetLastUnusedTileId();
                    set.CreateTile(index);
                    set.TileSetTexture(index, part.m_FrameSprite[i]);
                    set.TileSetName(index, data.Name);
                    set.TileSetModulate(index, part.SelectedColour);
                    set.TileSetMaterial(index, this.TileSetMaterial);
                }
            }

            return(set);
        }
Пример #15
0
    private Vector2 InitItem(Match match, EmojiItem item)
    {
        string       keyContent = match.Groups[0].Value;
        EmojiTypeKey type       = EmojiTypeKey.S;
        string       id         = "";

        EmojiConfig.Instance.GetEmojiInfo(keyContent, ref type, ref id);
        Vector2 defaultSize  = Vector2.zero;
        bool    adpativeSize = false;

        switch (type)
        {
        case EmojiTypeKey.V:
            VideoData videoData = EmojiConfig.Instance.GetVideoData(id);
            item.PlayVideo(videoData.VideoClip);
            defaultSize  = videoData.DefaultSize;
            adpativeSize = videoData.AdaptiveSize;
            break;

        case EmojiTypeKey.S:
            SpriteData spriteData = EmojiConfig.Instance.GetSpriteData(id);
            item.SetSprite(spriteData.Sprite);
            defaultSize  = spriteData.DefaultSize;
            adpativeSize = spriteData.AdaptiveSize;
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }

        if (adpativeSize)
        {
            defaultSize = Vector2.one * fontSize;
        }

        item.SetSize(type, defaultSize);

        return(defaultSize);
    }
Пример #16
0
    void SaveData(Texture2D tex, int xSize, int ySize, List <Color> colors, int[,] spriteGrid)
    {
        Texture2D  snapshot = RenderData(xSize, ySize, spriteGrid, colors);
        SpriteData asset    = ScriptableObject.CreateInstance <SpriteData>();

        UnityEditor.AssetDatabase.CreateAsset(asset, "Assets/Resources/Sprite Objects/" + tex.name + ".asset");
        UnityEditor.AssetDatabase.SaveAssets();
        UnityEditor.AssetDatabase.CreateAsset(snapshot, "Assets/Resources/Sprite Thumbnails/" + tex.name + "_img.asset");
        UnityEditor.AssetDatabase.SaveAssets();

        asset.xSize      = xSize;
        asset.ySize      = ySize;
        asset.thumb      = snapshot;
        asset.myName     = tex.name;
        asset.colors     = new Color[colors.Count];
        asset.colorCount = colors.Count;
        int tileCount = 0;

        for (int xx = 0; xx < xSize; xx++)
        {
            for (int yy = 0; yy < ySize; yy++)
            {
                if (spriteGrid [xx, yy] >= 0)
                {
                    tileCount++;
                }
            }
        }
        asset.tileCount = tileCount;
        for (int xx = 0; xx < colors.Count; xx++)
        {
            asset.colors [xx] = colors [xx];
        }
        asset.colorData  = Globals.SaveArray(spriteGrid);
        asset.difficulty = colors.Count * tileCount;
        UnityEditor.AssetDatabase.Refresh();
        UnityEditor.EditorUtility.SetDirty(asset);
        UnityEditor.AssetDatabase.SaveAssets();
    }
Пример #17
0
    private Rect GetUvs(int x, int y, SpriteData data)
    {
        Rect result = new Rect(data.uv.x, data.uv.y, data.uv.width / 3f, data.uv.height / 3f);

        if (x == this.m_width - 1)
        {
            result.x += 2f * result.width;
        }
        else if (x > 0)
        {
            result.x += result.width;
        }
        if (y == this.m_height - 1)
        {
            result.y += 2f * result.height;
        }
        else if (y > 0)
        {
            result.y += result.height;
        }
        return(result);
    }
Пример #18
0
    private static void CreateAtlasPrefab(string atlasName, string[] atlPath)
    {
        List <Sprite> splist = new List <Sprite>();

        foreach (var path in atlPath)
        {
            splist.AddRange(AssetDatabase.LoadAllAssetsAtPath(path).OfType <Sprite>().ToArray());
        }

        if (splist.Count > 0)
        {
            GameObject go     = new GameObject(atlasName);
            SpriteData spdata = go.AddComponent <SpriteData>();
            spdata.SetSP = splist.ToArray();
            string     path1 = AtlasPrefabPath + atlasName + ".prefab";
            GameObject temp  = PrefabUtility.CreatePrefab(path1, go);

            #region 添加ab标记
            //此处自动添加ab标记
            //如果加载方式是Resources.load()等不需要ab标记的可以把此处注释掉
            //AssetImporter importer = AssetImporter.GetAtPath(path1);
            //if (importer == null || temp == null)
            //{
            //    Debug.LogError("error: " + path1);
            //    return;
            //}
            //importer.assetBundleName = "ui-share.unity3d";

            #endregion


            GameObject.DestroyImmediate(go);
            EditorUtility.SetDirty(temp);
            AssetDatabase.SaveAssets();
        }
        Resources.UnloadUnusedAssets();
        AssetDatabase.Refresh();
        Debug.Log("****图集创建成功****");
    }
Пример #19
0
        public static void DrawImage(
            this SKCanvas canvas,
            SKImage image,
            SKPaint paint,
            SpriteData spriteData
            )
        {
            var origin        = spriteData.Origin;
            var textureBounds = spriteData.TextureBounds;

            canvas.DrawImage(
                image,
                textureBounds,
                SKRect.Create(
                    -origin.X,
                    -origin.Y,
                    textureBounds.Width,
                    textureBounds.Height
                    ),
                paint
                );
        }
Пример #20
0
    private Vector2 GetSize()
    {
        int   length = this.text.Length;
        float num    = 0f;
        float num2   = 0f;
        float num3   = this.letterInterval * 0.026041666f;

        for (int i = 0; i < length; i++)
        {
            char c = this.text[i];
            SpriteFont.SpriteSymbol symbol = this.m_font.GetSymbol(c);
            SpriteData spriteData          = symbol.spriteData;
            float      num4 = symbol.spriteScaleX * (float)spriteData.width * 0.026041666f;
            float      num5 = symbol.spriteScaleY * (float)spriteData.height * 0.026041666f;
            num2 += num4 + num3;
            if (num5 > num)
            {
                num = num5;
            }
        }
        return(new Vector2(num2, num));
    }
Пример #21
0
    public void LoadSprite(string path)
    {
        SpriteData sd = _mgr.TryGetSprite(path);

        if (sd == null)
        {
            object obj = Resources.Load(path);
            if (obj != null)
            {
                OnIconLoadSuccess(path, obj);
            }
            else
            {
                OnIconLoadFaild(path);
            }
        }
        else
        {
            sd.usedTime = Time.time;
            OnComplete(sd.sprite);
        }
    }
Пример #22
0
 private static void UF_HandleToken(List <TextToken> tokens, List <SpriteData> listSpriteDatas, int fontSize)
 {
     listSpriteDatas.Clear();
     for (int k = 0; k < tokens.Count; k++)
     {
         if (tokens [k].type == TextTokenType.QUAD)
         {
             int idxQuad = tokens[k].buffer.IndexOf("f=");
             if (idxQuad < 0)
             {
                 continue;
             }
             string spriteName = RichText.UF_ReadString(tokens[k].buffer, idxQuad + 2);;
             if (string.IsNullOrEmpty(spriteName))
             {
                 continue;
             }
             SpriteData spritedata = new SpriteData();
             spritedata.name = spriteName;
             spritedata.idx  = tokens [k].index;
             int idxSize   = tokens[k].buffer.IndexOf("s=");
             int idxOffset = tokens[k].buffer.IndexOf("o=");
             if (idxSize > -1)
             {
                 spritedata.size = RichText.UF_ReadInt(tokens [k].buffer, idxQuad + 2, 1);
             }
             else
             {
                 spritedata.size = fontSize;
             }
             if (idxOffset > -1)
             {
                 spritedata.offset = RichText.UF_ReadFloat(tokens[k].buffer, idxOffset + 2, 0);
             }
             listSpriteDatas.Add(spritedata);
         }
     }
 }
Пример #23
0
    public void SetAnimation(string name)
    {
        string upperName = name.ToUpper();
        int    newIndex  = animationIndex;

        for (int i = 0; i < animationList.Length; i++)
        {
            if (animationList[i].name.ToUpper().Equals(upperName))
            {
                newIndex = i;
            }
        }
        if (newIndex != animationIndex)
        {
            //Debug.Log(transform.parent.parent.name + "/" + transform.parent.name + "/" + this.name + " > Set Animation to " + name);
            // Update offset and scale and current animation rate
            spriteIndex    = 0;
            animationIndex = newIndex;
            SpriteDataList spriteAnim = animationList[animationIndex];
            if (spriteAnim.fps <= 0)
            {
                rate = 10;
            }
            else
            {
                rate = 1 / spriteAnim.fps;
            }
            for (int i = 0; i < spriteAnim.spriteList.Length; i++)
            {
                SpriteData spriteInfo = spriteAnim.spriteList[i];
                // Use texture size to determine sprite offsets (coords / texture size) and texture scale (sprite size / texture size)
                spriteInfo.scale  = new Vector2(spriteInfo.size.x / textureSize.x, spriteInfo.size.y / textureSize.y);
                spriteInfo.offset = new Vector2(spriteInfo.coords.x / textureSize.x, 1 - (spriteInfo.coords.y + spriteInfo.size.y) / textureSize.y);
            }
            // Immediate update
            nextUpdate = Time.time;
        }
    }
Пример #24
0
    public void InitializeAnimations(RuntimeSpriteDatabase db)
    {
        this.m_timer      = 0f;
        this.m_frame      = 0;
        this.m_sprite     = base.GetComponent <global::Sprite>();
        this.m_meshFilter = base.GetComponent <MeshFilter>();
        string id = this.m_sprite.Id;

        foreach (Animation animation in this.m_animations)
        {
            float num = 0f;
            foreach (FrameTiming frameTiming in animation.frames)
            {
                num += frameTiming.time;
                frameTiming.endTime = num;
                SpriteData data = db.Find(frameTiming.id);
                this.m_sprite.SelectSprite(data, true);
                frameTiming.mesh = this.m_sprite.GetComponent <MeshFilter>().sharedMesh;
            }
        }
        this.m_sprite.SelectSprite(db.Find(id), true);
        this.m_initialized = true;
    }
Пример #25
0
 public void RefreshEditorView()
 {
     if (!Application.isPlaying)
     {
         MeshFilter component = base.transform.GetComponent <MeshFilter>();
         if (!component)
         {
             return;
         }
         if (base.GetComponent <Renderer>().sharedMaterial&& base.GetComponent <Renderer>().sharedMaterial.mainTexture)
         {
             if (this.m_spriteDatabase == null)
             {
                 this.m_spriteDatabase = Resources.Load <GameObject>("GUISystem/SpriteDatabase").GetComponent <RuntimeSpriteDatabase>();
             }
             SpriteData spriteData = this.m_spriteDatabase.Find(this.m_id);
             if (spriteData != null)
             {
                 this.SelectSprite(spriteData, false);
             }
         }
     }
 }
Пример #26
0
    public void RebuildIcons()
    {
        if (Singleton <RuntimeSpriteDatabase> .Instance != null)
        {
            Vector2 vector;
            if (TextDialog.SpriteScale.GetCustomScale(this.customScales, this.itemSpriteID, out vector))
            {
                this.itemIcon.m_scaleX = vector.x;
                this.itemIcon.m_scaleY = vector.y;
            }
            else
            {
                this.itemIcon.m_scaleX = this.defaultScale.x;
                this.itemIcon.m_scaleY = this.defaultScale.y;
            }
            SpriteData spriteData = Singleton <RuntimeSpriteDatabase> .Instance.Find(this.itemSpriteID);

            if (spriteData != null)
            {
                this.itemIcon.SelectSprite(spriteData, true);
            }
        }
    }
Пример #27
0
    //创建图集预设
    public static void CreateAtlasPrefab(string atlasName, string[] atlPath)
    {
        List <Sprite> _texs = new List <Sprite>();

        foreach (string path in atlPath)
        {
            _texs.AddRange(AssetDatabase.LoadAllAssetsAtPath(path).OfType <Sprite>().ToArray());
        }
        if (null != _texs)
        {
            GameObject _go = new GameObject();
            _go.name = atlasName;
            SpriteData _spData = _go.AddComponent <SpriteData>();
            _spData.SetSP = _texs.ToArray();
            string     path1 = UISharePath + atlasName + ".prefab";
            GameObject temp  = PrefabUtility.CreatePrefab(path1, _go);

            #region 添加ab标记
            //此处自动添加ab标记
            //如果加载方式是Resources.load()等不需要ab标记的可以把此处注释掉
            AssetImporter importer = AssetImporter.GetAtPath(path1);
            if (importer == null || temp == null)
            {
                Debug.LogError("error: " + path1);
                return;
            }
            importer.assetBundleName = "ui-share.unity3d";

            #endregion

            GameObject.DestroyImmediate(_go);
            EditorUtility.SetDirty(temp);
            AssetDatabase.SaveAssets();
        }
        Resources.UnloadUnusedAssets();
        AssetDatabase.Refresh();
    }
Пример #28
0
        private void GenerateSprite(UIVertexHelper vh, SpriteData sprite, Rect rect, Vector2 pivot, Color color)
        {
            var spriteSize = new Vector2(sprite.rect.width, sprite.rect.height);

            // Covert sprite pivot into normalized space.
            var  spritePivot = sprite.pivot / spriteSize;
            var  rectPivot   = pivot;
            Rect r           = rect;

            if (preserveAspect & spriteSize.sqrMagnitude > 0.0f)
            {
                PreserveSpriteAspectRatio(ref r, spriteSize, pivot);
            }

            var drawingSize     = new Vector2(r.width, r.height);
            var spriteBoundSize = sprite.bounds.size;

            // Calculate the drawing offset based on the difference between the two pivots.
            var drawOffset = (rectPivot - spritePivot) * drawingSize;

            var color32 = color;

            vh.Clear();

            Vector2[] vertices = sprite.vertices;
            Vector2[] uvs      = sprite.uvs;
            for (int i = 0; i < vertices.Length; ++i)
            {
                vh.AddVert(new Vector3((vertices[i].x / spriteBoundSize.x) * drawingSize.x - drawOffset.x, (vertices[i].y / spriteBoundSize.y) * drawingSize.y - drawOffset.y), color32, new Vector2(uvs[i].x, uvs[i].y));
            }

            UInt16[] triangles = sprite.triangles;
            for (int i = 0; i < triangles.Length; i += 3)
            {
                vh.AddTriangle(triangles[i + 0], triangles[i + 1], triangles[i + 2]);
            }
        }
Пример #29
0
        private SpriteData <TType>[] CreateDataMap <TType>(SpriteData <TType>[] spriteDataMap) where TType : Enum
        {
            var flags = System.Enum.GetValues(typeof(TType));

            if (spriteDataMap != null)
            {
                // サイズ同じなら何もしない
                if (spriteDataMap.Length == flags.Length)
                {
                    return(spriteDataMap);
                }
            }

            var dataMap = new SpriteData <TType> [flags.Length];

            int count = 0;

            foreach (TType flag in flags)
            {
                var data = new SpriteData <TType>();
                data.SetType(flag);

                dataMap[count++] = data;
            }

            // サイズ変更により中身を差し替える
            var length = Mathf.Min(spriteDataMap.Length, flags.Length);

            for (int i = 0; i < length; ++i)
            {
                var sprite = spriteDataMap[i].Sprite;
                dataMap[i].SetSprite(sprite);
            }

            return(dataMap);
        }
Пример #30
0
        public RyanBlooddrop(Vector2 position, byte frame, int ttl, string id, float z) : base(id)
        {
            Sprite
            .Create(this)
            .SetTexture(Game.Ego.Get <BloodDropEmitter>().Texture, 16, 1)
            .SetFrame(16);

            SpriteData
            .Create(this)
            .SetColor(Color.White);

            HotspotSprite
            .Create(this)
            .SetPixelPerfect(true)
            .SetCaption(Basement_Res.drop_of_blood);

            Transform
            .Create(this)
            .SetZ(z)
            .SetPosition(position - new Vector2(0, 55));

            Interaction
            .Create(this)
            .SetPosition(position - new Vector2(0, 55))
            .SetGetInteractionsFn(GetInteractions);

            Scripts
            .Create(this);

            TimeToLive     = Math.Min(500, ttl);
            UpdateCount    = 0;
            TargetFrame    = frame;
            TargetPosition = position;

            Visible = true;
        }
Пример #31
0
        public void Initialize(SpriteMenu menu, SpriteData data)
        {
            SpriteMenu = menu;
            Sprite     = data;

            // Initialize sprite image
            image.sprite = data.Sprite;
            if (data.MaintainAspect)
            {
                float scale = Mathf.Min(data.Width / data.Sprite.bounds.size.x, data.Height / data.Sprite.bounds.size.y);
                ((RectTransform)transform).sizeDelta = scale * data.Sprite.bounds.size;
            }
            else
            {
                ((RectTransform)transform).sizeDelta = new Vector2(data.Width, data.Height);
            }

            // Store defaults
            baseSize            = ((RectTransform)transform).sizeDelta;
            baseOutlineDistance = outline.effectDistance;

            // Set button response
            button.onClick.AddListener(() => SpriteMenu.SelectSprite(this));
        }
Пример #32
0
    private void LoadByResources(int index, SpriteData data)
    {
        //if (data._obj.GetType() == typeof(DataManager)) { };
        string url = string.Format(data._url, index);

        ResourcesManager.Asset tAsset = new ResourcesManager.Asset(url, data._assetType, data._assetPath);
        tAsset._isTexture2dReadable = data._isReadable;
        ResourcesManager.LoadAsset(tAsset, (ResourcesManager.Asset asset) => {
            if (false == data._isKeepLastAsset)
            {
                if (null != data._lastAsset)
                {
                    ResourcesManager.Asset temp = data._lastAsset as ResourcesManager.Asset;
                    if (asset != temp)
                    {
                        temp._isCached = false;
                        temp.Dispose();
                        data._lastAsset = null;
                    }
                }
            }
            asset._isCached = true;
            data._lastAsset = asset;
            if (data._objType == ObjType.Texture2D)
            {
                data._obj = asset._texture2d;
            }
            else
            {
                data._obj = asset.Sprite;
            }
            HandleUpdate(index, true, data);
        }, (ResourcesManager.Asset asset) => {
            HandleUpdate(index, false, data);
        });
    }
Пример #33
0
        private void btnExport_Click(object sender, EventArgs e)
        {
            if (dlgSave.ShowDialog() == DialogResult.OK)
            {
                // Get the sprite indices
                int bank   = cboBank.SelectedIndex;
                int chr    = indexmap[cboChar.SelectedIndex];
                int sprite = cboSprite.SelectedIndex;

                // Get the bitmap
                Bitmap bmp = SpriteData.GetSprite(bank, chr, sprite, cboPalNum.SelectedIndex, false);

                // Get the palette
                var palette = SpritePalettes.GetPalette(sprite);

                // Create the target bitmap
                Bitmap   target = new Bitmap(Math.Max(128, bmp.Width), 32 + bmp.Height, PixelFormat.Format32bppArgb);
                Graphics g      = Graphics.FromImage(target);

                // Draw the palette
                for (int i = 0; i < 16; i++)
                {
                    int x = (i & 7) << 4;
                    int y = ((i & 8) << 1);

                    g.FillRectangle(new SolidBrush(palette.Entries[0][i]), new Rectangle(x, y, 16, 16));
                }

                // Draw the sprite
                g.DrawImage(bmp, new Point(0, 32));

                // Save
                target.Save(dlgSave.FileName);
                g.Dispose();
            }
        }
Пример #34
0
        private void RebuildBuffer()
        {
            var data = new SpriteData[m_instances.Count];

            for (int i = 0; i < m_instances.Count; i++)
            {
                var instance = m_instances[i];
                var sprite = instance.Sprite;

                var matrix = Matrix4.Identity;
                matrix *= Matrix4.Translate(instance.Position.X, instance.Position.Y, 0f);
                matrix *= Matrix4.Scale(instance.Size.X, instance.Size.Y, 0f);

                data[i] = new SpriteData()
                {
                    //Color = new Vector4(1f, 1f, 1f, 1f),
                    Transform = matrix,
                    TextureOrigin = sprite.Coordinates.Position,
                    TextureTarget = sprite.Coordinates.Position + sprite.Coordinates.Size
                };
            }

            m_bufferSprite.SetData(data, GL.STREAM_DRAW);

            //m_bufferSprite.SetData(m_instances.Count, GL.STREAM_DRAW);

            //using (var mapping = m_bufferSprite.Map(m_instances.Count))
            //{
            //    unsafe
            //    {
            //        SpriteData* data = (SpriteData*)mapping.Address.ToPointer();

            //        for (int i = 0; i < m_instances.Count; i++)
            //        {
            //            var instance = m_instances[i];
            //            var sprite = instance.Sprite;

            //            var matrix = Matrix4.Identity;
            //            matrix *= Matrix4.Translate(instance.Position.X, instance.Position.Y, 0f);
            //            matrix *= Matrix4.Scale(instance.Size.X, instance.Size.Y, 0f);

            //            data[i] = new SpriteData()
            //            {
            //                //Color = new Vector4(1f, 1f, 1f, 1f),
            //                Transform = matrix,
            //                TextureOrigin = sprite.Coordinates.Position,
            //                TextureTarget = sprite.Coordinates.Position + sprite.Coordinates.Size
            //            };
            //        }
            //    }

            //}

            m_isDirty = false;
        }
Пример #35
0
    protected override Mesh GetMesh()
    {
        if (!Application.isPlaying)
            return null;

        sprites.Clear();
        // first check if all children are ready
        if (!ChildrenReady())
            return null;

        if (linked.Count>0)
        {
            linkedInitializing = false;
            for (int i=0; i<linked.Count; i++)
                if (!linked[i].hasMesh || linked[i].uv == null)
                {
                    linkedInitializing = true;
                    return null;
                }
            sprites.AddRange(linked);
        }

        if (sprites.Count==0)
        {
            ResetRemovedSprites();
            meshDirty = false;
            return new Mesh();
        }

        submeshMaterials.Clear();
        submeshTriangles.Clear();
        submeshes.Clear();
        gameObjects.Clear();
        packedUvs.Clear();
        texturesToPack.Clear();

        #if UNITY_EDITOR
        if (packTextures && Application.isEditor)
            CheckTexturesReadWrite();
        #endif

        ResetRemovedSprites();

        Material mat = null;
        spriteData.Clear();
        lookup.Clear();

        List<GameObject> toDelete = new List<GameObject>();

        if (Application.isPlaying)
        {
            Mesh mesh = new Mesh();

            List<Vector3> vertices = new List<Vector3>();
            List<Color> colors = new List<Color>();
            List<int>triangles = new List<int>();
            List<int> subTriangles = new List<int>();
            List<Vector2> uv = new List<Vector2>();
            int submeshCount = 0;

            sprites.Sort(SpritesByDepth);

            for (int c = 0; c < sprites.Count; c++)
            {
                OTSprite sprite = sprites[sprites.Count - 1 - c];
                GameObject g = sprite.gameObject;

                MeshFilter mf = g.GetComponent<MeshFilter>();
                if (mf.mesh != null)
                {
                    SpriteData data = new SpriteData();

                    string scId = sprite.materialReference;

                    if (sprite is OTFilledSprite)
                        scId += "|"+sprite.GetInstanceID();

                    if (sprite.spriteContainer != null)
                        scId += "|"+sprite.spriteContainer.GetInstanceID();
                    else
                        if (sprite.image != null)
                            scId += "|" + sprite.image.GetInstanceID();

                    if (checkTintedAlpha && (sprite.materialReference == "tint" || sprite.materialReference=="alpha"))
                        scId += "|" + sprite.tintColor + "|" + sprite.alpha;

                    if (scId != "-1")
                    {
                        data.subMesh = -1;
                        if (packTextures)
                        {
                            if (packedMaterial != null)
                                mat = new Material(packedMaterial);
                            if (mat == null)
                            {

                                mat = new Material(sprite.otRenderer.material);
                            }
                            if (!texturesToPack.Contains(sprite.otRenderer.material.mainTexture as Texture2D))
                            {
                                texturesToPack.Add(sprite.otRenderer.material.mainTexture as Texture2D);
                                data.textureIdx = texturesToPack.Count - 1;
                            }
                            else
                                data.textureIdx = texturesToPack.IndexOf(sprite.otRenderer.material.mainTexture as Texture2D);
                        }
                        else
                        {
                            if (!submeshTriangles.ContainsKey(scId))
                            {
                                subTriangles = new List<int>();
                                submeshTriangles.Add(scId, subTriangles);
                                mat = new Material(sprite.otRenderer.material);
                                if (sprite.spriteContainer != null)
                                    mat.mainTexture = sprite.spriteContainer.GetTexture();
                                else
                                    mat.mainTexture = sprite.image;

                                if (!(sprite is OTFilledSprite))
                                {
                                    mat.mainTextureScale = Vector2.one;
                                    mat.mainTextureOffset = Vector2.zero;
                                }
                                submeshMaterials.Add(mat);
                                submeshCount++;
                                submeshes.Add(scId);
                            }
                            else
                                subTriangles = submeshTriangles[scId];

                            data.subMesh = submeshes.IndexOf(scId);
                        }
                    }
        #if UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5
                    data.active = sprite.gameObject.active;
                    if (deactivateSprites)
                        sprite.gameObject.active = false;
        #else
                    data.active = sprite.gameObject.activeSelf;
                    if (deactivateSprites)
                        sprite.gameObject.SetActive(false);
        #endif

                    data.index = spriteData.Count;
                    data.sprite = sprite;
                    data.mf = mf;
                    data.position = sprite.position;
                    data.rotation = sprite.rotation;
                    data.size = sprite.size;
                    data.depth = sprite.depth;
                    data.verticeIdx = vertices.Count;
                    data.triangleIdx = triangles.Count;
                    data.subTriangleIdx = subTriangles.Count;
                    data.uvIdx = uv.Count;
                    data.image = sprite.image;
                    data.container = sprite.spriteContainer;
                    data.frameIndex = sprite.frameIndex;
                    data.vertexCount = mf.mesh.vertexCount;

                    Vector3[] vts = GetVertices(data);
                    vertices.AddRange(vts);
                    int[] tri = GetTriangles(data);

                    colors.AddRange(GetColors(data));
                    triangles.AddRange(tri);
                    subTriangles.AddRange(tri);
                    data.triCount = tri.Length;

                    Vector2[] _uv = GetUV(data,vts.Length);
                    data.uvCount = _uv.Length;

                    uv.AddRange(_uv);

                    lookup.Add(data.sprite.GetInstanceID(), spriteData.Count);
                    spriteData.Add(data);

                    if (!deactivateSprites)
                        data.sprite._iMsg = "hide";
                }
            }

            while (toDelete.Count > 0)
            {
                DestroyImmediate(toDelete[0]);
                toDelete.RemoveAt(0);
            }

            mesh.vertices = vertices.ToArray();
            mesh.colors = colors.ToArray();
            mesh.triangles = triangles.ToArray();
            if (!packTextures && submeshCount > 1)
            {
                mesh.uv = uv.ToArray();
                mesh.subMeshCount = submeshCount;
                for (int i = submeshCount - 1; i >= 0; i--)
                    mesh.SetTriangles(submeshTriangles[submeshes[i]].ToArray(), i);
                otRenderer.materials = submeshMaterials.ToArray();

            }
            else
            {
                if (packTextures)
                {
                    if (packedTexture == null)
                        packedTexture = new Texture2D(maxAtlasSize, maxAtlasSize);
                    packedUvs = new List<Rect>(packedTexture.PackTextures(texturesToPack.ToArray(), 0, maxAtlasSize, false));

                    for (int s = 0; s < spriteData.Count; s++)
                    {
                        SpriteData data = spriteData[s];
                        Rect uvBase = packedUvs[data.textureIdx];
                        for (int u = 0; u < data.uvCount; u++)
                        {
                            Vector2 v = uv[data.uvIdx + u];
                            uv[data.uvIdx + u] = new Vector2(uvBase.x + (uvBase.width * v.x), uvBase.y + (uvBase.height * v.y));
                        }
                    }
                }

                mesh.uv = uv.ToArray();
                mesh.subMeshCount = 1;
                otRenderer.materials = new Material[] { };
                otRenderer.material = mat;
                if (packTextures)
                    mat.mainTexture = packedTexture;
            }
            mesh.RecalculateBounds();
            mesh.RecalculateNormals();
            visible = true;

            return mesh;
        }
        else
            return null;
    }
Пример #36
0
	public static void generate3DMeshFrom2D(GameObject g, SpriteData sprite, float depth = 0.0625f) {

		ExtrudeSprite extrudeSprite =  g.AddComponent<ExtrudeSprite> () as ExtrudeSprite;
		extrudeSprite.GenerateMesh (sprite.texture_2d, depth);
	}
Пример #37
0
    /* *** Private Methods *** */
    /// <summary>
    /// Read and parse atlas data from XML file.
    /// </summary>
    private void ImportAtlasData()
    {
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(atlasDataFile.text);
        XmlNode frames = xml.DocumentElement.SelectSingleNode("dict/key");
        List<AtlasData> data = new List<AtlasData>();

        if (frames != null && frames.InnerText == "frames") {
            XmlNodeList subTextureNames = xml.DocumentElement.SelectNodes("dict/dict/key");
            XmlNodeList subTextures = xml.DocumentElement.SelectNodes("dict/dict/dict");
            try {
                for (int si = 0; si < subTextures.Count; si++) {
                    _subTexture = subTextures[si];
                    AtlasData ad = new AtlasData();

                    bool rotated = _subTexture.GetBool("rotated");
                    Rect frame = _subTexture.GetRect("frame");
                    Rect colorRect = _subTexture.GetRect("sourceColorRect");
                    Vector2 sourceSize = _subTexture.GetVector2("sourceSize");

                    try {
                        ad.name = subTextureNames[si].InnerText.Split('.')[0];
                    } catch (System.Exception) {
                        ad.name = subTextureNames[si].InnerText;
                    }
                    ad.position = new Vector2(frame.xMin, frame.yMin);
                    ad.rotated = rotated;
                    ad.size = new Vector2(colorRect.width, colorRect.height);
                    ad.frameSize = sourceSize;
                    ad.offset = new Vector2(colorRect.xMin, colorRect.yMin);

                    data.Add(ad);
                }
            } catch (System.Exception ERR) {
                Debug.LogError("Atlas Import error!");
                Debug.LogError(ERR.Message);
            }
        }

        InitVertices();
        spriteData = new SpriteData[data.Count];
        SpriteData sprite = null;
        for (int i = 0; i < data.Count; i++) {
            sprite = new SpriteData();
            sprite.name = data[i].name;
            sprite.size = data[i].size;
            sprite.sheetPixelCoords = data[i].position;
            sprite.texture = texture;
            sprite.UpdateUVs();

            spriteData[i] = sprite;
        }
    }
Пример #38
0
 public void AddWeaponSprite(SpriteData sd)
 {
     Sprites.Add(sd);
 }
Пример #39
0
        public void AssignRootSprite( SpriteData spriteData )
        {
            CurrentAnimation = spriteData.Animations[spriteData.DefaultAnimationName];
            CurrentFrame = 0;
            CurrentAnimationDirection = spriteData.DefaultAnimationDirection;
            FrameStartTime = TimeSpan.MinValue;
            IsAnimating = false;
            AnimationEndingAction = AnimationEndingAction.Stop;

            mRootSpriteAnimation = spriteData;

            mSpriteList = new List<SpriteItem>( 1 );
            mSpriteTable = new Dictionary<string, SpriteItem>();

            // Add the initial root sprite
            mSpriteList.Add( new SpriteItem( spriteData,
                                             CurrentAnimationDirection,
                                             CurrentAnimationName,
                                             CurrentFrame ) );
        }
Пример #40
0
    int[] GetTriangles(SpriteData data)
    {
        List<int> newTriangles = new List<int>();
        newTriangles.AddRange(data.mf.mesh.triangles);
        for (int t = 0; t < newTriangles.Count; t++)
            newTriangles[t] += data.verticeIdx;

        return newTriangles.ToArray();
    }
Пример #41
0
    Vector2[] GetUV(SpriteData data, int count)
    {
        Vector2[] meshUV = new Vector2[]{};

        if (data.sprite.spriteContainer != null || data.sprite.image!=null)
        {
            // OTContainer.Frame frame = data.sprite.CurrentFrame();
            if (data.sprite.uv != null)
                meshUV = data.sprite.uv.Clone() as Vector2[];
        }
        else
        {
            meshUV = new Vector2[] { };
            Array.Resize<Vector2>(ref meshUV, count);
        }

        return meshUV;
    }
Пример #42
0
    Vector3[] GetVertices(SpriteData data)
    {
        Matrix4x4 matrix = new Matrix4x4();

        Vector3 scale = data.sprite.otTransform.lossyScale;
        matrix.SetTRS( data.sprite.otTransform.position - otTransform.position, data.sprite.otTransform.rotation, scale);

        Vector3[] newVertices = data.mf.mesh.vertices;
        for (int v = 0; v < newVertices.Length; v++)
            newVertices[v] = matrix.MultiplyPoint3x4(newVertices[v]);

        return newVertices;
    }
Пример #43
0
        private unsafe void RenderBatch(Texture2D texture, SpriteData[] sprites, int offset, int count)
        {
            graphicsDevice.Textures[0] = texture;
            float num = 1f / (float)texture.Width;
            float num2 = 1f / (float)texture.Height;
            while (count > 0)
            {
                SetDataOptions options = SetDataOptions.NoOverwrite;
                int num3 = count;
                if (num3 > 2048 - vertexBufferPosition)
                {
                    num3 = 2048 - vertexBufferPosition;
                    if (num3 < 256)
                    {
                        vertexBufferPosition = 0;
                        options = SetDataOptions.Discard;
                        num3 = count;
                        if (num3 > 2048)
                            num3 = 2048;
                    }
                }

                fixed (SpriteData* ptr = &sprites[offset])
                {
                    fixed (VertexPositionColorTexture* ptr2 = &vertices[0])
                    {
                        SpriteData* ptr3 = ptr;
                        VertexPositionColorTexture* ptr4 = ptr2;
                        for (int i = 0; i < num3; i++)
                        {
                            float num4 = ptr3->Origin.X / ptr3->Source.Z;
                            float num5 = ptr3->Origin.Y / ptr3->Source.W;
                            ptr4->Color = (*ptr3).Colors.TopLeftColor;
                            ptr4[1].Color = ptr3->Colors.TopRightColor;
                            ptr4[2].Color = ptr3->Colors.BottomRightColor;
                            ptr4[3].Color = ptr3->Colors.BottomLeftColor;
                            for (int j = 0; j < 4; j++)
                            {
                                float num6 = xCornerOffsets[j];
                                float num7 = yCornerOffsets[j];
                                float num8 = (num6 - num4) * ptr3->Destination.Z;
                                float num9 = (num7 - num5) * ptr3->Destination.W;
                                float x = ptr3->Destination.X + num8;
                                float y = ptr3->Destination.Y + num9;
                                if ((ptr3->Effects & SpriteEffects.FlipVertically) != SpriteEffects.None)
                                    num6 = 1f - num6;
                                if ((ptr3->Effects & SpriteEffects.FlipHorizontally) != SpriteEffects.None)
                                    num7 = 1f - num7;
                                ptr4->Position.X = x;
                                ptr4->Position.Y = y;
                                ptr4->Position.Z = 0f;
                                ptr4->TextureCoordinate.X = (ptr3->Source.X + num6 * ptr3->Source.Z) * num;
                                ptr4->TextureCoordinate.Y = (ptr3->Source.Y + num7 * ptr3->Source.W) * num2;
                                ptr4++;
                            }
                            ptr3++;
                        }
                    }
                }

                int offsetInBytes = vertexBufferPosition * sizeof(VertexPositionColorTexture) * 4;
                vertexBuffer.SetData<VertexPositionColorTexture>(offsetInBytes, vertices, 0, num3 * 4, sizeof(VertexPositionColorTexture), options);
                int minVertexIndex = vertexBufferPosition * 4;
                int numVertices = num3 * 4;
                int startIndex = vertexBufferPosition * 6;
                int primitiveCount = num3 * 2;
                graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, minVertexIndex, numVertices, startIndex, primitiveCount);
                vertexBufferPosition += num3;
                offset += num3;
                count -= num3;
            }
        }
Пример #44
0
    public void Initialize(DungeonEntity e, SpriteData sd, LinkedSpriteManager ls)
    {
        entity = e;
        spriteData = sd;
        lsManager = ls;
        Texture texture = lsManager.material.mainTexture;
        Vector2 textDim = new Vector2(texture.width, texture.height);
        uvDim = new Vector2(spriteData.spriteDim.x / textDim.x, spriteData.spriteDim.y / textDim.y);
        Vector2 uvCoord = Vector2.zero;
        uvCoord.x = uvDim.x * 7;
        uvCoord.y = 1 - (spriteData.spriteDim.y * (spriteData.spriteIndex + 1) / textDim.y);
        sprite = lsManager.AddSprite(gameObject, spriteData.dim.x, spriteData.dim.y, uvCoord, uvDim, Vector3.up * 0.5f, true);
        visible = true;

        transform.localPosition = Vector3.up * sd.dim.y/2;

        Vector2 pos;

        UVAnimation walking_s = new UVAnimation();
        pos = new Vector2(0, uvCoord.y);
        walking_s.BuildUVAnim(pos, uvDim, 3, 1, 3, 10);
        walking_s.name = "walking_s";
        walking_s.loopCycles = -1;

        UVAnimation walking_nw = new UVAnimation();
        pos = new Vector2(uvDim.x * 3, uvCoord.y);
        walking_nw.BuildUVAnim(pos, uvDim, 3, 1, 3, 10);
        walking_nw.name = "walking_nw";
        walking_nw.loopCycles = -1;

        UVAnimation walking_sw = new UVAnimation();
        pos = new Vector2(uvDim.x * 3, uvCoord.y);
        walking_sw.BuildUVAnim(pos, uvDim, 3, 1, 3, 10);
        walking_sw.name = "walking_sw";
        walking_sw.loopCycles = -1;

        UVAnimation walking_ne = new UVAnimation();
        pos = new Vector2(uvDim.x * 6, uvCoord.y);
        walking_ne.BuildUVAnim(pos, uvDim, 3, 1, 3, 10);
        walking_ne.name = "walking_ne";
        walking_ne.loopCycles = -1;

        UVAnimation walking_se = new UVAnimation();
        pos = new Vector2(uvDim.x * 6, uvCoord.y);
        walking_se.BuildUVAnim(pos, uvDim, 3, 1, 3, 10);
        walking_se.name = "walking_se";
        walking_se.loopCycles = -1;

        UVAnimation walking_n = new UVAnimation();
        pos = new Vector2(uvDim.x * 9, uvCoord.y);
        walking_n.BuildUVAnim(pos, uvDim, 3, 1, 3, 10);
        walking_n.name = "walking_n";
        walking_n.loopCycles = -1;

        sprite.AddAnimation(walking_n);
        sprite.AddAnimation(walking_ne);
        sprite.AddAnimation(walking_nw);
        sprite.AddAnimation(walking_s);
        sprite.AddAnimation(walking_se);
        sprite.AddAnimation(walking_sw);
    }
    /******* PARSING DATA ************/
    //add an atlas, and then take out it's elements and put them into m_Atlases
    private void addAtlasData(FAtlas _atlas, string _atlasID)
    {
        int elementCount = _atlas.elements.Count;
        for(int e = 0; e<elementCount; ++e)
        {
            FAtlasElement element = _atlas.elements[e];
            element.atlas = _atlas;
            element.atlasIndex = _atlas.index;
            //remember the concention "ID-ANIMATION-#-DELAY"
            string[] name = element.name.Split('-');
            int length = name.Length;
            string id = name[0];
            string animation = length > 1 ? name[1] : "default";
            int frameNum = length > 2 ? int.Parse(name[2]) : 1;
            float delay = length > 3 ? 1.0f/float.Parse(name[3]) : 1.0f/60.0f;

            Frame frame = new Frame();
            frame.Num = frameNum;
            frame.Element = element;
            frame.Delay = delay;

            if(!m_spriteData.ContainsKey(id)) {

                SpriteData spriteData = new SpriteData();
                spriteData.data = new Dictionary<string, List<Frame>>();
                spriteData.data.Add(animation, new List<Frame>());
                spriteData.data[animation].Add(frame);
                spriteData.AtlasID = _atlasID;

                m_spriteData[id] = spriteData;
            }
            else {
                //it's a duplicate, so check for new animation name
                SpriteData spriteData = m_spriteData[id];
                //duplicate animName, add to list
                if(!spriteData.data.ContainsKey(animation)) {
                    spriteData.data[animation] = new List<Frame>();
                }

                //add frame
                spriteData.data[animation].Add(frame);

                //then sort
                spriteData.data[animation] = spriteData.data[animation].OrderBy(f=>f.Num).ToList();
            }
        }
    }
Пример #46
0
            public SpriteItem( SpriteData sprite,
                Direction currentDirection,
                string currentAnimation,
                int currentFrame)
            {
                AnimationData animation = sprite.Animations[currentAnimation];

                SourceSprite    = sprite;
                AtlasTexture    = sprite.Texture;
                AtlasSpriteRect = animation.GetSpriteRectFor( currentDirection, currentFrame );
                OriginOffset    = sprite.OriginOffset;
            }
Пример #47
0
 Color[] GetColors(SpriteData data)
 {
     Color[] co = new Color[] {};
     co = data.sprite.colors;
     if (!data.sprite.visible)
     {
         for (int i=0; i<co.Length; i++)
             co[i] = Color.clear;
     }
     return co;
 }
Пример #48
0
    void Build(SpriteData data)
    {
        MeshFilter mf = GetComponent<MeshFilter>();
        if (mf != null && mf.mesh != null && mf.mesh.vertexCount>0)
        {
            int vi = data.verticeIdx;
            int vc = data.vertexCount;
            int ep = vi + vc;

            int ti = data.triangleIdx;
            int sti = data.subTriangleIdx;
            int tc = data.triCount;
            int tep = ti + tc;
            int step = sti + tc;

            data.position = data.sprite.position;
            data.rotation = data.sprite.rotation;
            data.size = data.sprite.size;
            data.depth = data.sprite.depth;
            data.frameIndex = data.sprite.frameIndex;

            Vector2[] meshUvs = mf.mesh.uv;
            Color[]   meshColors = mf.mesh.colors;
            Vector3[] meshVs = mf.mesh.vertices;
            int[] 	  meshTri = mf.mesh.triangles;
            List<int[]> subTris = new List<int[]>();
            Material[] materials = otRenderer.materials;

            for (int i=0; i<mf.mesh.subMeshCount; i++)
                subTris.Add(mf.mesh.GetTriangles(i));

            // temporary clear triangles and sub triangles;

            // adjust vertices
            Vector3[] spriteVs = GetVertices(data);
            Vector3[] vs = new Vector3[meshVs.Length - vc + spriteVs.Length];

            Array.Copy(meshVs, 0, vs, 0, vi);
            Array.Copy(spriteVs, 0, vs, vi, spriteVs.Length);
            Array.Copy(meshVs, ep, vs, vi + spriteVs.Length, meshVs.Length - ep);

            int vDelta = spriteVs.Length - vc;

            if (vDelta!=0)
                mf.mesh.triangles = new int[] {};

            mf.mesh.vertices = vs;
            data.vertexCount = spriteVs.Length;

            // adjust uv coordinates
            Vector2[] spriteUvs = GetUV(data,spriteVs.Length);
            data.uvCount = spriteUvs.Length;
            Vector2[] us = new Vector2[vs.Length];
            Array.Copy(meshUvs, 0, us, 0, vi);
            Array.Copy(spriteUvs, 0, us, vi, spriteUvs.Length);
            Array.Copy(meshUvs, ep, us, vi + spriteUvs.Length, meshUvs.Length - ep);

            // check if vertexcount and triangles have changed
            if (vDelta!=0)
            {
                // adjust triangles
                int[] spriteTri = GetTriangles(data);

                // re-index all vertex indices
                for (int i=0; i<meshTri.Length; i++)
                    if (meshTri[i]>=data.verticeIdx+vc)
                        meshTri[i] += vDelta;

                // re-index vertex indices of the submeshes
                if (!packTextures)
                    for (int i=subTris.Count-1; i>=0; i--)
                    {
                        for (int ii=0; ii<subTris[i].Length; ii++)
                            if (subTris[i][ii]>=data.verticeIdx+vc)
                                subTris[i][ii] += vDelta;
                    }

                // adjust vertex and uv index for this sprite in the batch
                for (int s=0; s < spriteData.Count; s++)
                {
                    if (spriteData[s].sprite!=null)
                    {
                        if (spriteData[s].sprite!=data.sprite && spriteData[s].verticeIdx>=data.verticeIdx)
                        {
                            SpriteData d = spriteData[s];
                            d.verticeIdx += vDelta;
                            d.uvIdx += vDelta;
                            spriteData[s] = d;
                        }
                    }
                }

                int tDelta = spriteTri.Length - data.triCount;

                // adjust triangles
                data.triCount = spriteTri.Length;
                int[] tri = new int[meshTri.Length - tc + spriteTri.Length ];
                Array.Copy(meshTri, 0, tri, 0, ti);
                Array.Copy(spriteTri, 0, tri, ti, spriteTri.Length);
                Array.Copy(meshTri, tep, tri, ti + spriteTri.Length, meshTri.Length - tep);

                if (!packTextures)
                {
                    int[] subMeshTri = subTris[data.subMesh];
                    int[] stri = new int[subMeshTri.Length - tc + spriteTri.Length ];
                    Array.Copy(subMeshTri, 0, stri, 0, sti);
                    Array.Copy(spriteTri, 0, stri, sti, spriteTri.Length);
                    Array.Copy(subMeshTri, step, stri, sti + spriteTri.Length, subMeshTri.Length - step);
                    subTris[data.subMesh] = stri;

                    // adjust submesh triangle index for this sprite in the batch
                    for (int s=0; s < spriteData.Count; s++)
                        if (spriteData[s].sprite!=null && spriteData[s].subMesh == data.subMesh && spriteData[s].sprite!=data.sprite && spriteData[s].subTriangleIdx>=data.subTriangleIdx)
                        {
                            SpriteData d = spriteData[s];
                            d.subTriangleIdx += tDelta;
                            spriteData[s] = d;
                        }
                }

                // adjust triangle index for this sprite in the batch
                for (int s=0; s < spriteData.Count; s++)
                    if (spriteData[s].sprite!=null && spriteData[s].sprite!=data.sprite && spriteData[s].triangleIdx>data.triangleIdx)
                    {
                        SpriteData d = spriteData[s];
                        d.triangleIdx += tDelta;
                        spriteData[s] = d;
                    }

                mf.mesh.triangles = tri;

            }

            // adjust colors
            Color[] spriteColors = GetColors(data);

            Color[] cs = new Color[meshColors.Length - vc + spriteColors.Length];

            Array.Copy(meshColors, 0, cs, 0, vi);
            Array.Copy(spriteColors, 0, cs, vi, spriteColors.Length);
            Array.Copy(meshColors, ep, cs, vi + spriteColors.Length, meshColors.Length - ep);

            mf.mesh.colors = cs;

            spriteData[data.index] = data;

            if (packTextures)
            {
                Rect uvBase = packedUvs[data.textureIdx];
                for (int u = 0; u < data.uvCount; u++)
                {
                    Vector2 v = us[data.uvIdx + u];
                    us[data.uvIdx + u] = new Vector2(uvBase.x + (uvBase.width * v.x), uvBase.y + (uvBase.height * v.y));
                }
            }
            else
            {

                if (data.sprite is OTFilledSprite || (checkTintedAlpha && (data.sprite.materialReference == "tint" || data.sprite.materialReference == "alpha")))
                {
                    materials[data.subMesh] = data.sprite.otRenderer.material;
                    if (vDelta == 0)
                        otRenderer.materials = materials;
                }

                if (vDelta!=0)
                {
                    mf.mesh.subMeshCount = subTris.Count;
                    for (int i=subTris.Count-1; i>=0; i--)
                        mf.mesh.SetTriangles(subTris[i],i);
                    otRenderer.materials = materials;
                }
            }

            mf.mesh.uv = us;
            mf.mesh.RecalculateBounds();
            mf.mesh.RecalculateNormals();
        }
    }
Пример #49
0
        private void RebuildBuffer()
        {
            List<SpriteInstance> tempInstances = null;
            lock (m_instances)
            {
                tempInstances = new List<SpriteInstance>(m_instances);
            }

            var length = tempInstances.Count;

            if (length != 0)
            {

                var data = new SpriteData[length];

                Parallel.For(0, length, i =>
                    {
                        var instance = tempInstances[i];
                        var sprite = instance.Sprite;

                        var matrix = Matrix4.Identity;
                        if (instance.RotateFromOrigin)
                        {
                            matrix *= Matrix4.Translate(instance.Position.X, instance.Position.Y, 0f);
                            matrix *= Matrix4.RotateZ(instance.Angle);
                            //matrix *= Matrix4.Translate(-instance.Size.X, -instance.Size.Y, 0f);
                        }
                        else
                        {
                            matrix *= Matrix4.Translate(instance.Position.X + instance.Size.X / 2, instance.Position.Y + instance.Size.Y / 2, 0f);
                            matrix *= Matrix4.RotateZ(instance.Angle);
                            matrix *= Matrix4.Translate(-instance.Size.X / 2, -instance.Size.Y / 2, 0f);
                        }
                        matrix *= Matrix4.Scale(instance.Size.X, instance.Size.Y, 0f);

                        data[i] = new SpriteData()
                        {
                            Color = instance.Color,
                            Transform = matrix,
                            TextureOrigin = sprite.Coordinates.Position,
                            TextureTarget = sprite.Coordinates.Position + sprite.Coordinates.Size
                        };
                    });

                GL.BindVertexArray(m_vao);
                m_bufferSprite.SetData(data, GL.STREAM_DRAW);

            }
            else
            {
                GL.BindVertexArray(m_vao);
                m_bufferSprite.SetData(null, GL.STREAM_DRAW);
            }

            m_isDirty = false;
        }
Пример #50
0
 /// <summary>
 /// Sets the pose.
 /// </summary>
 /// <param name='pose'>
 /// Pose.
 /// </param>
 protected void SetPose(int pose)
 {
     data = new SpriteData(graphic, 0, pixelSize.y*pose, pixelSize.x, pixelSize.y, centerPivot.x, centerPivot.y);
 }
Пример #51
0
 public void AddSpriteData(SpriteData sd)
 {
     Sprites.Add(sd);
 }
Пример #52
0
        public void AddSprite( string name, SpriteData spriteData )
        {
            SpriteItem item    = new SpriteItem( spriteData,
                                                 CurrentAnimationDirection,
                                                 CurrentAnimationName,
                                                 CurrentFrame );

            mSpriteList.Add( item );
            mSpriteTable.Add( name, item );
        }