1+ using KSP . Game . Science ;
2+ using Newtonsoft . Json . Linq ;
3+ using PatchManager . SassyPatching ;
4+ using PatchManager . SassyPatching . Interfaces ;
5+ using PatchManager . SassyPatching . Selectables ;
6+ using PatchManager . Science . Modifiables ;
7+
8+ namespace PatchManager . Science . Selectables ;
9+
10+ /// <summary>
11+ /// A selectable that represents discoverables
12+ /// </summary>
13+ public sealed class DiscoverablesSelectable : BaseSelectable
14+ {
15+ #pragma warning disable CS0414 // Field is assigned but its value is never used
16+ private bool _modified ;
17+ #pragma warning restore CS0414 // Field is assigned but its value is never used
18+ private bool _deleted ;
19+
20+ /// <summary>
21+ /// Marks this part selectable as having been modified any level down
22+ /// </summary>
23+ public void SetModified ( )
24+ {
25+ _modified = true ;
26+ }
27+
28+ /// <summary>
29+ /// Marks this part as goneso
30+ /// </summary>
31+ public void SetDeleted ( )
32+ {
33+ SetModified ( ) ;
34+ _deleted = true ;
35+ }
36+
37+
38+ /// <summary>
39+ /// The main object that represents this discoverable object
40+ /// </summary>
41+ public JObject DiscoverablesObject ;
42+ private JArray _discoverablesArray ;
43+
44+ /// <summary>
45+ /// Create a new discoverables selectable from a JObject
46+ /// </summary>
47+ /// <param name="discoverablesObject">Discoverable </param>
48+ public DiscoverablesSelectable ( JObject discoverablesObject )
49+ {
50+ DiscoverablesObject = discoverablesObject ;
51+ ElementType = "discoverables" ;
52+ Name = discoverablesObject [ "BodyName" ] . Value < string > ( ) ;
53+ Children = [ ] ;
54+ Classes =
55+ [ "BodyName" ] ;
56+ _discoverablesArray = ( JArray ) discoverablesObject [ "Discoverables" ] ;
57+ foreach ( var jToken in _discoverablesArray )
58+ {
59+ var discoverable = ( JObject ) jToken ;
60+ var name = discoverable [ "ScienceRegionId" ] ! . Value < string > ( ) ;
61+ Classes . Add ( name ) ;
62+ Children . Add ( new JTokenSelectable ( SetModified , discoverable ,
63+ disc => ( ( JObject ) disc ) [ "ScienceRegionId" ] ! . Value < string > ( ) , "discoverable" ) ) ;
64+ }
65+ }
66+
67+ /// <inheritdoc />
68+ public override List < ISelectable > Children { get ; }
69+
70+ /// <inheritdoc />
71+ public override string Name { get ; }
72+
73+ /// <inheritdoc />
74+ public override List < string > Classes { get ; }
75+
76+ /// <inheritdoc />
77+ public override bool MatchesClass ( string @class , out DataValue classValue )
78+ {
79+ foreach ( var jToken in _discoverablesArray )
80+ {
81+ var discoverable = ( JObject ) jToken ;
82+ var name = discoverable [ "ScienceRegionId" ] ! . Value < string > ( ) ;
83+ if ( name != @class ) continue ;
84+ classValue = DataValue . FromJToken ( discoverable ) ;
85+ return true ;
86+ }
87+ classValue = DataValue . Null ;
88+ return false ;
89+ }
90+
91+ /// <inheritdoc />
92+ public override bool IsSameAs ( ISelectable other ) => other is DiscoverablesSelectable discoverablesSelectable &&
93+ discoverablesSelectable . DiscoverablesObject ==
94+ DiscoverablesObject ;
95+
96+ /// <inheritdoc />
97+ public override IModifiable OpenModification ( ) => new DiscoverablesModifiable ( this ) ;
98+
99+ /// <inheritdoc />
100+ public override ISelectable AddElement ( string elementType )
101+ {
102+ var position = new CelestialBodyDiscoverablePosition
103+ {
104+ ScienceRegionId = elementType ,
105+ Position = new Vector3d ( ) ,
106+ Radius = 0.0
107+ } ;
108+ var jObject = JObject . FromObject ( position ) ;
109+ _discoverablesArray . Add ( jObject ) ;
110+ var selectable = new JTokenSelectable ( SetModified , jObject ,
111+ disc => ( ( JObject ) disc ) [ "ScienceRegionId" ] ! . Value < string > ( ) , "discoverable" ) ;
112+ Classes . Add ( elementType ) ;
113+ Children . Add ( selectable ) ;
114+ return selectable ;
115+ }
116+
117+ /// <inheritdoc />
118+ public override string Serialize ( ) => _deleted ? "" : DiscoverablesObject . ToString ( ) ;
119+
120+ /// <inheritdoc />
121+ public override DataValue GetValue ( ) => DataValue . FromJToken ( DiscoverablesObject ) ;
122+
123+ /// <inheritdoc />
124+ public override string ElementType { get ; }
125+ }
0 commit comments