public void SaveQuaddTreeTo(string file_tree, string file_object) { List <string> quadtree_info = new List <string>(); List <string> object_info = new List <string>(); List <int> list_id = new List <int>(); root.Traversal(object_info, quadtree_info, list_id); //Ghi file cây quadtree using (StreamWriter sw = new StreamWriter(file_tree, false)) { sw.WriteLine(root.BOUNDS.Width.ToString()); foreach (string node_info in quadtree_info) { sw.WriteLine(node_info); } sw.Close(); } //Ghi file đối tượng using (StreamWriter sw = new StreamWriter(file_object, false)) { sw.WriteLine(object_info.Count.ToString()); foreach (string o_info in object_info) { sw.WriteLine(o_info); } sw.Close(); } }
public void Traversal(List <string> object_info, List <string> quadtree_info, List <int> list_id) { //Lấy thông tin node mẹ String parent_info = String.Format("{0} {1} {2} {3}", id, bounds.X, bounds.Y, bounds.Width); //Kiểm tra đệ quy các node lá if (top_left != null) { quadtree_info.Add(parent_info); top_left.Traversal(object_info, quadtree_info, list_id); top_right.Traversal(object_info, quadtree_info, list_id); bot_left.Traversal(object_info, quadtree_info, list_id); bot_right.Traversal(object_info, quadtree_info, list_id); } else { //Nếu là node lá cuối cùng thì lấy danh sách đối tượng. parent_info += " "; foreach (GameObject go in list_object) { //Kiểm tra đối tượng có được thêm trước đó hay chưa bool is_exist = false; foreach (int o_id in list_id) { if (o_id == go.ID) { is_exist = true; break; } } //Nếu chưa duyệt qua đối tượng thì thêm ID đối tượng //vào object_info if (!is_exist) { list_id.Add(go.ID); object_info.Add(go.ToString()); } parent_info += go.ID + " "; } quadtree_info.Add(parent_info); } }