@@ -19,7 +19,7 @@ function Create(self)
19
19
self .loadedShell = false ;
20
20
self .reloadCycle = false ;
21
21
22
- self .reloadDelay = 150 ;
22
+ self .reloadDelay = 200 ;
23
23
self .origReloadTime = 900 ;
24
24
25
25
self .origStanceOffset = self .StanceOffset ;
@@ -61,7 +61,7 @@ function Create(self)
61
61
self .InheritedRotAngleTarget = 0 ;
62
62
self .InheritedRotAngleOffset = 0 ;
63
63
self .recoilAngleSize = 0.45 ;
64
- self .recoilAngleVariation = 0.02 ;
64
+ self .recoilAngleVariation = 0.5 ;
65
65
self .rotationSpeed = 0.1 ;
66
66
67
67
self .cockTimer = Timer ();
@@ -127,14 +127,15 @@ function Update(self)
127
127
self .ammoCounter = self .ammoCounter - 1 ;
128
128
self .shellsToEject = self .shellsToEject + 1 ;
129
129
self .ReloadStartSound = self .reloadStartSound ;
130
- self .Frame = 1 ;
131
130
self .cockTimer :Reset ();
132
131
self .cockDelay = 300 ;
132
+ self .hammerDown = true ;
133
133
if self .fanFire then
134
134
self .cockDelay = 100 ;
135
135
self .ShakeRange = self .fanFireShakeRange ;
136
136
self .SharpShakeRange = self .fanFireShakeRange ;
137
137
end
138
+ self .Frame = 0 ;
138
139
end
139
140
if self .Magazine then
140
141
@@ -160,18 +161,22 @@ function Update(self)
160
161
end
161
162
end
162
163
163
- if not self .reloadCycle and self .Frame == 1 then
164
+ if not self .reloadCycle and self .hammerDown then
164
165
self :Deactivate ();
165
166
self .delayedFire = false ;
167
+
166
168
167
169
if self .cockTimer :IsPastSimMS (self .cockDelay ) then
168
170
if self .fanFire then
169
171
-- self.fanFireSound:Play(self.Pos);
170
172
else
171
173
self .cockSound :Play (self .Pos );
174
+ self .rotateAnim = true ;
172
175
end
176
+ self .cockTimer :Reset ();
177
+ self .rotateAnim = true ;
178
+ self .hammerDown = false ;
173
179
self .InheritedRotAngleTarget = 0 ;
174
- self .Frame = 0 ;
175
180
end
176
181
end
177
182
@@ -203,14 +208,27 @@ function Update(self)
203
208
self :Reload ();
204
209
end
205
210
end
211
+
212
+ if self .rotateAnim then
213
+ local minTime = 0 ;
214
+ local maxTime = self .cockDelay * 0.75 ;
215
+
216
+ local factor = math.min (math.max (self .cockTimer .ElapsedSimTimeMS - minTime , 0 ) / (maxTime - minTime ), 1 );
217
+
218
+ self .Frame = math.floor (factor * (4 ) + 0.5 )
219
+ if self .Frame == 4 then
220
+ self .Frame = 0 ;
221
+ self .rotateAnim = false ;
222
+ end
223
+ end
224
+
206
225
else
207
226
208
227
self .cockTimer :Reset ();
209
-
210
- self .reloadTimer :Reset ();
211
228
212
229
if self .reloadCycle ~= true then
213
230
-- self.cockDelay = 300;
231
+ self .openAnim = true ;
214
232
self .InheritedRotAngleTarget = 0.1 ; -- not respected by the game currently
215
233
self .ReloadEndSound = self .roundInSound ;
216
234
self .ReloadStartSound = nil ;
@@ -230,21 +248,47 @@ function Update(self)
230
248
self .loadedShell = true ;
231
249
232
250
if self .ammoCounter == self .maxAmmoCount or self .prematureCycleEnd then
251
+ self .closeAnim = true ;
233
252
self .ReloadAngle = 0.1 ;
234
253
self .OneHandedReloadAngle = 0.2 ;
235
254
self .loadedShell = false ;
236
255
self .ReloadEndSound = self .reloadEndSound ;
237
256
self .reloadCycleEndNext = true ;
238
- self .BaseReloadTime = self .reloadDelay ;
257
+ self .BaseReloadTime = self .reloadDelay * 2 ;
239
258
end
240
259
241
260
end
242
261
262
+ if self .openAnim then
263
+ local minTime = 0 ;
264
+ local maxTime = 300 ;
265
+
266
+ local factor = math.min (math.max (self .reloadTimer .ElapsedSimTimeMS - minTime , 0 ) / (maxTime - minTime ), 1 );
267
+
268
+ self .Frame = 3 + math.floor (factor * (6 ) + 0.5 )
269
+ if self .Frame == 6 then
270
+ self .openAnim = false ;
271
+ end
272
+ end
273
+
274
+ if self .closeAnim then
275
+ local minTime = 0 ;
276
+ local maxTime = 250 ;
277
+
278
+ local factor = math.min (math.max (self .cockTimer .ElapsedSimTimeMS - minTime , 0 ) / (maxTime - minTime ), 1 );
279
+
280
+ self .Frame = 6 - math.floor (factor * (3 ) + 0.5 )
281
+ if self .Frame == 4 then
282
+ self .Frame = 0 ;
283
+ self .closeAnim = false ;
284
+ end
285
+ end
286
+
243
287
if self :DoneReloading () then
288
+ self .reloadTimer :Reset ();
244
289
self .fireDelayTimer :Reset ();
245
290
self .activated = false ;
246
291
self .delayedFire = false ;
247
-
248
292
end
249
293
250
294
if self .delayedFire and self .delayedFireTimer :IsPastSimMS (self .delayedFireTimeMS ) then
@@ -253,7 +297,7 @@ function Update(self)
253
297
self .delayedFirstShot = false ;
254
298
end
255
299
256
- local fire = self :IsActivated () and self .RoundInMagCount > 0 and self .Frame == 0 ;
300
+ local fire = self :IsActivated () and self .RoundInMagCount > 0 and not self .hammerDown ;
257
301
258
302
if self .delayedFirstShot == true then
259
303
if self .RoundInMagCount > 0 then
0 commit comments