Tanoda
pb_PrefabBrowser.cs
Go to the documentation of this file.
1using NaughtyAttributes;
2using Newtonsoft.Json;
3using System.Collections;
4using System.Collections.Generic;
5using System.IO;
6using System.Linq;
7using System.Text;
8using UnityEngine;
9using UnityEngine.UI;
10
11namespace GILES.Interface
12{
13 public class pb_PrefabBrowser : MonoBehaviour
14 {
16 {
17 get
18 {
19 if (_instance == null)
20 {
21 // first search the scene for an instance
22 pb_PrefabBrowser[] scene = FindObjectsOfType<pb_PrefabBrowser>();
23
24 if (scene != null && scene.Length > 0)
25 {
26 _instance = scene[0];
27
28 for (int i = 1; i < scene.Length; i++)
29 {
30 pb_ObjectUtility.Destroy(scene[i]);
31 }
32 }
33 else
34 {
35 GameObject go = new GameObject();
36 go.name = "PrefabBrowser Singleton";
37 _instance = go.AddComponent<pb_PrefabBrowser>();
38 }
39 }
40
41 return _instance;
42 }
43 }
44 private static pb_PrefabBrowser _instance;
45 [Header("Local")] public GameObject Models;
46 public GameObject Videos, Pictures, Sounds, Helps, Unknown, Scripts;
47
48 [Header("Global")] public GameObject GModels;
50
51 [Header("Others")] public bool isGlobalNow;
52 public GameObject POIPrefab;
53 public GameObject PrefabBrowserDeleteButton;
54 public GameObject PrefabGlobalFileBadge;
55 public GameObject PrefabFileNameBadge;
56 public Scrollbar scrollbar;
57 private bool showGlobals = true;
58 private bool showLocals = true;
59 private string lastSearchValue = "";
60 internal readonly Dictionary<GameObject, LoadPanel> prefabs = new Dictionary<GameObject, LoadPanel>();
61 readonly Dictionary<GameObject, LoadPanel> globalPrefabs = new Dictionary<GameObject, LoadPanel>();
62 readonly Dictionary<GameObject, LoadPanel> uploadedModels = new Dictionary<GameObject, LoadPanel>();
63 readonly Dictionary<GameObject, LoadPanel> globalUploadedModels = new Dictionary<GameObject, LoadPanel>();
64 readonly List<string> filePaths = new List<string>();
65 readonly List<string> globalFilePaths = new List<string>();
66 readonly List<AssetBundle> assetBundles = new List<AssetBundle>();
67
68 private void Awake()
69 {
70 _instance = this;
71 }
72
73 public void ToggleGlobals()
74 {
75 showGlobals = !showGlobals;
76 SearchFilter(lastSearchValue);
77 }
78
79 public void ToggleLocals()
80 {
81 showLocals = !showLocals;
82 SearchFilter(lastSearchValue);
83 }
84
85
86 void Start()
87 {
88 if (Models == null) return;
89
90 var resourcePrefabs = pb_ResourceManager.LoadAll<GameObject>();
91 foreach (var o in resourcePrefabs) prefabs.Add(o, LoadPanel.None);
92
93#if UNITY_EDITOR
94 //var ab = AssetBundle.LoadFromFile(@"E:\Unity Local Projects\giles-master\Assets\AssetBundles\webglexport");
95 //assetBundles.Add(ab);
96 //foreach (var assetBundle in assetBundles)
97 //{
98 // var temp = assetBundle.LoadAllAssets<GameObject>();
99 // foreach (var o in temp)
100 // {
101 // prefabs.Add(o, LoadPanel.None);
102 // }
103 //}
104 //
105#endif
106 foreach (var keyPair in prefabs)
107 {
108 GameObject icon = null;
109 switch (keyPair.Value)
110 {
111 case LoadPanel.Models:
112 icon = Models.AddChild();
113 break;
114 case LoadPanel.Videos:
115 icon = Videos.AddChild();
116 break;
117 case LoadPanel.Pictures:
118 icon = Pictures.AddChild();
119 break;
120 case LoadPanel.Sounds:
121 icon = Sounds.AddChild();
122 break;
123 case LoadPanel.Helps:
124 icon = Helps.AddChild();
125 break;
126 case LoadPanel.Scripts:
127 icon = Scripts.AddChild();
128 break;
129
130 default:
131 icon = Unknown.AddChild();
132 break;
133 }
134
135 var button = icon.AddComponent<pb_PrefabBrowserItemButton>();
136 button.asset = keyPair.Key;
137 button.Initialize();
138 button.onClick.AddListener(pb_Hierarchy.instance.RebuildInspector);
139 Instantiate(PrefabBrowserDeleteButton, button.transform);
141 Instantiate(PrefabGlobalFileBadge, button.transform);
143 {
144 var nameLabel = Instantiate(PrefabFileNameBadge, button.transform);
145 nameLabel.GetComponentInChildren<Text>().text =
146#if !UNITY_WEBGL
147 Path.GetFileNameWithoutExtension
148#endif
149 (keyPair.Key.name.ToUpper());
150#if !UNITY_WEBGL
151 textFormatting(button, nameLabel.GetComponentInChildren<Text>(), keyPair.Key.name);
152#endif
153 }
154
155 icon.AddComponent<Mask>();
156 }
157
158#if !UNITY_WEBGL
159 var ssol = FindObjectOfType<StartStageOnLoad>();
160 if (ssol && ssol.filesToLoad != null/* && ssol.filesToLoad.Count > 0*/)
161 {
162 var withPath = GetFilesFullPath(ssol.filesToLoad.ToArray());
163 var envFiles = GetFilesFullPath(GetEnvFiles(ssol.levelName).ToArray());
164 var luaFiles = Directory.GetFiles(Application.streamingAssetsPath, "*.lua").ToList()
165 /*.Concat(Directory.GetDirectories(Application.streamingAssetsPath).ToList())*/;
166 //Debug.Log($"got {luaFiles.Count()} lua");
167 var allFile = envFiles;
168 allFile.AddRange(withPath);
169 allFile.AddRange(luaFiles);
170 StartCoroutine(FindObjectOfType<FileDragAndDrop>().ThreadedLoad(allFile.Distinct().ToList()));
171 }
172 else
173 {
174 var list = Directory.GetFiles(Application.streamingAssetsPath).ToList()
175 .Concat(Directory.GetDirectories(Application.streamingAssetsPath).ToList());
176 StartCoroutine(FindObjectOfType<FileDragAndDrop>().ThreadedLoad(list.ToList()));
177 }
178#else
179 StartCoroutine(WebGLLateLoadingFix());
180#endif
181 }
182
184 {
185 var withPath = GetFilesFullPath(ssol.filesToLoad.ToArray());
186 var envFiles = GetFilesFullPath(GetEnvFiles(ssol.levelName).ToArray());
187 var luaFiles = Directory.GetFiles(Application.streamingAssetsPath, "*.lua").ToList()
188 /*.Concat(Directory.GetDirectories(Application.streamingAssetsPath).ToList())*/;
189 //Debug.Log($"got {luaFiles.Count()} lua");
190 var allFile = envFiles;
191 allFile.AddRange(withPath);
192 allFile.AddRange(luaFiles);
193 StartCoroutine(FindObjectOfType<FileDragAndDrop>().ThreadedLoad(allFile.Distinct().ToList()));
194 }
195 private List<string> GetEnvFiles(string currentLevelName)
196 {
197 var retval = new List<string>();
198 var envs = new DirectoryInfo(Application.streamingAssetsPath)
199 .EnumerateFiles("*.env", SearchOption.AllDirectories).ToList();
200 var currentLoadedMap = envs.FirstOrDefault(x => x.Name == currentLevelName + ".env");
201 var env_path = Path.Combine(Application.streamingAssetsPath, "environment.env");
202 var json = "";
203 if (File.Exists(env_path) || currentLoadedMap != default(FileInfo))
204 {
205 var env = GameObject.Find("Environment");
206 if (env)
207 {
208 Destroy(env);
209 }
210
211 if (currentLoadedMap != default(FileInfo))
212 {
213 json = File.ReadAllText(currentLoadedMap.FullName);
214 }
215 else
216 {
217 json = File.ReadAllText(env_path);
218 }
219 }
220
221 var scenenodeJson = json.Remove(Macro.FindClosingBracketIndex(json) + 1).Remove(0, 1);
222 var sceneNode = JsonConvert.DeserializeObject<Serialization.pb_SceneNode>(scenenodeJson, Serialization.pb_Serialization.ConverterSettings);
223 Macro.GetAllPossibleFileName(sceneNode, ref retval);
224
225 return retval;
226 }
227
228 private List<string> GetFilesFullPath(string[] files,
229 SearchOption searchOption = SearchOption.AllDirectories)
230 {
231 var allfiles = Directory.EnumerateFiles(Application.streamingAssetsPath, "*", searchOption).ToList();
232 var retval = new List<string>();
233 foreach (var filepath in allfiles)
234 {
235 foreach (var file in files)
236 {
237 if (filepath.EndsWith(file))
238 {
239 retval.Add(filepath);
240 break;
241 }
242 }
243 }
244 return retval;
245 }
246
247 private void OnDestroy()
248 {
249 foreach (var assetBundle in assetBundles) assetBundle.Unload(true);
250 }
251
252 private bool flag = true;
253
254#if UNITY_WEBGL
255 private IEnumerator WebGLLateLoadingFix()
256 {
257 yield return new WaitForSeconds(1.0f);
258 flag = true;
259 }
260#endif
261
262 private void Update()
263 {
264 if (!flag) return;
265 if (LoadingManager.instance.MainLoading || LoadingManager.instance.isLoading) return;
266 flag = false;
267 ReloadAll();
268 }
269
270 public void DeleteAsset(GameObject asset)
271 {
272 if (uploadedModels.ContainsKey(asset))
273 {
274 uploadedModels.Remove(asset);
275 Debug.Log("Remove successful!");
276 }
277 else
278 {
279 Debug.LogError("Asset does not exists in the uploadedModels dictionary!");
280 }
281 }
282
283 public void ReloadAll()
284 {
285 if (Models == null) return;
286 StartCoroutine(ReloadWork());
287 }
288
289 private IEnumerator ReloadWork()
290 {
291 yield return new WaitForEndOfFrame();
292 //Reload();
293 //Reload(true);
295 yield return null;
297 }
298 [Button]
299 public void Reload(bool global = false)
300 {
301 if (global)
302 globalPrefabs.Clear();
303 else
304 prefabs.Clear();
305
306 ClearPanel(global);
307
308 var resourcePrefabs = pb_ResourceManager.LoadAll<GameObject>();
309 foreach (var o in resourcePrefabs) globalPrefabs.Add(o, LoadPanel.None);
310
311 foreach (var assetBundle in assetBundles)
312 {
313 var temp = assetBundle.LoadAllAssets<GameObject>();
314 foreach (var o in temp) prefabs.Add(o, LoadPanel.None);
315 }
316
317 if (global)
318 foreach (var o in globalUploadedModels)
319 globalPrefabs.Add(o.Key, o.Value);
320 else
321 foreach (var o in uploadedModels)
322 prefabs.Add(o.Key, o.Value);
323
324
325 var i = 0;
326 foreach (var keyPair in global ? globalPrefabs : prefabs)
327 {
328 if (keyPair.Key == null) continue;
329
330 GameObject icon = null;
331
332 switch (keyPair.Value)
333 {
334 case LoadPanel.Models:
335 icon = global ? /*G*/Models.AddChild() : Models.AddChild();
336 break;
337 case LoadPanel.Videos:
338 icon = global ? /*G*/Videos.AddChild() : Videos.AddChild();
339 break;
340 case LoadPanel.Pictures:
341 icon = global ? /*G*/Pictures.AddChild() : Pictures.AddChild();
342 break;
343 case LoadPanel.Sounds:
344 icon = global ? /*G*/Sounds.AddChild() : Sounds.AddChild();
345 break;
346 case LoadPanel.Helps:
347 icon = global ? /*G*/Helps.AddChild() : Helps.AddChild();
348 break;
349 case LoadPanel.Scripts:
350 icon = global ? /*G*/Scripts.AddChild() : Scripts.AddChild();
351 break;
352
353 default:
354 icon = global ? /*G*/Unknown.AddChild() : Unknown.AddChild();
355 break;
356 }
357
358 var button = icon.AddComponent<pb_PrefabBrowserItemButton>();
359 button.asset = keyPair.Key;
360
361 if (global)
362 button.fullFilePath = globalFilePaths[i];
363 else
364 button.fullFilePath = filePaths[i];
365
366 button.Initialize();
367 button.onClick.AddListener(pb_Hierarchy.instance.RebuildInspector);
368 Instantiate(PrefabBrowserDeleteButton, button.transform);
369 if (global && PrefabGlobalFileBadge)
370 Instantiate(PrefabGlobalFileBadge, button.transform);
371
373 {
374 var nameLabel = Instantiate(PrefabFileNameBadge, button.transform);
375 nameLabel.GetComponentInChildren<Text>().text =
376#if !UNITY_WEBGL
377 Path.GetFileNameWithoutExtension
378#endif
379 (keyPair.Key.name.ToUpper());
380#if !UNITY_WEBGL
381 textFormatting(button, nameLabel.GetComponentInChildren<Text>(), keyPair.Key.name);
382#endif
383 }
384
385 icon.AddComponent<Mask>();
386 i++;
387 }
388 }
389 private void textFormatting(pb_PrefabBrowserItemButton button, Text text, string name)
390 {
391 GameObject go = new GameObject();
392
393 var rtText = text.GetComponent<RectTransform>();
394 var cellSize = button.GetComponentInParent<pb_GridLayoutGroup>().cellSize;
395 topLeft(text.gameObject);
396 var newGO = Instantiate(go, text.transform);
397 text.fontSize = 14;
398 newGO.AddComponent<RectTransform>();
399 newGO.AddComponent<CanvasRenderer>();
400 var newText = newGO.AddComponent<Text>();
401 newText.text = Path.GetExtension(name.ToUpper());
402 newText.fontSize = 12;
403 topLeft(newText.gameObject);
404 newText.transform.localPosition = new Vector3(0, -rtText.sizeDelta.y, 0);
405 copyPasteFormat(newText, text);
406 var posX = 30;
407 var posY = text.transform.localPosition.y-4;
408 var posZ = text.transform.localPosition.z;
409 text.transform.localPosition = new Vector3(posX, posY, posZ);
410 }
411 private void copyPasteFormat(Text text1, Text text2)
412 {
413 text1.color = text2.color;
414 text1.font = text2.font;
415 text1.fontStyle = text2.fontStyle;
416 }
417 private void topLeft(GameObject uiObject)
418 {
419 RectTransform uitransform = uiObject.GetComponent<RectTransform>();
420
421 uitransform.anchorMin = new Vector2(0, 1);
422 uitransform.anchorMax = new Vector2(0, 1);
423 uitransform.pivot = new Vector2(0, 1);
424 }
425 [Button]
426 public void ReloadAllInOne()
427 {
428 //Debug.Log($"uploadedModels count: {uploadedModels.Count}");
429 globalPrefabs.Clear();
430 prefabs.Clear();
431
432 ClearPanel();
433
434 var resourcePrefabs = pb_ResourceManager.LoadAll<GameObject>();
435 foreach (var o in resourcePrefabs) globalPrefabs.Add(o, LoadPanel.None);
436
437 foreach (var assetBundle in assetBundles)
438 {
439 var temp = assetBundle.LoadAllAssets<GameObject>();
440 foreach (var o in temp) prefabs.Add(o, LoadPanel.None);
441 }
442
443 foreach (var o in globalUploadedModels) globalPrefabs.Add(o.Key, o.Value);
444 foreach (var o in uploadedModels) prefabs.Add(o.Key, o.Value);
445
446
447 var i = 0;
448 if (showGlobals)
449 foreach (var keyPair in globalPrefabs)
450 {
451 if (keyPair.Key == null) continue;
452
453 GameObject icon = null;
454
455 switch (keyPair.Value)
456 {
457 case LoadPanel.Models:
458 icon = Models.AddChild();
459 break;
460 case LoadPanel.Videos:
461 icon = Videos.AddChild();
462 break;
463 case LoadPanel.Pictures:
464 icon = Pictures.AddChild();
465 break;
466 case LoadPanel.Sounds:
467 icon = Sounds.AddChild();
468 break;
469 case LoadPanel.Helps:
470 icon = Helps.AddChild();
471 break;
472 case LoadPanel.Scripts:
473 icon = Scripts.AddChild();
474 break;
475
476 default:
477 icon = Unknown.AddChild();
478 break;
479 }
480
481 var button = icon.AddComponent<pb_PrefabBrowserItemButton>();
482 button.asset = keyPair.Key;
483
484 button.fullFilePath = globalFilePaths[i];
485
486 button.Initialize();
487 button.onClick.AddListener(pb_Hierarchy.instance.RebuildInspector);
488 Instantiate(PrefabBrowserDeleteButton, button.transform);
490 Instantiate(PrefabGlobalFileBadge, button.transform);
491
493 {
494 var nameLabel = Instantiate(PrefabFileNameBadge, button.transform);
495 nameLabel.GetComponentInChildren<Text>().text =
496#if !UNITY_WEBGL
497 Path.GetFileNameWithoutExtension
498#endif
499 (keyPair.Key.name.ToUpper());
500#if !UNITY_WEBGL
501 textFormatting(button, nameLabel.GetComponentInChildren<Text>(), keyPair.Key.name);
502#endif
503 }
504
505 icon.AddComponent<Mask>();
506
507 i++;
508 }
509
510 i = 0;
511 //Debug.Log($"prefabs count: {prefabs.Count}");
512 if (showLocals)
513 foreach (var keyPair in prefabs)
514 {
515 if (keyPair.Key == null)
516 {
517 Debug.Log($"keyPair key is null!");
518 continue;
519 }
520
521 GameObject icon = null;
522
523 switch (keyPair.Value)
524 {
525 case LoadPanel.Models:
526 icon = Models.AddChild();
527 break;
528 case LoadPanel.Videos:
529 icon = Videos.AddChild();
530 break;
531 case LoadPanel.Pictures:
532 icon = Pictures.AddChild();
533 break;
534 case LoadPanel.Sounds:
535 icon = Sounds.AddChild();
536 break;
537 case LoadPanel.Helps:
538 icon = Helps.AddChild();
539 break;
540 case LoadPanel.Scripts:
541 icon = Scripts.AddChild();
542 break;
543
544 default:
545 icon = Unknown.AddChild();
546 break;
547 }
548
549 var button = icon.AddComponent<pb_PrefabBrowserItemButton>();
550 button.asset = keyPair.Key;
551
552 button.fullFilePath = filePaths[i];
553
554 button.Initialize();
555 button.onClick.AddListener(pb_Hierarchy.instance.RebuildInspector);
556 Instantiate(PrefabBrowserDeleteButton, button.transform);
557 if (keyPair.Key.GetComponent<UploadedFile>() && keyPair.Key.GetComponent<UploadedFile>().global)
559 Instantiate(PrefabGlobalFileBadge, button.transform);
560
562 {
563 var nameLabel = Instantiate(PrefabFileNameBadge, button.transform);
564 nameLabel.GetComponentInChildren<Text>().text =
565#if !UNITY_WEBGL
566 Path.GetFileNameWithoutExtension
567#endif
568 (keyPair.Key.name.ToUpper());
569#if !UNITY_WEBGL
570 textFormatting(button, nameLabel.GetComponentInChildren<Text>(), keyPair.Key.name);
571#endif
572 }
573
574 icon.AddComponent<Mask>();
575 i++;
576 }
577
579 }
580
581 public void AddBundle(AssetBundle ab)
582 {
583 assetBundles.Add(ab);
584 var temp = ab.LoadAllAssets<GameObject>();
585 foreach (var o in temp) prefabs.Add(o, LoadPanel.None);
586
587 foreach (var s in ab.GetAllAssetNames()) Debug.Log(s);
588
589 foreach (Transform child in transform) Destroy(child.gameObject);
590
591 foreach (var keyPair in prefabs)
592 {
593 GameObject icon = null;
594 switch (keyPair.Value)
595 {
596 case LoadPanel.Models:
597 icon = Models.AddChild();
598 break;
599 case LoadPanel.Videos:
600 icon = Videos.AddChild();
601 break;
602 case LoadPanel.Pictures:
603 icon = Pictures.AddChild();
604 break;
605 case LoadPanel.Sounds:
606 icon = Sounds.AddChild();
607 break;
608 case LoadPanel.Helps:
609 icon = Helps.AddChild();
610 break;
611 case LoadPanel.Scripts:
612 icon = Scripts.AddChild();
613 break;
614
615 default:
616 icon = Unknown.AddChild();
617 break;
618 }
619
620 var button = icon.AddComponent<pb_PrefabBrowserItemButton>();
621 button.asset = keyPair.Key;
622 button.Initialize();
623 button.onClick.AddListener(pb_Hierarchy.instance.RebuildInspector);
624 Instantiate(PrefabBrowserDeleteButton, button.transform);
625
626 icon.AddComponent<Mask>();
627 }
628 }
629
630 public void AddGameObject(GameObject gobject, LoadPanel panel = LoadPanel.None, string filePath = "",
631 bool global = false)
632 {
633 foreach (var key in prefabs.Keys)
634 {
635 if (key.name == gobject.name)
636 {
637 if (prefabs[key] == LoadPanel.Helps)
638 {
639 var allspawned = FindObjectsOfType<UploadedFile>(true);
640 foreach (var obj in allspawned)
641 {
642 if (obj.fileName != gobject.name) continue;
643
644 if (obj.GetComponent<TMPro.TextMeshPro>())
645 {
646 //if (obj.gameObject.activeSelf)
647 //{
648 // obj.GetComponent<TMPro.TextMeshPro>().text = gobject.GetComponent<TMPro.TextMeshPro>().text;
649 // Destroy(gobject);
650 //}
651 //else
652 //{
653 //}
654 obj.GetComponent<TMPro.TextMeshPro>().text = gobject.GetComponent<TMPro.TextMeshPro>().text;
655
656 if (gobject.GetComponent<UploadedFile>())
657 {
658 var uf = obj.GetComponent<UploadedFile>();
659 if (uf)
660 {
661 uf.modelData = gobject.GetComponent<UploadedFile>().modelData;
662 }
663 }
664 Destroy(gobject);
665 }
666 }
667 }
668 return;
669 }
670
671 }
672
673 if (global)
674 globalPrefabs.Add(gobject, panel);
675 else
676 prefabs.Add(gobject, panel);
677
678
679 if (global)
680 globalUploadedModels.Add(gobject, panel);
681 else
682 uploadedModels.Add(gobject, panel);
683
684 if (global)
685 globalFilePaths.Add(filePath);
686 else
687 filePaths.Add(filePath);
688
689 return;
690 ClearPanel();
691 var i = 0;
692 foreach (var keyPair in globalPrefabs)
693 {
694 if (keyPair.Key == null) continue;
695
696 GameObject icon = null;
697
698 switch (keyPair.Value)
699 {
700 case LoadPanel.Models:
701 icon = Models.AddChild();
702 break;
703 case LoadPanel.Videos:
704 icon = Videos.AddChild();
705 break;
706 case LoadPanel.Pictures:
707 icon = Pictures.AddChild();
708 break;
709 case LoadPanel.Sounds:
710 icon = Sounds.AddChild();
711 break;
712 case LoadPanel.Helps:
713 icon = Helps.AddChild();
714 break;
715 case LoadPanel.Scripts:
716 icon = Scripts.AddChild();
717 break;
718
719 default:
720 icon = Unknown.AddChild();
721 break;
722 }
723
724 var button = icon.AddComponent<pb_PrefabBrowserItemButton>();
725 button.asset = keyPair.Key;
726
727 button.fullFilePath = globalFilePaths[i];
728
729 button.Initialize();
730 button.onClick.AddListener(pb_Hierarchy.instance.RebuildInspector);
731 Instantiate(PrefabBrowserDeleteButton, button.transform);
733 Instantiate(PrefabGlobalFileBadge, button.transform);
734
736 {
737 var nameLabel = Instantiate(PrefabFileNameBadge, button.transform);
738 nameLabel.GetComponentInChildren<Text>().text =
739#if !UNITY_WEBGL
740 Path.GetFileNameWithoutExtension
741#endif
742 (keyPair.Key.name.ToUpper());
743#if !UNITY_WEBGL
744 textFormatting(button, nameLabel.GetComponentInChildren<Text>(), keyPair.Key.name);
745#endif
746 }
747
748 icon.AddComponent<Mask>();
749 i++;
750 }
751
752 i = 0;
753 //Debug.Log($"prefabs count: {prefabs.Count}");
754 foreach (var keyPair in prefabs)
755 {
756 if (keyPair.Key == null)
757 {
758 Debug.Log($"keyPair key is null!");
759 continue;
760 }
761
762 GameObject icon = null;
763
764 switch (keyPair.Value)
765 {
766 case LoadPanel.Models:
767 icon = Models.AddChild();
768 break;
769 case LoadPanel.Videos:
770 icon = Videos.AddChild();
771 break;
772 case LoadPanel.Pictures:
773 icon = Pictures.AddChild();
774 break;
775 case LoadPanel.Sounds:
776 icon = Sounds.AddChild();
777 break;
778 case LoadPanel.Helps:
779 icon = Helps.AddChild();
780 break;
781 case LoadPanel.Scripts:
782 icon = Scripts.AddChild();
783 break;
784
785 default:
786 icon = Unknown.AddChild();
787 break;
788 }
789
790 var button = icon.AddComponent<pb_PrefabBrowserItemButton>();
791 button.asset = keyPair.Key;
792
793 button.fullFilePath = filePaths[i];
794
795 //button.Initialize();
796 button.onClick.AddListener(pb_Hierarchy.instance.RebuildInspector);
797 Instantiate(PrefabBrowserDeleteButton, button.transform);
798
799 icon.AddComponent<Mask>();
800 i++;
801 }
802 }
803
804 public IEnumerator AddTagCloud(string tcName, byte[] data)
805 {
806 var success = false;
807 while (!success)
808 foreach (var prefab in isGlobalNow ? globalPrefabs : prefabs)
809 if (prefab.Key.name == tcName)
810 {
811 var tc = prefab.Key.AddComponent<TagCloud>();
812 tc.filePath = tcName;
813 var text = Encoding.UTF8.GetString(data);
814 tc.tags = text.Split('\n').ToList();
815 success = true;
816 break;
817 }
818
819 yield return null;
820 }
821
822 private void ClearPanel(bool global = false)
823 {
824 foreach (Transform child in global ? /*G*/Models.transform : Models.transform) Destroy(child.gameObject);
825
826 foreach (Transform child in global ? /*G*/Pictures.transform : Pictures.transform)
827 Destroy(child.gameObject);
828
829 foreach (Transform child in global ? /*G*/Sounds.transform : Sounds.transform) Destroy(child.gameObject);
830
831 foreach (Transform child in global ? /*G*/Videos.transform : Videos.transform) Destroy(child.gameObject);
832
833 foreach (Transform child in global ? /*G*/Helps.transform : Helps.transform)
834 {
835 if (child.name == "AddNewPOI")
836 continue;
837
838 Destroy(child.gameObject);
839 }
840
841 foreach (Transform child in global ? /*G*/Scripts.transform : Scripts.transform) Destroy(child.gameObject);
842
843 foreach (Transform child in global ? /*G*/Unknown.transform : Unknown.transform) Destroy(child.gameObject);
844 }
845
846 public GameObject GetPrefabFromName(string goName)
847 {
848 foreach (var prefab in prefabs)
849 if (prefab.Key.name == goName.Replace("(Clone)", "").Replace("/fileuploader/", ""))
850 return prefab.Key;
851
852 foreach (var prefab in globalPrefabs)
853 if (prefab.Key.name == goName.Replace("(Clone)", "").Replace("/fileuploader/", ""))
854 return prefab.Key;
855
856 if (goName == "POI") return POIPrefab;
857
858 Debug.Log("TODO: null GetPrefabFromName");
859 return null; //not loaded? TODO: try load from file
860 }
861
862 private bool IsLocal(Transform t)
863 {
864 if (!t.gameObject.GetComponentInChildren<GlobalFile>()) Debug.Log($"Local go: {t.name}");
865 return !t.gameObject.GetComponentInChildren<GlobalFile>();
866 }
867
868 public void SearchFilter(string value)
869 {
870 value = value.ToLower();
871 lastSearchValue = value;
872
873 var forceShow = string.IsNullOrEmpty(value);
874 foreach (Transform child in Models.transform)
875 {
876 child.gameObject.SetActive(
877 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
878 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
879 .SearchHelp(value));
880
881 if (!showLocals && IsLocal(child))
882 child.gameObject.SetActive(false);
883
884 if (!showGlobals && !IsLocal(child))
885 child.gameObject.SetActive(false);
886 }
887
888 foreach (Transform child in Pictures.transform)
889 {
890 child.gameObject.SetActive(
891 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
892 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
893 .SearchHelp(value));
894
895 if (!showLocals && IsLocal(child))
896 child.gameObject.SetActive(false);
897
898 if (!showGlobals && !IsLocal(child))
899 child.gameObject.SetActive(false);
900 }
901
902 foreach (Transform child in Sounds.transform)
903 {
904 child.gameObject.SetActive(
905 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
906 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
907 .SearchHelp(value));
908
909 if (!showLocals && IsLocal(child))
910 child.gameObject.SetActive(false);
911
912 if (!showGlobals && !IsLocal(child))
913 child.gameObject.SetActive(false);
914 }
915
916 foreach (Transform child in Videos.transform)
917 {
918 child.gameObject.SetActive(
919 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
920 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
921 .SearchHelp(value));
922
923 if (!showLocals && IsLocal(child))
924 child.gameObject.SetActive(false);
925
926 if (!showGlobals && !IsLocal(child))
927 child.gameObject.SetActive(false);
928 }
929
930 foreach (Transform child in Helps.transform)
931 {
932 if (child.name == "AddNewPOI")
933 continue;
934
935 child.gameObject.SetActive(
936 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
937 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
938 .SearchHelp(value));
939
940 if (!showLocals && IsLocal(child))
941 child.gameObject.SetActive(false);
942
943 if (!showGlobals && !IsLocal(child))
944 child.gameObject.SetActive(false);
945 }
946
947 foreach (Transform child in Scripts.transform)
948 {
949 var asset = child.GetComponent<pb_PrefabBrowserItemButton>().asset;
950 var tc = asset.GetComponent<TagCloud>();
951 child.gameObject.SetActive(
952 asset.name.ToLower().Contains(value) ||
953 forceShow || (tc && tc.SearchHelp(value)));
954
955 if (!showLocals && IsLocal(child))
956 child.gameObject.SetActive(false);
957
958 if (!showGlobals && !IsLocal(child))
959 child.gameObject.SetActive(false);
960 }
961
962 foreach (Transform child in Unknown.transform)
963 {
964 child.gameObject.SetActive(
965 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
966 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
967 .SearchHelp(value));
968
969 if (!showLocals && IsLocal(child))
970 child.gameObject.SetActive(false);
971
972 if (!showGlobals && !IsLocal(child))
973 child.gameObject.SetActive(false);
974 }
975
977 if (GModels)
978 {
979 foreach (Transform child in GModels.transform)
980 child.gameObject.SetActive(
981 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
982 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
983 .SearchHelp(value));
984 foreach (Transform child in GPictures.transform)
985 child.gameObject.SetActive(
986 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
987 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
988 .SearchHelp(value));
989 foreach (Transform child in GSounds.transform)
990 child.gameObject.SetActive(
991 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
992 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
993 .SearchHelp(value));
994 foreach (Transform child in GVideos.transform)
995 child.gameObject.SetActive(
996 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
997 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
998 .SearchHelp(value));
999 foreach (Transform child in GHelps.transform)
1000 {
1001 if (child.name == "AddNewPOI")
1002 continue;
1003
1004 child.gameObject.SetActive(
1005 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
1006 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
1007 .SearchHelp(value));
1008 }
1009
1010 foreach (Transform child in GScripts.transform)
1011 child.gameObject.SetActive(
1012 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
1013 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
1014 .SearchHelp(value));
1015 foreach (Transform child in GUnknown.transform)
1016 child.gameObject.SetActive(
1017 child.GetComponent<pb_PrefabBrowserItemButton>().asset.name.ToLower().Contains(value) ||
1018 forceShow || child.GetComponent<pb_PrefabBrowserItemButton>().asset.GetComponent<TagCloud>()
1019 .SearchHelp(value));
1020
1021
1022 }
1023 StartCoroutine(RefreshPanel());
1024 }
1025
1026 internal IEnumerator RefreshPanel()
1027 {
1028 yield return null;
1029 foreach (Transform child in transform) child.gameObject.SetActive(false);
1030
1031 yield return null;
1032
1033 foreach (Transform child in transform) child.gameObject.SetActive(true);
1035 }
1036
1037 public enum LoadPanel : byte
1038 {
1039 None = 0,
1040 Models,
1041 Videos,
1042 Pictures,
1043 Sounds,
1044 Helps,
1045 Scripts
1046 }
1047 }
1048}
UnityEngine.UI.Button Button
Definition: Pointer.cs:7
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
void LoadJsonsFile(StartStageOnLoad ssol)
IEnumerator AddTagCloud(string tcName, byte[] data)
void Reload(bool global=false)
void AddGameObject(GameObject gobject, LoadPanel panel=LoadPanel.None, string filePath="", bool global=false)
GameObject GetPrefabFromName(string goName)
static pb_PrefabBrowser instance
void DeleteAsset(GameObject asset)
Definition: Macro.cs:12
static void GetAllPossibleFileName(GILES.Serialization.pb_SceneNode node, ref List< string > list)
Definition: Macro.cs:213
static int FindClosingBracketIndex(string text, char openedBracket='{', char closedBracket='}')
Definition: Macro.cs:249
static PanelActuator instance
Definition: PanelActuator.cs:9
void RefreshPanel()
List< string > filesToLoad
bool SearchHelp(string value)
Definition: TagCloud.cs:22
string filePath
Definition: TagCloud.cs:11
byte[] modelData
Definition: UploadedFile.cs:7