private string GetOutputText() { _imagesTagInfoList.Clear(); IList <UIVertex> verts = cachedTextGenerator.verts; StringBuilder textBuilder = new StringBuilder(); int textIndex = 0; foreach (Match match in _inputRegex.Matches(text)) { int tempId = 0; if (!string.IsNullOrEmpty(match.Groups[1].Value) && !match.Groups[1].Value.Equals("-")) { tempId = int.Parse(match.Groups[1].Value); } string tempTag = match.Groups[2].Value; //更新超链接 if (tempId < 0) { textBuilder.Append(text.Substring(textIndex, match.Index - textIndex)); textBuilder.Append("<color=blue>"); int _startIndex = textBuilder.Length * 4; textBuilder.Append("[" + match.Groups[2].Value + "]"); int _endIndex = textBuilder.Length * 4 - 2; textBuilder.Append("</color>"); var hrefInfo = new HrefInfo { id = Mathf.Abs(tempId), startIndex = _startIndex, // 超链接里的文本起始顶点索引 endIndex = _endIndex, name = match.Groups[2].Value }; _listHrefInfos.Add(hrefInfo); } //更新表情 else { textBuilder.Append(text.Substring(textIndex, match.Index - textIndex)); SpriteAsset spriteAsset = SpriteFaceCache.GetAsset(tempId); SpriteInforGroup tempGroup = SpriteFaceCache.GetAsset(tempId, tempTag); float imgSize = spriteAsset == null ? 24.0f : spriteAsset.size; float imgWidth = spriteAsset == null ? 1.0f : spriteAsset.width; int vertexIndex = textBuilder.Length * 4; textBuilder.Append(@"<quad size=" + imgSize + " width=" + imgWidth + " />"); SpriteTagInfo spInfo = new SpriteTagInfo(); spInfo.vertId = vertexIndex; spInfo.faceId = tempId; spInfo.action = tempTag; spInfo.size = new Vector2(imgSize * imgWidth, imgSize); _imagesTagInfoList.Add(spInfo); } textIndex = match.Index + match.Length; } textBuilder.Append(text.Substring(textIndex, text.Length - textIndex)); return(textBuilder.ToString()); }
public static List <SpriteInforGroup> GetAssetSpriteInfor(Texture2D tex) { List <SpriteInforGroup> _listGroup = new List <SpriteInforGroup>(); string filePath = UnityEditor.AssetDatabase.GetAssetPath(tex); Object[] objects = UnityEditor.AssetDatabase.LoadAllAssetsAtPath(filePath); List <SpriteInfor> _tempSprite = new List <SpriteInfor>(); Vector2 _texSize = new Vector2(tex.width, tex.height); for (int i = 0; i < objects.Length; i++) { if (objects[i].GetType() != typeof(Sprite)) { continue; } SpriteInfor temp = new SpriteInfor(); Sprite sprite = objects[i] as Sprite; temp.ID = i; temp.name = sprite.name; temp.pivot = sprite.pivot; temp.rect = sprite.rect; temp.sprite = sprite; string tagName = sprite.name; if (_isAutoGroup) { tagName = getGroupName(tagName); } temp.tag = tagName; temp.uv = GetSpriteUV(_texSize, sprite.rect); _tempSprite.Add(temp); } for (int i = 0; i < _tempSprite.Count; i++) { SpriteInforGroup _tempGroup = new SpriteInforGroup(); _tempGroup.tag = _tempSprite[i].tag; //_tempGroup.size = 24.0f; //_tempGroup.width = 1.0f; _tempGroup.listSpriteInfor = new List <SpriteInfor>(); _tempGroup.listSpriteInfor.Add(_tempSprite[i]); for (int j = i + 1; j < _tempSprite.Count; j++) { if (_tempGroup.tag == _tempSprite[j].tag) { _tempGroup.listSpriteInfor.Add(_tempSprite[j]); _tempSprite.RemoveAt(j); j--; } } _listGroup.Add(_tempGroup); _tempSprite.RemoveAt(i); i--; } return(_listGroup); }
//设置动画 动作 public void setIndexAction(int index, string action) { if (m_index == index && m_actoin == action) { return; } m_index = index; m_actoin = action; _infoGroup = SpriteFaceCache.GetAsset(m_index, m_actoin); tickTime = SpriteFaceCache.GetAsset(m_index).tickTime; }
static public int get_width(IntPtr l) { try { SpriteInforGroup self = (SpriteInforGroup)checkSelf(l); pushValue(l, true); pushValue(l, self.width); return(2); } catch (Exception e) { return(error(l, e)); } }
static public int constructor(IntPtr l) { try { SpriteInforGroup o; o = new SpriteInforGroup(); pushValue(l, true); pushValue(l, o); return(2); } catch (Exception e) { return(error(l, e)); } }
/// <summary> /// 新增标签 /// </summary> private void AddTagSure() { SpriteInforGroup sig = new SpriteInforGroup(); sig.Tag = _addTagName; sig.ListSpriteInfor = new List <SpriteInfor>(); _spriteAsset.ListSpriteGroup.Insert(0, sig); Init(); EditorUtility.SetDirty(_spriteAsset); }
static public int set_listSpriteInfor(IntPtr l) { try { SpriteInforGroup self = (SpriteInforGroup)checkSelf(l); System.Collections.Generic.List <SpriteInfor> v; checkType(l, 2, out v); self.listSpriteInfor = v; pushValue(l, true); return(1); } catch (Exception e) { return(error(l, e)); } }
static public int set_tag(IntPtr l) { try { SpriteInforGroup self = (SpriteInforGroup)checkSelf(l); System.String v; checkType(l, 2, out v); self.tag = v; pushValue(l, true); return(1); } catch (Exception e) { return(error(l, e)); } }
public static List <SpriteInforGroup> GetAssetSpriteInfor(Texture2D tex) { List <SpriteInforGroup> _listGroup = new List <SpriteInforGroup>(); string filePath = UnityEditor.AssetDatabase.GetAssetPath(tex); Object[] objects = UnityEditor.AssetDatabase.LoadAllAssetsAtPath(filePath); List <SpriteInfor> _tempSprite = new List <SpriteInfor>(); for (int i = 0; i < objects.Length; i++) { if (objects[i].GetType() != typeof(Sprite)) { continue; } SpriteInfor temp = new SpriteInfor(); Sprite sprite = objects[i] as Sprite; temp.ID = i; temp.name = sprite.name; temp.pivot = sprite.pivot; temp.rect = sprite.rect; temp.sprite = sprite; temp.tag = sprite.name; _tempSprite.Add(temp); } for (int i = 0; i < _tempSprite.Count; i++) { SpriteInforGroup _tempGroup = new SpriteInforGroup(); _tempGroup.tag = _tempSprite[i].tag; _tempGroup.listSpriteInfor = new List <SpriteInfor>(); _tempGroup.listSpriteInfor.Add(_tempSprite[i]); for (int j = 0; j < _tempSprite.Count; j++) { if (j > i && _tempGroup.tag == _tempSprite[j].tag) { _tempGroup.listSpriteInfor.Add(_tempSprite[j]); _tempSprite.RemoveAt(j); j--; } } _listGroup.Add(_tempGroup); _tempSprite.RemoveAt(i); i--; } return(_listGroup); }
static List <SpriteInforGroup> GetStaticList(List <SpriteInfor> _tempSprite) { List <SpriteInforGroup> _listGroup = new List <SpriteInforGroup>(_tempSprite.Count); for (int i = 0; i < _tempSprite.Count; i++) { SpriteInforGroup _tempGroup = new SpriteInforGroup(); _tempGroup.Tag = _tempSprite[i].Tag; //_tempGroup.Size = 24.0f; //_tempGroup.Width = 1.0f; _tempGroup.ListSpriteInfor = new List <SpriteInfor>(); _tempGroup.ListSpriteInfor.Add(_tempSprite[i]); _listGroup.Add(_tempGroup); } return(_listGroup); }
/// <summary> /// 改变sprite隶属的组 /// </summary> private void ChangeTag(string newTag, SpriteInfor si) { if (newTag == si.tag) { return; } //从旧的组中移除 SpriteInforGroup oldSpriteInforGroup = spriteAsset.listSpriteGroup.Find( delegate(SpriteInforGroup sig) { return(sig.tag == si.tag); }); if (oldSpriteInforGroup != null && oldSpriteInforGroup.listSpriteInfor.Contains(si)) { oldSpriteInforGroup.listSpriteInfor.Remove(si); } //如果旧的组为空,则删掉旧的组 if (oldSpriteInforGroup.listSpriteInfor.Count <= 0) { spriteAsset.listSpriteGroup.Remove(oldSpriteInforGroup); Init(); } si.tag = newTag; //添加到新的组 SpriteInforGroup newSpriteInforGroup = spriteAsset.listSpriteGroup.Find( delegate(SpriteInforGroup sig) { return(sig.tag == newTag); }); if (newSpriteInforGroup != null) { newSpriteInforGroup.listSpriteInfor.Add(si); newSpriteInforGroup.listSpriteInfor.Sort((a, b) => a.ID.CompareTo(b.ID)); } EditorUtility.SetDirty(spriteAsset); }
static List <SpriteInforGroup> GetAnimationList(List <SpriteInfor> spriteList) { SortedDictionary <string, SpriteInforGroup> dic = new SortedDictionary <string, SpriteInforGroup>(); for (int i = 0; i < spriteList.Count; i++) { string[] info = spriteList[i].Name.Split('_'); if (info.Length != 2) { Debug.Log("sprite name format error, should be xxx_N, like happy_0, happy_1, etc"); continue; } string tag = info[0]; spriteList[i].Tag = tag; if (dic.ContainsKey(tag)) { dic[tag].ListSpriteInfor.Insert(int.Parse(info[1]), spriteList[i]); } else { SpriteInforGroup group = new SpriteInforGroup(); group.Tag = tag; group.ListSpriteInfor = new List <SpriteInfor>(); group.ListSpriteInfor.Insert(int.Parse(info[1]), spriteList[i]); dic.Add(tag, group); } } List <SpriteInforGroup> listGroup = new List <SpriteInforGroup>(dic.Count); foreach (var v in dic) { listGroup.Add(v.Value); } return(listGroup); }
void Start() { _infoGroup = SpriteFaceCache.GetAsset(m_index, m_actoin); tickTime = SpriteFaceCache.GetAsset(m_index).tickTime; }
private string GetOutputText() { _spriteInfo = new Dictionary <int, SpriteTagInfo>(); StringBuilder textBuilder = new StringBuilder(); int textIndex = 0; foreach (Match match in _inputTagRegex.Matches(text)) { int tempId = 0; if (!string.IsNullOrEmpty(match.Groups[1].Value) && !match.Groups[1].Value.Equals("-")) { tempId = int.Parse(match.Groups[1].Value); } string tempTag = match.Groups[2].Value; //更新超链接 if (tempId < 0) { textBuilder.Append(text.Substring(textIndex, match.Index - textIndex)); textBuilder.Append("<color=blue>"); int startIndex = textBuilder.Length * 4; textBuilder.Append("[" + match.Groups[2].Value + "]"); int endIndex = textBuilder.Length * 4 - 2; textBuilder.Append("</color>"); var hrefInfo = new HrefInfo { Id = Mathf.Abs(tempId), StartIndex = startIndex, // 超链接里的文本起始顶点索引 EndIndex = endIndex, Name = match.Groups[2].Value }; _listHrefInfos.Add(hrefInfo); } //更新表情 else { if (!_inlineManager.IndexSpriteInfo.ContainsKey(tempId) || !_inlineManager.IndexSpriteInfo[tempId].ContainsKey(tempTag)) { continue; } SpriteInforGroup tempGroup = _inlineManager.IndexSpriteInfo[tempId][tempTag]; textBuilder.Append(text.Substring(textIndex, match.Index - textIndex)); int tempIndex = textBuilder.Length * 4; textBuilder.Append(@"<quad size=" + tempGroup.Size + " width=" + tempGroup.Width + " />"); SpriteTagInfo tempSpriteTag = new SpriteTagInfo { Id = tempId, Tag = tempTag, Size = new Vector2(tempGroup.Size * tempGroup.Width, tempGroup.Size), Pos = new Vector3[4], Uv = tempGroup.ListSpriteInfor[0].Uv }; if (!_spriteInfo.ContainsKey(tempIndex)) { _spriteInfo.Add(tempIndex, tempSpriteTag); } } textIndex = match.Index + match.Length; } textBuilder.Append(text.Substring(textIndex, text.Length - textIndex)); return(textBuilder.ToString()); }
public override void OnInspectorGUI() { _ve2ScorllView = GUILayout.BeginScrollView(_ve2ScorllView); #region 标题栏 EditorGUILayout.HelpBox("Number Of Tags:" + _spriteAsset.ListSpriteGroup.Count + " Number Of Group:" + _spriteAsset.ListSpriteGroup.Count, MessageType.Info); GUILayout.BeginVertical("HelpBox"); GUILayout.BeginHorizontal(); _spriteAsset.Id = EditorGUILayout.IntField("ID:", _spriteAsset.Id); // _playSpeed = EditorGUILayout.FloatField("FrameSpeed", _playSpeed); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); _spriteAsset.IsStatic = EditorGUILayout.Toggle("Static:", _spriteAsset.IsStatic); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Add Tag")) { _addTag = !_addTag; } GUILayout.EndHorizontal(); if (_addTag) { GUILayout.BeginHorizontal(); _addTagName = EditorGUILayout.TextField(_addTagName); if (GUILayout.Button("sure", "minibutton")) { if (_addTagName == "") { Debug.Log("请输入新建标签的名称!"); } else { SpriteInforGroup spriteInforGroup = _spriteAsset.ListSpriteGroup.Find( delegate(SpriteInforGroup sig) { return(sig.Tag == _addTagName); }); if (spriteInforGroup != null) { Debug.Log("该标签已存在!"); } else { AddTagSure(); } } } GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); if (GUILayout.Button("Clear Tag")) { ClearTag(); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.BeginHorizontal(); GUILayout.Label(""); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); #endregion for (int i = 0; i < _spriteAsset.ListSpriteGroup.Count; i++) { GUILayout.BeginHorizontal("HelpBox"); #region 展开与收缩按钮 if (GUILayout.Button(_spriteAsset.ListSpriteGroup[i].Tag, _showIndex == i ? "OL Minus" : "OL Plus")) { if (_showIndex == i) { _showIndex = -1; } else { _showIndex = i; } } #endregion GUILayout.BeginHorizontal(); GUILayout.Label("Size:", GUILayout.Width(40)); _spriteAsset.ListSpriteGroup[i].Size = EditorGUILayout.FloatField("", _spriteAsset.ListSpriteGroup[i].Size, GUILayout.Width(40)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Width:", GUILayout.Width(40)); _spriteAsset.ListSpriteGroup[i].Width = EditorGUILayout.FloatField("", _spriteAsset.ListSpriteGroup[i].Width, GUILayout.Width(40)); GUILayout.EndHorizontal(); #region 未展开的sprite组,播放序列帧动画(帧数大于1的序列帧动画才播放) if (_showIndex != i && _spriteAsset.ListSpriteGroup[i].ListSpriteInfor.Count > 0) { if (_playIndexs[i] >= _spriteAsset.ListSpriteGroup[i].ListSpriteInfor.Count) { _playIndexs[i] = 0; } GUI.enabled = false; EditorGUILayout.ObjectField("", _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[_playIndexs[i]].Sprite, typeof(Sprite), false); GUI.enabled = true; } #endregion GUILayout.EndHorizontal(); #region 展开的sprite组,显示所有sprite属性 if (_showIndex == i) { for (int j = 0; j < _spriteAsset.ListSpriteGroup[i].ListSpriteInfor.Count; j++) { GUILayout.BeginHorizontal("sprite" + j, "window"); _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Sprite = EditorGUILayout.ObjectField("", _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Sprite, typeof(Sprite), false, GUILayout.Width(80)) as Sprite; GUILayout.FlexibleSpace(); GUILayout.BeginVertical(); GUI.enabled = false; GUILayout.BeginHorizontal(); GUILayout.Label("ID:", GUILayout.Width(50)); _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Id = EditorGUILayout.IntField(_spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Id); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Name:", GUILayout.Width(50)); _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Name = EditorGUILayout.TextField(_spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Name); GUILayout.EndHorizontal(); GUI.enabled = true; GUILayout.BeginHorizontal(); GUILayout.Label("Tag:", GUILayout.Width(50)); if (GUILayout.Button(_spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Tag, "MiniPopup")) { GenericMenu gm = new GenericMenu(); for (int n = 0; n < _tags.Count; n++) { int i2 = i; int j2 = j; int n2 = n; gm.AddItem(new GUIContent(_tags[n2]), false, delegate() { ChangeTag(_tags[n2], _spriteAsset.ListSpriteGroup[i2].ListSpriteInfor[j2]); }); } gm.ShowAsContext(); } GUILayout.EndHorizontal(); GUI.enabled = false; GUILayout.BeginHorizontal(); GUILayout.Label("Pivot:", GUILayout.Width(50)); EditorGUILayout.Vector2Field("", _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Pivot); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Rect:", GUILayout.Width(50)); EditorGUILayout.RectField("", _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Rect); GUILayout.EndHorizontal(); for (int m = 0; m < _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Uv.Length; m++) { GUILayout.BeginHorizontal(); GUILayout.Label("UV" + m + ":", GUILayout.Width(50)); EditorGUILayout.Vector2Field("", _spriteAsset.ListSpriteGroup[i].ListSpriteInfor[j].Uv[m]); GUILayout.EndHorizontal(); } GUI.enabled = true; GUILayout.EndVertical(); GUILayout.EndHorizontal(); } } #endregion } GUILayout.EndScrollView(); //unity EditorUtility.SetDirty(_spriteAsset); }
private string GetOutputText() { _SpriteInfo = new Dictionary <int, SpriteTagInfo>(); StringBuilder _textBuilder = new StringBuilder(); int _textIndex = 0; foreach (Match match in _InputTagRegex.Matches(text)) { int _tempID = 0; if (!string.IsNullOrEmpty(match.Groups[1].Value)) { _tempID = int.Parse(match.Groups[1].Value); } string _tempTag = match.Groups[2].Value; //更新超链接 if (_tempID == -1) { _textBuilder.Append(text.Substring(_textIndex, match.Index - _textIndex)); _textBuilder.Append("<color=blue>"); int _startIndex = _textBuilder.Length * 4; _textBuilder.Append("[" + match.Groups[2].Value + "]"); int _endIndex = _textBuilder.Length * 4 - 2; _textBuilder.Append("</color>"); var hrefInfo = new HrefInfo { startIndex = _startIndex, // 超链接里的文本起始顶点索引 endIndex = _endIndex, name = match.Groups[2].Value }; _ListHrefInfos.Add(hrefInfo); } //更新表情 else { if (!_InlineManager._IndexSpriteInfo.ContainsKey(_tempID) || !_InlineManager._IndexSpriteInfo[_tempID].ContainsKey(_tempTag)) { continue; } SpriteInforGroup _tempGroup = _InlineManager._IndexSpriteInfo[_tempID][_tempTag]; _textBuilder.Append(text.Substring(_textIndex, match.Index - _textIndex)); int _tempIndex = _textBuilder.Length * 4; _textBuilder.Append(@"<quad size=" + _tempGroup.size + " width=" + _tempGroup.width + " />"); SpriteTagInfo _tempSpriteTag = new SpriteTagInfo { _ID = _tempID, _Tag = _tempTag, _Size = new Vector2(_tempGroup.size * _tempGroup.width, _tempGroup.size), _Pos = new Vector3[4], _UV = _tempGroup.listSpriteInfor[0].uv }; if (!_SpriteInfo.ContainsKey(_tempIndex)) { _SpriteInfo.Add(_tempIndex, _tempSpriteTag); } } _textIndex = match.Index + match.Length; } _textBuilder.Append(text.Substring(_textIndex, text.Length - _textIndex)); return(_textBuilder.ToString()); }
public static List <SpriteInforGroup> GetAssetSpriteInfor(Texture2D tex, bool isstatic = true) { if (isstatic == false) { taglist.Clear(); } List <SpriteInforGroup> _listGroup = new List <SpriteInforGroup>(); string filePath = UnityEditor.AssetDatabase.GetAssetPath(tex); Object[] objects = UnityEditor.AssetDatabase.LoadAllAssetsAtPath(filePath); List <SpriteInfor> _tempSprite = new List <SpriteInfor>(); Vector2 _texSize = new Vector2(tex.width, tex.height); for (int i = 0; i < objects.Length; i++) { if (objects[i].GetType() != typeof(Sprite)) { continue; } SpriteInfor temp = new SpriteInfor(); Sprite sprite = objects[i] as Sprite; string nametemp = sprite.name.Split('_')[0]; if (isstatic == false) { /* if (taglist.Contains(nametemp)) * continue; * taglist.Add(nametemp);*/ temp.tag = nametemp;//prite.name; } else { temp.tag = sprite.name; } temp.ID = i; temp.name = sprite.name; temp.pivot = sprite.pivot; temp.rect = sprite.rect; temp.sprite = sprite; temp.uv = GetSpriteUV(_texSize, sprite.rect); _tempSprite.Add(temp); } for (int i = 0; i < _tempSprite.Count; i++) { SpriteInforGroup _tempGroup = new SpriteInforGroup(); _tempGroup.tag = _tempSprite[i].tag; //_tempGroup.size = 24.0f; //_tempGroup.width = 1.0f; _tempGroup.listSpriteInfor = new List <SpriteInfor>(); _tempGroup.listSpriteInfor.Add(_tempSprite[i]); for (int j = i + 1; j < _tempSprite.Count; j++) { if (_tempGroup.tag == _tempSprite[j].tag) { _tempGroup.listSpriteInfor.Add(_tempSprite[j]); _tempSprite.RemoveAt(j); j--; } } _listGroup.Add(_tempGroup); _tempSprite.RemoveAt(i); i--; } return(_listGroup); }