4
4
using Content . Server . GameTicking ;
5
5
using Content . Server . GameTicking . Rules ;
6
6
using Content . Server . Objectives ;
7
+ using Content . Server . Objectives . Components . Targets ;
8
+ using Content . Server . Shuttles . Components ;
7
9
using Content . Server . Shuttles . Events ;
10
+ using Content . Server . Shuttles . Systems ;
11
+ using Content . Shared . Containers . ItemSlots ;
8
12
using Content . Shared . GameTicking . Components ;
9
13
using Content . Shared . Mind ;
10
14
using Content . Shared . Players ;
11
15
using Content . Shared . Random . Helpers ;
12
- using Robust . Shared . Map . Components ;
16
+ using Content . Shared . Shuttles . Components ;
13
17
using Robust . Shared . Prototypes ;
14
18
using Robust . Shared . Random ;
15
19
using Robust . Shared . Utility ;
@@ -23,6 +27,8 @@ public sealed class VoxRaidersRuleSystem : GameRuleSystem<VoxRaidersRuleComponen
23
27
[ Dependency ] private readonly SharedMindSystem _mind = default ! ;
24
28
[ Dependency ] private readonly ObjectivesSystem _objectives = default ! ;
25
29
[ Dependency ] private readonly SharedMapSystem _map = default ! ;
30
+ [ Dependency ] private readonly ShuttleSystem _shuttle = default ! ;
31
+ [ Dependency ] private readonly ItemSlotsSystem _slots = default ! ;
26
32
27
33
public override void Initialize ( )
28
34
{
@@ -31,7 +37,9 @@ public override void Initialize()
31
37
SubscribeLocalEvent < VoxRaidersRuleComponent , AfterAntagEntitySelectedEvent > ( OnAfterAntagEntitySelected ) ;
32
38
SubscribeLocalEvent < VoxRaidersRuleComponent , RuleLoadedGridsEvent > ( OnRuleLoadedGrids ) ;
33
39
34
- SubscribeLocalEvent < VoxRaidersShuttleComponent , FTLCompletedEvent > ( OnFTLCompleted ) ;
40
+ SubscribeLocalEvent < VoxRaidersPinpointerComponent , MapInitEvent > ( OnMapInit ) ;
41
+
42
+ SubscribeLocalEvent < FTLCompletedEvent > ( OnFTLCompleted ) ;
35
43
}
36
44
37
45
protected override void Started ( EntityUid uid , VoxRaidersRuleComponent component , GameRuleComponent gameRule , GameRuleStartedEvent args )
@@ -82,9 +90,9 @@ private void OnAfterAntagEntitySelected(Entity<VoxRaidersRuleComponent> entity,
82
90
83
91
entity . Comp . Raiders . Add ( e . EntityUid ) ;
84
92
85
- var query = AllEntityQuery < VoxRaidersShuttleComponent , ExtractionShuttleComponent > ( ) ;
86
- while ( query . MoveNext ( out var shuttle , out var extraction ) )
87
- if ( shuttle . Rule == entity . Owner )
93
+ var query = AllEntityQuery < VoxRaidersMapComponent , ExtractionMapComponent > ( ) ;
94
+ while ( query . MoveNext ( out var map , out var extraction ) )
95
+ if ( map . Rule == entity . Owner )
88
96
extraction . Owners . Add ( mind . Value ) ;
89
97
90
98
foreach ( var objective in entity . Comp . ObjectivePrototypes )
@@ -105,26 +113,72 @@ private void OnAfterAntagEntitySelected(Entity<VoxRaidersRuleComponent> entity,
105
113
106
114
private void OnRuleLoadedGrids ( Entity < VoxRaidersRuleComponent > entity , ref RuleLoadedGridsEvent e )
107
115
{
108
- entity . Comp . Map = _map . GetMap ( e . Map ) ;
116
+ var map = _map . GetMap ( e . Map ) ;
117
+
118
+ var voxRaidersMap = EnsureComp < VoxRaidersMapComponent > ( map ) ;
119
+
120
+ voxRaidersMap . Rule = entity ;
121
+
122
+ EnsureComp < ExtractionMapComponent > ( map ) ;
109
123
110
- var query = AllEntityQuery < VoxRaidersShuttleComponent > ( ) ;
111
- while ( query . MoveNext ( out var ent , out var shuttle ) )
124
+ _shuttle . TryAddFTLDestination ( e . Map , true , out _ ) ;
125
+
126
+ var query = AllEntityQuery < ShuttleConsoleComponent , ItemSlotsComponent , TransformComponent > ( ) ;
127
+ while ( query . MoveNext ( out var ent , out _ , out var slots , out var transform ) )
112
128
{
113
- if ( Transform ( ent ) . MapID != e . Map )
129
+ if ( transform . MapID != e . Map )
114
130
continue ;
115
131
116
- EnsureComp < ExtractionShuttleComponent > ( ent ) ;
132
+ var disk = Spawn ( "CoordinatesDisk" ) ;
133
+
134
+ var destination = EnsureComp < ShuttleDestinationCoordinatesComponent > ( disk ) ;
135
+
136
+ destination . Destination = map ;
137
+
138
+ Dirty ( disk , destination ) ;
117
139
118
- shuttle . Rule = entity ;
140
+ _slots . TryInsert ( ent , SharedShuttleConsoleComponent . DiskSlotName , disk , null , slots ) ;
119
141
}
120
142
}
121
143
122
- private void OnFTLCompleted ( Entity < VoxRaidersShuttleComponent > entity , ref FTLCompletedEvent e )
144
+ private void OnMapInit ( Entity < VoxRaidersPinpointerComponent > entity , ref MapInitEvent e )
123
145
{
124
- if ( ! TryComp < VoxRaidersRuleComponent > ( entity . Comp . Rule , out var rule ) )
146
+ if ( ! TryComp < VoxRaidersMapComponent > ( Transform ( entity ) . MapUid , out var map ) )
125
147
return ;
126
148
127
- if ( e . MapUid != rule . Map )
149
+ if ( ! TryComp < VoxRaidersRuleComponent > ( map . Rule , out var rule ) )
150
+ return ;
151
+
152
+ if ( ! TryComp < ControlPinpointerComponent > ( entity , out var pin ) )
153
+ return ;
154
+
155
+ foreach ( var raider in rule . Raiders )
156
+ pin . Entities . Add ( raider ) ;
157
+
158
+ foreach ( var objectives in rule . Objectives . Values )
159
+ {
160
+ if ( ! TryComp < ExtractConditionComponent > ( objectives [ 0 ] . Objective , out var condition ) )
161
+ continue ;
162
+
163
+ var query = AllEntityQuery < StealTargetComponent > ( ) ;
164
+ while ( query . MoveNext ( out var ent , out var target ) )
165
+ {
166
+ if ( target . StealGroup != condition . StealGroup )
167
+ continue ;
168
+
169
+ pin . Entities . Add ( ent ) ;
170
+
171
+ break ;
172
+ }
173
+ }
174
+ }
175
+
176
+ private void OnFTLCompleted ( ref FTLCompletedEvent e )
177
+ {
178
+ if ( ! TryComp < VoxRaidersMapComponent > ( e . MapUid , out var map ) )
179
+ return ;
180
+
181
+ if ( ! TryComp < VoxRaidersRuleComponent > ( map . Rule , out var rule ) )
128
182
return ;
129
183
130
184
foreach ( var objectives in rule . Objectives . Values )
@@ -135,10 +189,13 @@ private void OnFTLCompleted(Entity<VoxRaidersShuttleComponent> entity, ref FTLCo
135
189
136
190
foreach ( var raider in rule . Raiders )
137
191
{
138
- if ( ! TryComp < ExtractionShuttleComponent > ( Transform ( raider ) . GridUid , out var shuttle ) )
192
+ if ( ! TryComp < ExtractionMapComponent > ( Transform ( raider ) . MapUid , out var extraction ) )
193
+ return ;
194
+
195
+ if ( ! _mind . TryGetMind ( raider , out var mind , out _ ) )
139
196
return ;
140
197
141
- if ( ! shuttle . Owners . Contains ( raider ) )
198
+ if ( ! extraction . Owners . Contains ( mind ) )
142
199
return ;
143
200
}
144
201
0 commit comments