1
+
2
+ namespace EntityViewer {
3
+
4
+ const WINDOW_CLASS = 'devtools.window.entityviewer' ;
5
+ const TOOL_ID = 'devtools.tool.entityviewer' ;
6
+
7
+ var entityId : number ;
8
+
9
+ export function register ( ) {
10
+ ui . registerMenuItem ( 'Entity Viewer' , ( ) => {
11
+ ui . activateTool ( {
12
+ id : TOOL_ID ,
13
+ cursor : "cross_hair" ,
14
+ onDown : e => {
15
+ if ( e . entityId ) {
16
+ getOrOpen ( e . entityId ) ;
17
+ }
18
+ }
19
+ } ) ;
20
+ } ) ;
21
+ }
22
+
23
+ function getOrOpen ( id : number ) {
24
+ entityId = id ;
25
+ const w = ui . getWindow ( WINDOW_CLASS ) ;
26
+ if ( w ) {
27
+ w . bringToFront ( ) ;
28
+ } else {
29
+ open ( ) ;
30
+ }
31
+ }
32
+
33
+ function open ( ) {
34
+ const window = ui . openWindow ( {
35
+ classification : WINDOW_CLASS ,
36
+ title : '' ,
37
+ width : 300 ,
38
+ height : 500 ,
39
+ minWidth : 300 ,
40
+ minHeight : 300 ,
41
+ maxWidth : 500 ,
42
+ maxHeight : 1200 ,
43
+ widgets : [
44
+ {
45
+ type : "listview" ,
46
+ name : "rve-debug-list" ,
47
+ scrollbars : "both" ,
48
+ columns : [
49
+ {
50
+ width : 130
51
+ } ,
52
+ {
53
+ }
54
+ ] ,
55
+ isStriped : true ,
56
+ canSelect : true ,
57
+ x : 5 ,
58
+ y : 20 ,
59
+ width : 290 ,
60
+ height : 575 ,
61
+ onClick : ( i , c ) => console . log ( `Clicked item ${ i } in column ${ c } ` )
62
+ }
63
+ ] ,
64
+ onClose : ( ) => onClose ( ) ,
65
+ onUpdate : ( ) => onUpdate ( )
66
+ } ) ;
67
+
68
+ function onClose ( ) {
69
+ const tool = ui . tool ;
70
+ if ( tool && tool . id == TOOL_ID ) {
71
+ tool . cancel ( ) ;
72
+ }
73
+ }
74
+
75
+ function onUpdate ( ) {
76
+ updateInfo ( ) ;
77
+ }
78
+
79
+ function set ( items : ListViewItem [ ] ) {
80
+ const list = window . findWidget < ListView > ( "rve-debug-list" ) ;
81
+ list . width = window . width - 10 ;
82
+ list . height = window . height - 36 ;
83
+ list . items = items ;
84
+ }
85
+
86
+ function updateInfo ( ) {
87
+ window . title = `Entity Viewer: #${ entityId } ` ;
88
+
89
+ const entity = map . getEntity ( entityId ) ;
90
+ if ( ! entity ) {
91
+ set ( [ [ "Entity does not exist anymore." , "" ] ] ) ;
92
+ return ;
93
+ }
94
+
95
+ const sep = ( text : string ) => < ListViewItemSeperator > { type : 'seperator' , text } ;
96
+
97
+ let data : ListViewItem [ ] = [
98
+ sep ( 'Entity' ) ,
99
+ [ "Id:" , entity . id . toString ( ) ] ,
100
+ [ "Type:" , entity . type . toString ( ) ] ,
101
+ [ "Position:" , `${ entity . x } , ${ entity . y } , ${ entity . z } ` ]
102
+ ] ;
103
+
104
+ switch ( entity . type ) {
105
+ case "car" :
106
+ const car = entity as Car ;
107
+ data = data . concat ( [
108
+ [ "" , "" ] ,
109
+ sep ( 'Car' ) ,
110
+ [ "Ride id" , car . ride . toString ( ) ] ,
111
+ [ "Ride object id" , car . rideObject . toString ( ) ] ,
112
+ [ "Vehicle object id" , car . vehicleObject . toString ( ) ] ,
113
+ [ "Sprite type" , car . spriteType . toString ( ) ] ,
114
+ [ "Num. of seats" , car . numSeats . toString ( ) ] ,
115
+ [ "Next car on train" , car . nextCarOnTrain ?. toString ( ) ?? "null" ] ,
116
+ [ "Next car on ride" , car . nextCarOnRide . toString ( ) ] ,
117
+ [ "Previous car on ride" , car . previousCarOnRide . toString ( ) ] ,
118
+ [ "Current station" , car . currentStation . toString ( ) ] ,
119
+ [ "" , "" ] ,
120
+ [ "Mass:" , car . mass . toString ( ) ] ,
121
+ [ "Acceleration:" , car . acceleration . toString ( ) ] ,
122
+ [ "Banking rotation:" , car . bankRotation . toString ( ) ] ,
123
+ [ "Colours" , `body: ${ car . colours . body } , trim: ${ car . colours . trim } , ternary: ${ car . colours . ternary } ` ] ,
124
+ [ "Powered acceleration:" , car . poweredAcceleration . toString ( ) ] ,
125
+ [ "Powered max. speed:" , car . poweredMaxSpeed . toString ( ) ] ,
126
+ [ "Status:" , car . status . toString ( ) ] ,
127
+ [ "Peeps:" , car . peeps . map ( p => ( p == null ) ? "null" : p . toString ( ) ) . toString ( ) ] ,
128
+ [ "" , "" ] ,
129
+ // @ts -expect-error
130
+ [ "Track location" , `${ car . trackLocation . x } , ${ car . trackLocation . y } , ${ car . trackLocation . z } , dir: ${ car . trackLocation . direction } ` ] ,
131
+ [ "Track progress" , car . trackProgress . toString ( ) ] ,
132
+ [ "Remaining distance" , car . remainingDistance . toString ( ) ] ,
133
+ ] ) ;
134
+
135
+
136
+ const rideObject = context . getObject ( "ride" , car . rideObject ) ;
137
+ const vehicleObject = rideObject . vehicles [ car . vehicleObject ] ;
138
+
139
+ data = data . concat ( [
140
+ [ "" , "" ] ,
141
+ sep ( 'VehicleObject' ) ,
142
+ [ "Rotation frame mask:" , vehicleObject . rotationFrameMask . toString ( ) ] ,
143
+ [ "Num. of vertical frames:" , vehicleObject . numVerticalFrames . toString ( ) ] ,
144
+ [ "Num. of horizontal frames:" , vehicleObject . numHorizontalFrames . toString ( ) ] ,
145
+ [ "Spacing:" , vehicleObject . spacing . toString ( ) ] ,
146
+ [ "Car mass:" , vehicleObject . carMass . toString ( ) ] ,
147
+ [ "Tab height:" , vehicleObject . tabHeight . toString ( ) ] ,
148
+ [ "Num. of seats:" , vehicleObject . numSeats . toString ( ) ] ,
149
+ [ "" , "" ] ,
150
+ [ "Sprite flags:" , vehicleObject . spriteFlags . toString ( ) ] ,
151
+ [ "Sprite width:" , vehicleObject . spriteWidth . toString ( ) ] ,
152
+ [ "Sprite height:" , vehicleObject . spriteHeightPositive . toString ( ) ] ,
153
+ [ "Animation:" , vehicleObject . animation . toString ( ) ] ,
154
+ [ "Flags:" , vehicleObject . flags . toString ( ) ] ,
155
+ // Here are many image id properties not included.
156
+ [ "" , "" ] ,
157
+ [ "Num. of vehicle images:" , vehicleObject . noVehicleImages . toString ( ) ] ,
158
+ [ "Num. of seating rows:" , vehicleObject . noSeatingRows . toString ( ) ] ,
159
+ [ "Spinning inertia:" , vehicleObject . spinningInertia . toString ( ) ] ,
160
+ [ "Spinning friction:" , vehicleObject . spinningFriction . toString ( ) ] ,
161
+ [ "Friction sound id:" , vehicleObject . frictionSoundId . toString ( ) ] ,
162
+ [ "Logflume reverser vehicle:" , vehicleObject . logFlumeReverserVehicleType . toString ( ) ] ,
163
+ [ "Sound range:" , vehicleObject . soundRange . toString ( ) ] ,
164
+ [ "Double sound frequency:" , vehicleObject . doubleSoundFrequency . toString ( ) ] ,
165
+ [ "" , "" ] ,
166
+ [ "Powered acceleration:" , vehicleObject . poweredAcceleration . toString ( ) ] ,
167
+ [ "Powered max speed:" , vehicleObject . poweredMaxSpeed . toString ( ) ] ,
168
+ [ "Car visual:" , vehicleObject . carVisual . toString ( ) ] ,
169
+ [ "Effect visual:" , vehicleObject . effectVisual . toString ( ) ] ,
170
+ [ "Draw order:" , vehicleObject . drawOrder . toString ( ) ] ,
171
+ ] ) ;
172
+
173
+ data = data . concat ( [
174
+ [ "" , "" ] ,
175
+ sep ( 'RideObject' ) ,
176
+ [ "Type:" , rideObject . type . toString ( ) ] ,
177
+ [ "Index:" , rideObject . index . toString ( ) ] ,
178
+ [ "Identifier:" , rideObject . identifier . toString ( ) ] ,
179
+ [ "Legacy id:" , rideObject . legacyIdentifier . toString ( ) ] ,
180
+ [ "Name:" , rideObject . name . toString ( ) ] ,
181
+ [ "" , "" ] ,
182
+ [ "Capacity:" , rideObject . capacity . toString ( ) ] ,
183
+ [ "Flags:" , rideObject . flags . toString ( ) ] ,
184
+ [ "Ride type:" , rideObject . rideType . map ( r => ( r == null ) ? "null" : r . toString ( ) ) . toString ( ) ] ,
185
+ [ "" , "" ] ,
186
+ [ "Min. cars in train:" , rideObject . minCarsInTrain . toString ( ) ] ,
187
+ [ "Max. cars in train:" , rideObject . maxCarsInTrain . toString ( ) ] ,
188
+ [ "Cars per flatride:" , rideObject . carsPerFlatRide . toString ( ) ] ,
189
+ [ "Seatless cars:" , rideObject . zeroCars . toString ( ) ] ,
190
+ [ "" , "" ] ,
191
+ [ "Tab vehicle:" , rideObject . tabVehicle . toString ( ) ] ,
192
+ [ "Default vehicle:" , rideObject . defaultVehicle . toString ( ) ] ,
193
+ [ "Front vehicle:" , rideObject . frontVehicle . toString ( ) ] ,
194
+ [ "Second vehicle:" , rideObject . secondVehicle . toString ( ) ] ,
195
+ [ "Third vehicle:" , rideObject . thirdVehicle . toString ( ) ] ,
196
+ [ "Rear vehicle:" , rideObject . rearVehicle . toString ( ) ] ,
197
+ [ "" , "" ] ,
198
+ [ "Excitement multiplier:" , rideObject . excitementMultiplier . toString ( ) ] ,
199
+ [ "Intensity multiplier:" , rideObject . intensityMultiplier . toString ( ) ] ,
200
+ [ "Nausea multiplier:" , rideObject . nauseaMultiplier . toString ( ) ] ,
201
+ [ "Max height:" , rideObject . maxHeight . toString ( ) ] ,
202
+ [ "Shop items:" , `${ rideObject . shopItem } , ${ rideObject . shopItemSecondary } ` ] ,
203
+ ] ) ;
204
+ }
205
+
206
+ set ( data ) ;
207
+ }
208
+ }
209
+ }
0 commit comments