天津23维预案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

643 lines
21 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using System;
using AX.MessageSystem;
/// <summary>
/// 假数据
/// </summary>
public class Arrie
{
public string name;
public Arrie(string name)
{
this.name = name;
}
}
public class HorizontalTreeSet : MonoBehaviour
{
/// <summary>
/// 水平结构展示
/// </summary>
//public List<Arrie> SaveList = new List<Arrie>();
public GameObject Item;
[HideInInspector]
public Transform father;
private Button AddTree;
private Button deletTree;
public static HorizontalTreeSet instance_;
private void Awake()
{
if (instance_==null)
{
instance_ = this;
}
}
private void Start()
{
//假数据
//Arrie ar1 = new Arrie("一.第一个");
//SaveList.Add(ar1);
//Arrie ar2 = new Arrie("二.第二个");
//SaveList.Add(ar2);
//Arrie ar3 = new Arrie("三.第三个");
//SaveList.Add(ar3);
//Arrie ar4 = new Arrie("四.第四个");
//SaveList.Add(ar4);
//Arrie ar5 = new Arrie("五.第五个");
//SaveList.Add(ar5);
//Arrie ar6 = new Arrie("六.第六个");
//SaveList.Add(ar6);
//Arrie ar7 = new Arrie("七.第七个");
//SaveList.Add(ar7);
//Arrie ar8 = new Arrie("八.第八个");
//SaveList.Add(ar8);
//Arrie ar9 = new Arrie("九.第九个");
//SaveList.Add(ar9);
//Arrie ar10 = new Arrie("十.第十个");
//SaveList.Add(ar10);
//Arrie ar11 = new Arrie("十一.第十一个");
//SaveList.Add(ar11);
//Arrie ar12 = new Arrie("十二.第十二个");
//SaveList.Add(ar12);
//寻找物体
father = transform.Find("Group");
AddTree = transform.Find("AddTreeItem").GetComponent<Button>();
deletTree= transform.Find("DeletTreeItem").GetComponent<Button>();
AddTree.onClick.AddListener(AddTreeItem);
deletTree.onClick.AddListener(deletTreeItem);
CreateItem();
}
/// <summary>
/// 获取低图长度
/// </summary>
public float GetWidth()
{
return transform.Find("Image").GetComponent<RectTransform>().sizeDelta.x;
}
/// <summary>
/// 创建一级节点
/// </summary>
GameObject game;
public List<TreeViewData> SaveList = null;
public void CreateItem()
{
//生成先销毁子物体
foreach (Transform child in father)
{
Destroy(child.gameObject);
}
//生成数据
List<TreeViewData> datas = new List<TreeViewData>();
SaveList = new List<TreeViewData>();
NodeSet.Instance.GetAllDates(ref datas);
for (int i = 0; i < datas.Count; i++)
{
TreeViewData arr = datas[i] as TreeViewData;
if (arr.Hierarchy == 1)
{
SaveList.Add(arr);
}
}
//生成一级目录
for (int i = 0; i < SaveList.Count; i++)
{
TreeViewData arr = SaveList[i] as TreeViewData;
if (arr.Hierarchy == 1)
{
GameObject item = Instantiate(Item) as GameObject;
item.transform.parent = father;
item.transform.localScale = new Vector3(1, 1, 1);
item.transform.Find("Text").GetComponent<Text>().text = BigNumber((i + 1).ToString());
if (i == 0)
{
item.GetComponent<TreeOneLevel>().GetMessage(arr, true, BigNumber((i + 1).ToString()));
item.GetComponent<Toggle>().isOn = true;
item.transform.Find("Text").GetComponent<Text>().text = "一."+arr.Name;
NodeSecondLevelControl.Instance.GenerateNodeAccordingFirstLevelID(arr.ID);
}
item.GetComponent<TreeOneLevel>().GetMessage(arr, false, BigNumber((i + 1).ToString()));
item.GetComponent<Toggle>().group = father.GetComponent<ToggleGroup>();
CreateOperation(i, item);
}
}
}
/// <summary>
/// 数字转换
/// </summary>
/// <returns></returns>
public string BigNumber(string Num)
{
string Number = "";
int result = 0;
bool text = int.TryParse(Num,out result);
if (text)
{
switch (Num)
{
case "1": Number = "一"; break;
case "2": Number = "二"; break;
case "3": Number = "三"; break;
case "4": Number = "四"; break;
case "5": Number = "五"; break;
case "6": Number = "六"; break;
case "7": Number = "七"; break;
case "8": Number = "八"; break;
case "9": Number = "九"; break;
case "10": Number = "十"; break;
case "11": Number = "十一"; break;
case "12": Number = "十二"; break;
}
}
else
{
switch (Num)
{
case "一": Number = "1"; break;
case "二": Number = "2"; break;
case "三": Number = "3"; break;
case "四": Number = "4"; break;
case "五": Number = "5"; break;
case "六": Number = "6"; break;
case "七": Number = "7"; break;
case "八": Number = "8"; break;
case "九": Number = "9"; break;
case "十": Number = "10"; break;
case "十一": Number = "11"; break;
case "十二": Number = "12"; break;
}
}
return Number;
}
public void CreateOperation(int i,GameObject item)
{
float imagewith = GetWidth();//获取空间的长度
float every = imagewith / SaveList.Count;//计算每一段的长度
//当数组长度大于4固定第一条的长度
if (SaveList.Count > 4)
{
every = imagewith / 4;
}
else
{
every = imagewith / SaveList.Count;
}
//特殊生成第一条数据的长度
if (i == 0)
{
if (SaveList.Count > 2)//当大于二的时候正常
{
item.GetComponent<RectTransform>().sizeDelta = new Vector2(every * 2.5f, 49);
float temp = item.GetComponent<RectTransform>().sizeDelta.x / 2;
item.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp * (i + 1) + (i * temp), 38);
game = item;
}
else
{
if (SaveList.Count == 1)//当等于一的时候铺面空间
{
item.GetComponent<RectTransform>().sizeDelta = new Vector2(imagewith, 49);
float temp = item.GetComponent<RectTransform>().sizeDelta.x / 2;
item.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp * (i + 1) + (i * temp), 38);
}
else//当等于二的时候重新规定第一条在空间中的比例
{
item.GetComponent<RectTransform>().sizeDelta = new Vector2(every * 1.8f, 49);
float temp = item.GetComponent<RectTransform>().sizeDelta.x / 2;
item.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp * (i + 1) + (i * temp), 38);
game = item;
}
}
}
else
{
item.GetComponent<RectTransform>().sizeDelta = new Vector2((imagewith - game.GetComponent<RectTransform>().sizeDelta.x) / (SaveList.Count - 1), 49);
float temp = game.GetComponent<RectTransform>().sizeDelta.x / 2;
item.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp * 2 + (item.GetComponent<RectTransform>().sizeDelta.x) / 2 + item.GetComponent<RectTransform>().sizeDelta.x * (i - 1), 38);
}
}//生成初始计算位置
/// <summary>
/// 点击一级节点计算
/// </summary>
float MaxSize;//记录最大的宽度
float minSize;//记录最小的宽度
#region // 相关操作
public void CheckSize()//检查最大最小值
{
foreach (Transform child in father)
{
if (child.GetComponent<RectTransform>().sizeDelta.x>400f)
{
MaxSize = child.GetComponent<RectTransform>().sizeDelta.x;
}
else
{
minSize = child.GetComponent<RectTransform>().sizeDelta.x;
}
}
}
public virtual void Operation(GameObject TreeGame)
{
CheckSize();
//计算大小
TreeGame.transform.GetComponent<RectTransform>().sizeDelta = new Vector2(MaxSize, 49);
foreach (Transform child in father)
{
if (!child.GetComponent<TreeOneLevel>().Max)
{
child.transform.GetComponent<RectTransform>().sizeDelta = new Vector2(minSize, 49);
}
}
//计算位置
List<GameObject> treeList = new List<GameObject>();
foreach (Transform child in father)
{
treeList.Add(child.gameObject);
}
float sizeDeltax = 0;
for (int i = 0; i < treeList.Count; i++)
{
GameObject obj = treeList[i] as GameObject;
float temp = obj.GetComponent<RectTransform>().sizeDelta.x / 2;
if (i == 0)
{
obj.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp, 38);
sizeDeltax += temp*2;
}
else
{
obj.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(sizeDeltax+ temp, 38);
sizeDeltax += temp * 2;
}
}
}
public virtual void Operation(GameObject TreeGame,GameObject game)
{
}
#endregion
/// <summary>
/// 新建一级节点
/// </summary>
public int Num = 0;
public void AddTreeItem()
{
GameObject inputwindow = Instantiate(Resources.Load<GameObject>("Prefabs/UI/InputWindow"));
inputwindow.GetComponent<InputWindowManager>().SetWindow("信息编辑", AddOKFunc, null);
inputwindow.name = "TheInputWindow";
if (SaveList.Count >=12)
{
MessageDispatcher.SendMessage("Operatinghints", (object)"一级节点已满");
return;
}
}
private void AddOKFunc()
{
var window = GameObject.Find("TheInputWindow");
var inputStr = window.transform.Find("InputField").GetComponent<InputField>().text;
if (inputStr == "")
{
MessageDispatcher.SendMessage("Operatinghints", (object)"请输入名称");
return;
}
DoSomething dothing = new DoSomething(this);
if (dothing.CheckName(inputStr))
{
MessageDispatcher.SendMessage("Operatinghints", (object)"已经有此名字");
return;
}
TreeViewData data = new TreeViewData();
data.Name = inputStr;
data.ID = NodeSet.Instance.GetNextID();
data.ParentID = 0;
data.Hierarchy =1;
Destroy(window.gameObject);
if (father.childCount == 0)
{
Num++;
}
else
{
Num = int.Parse(father.transform.GetChild(father.childCount - 1).GetComponent<TreeOneLevel>().ShowNum) + 1;
}
GameObject item = Instantiate(Item) as GameObject;
item.transform.parent = father;
item.transform.localScale = new Vector3(1, 1, 1);
item.GetComponent<TreeOneLevel>().GetMessage(data, false, BigNumber(Num.ToString()));
item.GetComponent<TreeOneLevel>().SetNumber(BigNumber(Num.ToString()));
item.GetComponent<Toggle>().group = father.GetComponent<ToggleGroup>();
dothing.Operation(item);
NodeSet.Instance.ADDXml(inputStr, data);
}
/// <summary>
/// 删除一级节点
/// </summary>
public void deletTreeItem()
{
DoSomething dothing = new DoSomething(this);
GameObject obj = dothing.CheckToggle();
if (obj != null)
{
SaveList.Remove(obj.GetComponent<TreeOneLevel>().arrie);
int Index = obj.transform.GetSiblingIndex();
Destroy(obj);
GameObject NewToggle= SetToggle(Index);
if (NewToggle != null)
{
NewToggle.GetComponent<Toggle>().isOn = true;
dothing.Operation(NewToggle, obj);
SetNumber(obj);
NewToggle.GetComponent<TreeOneLevel>().DeleteSetNumber();
}
}
}
public GameObject SetToggle(int Index)//前面有物体返回前面,没有则返回后面的物体
{
foreach (Transform child in father)
{
if (child.GetSiblingIndex()+1==Index)
{
return child.gameObject;
}
if (child.GetSiblingIndex() - 1 == Index)
{
return child.gameObject;
}
}
return null;
}
public void SetNumber(GameObject NewToggle)//重新排序名号
{
DoSomething dothing = new DoSomething(this);
List<GameObject> List = dothing.ReturnList();
for (int i = 0; i < List.Count; i++)
{
GameObject obj = List[i] as GameObject;
if (int.Parse(BigNumber(obj.GetComponent<TreeOneLevel>().ShowNum)) > int.Parse(BigNumber(NewToggle.GetComponent<TreeOneLevel>().ShowNum)))
{
int Num = int.Parse(BigNumber(obj.GetComponent<TreeOneLevel>().ShowNum));
obj.GetComponent<TreeOneLevel>().SetNumber(BigNumber((Num - 1).ToString()));
}
}
}
/// <summary>
/// 获取选中的ID
/// </summary>
/// <returns></returns>
public int GetID()
{
DoSomething dothing = new DoSomething(this);
return dothing.GetCurID();
}
public GameObject GetChoseToggle(int i)//用于切换下一个节点
{
foreach (Transform child in father)
{
if (child.GetComponent<Toggle>().isOn)
{
int num = child.GetSiblingIndex();
GameObject obj = father.GetChild(num + i).gameObject ;
if (obj != null)
{
obj.GetComponent<Toggle>().isOn = true;
}
return obj;
}
}
return null;
}
}
public class DoSomething : HorizontalTreeSet
{
/// <summary>
/// 检查勾选物体 添加节点
/// </summary>
/// <returns></returns>
HorizontalTreeSet horizontal;
public DoSomething(HorizontalTreeSet horizontal)
{
this.horizontal = horizontal;
}
//获取选中的物体
public GameObject CheckToggle()
{
foreach (Transform child in horizontal.father)
{
if (child.GetComponent<Toggle>().isOn)
{
return child.gameObject;
}
}
return null;
}
//获取物体数组
public List<GameObject> ReturnList()
{
List<GameObject> List = new List<GameObject>();
foreach (Transform child in horizontal.father)
{
List.Add(child.gameObject);
}
return List;
}
//检查有没有相同名称
public bool CheckName(string Name)
{
for (int i = 0; i < horizontal.SaveList.Count; i++)
{
TreeViewData data = horizontal.SaveList[i] as TreeViewData;
if (data.Name.Equals(Name))
{
return true;
}
}
return false;
}
//返回选中的ID
public int GetCurID()
{
GameObject obj = CheckToggle();
if (obj)
{
return obj.GetComponent<TreeOneLevel>().arrie.ID;
}
return -1;
}
public override void Operation(GameObject TreeGame)//用于添加排序
{
horizontal.CheckSize();
//计算位置
List<GameObject> treeList = new List<GameObject>();
foreach (Transform child in horizontal.father)
{
treeList.Add(child.gameObject);
}
//当数组长度大于4固定第一条的长度
float imagewith = horizontal.GetWidth();//获取空间的长度
//float every = imagewith / SaveList.Count;//计算每一段的长度
float every;
//当数组长度大于4固定第一条的长度
if (horizontal.SaveList.Count > 4)
{
every = imagewith / 4;
}
else
{
every = imagewith / horizontal.SaveList.Count;
}
if (treeList.Count == 1)
{
TreeGame.GetComponent<RectTransform>().sizeDelta = new Vector2(imagewith, 49);
float temp = TreeGame.GetComponent<RectTransform>().sizeDelta.x / 2;
TreeGame.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp, 38);
TreeGame.GetComponent<Toggle>().isOn = true;
return;
}
else if (treeList.Count == 2)
{
CheckToggle().GetComponent<RectTransform>().sizeDelta = new Vector2(every * 1.8f, 49);
float temp = TreeGame.GetComponent<RectTransform>().sizeDelta.x / 2;
}
else
{
CheckToggle().GetComponent<RectTransform>().sizeDelta = new Vector2(every * 2.5f, 49);
}
treeList.Clear();
foreach (Transform child in horizontal.father)
{
treeList.Add(child.gameObject);
}
for (int i = 0; i < treeList.Count; i++)
{
GameObject item = treeList[i] as GameObject;
if (item != CheckToggle())
{
item.GetComponent<RectTransform>().sizeDelta = new Vector2((imagewith - CheckToggle().GetComponent<RectTransform>().sizeDelta.x) / (treeList.Count - 1), 49);
}
}
float sizeDeltax = 0;
for (int i = 0; i < treeList.Count; i++)
{
GameObject obj = treeList[i] as GameObject;
float temp = obj.GetComponent<RectTransform>().sizeDelta.x / 2;
if (i == 0)
{
obj.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp, 38);
sizeDeltax += temp * 2;
}
else
{
obj.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(sizeDeltax + temp, 38);
sizeDeltax += temp * 2;
}
}
}
public override void Operation(GameObject TreeGame,GameObject game) //重载用于删除排序
{
horizontal.CheckSize();
//计算位置
List<GameObject> treeList = new List<GameObject>();
foreach (Transform child in horizontal.father)
{
treeList.Add(child.gameObject);
}
treeList.Remove(game);
//当数组长度大于4固定第一条的长度
float imagewith = horizontal.GetWidth();//获取空间的长度
//float every = imagewith / SaveList.Count;//计算每一段的长度
float every;
//当数组长度大于4固定第一条的长度
if (treeList.Count > 4)
{
every = imagewith / 4;
}
else
{
every = imagewith / treeList.Count;
}
treeList.Clear();
foreach (Transform child in horizontal.father)
{
treeList.Add(child.gameObject);
}
treeList.Remove(game);
if (treeList.Count == 1)
{
TreeGame.GetComponent<RectTransform>().sizeDelta = new Vector2(imagewith, 49);
float temp = TreeGame.GetComponent<RectTransform>().sizeDelta.x / 2;
TreeGame.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp, 38);
TreeGame.GetComponent<Toggle>().isOn = true;
return;
}
else if (treeList.Count == 2)
{
TreeGame.GetComponent<RectTransform>().sizeDelta = new Vector2(every * 1.8f, 49);
float temp = TreeGame.GetComponent<RectTransform>().sizeDelta.x / 2;
}
else
{
TreeGame.GetComponent<RectTransform>().sizeDelta = new Vector2(every * 2.5f, 49);
}
for (int i = 0; i < treeList.Count; i++)
{
GameObject item = treeList[i] as GameObject;
if (item != TreeGame)
{
item.GetComponent<RectTransform>().sizeDelta = new Vector2((imagewith - TreeGame.GetComponent<RectTransform>().sizeDelta.x) / (treeList.Count - 1), 49);
}
}
float sizeDeltax = 0;
for (int i = 0; i < treeList.Count; i++)
{
GameObject obj = treeList[i] as GameObject;
float temp = obj.GetComponent<RectTransform>().sizeDelta.x / 2;
if (i == 0)
{
obj.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(temp, 38);
sizeDeltax += temp * 2;
}
else
{
obj.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(sizeDeltax + temp, 38);
sizeDeltax += temp * 2;
}
}
}
}