net.dreditor.maps 0.0.0-stage → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CharacterMapMarkerUI.cs +95 -0
  2. package/CharacterMapMarkerUI.cs.meta +11 -0
  3. package/CharacterMapUITab.cs +172 -0
  4. package/CharacterMapUITab.cs.meta +11 -0
  5. package/ClearMapAreaData.cs +23 -0
  6. package/ClearMapAreaData.cs.meta +11 -0
  7. package/ClearMapInstanceData.cs +36 -0
  8. package/ClearMapInstanceData.cs.meta +11 -0
  9. package/ControlFastTravel.cs +57 -0
  10. package/ControlFastTravel.cs.meta +11 -0
  11. package/DREditor.Maps.asmdef +24 -0
  12. package/DREditor.Maps.asmdef.meta +7 -0
  13. package/DiscoverData.cs +23 -0
  14. package/DiscoverData.cs.meta +11 -0
  15. package/DiscoverableBase.cs +24 -0
  16. package/DiscoverableBase.cs.meta +11 -0
  17. package/FastTravelController.cs +36 -0
  18. package/FastTravelController.cs.meta +11 -0
  19. package/FastTravelData.cs +25 -0
  20. package/FastTravelData.cs.meta +11 -0
  21. package/FastTravelMarker.cs +107 -0
  22. package/FastTravelMarker.cs.meta +13 -0
  23. package/IDHolder.cs +47 -0
  24. package/IDHolder.cs.meta +11 -0
  25. package/IEntryLoader.cs +19 -0
  26. package/IEntryLoader.cs.meta +11 -0
  27. package/IMapManager.cs +27 -0
  28. package/IMapManager.cs.meta +11 -0
  29. package/IPlaceMarker.cs +26 -0
  30. package/IPlaceMarker.cs.meta +11 -0
  31. package/IPlaceOptionHolder.cs +53 -0
  32. package/IPlaceOptionHolder.cs.meta +11 -0
  33. package/MapAreaData.cs +53 -0
  34. package/MapAreaData.cs.meta +11 -0
  35. package/MapAreaEntry.cs +55 -0
  36. package/MapAreaEntry.cs.meta +11 -0
  37. package/MapAreaManager.cs +194 -0
  38. package/MapAreaManager.cs.meta +11 -0
  39. package/MapBaseData.cs +66 -0
  40. package/MapBaseData.cs.meta +11 -0
  41. package/MapData.cs +35 -0
  42. package/MapData.cs.meta +11 -0
  43. package/MapDatabase.cs +133 -0
  44. package/MapDatabase.cs.meta +11 -0
  45. package/MapEntry.cs +77 -0
  46. package/MapEntry.cs.meta +11 -0
  47. package/MapEntryChange.cs +321 -0
  48. package/MapEntryChange.cs.meta +11 -0
  49. package/MapEntryChanger.cs +45 -0
  50. package/MapEntryChanger.cs.meta +11 -0
  51. package/MapHoverSelector.cs +161 -0
  52. package/MapHoverSelector.cs.meta +11 -0
  53. package/MapManager.cs +288 -0
  54. package/MapManager.cs.meta +11 -0
  55. package/MapManagerBase.cs +260 -0
  56. package/MapManagerBase.cs.meta +11 -0
  57. package/MapMarkerSelectable.cs +71 -0
  58. package/MapMarkerSelectable.cs.meta +11 -0
  59. package/MapObjectiveData.cs +28 -0
  60. package/MapObjectiveData.cs.meta +11 -0
  61. package/MapSaveManager.cs +63 -0
  62. package/MapSaveManager.cs.meta +11 -0
  63. package/MapTabUIHandler.cs +98 -0
  64. package/MapTabUIHandler.cs.meta +11 -0
  65. package/MapUITab.cs +26 -0
  66. package/MapUITab.cs.meta +11 -0
  67. package/MapUtility.cs +183 -0
  68. package/MapUtility.cs.meta +11 -0
  69. package/MarkerData.cs +25 -0
  70. package/MarkerData.cs.meta +11 -0
  71. package/MarkerDatabase.cs +57 -0
  72. package/MarkerDatabase.cs.meta +11 -0
  73. package/MarkerUtility.cs +48 -0
  74. package/MarkerUtility.cs.meta +11 -0
  75. package/MarkerVessel.cs +38 -0
  76. package/MarkerVessel.cs.meta +11 -0
  77. package/PlaceData.cs +27 -0
  78. package/PlaceData.cs.meta +11 -0
  79. package/PlaceEntry.cs +83 -0
  80. package/PlaceEntry.cs.meta +11 -0
  81. package/PlaceManager.cs +293 -0
  82. package/PlaceManager.cs.meta +11 -0
  83. package/PlaceMapUITab.cs +203 -0
  84. package/PlaceMapUITab.cs.meta +11 -0
  85. package/Samples/Clear_Map_Area_Data_Event.prefab +52 -0
  86. package/Samples/Clear_Map_Area_Data_Event.prefab.meta +7 -0
  87. package/Samples/Clear_Map_Instance_Data.prefab +56 -0
  88. package/Samples/Clear_Map_Instance_Data.prefab.meta +7 -0
  89. package/Samples/DRE_Map_UI.unity +461 -0
  90. package/Samples/DRE_Map_UI.unity.meta +7 -0
  91. package/Samples/Map_Entry_Changer.prefab +52 -0
  92. package/Samples/Map_Entry_Changer.prefab.meta +7 -0
  93. package/Samples/Map_Marker_Selectable_ETemplate.prefab +126 -0
  94. package/Samples/Map_Marker_Selectable_ETemplate.prefab.meta +7 -0
  95. package/Samples/Map_Tab_UI_Handler_Shell.prefab +134 -0
  96. package/Samples/Map_Tab_UI_Handler_Shell.prefab.meta +7 -0
  97. package/Samples/Map_Tab_UI_Handler_Template.prefab +404 -0
  98. package/Samples/Map_Tab_UI_Handler_Template.prefab.meta +7 -0
  99. package/Samples/Map_UI_Canvas_Shell.prefab +842 -0
  100. package/Samples/Map_UI_Canvas_Shell.prefab.meta +7 -0
  101. package/Samples/Map_UI_Canvas_Template.prefab +996 -0
  102. package/Samples/Map_UI_Canvas_Template.prefab.meta +7 -0
  103. package/Samples/Map_UI_Controls_ETemplate.prefab +538 -0
  104. package/Samples/Map_UI_Controls_ETemplate.prefab.meta +7 -0
  105. package/Samples/Map_UI_GO_FT_ETemplate.prefab +78 -0
  106. package/Samples/Map_UI_GO_FT_ETemplate.prefab.meta +7 -0
  107. package/Samples/Map_UI_Place_Place_Name_ETemplate.prefab +181 -0
  108. package/Samples/Map_UI_Place_Place_Name_ETemplate.prefab.meta +7 -0
  109. package/Samples/Map_UI_Place_Tab_Shell.prefab +57 -0
  110. package/Samples/Map_UI_Place_Tab_Shell.prefab.meta +7 -0
  111. package/Samples/Map_UI_Place_Tab_Template.prefab +806 -0
  112. package/Samples/Map_UI_Place_Tab_Template.prefab.meta +7 -0
  113. package/Samples/Map_UI_Place_Tab_UI_ETemplate.prefab +1265 -0
  114. package/Samples/Map_UI_Place_Tab_UI_ETemplate.prefab.meta +7 -0
  115. package/Samples/Map_UI_Reticle_ETemplate.prefab +78 -0
  116. package/Samples/Map_UI_Reticle_ETemplate.prefab.meta +7 -0
  117. package/Samples/Map_UI_Student_Tab_Shell.prefab +267 -0
  118. package/Samples/Map_UI_Student_Tab_Shell.prefab.meta +7 -0
  119. package/Samples/Map_UI_Student_Tab_Template.prefab +544 -0
  120. package/Samples/Map_UI_Student_Tab_Template.prefab.meta +7 -0
  121. package/Samples/Map_UI_Student_Tab_UI_Shell.prefab +90 -0
  122. package/Samples/Map_UI_Student_Tab_UI_Shell.prefab.meta +7 -0
  123. package/Samples/Map_UI_Student_Tab_UI_Template.prefab +2031 -0
  124. package/Samples/Map_UI_Student_Tab_UI_Template.prefab.meta +7 -0
  125. package/Samples/Map_UI_Title_ETemplate.prefab +672 -0
  126. package/Samples/Map_UI_Title_ETemplate.prefab.meta +7 -0
  127. package/Samples/Place_Template.prefab +200 -0
  128. package/Samples/Place_Template.prefab.meta +7 -0
  129. package/Samples.meta +8 -0
  130. package/package.json +40 -6
  131. package/package.json.meta +7 -0
  132. package/README.md +0 -3
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 6f3294f8c0d7be14aae11e290d0ad7a9
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
package/MapBaseData.cs ADDED
@@ -0,0 +1,66 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using System;
3
+ using UnityEngine;
4
+
5
+ namespace DREditor.Maps
6
+ {
7
+ /// <summary>
8
+ ///
9
+ /// </summary>
10
+ [Serializable]
11
+ public class MapBaseData
12
+ {
13
+ /// <summary>
14
+ ///
15
+ /// </summary>
16
+ [Tooltip("")]
17
+ public string name;
18
+
19
+ /// <summary>
20
+ ///
21
+ /// </summary>
22
+ [Tooltip("")]
23
+ [SerializeField] protected IDHolder Id = new();
24
+
25
+
26
+ /// <summary>
27
+ ///
28
+ /// </summary>
29
+ /// <param name="data"></param>
30
+ public virtual void SetData(MapBaseData data)
31
+ {
32
+ name = data.name;
33
+
34
+ Id.SetID(data.GetID());
35
+ }
36
+
37
+ /// <summary>
38
+ ///
39
+ /// </summary>
40
+ /// <returns></returns>
41
+ public virtual string GetID() => Id.value;
42
+
43
+
44
+ /// <summary>
45
+ ///
46
+ /// </summary>
47
+ /// <param name="name"></param>
48
+ public virtual void SetName(string name) => this.name = name;
49
+
50
+
51
+ #if UNITY_EDITOR
52
+
53
+ /// <summary>
54
+ ///
55
+ /// </summary>
56
+ public virtual void GenerateID()
57
+ {
58
+ if (Id.GenerateID())
59
+ UnityEngine.Debug.Log($"GenerateID Called For {name} and ID is: {Id.value}");
60
+ else
61
+ UnityEngine.Debug.LogWarning($"Map Base Data ID for: {name} has already been Generated! ID: {Id.value} ");
62
+ }
63
+
64
+ #endif
65
+ }
66
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 1533e97fe0d552d4493fef2768f0be50
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
package/MapData.cs ADDED
@@ -0,0 +1,35 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using System;
3
+ using UnityEngine;
4
+
5
+ namespace DREditor.Maps
6
+ {
7
+ /// <summary>
8
+ ///
9
+ /// </summary>
10
+ [Serializable]
11
+ public class MapData
12
+ {
13
+ /// <summary>
14
+ ///
15
+ /// </summary>
16
+ [Tooltip("")]
17
+ public MapEntry Entry;
18
+
19
+ /// <summary>
20
+ ///
21
+ /// </summary>
22
+ [Tooltip("")]
23
+ public bool allowFastTravel = false;
24
+
25
+
26
+ public MapData() { }
27
+
28
+ public MapData(MapEntry Entry, bool allowFastTravel)
29
+ {
30
+ this.Entry = Entry;
31
+
32
+ this.allowFastTravel = allowFastTravel;
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 840925475f25ce44da529ef3ae230e2d
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
package/MapDatabase.cs ADDED
@@ -0,0 +1,133 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using System.Collections.Generic;
3
+ using UnityEngine;
4
+ using UnityEngine.Serialization;
5
+
6
+ /*
7
+ * TO-DO: CREATE EDITOR MENU ITEM THAT TAKES EACH FLOOR DATA AND GAMEOBJECT AND DO THE IMPORT DATA
8
+ * TO REFRESH STUFF DONE TO PREFABS LETS GOOO
9
+ *
10
+ * Problem : If anything in the map data changes , entries containing map data would not be changed
11
+ *
12
+ */
13
+
14
+ //All of these classes in this script might need to be a scriptable object or at least have a better structure to be more dynamic.
15
+ //MapObjectiveData
16
+ //DiscoverableData
17
+ //MapAreaData
18
+ //PlaceData
19
+
20
+ namespace DREditor.Maps
21
+ {
22
+ /// <summary>
23
+ ///
24
+ /// </summary>
25
+ /// <remarks></remarks>
26
+ [System.Serializable]
27
+ [CreateAssetMenu(menuName = "DREditor/Map/Map Database", fileName = "Map_Database")]
28
+ public class MapDatabase : ScriptableObject
29
+ {
30
+ /// <summary>
31
+ ///
32
+ /// </summary>
33
+ [Header("")]
34
+ [Divider]
35
+ [Tooltip("")]
36
+ [FormerlySerializedAs("floorList")]
37
+ public List<MapAreaData> floors = new();
38
+
39
+
40
+ /// <summary>
41
+ ///
42
+ /// </summary>
43
+ /// <param name="name"></param>
44
+ /// <returns></returns>
45
+ public virtual MapAreaData GetArea(string name)
46
+ {
47
+ foreach (MapAreaData area in floors)
48
+ if (area.name == name)
49
+ return area;
50
+
51
+ return null;
52
+ }
53
+
54
+ /// <summary>
55
+ ///
56
+ /// </summary>
57
+ /// <param name="unlocks"></param>
58
+ /// <returns></returns>
59
+ public virtual List<MapAreaData> ValidFloorList(List<string> unlocks)
60
+ {
61
+ List<MapAreaData> list = new();
62
+
63
+ foreach (var floor in floors)
64
+ if (!floor.Discoverable.isValid ||
65
+ floor.Discoverable.isValid &&
66
+ (unlocks.Contains(floor.GetID()) || unlocks.Contains(floor.name)))
67
+ list.Add(floor);
68
+
69
+ return list;
70
+ }
71
+
72
+ /// <summary>
73
+ ///
74
+ /// </summary>
75
+ /// <param name="name"></param>
76
+ /// <param name="ID"></param>
77
+ /// <returns></returns>
78
+ public virtual PlaceData GetPlace(string name, string ID = "")
79
+ {
80
+ foreach (MapAreaData area in floors)
81
+ foreach (var place in area.places)
82
+ if (place.name == name || place.GetID() == ID)
83
+ return place;
84
+
85
+ return null;
86
+ }
87
+
88
+ /// <summary>
89
+ ///
90
+ /// </summary>
91
+ /// <returns></returns>
92
+ public virtual string[] GetAreaNames()
93
+ {
94
+ string[] names = new string[floors.Count];
95
+
96
+ for (int i = 0; i < floors.Count; i++)
97
+ names[i] = floors[i].name;
98
+
99
+ return names;
100
+ }
101
+
102
+ /// <summary>
103
+ ///
104
+ /// </summary>
105
+ /// <returns></returns>
106
+ public virtual List<PlaceData> GetFastTravelablePlaces()
107
+ {
108
+ List<PlaceData> fastTravelablePlaces = new();
109
+
110
+ foreach (var area in floors)
111
+ foreach (var place in area.places)
112
+ if (place.fastTravelable)
113
+ fastTravelablePlaces.Add(place);
114
+
115
+ return fastTravelablePlaces;
116
+ }
117
+
118
+ /// <summary>
119
+ ///
120
+ /// </summary>
121
+ /// <param name="placeData"></param>
122
+ /// <returns></returns>
123
+ public virtual MapAreaData GetAreaDataFromPlace(PlaceData placeData)
124
+ {
125
+ foreach (var area in floors)
126
+ foreach (var place in area.places)
127
+ if (place == placeData)
128
+ return area;
129
+
130
+ return null;
131
+ }
132
+ }
133
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: ed72e77e72de8df4bbee547068e199ab
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
package/MapEntry.cs ADDED
@@ -0,0 +1,77 @@
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using System;
3
+ using System.Collections.Generic;
4
+ using System.Linq;
5
+ using UnityEngine;
6
+
7
+ namespace DREditor.Maps
8
+ {
9
+ /// <summary>
10
+ ///
11
+ /// </summary>
12
+ [Serializable]
13
+ public class MapEntry
14
+ {
15
+ /// <summary>
16
+ ///
17
+ /// </summary>
18
+ [Tooltip("")]
19
+ public MapObjectiveData IdentifierData;
20
+
21
+ /// <summary>
22
+ ///
23
+ /// </summary>
24
+ [Tooltip("")]
25
+ public List<string> UnlockedAreas = new();
26
+
27
+ /// <summary>
28
+ ///
29
+ /// </summary>
30
+ [Tooltip("")]
31
+ public List<MapAreaEntry> AreaEntries = new();
32
+
33
+
34
+ /// <summary>
35
+ ///
36
+ /// </summary>
37
+ /// <param name="UnlockedAreas"></param>
38
+ public virtual void SetUnlockedAreas(List<string> UnlockedAreas) => this.UnlockedAreas = UnlockedAreas;
39
+
40
+ /// <summary>
41
+ ///
42
+ /// </summary>
43
+ /// <param name="name"></param>
44
+ /// <returns></returns>
45
+ public virtual MapAreaEntry GetAreaEntry(string name)
46
+ {
47
+ if (AreaEntries.Where(e => e.Data.name == name).ToList() is List<MapAreaEntry> list &&
48
+ list.Count > 0)
49
+ return list[0];
50
+
51
+ return null;
52
+ }
53
+
54
+ /// <summary>
55
+ ///
56
+ /// </summary>
57
+ public virtual void Save()
58
+ {
59
+ foreach(var areaEntry in AreaEntries)
60
+ areaEntry.Save();
61
+ }
62
+
63
+ /// <summary>
64
+ ///
65
+ /// </summary>
66
+ /// <param name="areaData"></param>
67
+ /// <returns></returns>
68
+ public virtual MapAreaEntry Contains(MapAreaData areaData)
69
+ {
70
+ for (int i = 0; i < AreaEntries.Count; i++)
71
+ if (AreaEntries[i].Data == areaData)
72
+ return AreaEntries[i];
73
+
74
+ return null;
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 0a742d791af8ad9458b395e6b64f9183
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,321 @@
1
+ // Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.Dialogues.Events;
3
+ using UnityEngine;
4
+ using System;
5
+
6
+ #if UNITY_EDITOR
7
+ using UnityEditor;
8
+ using DREditor.Utility;
9
+ using DREditor.Editor.Utility;
10
+ #endif
11
+
12
+ namespace DREditor.Maps
13
+ {
14
+ /// <summary>
15
+ ///
16
+ /// </summary>
17
+ /// <remarks></remarks>
18
+ [Serializable]
19
+ public class MapEntryChange : IDataCapsulate
20
+ {
21
+ /// <summary>
22
+ ///
23
+ /// </summary>
24
+ public MapEntry Entry = new();
25
+
26
+ /// <summary>
27
+ ///
28
+ /// </summary>
29
+ public string unlockArea = "";
30
+
31
+ #if UNITY_EDITOR
32
+ /// <summary>
33
+ ///
34
+ /// </summary>
35
+ protected MarkerDatabase markerDB = null;
36
+
37
+ /// <summary>
38
+ ///
39
+ /// </summary>
40
+ protected MapDatabase mapDB = null;
41
+
42
+ /// <summary>
43
+ ///
44
+ /// </summary>
45
+ protected int areaNum = 0;
46
+
47
+ /// <summary>
48
+ ///
49
+ /// </summary>
50
+ protected int placeNum = 0;
51
+
52
+ /// <summary>
53
+ ///
54
+ /// </summary>
55
+ protected int markerNum = 0;
56
+
57
+ /// <summary>
58
+ ///
59
+ /// </summary>
60
+ protected PlaceData placeData = null;
61
+
62
+ /// <summary>
63
+ ///
64
+ /// </summary>
65
+ protected MarkerVessel selectedVessel = null;
66
+ #endif
67
+
68
+ /// <inheritdoc/>
69
+ public virtual void Display(object o)
70
+ {
71
+ #if UNITY_EDITOR
72
+ InitializeDatabases();
73
+
74
+ if (FailedToInitializeDatabases())
75
+ return;
76
+
77
+ if (GUILayout.Button("Add Fast Travel Places", GUILayout.Width(150)))
78
+ foreach (var place in mapDB.GetFastTravelablePlaces())
79
+ CreateAreaEntry(mapDB.GetAreaDataFromPlace(place), place);
80
+
81
+ GUILayout.Space(10);
82
+
83
+ unlockArea = HandyFields.StringField("Unlock Area: ", unlockArea);
84
+
85
+ GUILayout.Space(10);
86
+
87
+ DisplayAreasSection();
88
+
89
+ GUILayout.Space(10);
90
+
91
+ DisplayCreateEntrySection();
92
+ #endif
93
+ }
94
+
95
+ #if UNITY_EDITOR
96
+
97
+ /// <summary>
98
+ ///
99
+ /// </summary>
100
+ protected virtual void InitializeDatabases()
101
+ {
102
+ if (markerDB == null)
103
+ markerDB = DatabaseUtility.LoadDatabase<MarkerDatabase>();
104
+
105
+ if (mapDB == null)
106
+ mapDB = DatabaseUtility.LoadDatabase<MapDatabase>();
107
+ }
108
+
109
+ /// <summary>
110
+ ///
111
+ /// </summary>
112
+ /// <returns></returns>
113
+ protected virtual bool FailedToInitializeDatabases()
114
+ {
115
+ if (markerDB == null || mapDB == null)
116
+ EditorGUILayout.LabelField("Could not find databases of type " + nameof(MarkerDatabase) +
117
+ " or of type " + nameof(MapDatabase) + ". \nPlease ensure that both of these databases exist in your project.");
118
+
119
+ return markerDB == null || mapDB == null;
120
+ }
121
+
122
+ /// <summary>
123
+ ///
124
+ /// </summary>
125
+ protected virtual void DisplayAreasSection()
126
+ {
127
+ using (new GUILayout.VerticalScope(GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth)))
128
+ for (int i = 0; i < Entry.AreaEntries.Count; i++)
129
+ DisplayArea(Entry.AreaEntries[i]);
130
+ }
131
+
132
+ /// <summary>
133
+ ///
134
+ /// </summary>
135
+ /// <param name="area"></param>
136
+ protected virtual void DisplayArea(MapAreaEntry area)
137
+ {
138
+ EditorGUILayout.LabelField(area.Data.name);
139
+
140
+ using (new GUILayout.VerticalScope())
141
+ DisplayPlacesSection(area);
142
+ }
143
+
144
+ /// <summary>
145
+ ///
146
+ /// </summary>
147
+ /// <param name="area"></param>
148
+ protected virtual void DisplayPlacesSection(MapAreaEntry area)
149
+ {
150
+ for (int i = 0; i < area.PlaceEntries.Count; i++)
151
+ {
152
+ GUILayout.Space(10);
153
+
154
+ PlaceEntry place = area.PlaceEntries[i];
155
+
156
+ using (new GUILayout.HorizontalScope())
157
+ DisplayPlace(place);
158
+
159
+ using (new GUILayout.VerticalScope())
160
+ DisplayMarkersSection(area, place);
161
+ }
162
+ }
163
+
164
+ /// <summary>
165
+ ///
166
+ /// </summary>
167
+ /// <param name="place"></param>
168
+ protected virtual void DisplayPlace(PlaceEntry place)
169
+ {
170
+ GUILayout.Space(20);
171
+
172
+ EditorGUILayout.LabelField(place.name, GUILayout.MaxWidth(100));
173
+
174
+ if (mapDB.GetPlace(place.name, place.GetID()).fastTravelable)
175
+ place.SetFastTravel(HandyFields.BoolField(place.enableFastTravelForThisEntryInstance, "FT: "));
176
+ }
177
+
178
+ /// <summary>
179
+ ///
180
+ /// </summary>
181
+ /// <param name="area"></param>
182
+ /// <param name="place"></param>
183
+ protected virtual void DisplayMarkersSection(MapAreaEntry area, PlaceEntry place)
184
+ {
185
+ for (int i = 0; i < place.MarkerVessels.Count; i++)
186
+ {
187
+ using (new GUILayout.HorizontalScope())
188
+ {
189
+ GUILayout.Space(40);
190
+
191
+ if (place.MarkerVessels[i] != null)
192
+ {
193
+ place.Save();
194
+
195
+ EditorGUILayout.LabelField(place.MarkerDatas[i].name);
196
+
197
+ if (GUILayout.Button("Remove", GUILayout.Width(100)))
198
+ RemoveMarker(place.MarkerVessels[i], area, place);
199
+ }
200
+ else
201
+ place.MarkerVessels[i] = markerDB.GetVesselByData(place.MarkerDatas[i]);
202
+ }
203
+ }
204
+ }
205
+
206
+ /// <summary>
207
+ ///
208
+ /// </summary>
209
+ /// <param name="markerVessel"></param>
210
+ /// <param name="area"></param>
211
+ /// <param name="place"></param>
212
+ protected virtual void RemoveMarker(MarkerVessel markerVessel, MapAreaEntry area, PlaceEntry place)
213
+ {
214
+ place.MarkerVessels.Remove(markerVessel);
215
+
216
+ if (place.MarkerVessels.Count == 0)
217
+ area.PlaceEntries.Remove(place);
218
+
219
+ if (area.PlaceEntries.Count == 0)
220
+ Entry.AreaEntries.Remove(area);
221
+ }
222
+
223
+ /// <summary>
224
+ ///
225
+ /// </summary>
226
+ protected virtual void DisplayCreateEntrySection()
227
+ {
228
+ using (new GUILayout.HorizontalScope(GUILayout.MaxWidth(EditorGUIUtility.currentViewWidth)))
229
+ {
230
+ areaNum = EditorGUILayout.IntPopup(areaNum, mapDB.GetAreaNames(),
231
+ ContainerUtil.Iota(mapDB.GetAreaNames().Length, 0), GUILayout.MaxWidth(130));
232
+
233
+ MapAreaData areaData = mapDB.floors[areaNum];
234
+
235
+
236
+ if (placeNum > areaData.places.Count)
237
+ placeNum = 0;
238
+
239
+ placeNum = EditorGUILayout.IntPopup(placeNum, areaData.GetPlaceNames(),
240
+ ContainerUtil.Iota(areaData.GetPlaceNames().Length, 0), GUILayout.MaxWidth(130));
241
+
242
+ if (placeNum >= areaData.places.Count)
243
+ placeNum = 0;
244
+
245
+ placeData = areaData.places[placeNum];
246
+
247
+
248
+ markerNum = EditorGUILayout.IntPopup(markerNum, markerDB.GetVesselNames(),
249
+ ContainerUtil.Iota(markerDB.GetVesselNames().Length, 0), GUILayout.MaxWidth(130));
250
+
251
+ selectedVessel = markerDB.Entries[markerNum];
252
+
253
+
254
+ if (GUILayout.Button("Add"))
255
+ CreateValidEntry(areaData);
256
+ }
257
+ }
258
+
259
+ /// <summary>
260
+ ///
261
+ /// </summary>
262
+ /// <param name="areaData"></param>
263
+ protected virtual void CreateValidEntry(MapAreaData areaData)
264
+ {
265
+ if (Entry.Contains(areaData) is MapAreaEntry existingAreaEntry)
266
+ AddEntryToExistingArea(existingAreaEntry);
267
+ else
268
+ CreateAreaEntry(areaData, placeData);
269
+ }
270
+
271
+ /// <summary>
272
+ ///
273
+ /// </summary>
274
+ /// <param name="existingAreaEntry"></param>
275
+ protected virtual void AddEntryToExistingArea(MapAreaEntry existingAreaEntry)
276
+ {
277
+ if (existingAreaEntry.ContainsPlace(placeData.GetID()) is PlaceEntry existingPlaceEntry)
278
+ existingPlaceEntry.MarkerVessels.Add(selectedVessel);
279
+ else
280
+ CreatePlaceEntry(existingAreaEntry, placeData, "Had Area but not place entry, creating...");
281
+ }
282
+
283
+ /// <summary>
284
+ ///
285
+ /// </summary>
286
+ /// <param name="areaData"></param>
287
+ /// <param name="placeData"></param>
288
+ protected virtual void CreateAreaEntry(MapAreaData areaData, PlaceData placeData)
289
+ {
290
+ MapAreaEntry existingAreaEntry = new(areaData);
291
+
292
+ CreatePlaceEntry(existingAreaEntry, placeData, "Didn't have area entry, creating...");
293
+
294
+ Entry.AreaEntries.Add(existingAreaEntry);
295
+ }
296
+
297
+ /// <summary>
298
+ ///
299
+ /// </summary>
300
+ /// <param name="existingAreaEntry"></param>
301
+ /// <param name="placeData"></param>
302
+ /// <param name="log"></param>
303
+ protected virtual void CreatePlaceEntry(MapAreaEntry existingAreaEntry, PlaceData placeData, string log)
304
+ {
305
+ PlaceEntry placeEntry = new();
306
+
307
+ placeEntry.SetData(placeData);
308
+
309
+ if (selectedVessel != null)
310
+ placeEntry.MarkerVessels.Add(selectedVessel);
311
+
312
+ existingAreaEntry.PlaceEntries.Add(placeEntry);
313
+
314
+ placeEntry.SetFastTravel(placeData.fastTravelable);
315
+
316
+ UnityEngine.Debug.Log(nameof(MapEntryChange) + ": " + log);
317
+ }
318
+
319
+ #endif
320
+ }
321
+ }