@@ -65,7 +65,6 @@ public override void Initialize()
6565 SubscribeLocalEvent < AndroidComponent , ComponentStartup > ( OnStartup ) ;
6666
6767 SubscribeLocalEvent < AndroidComponent , AndroidChargeEvent > ( OnDoAfter ) ;
68- SubscribeLocalEvent < AndroidComponent , MobStateChangedEvent > ( OnMobstateChanged ) ;
6968 SubscribeLocalEvent < AndroidComponent , BeforeDealHeatDamageFromLightBulbEvent > ( OnGetLightBulb ) ;
7069 SubscribeLocalEvent < AndroidComponent , RefreshMovementSpeedModifiersEvent > ( OnModifiersRefresh ) ;
7170 SubscribeLocalEvent < AndroidComponent , ItemToggledEvent > ( OnToggle ) ;
@@ -86,14 +85,6 @@ public override void Update(float frameTime)
8685 continue ;
8786 }
8887
89- /*
90- if (!powerCellDrawComp.CanDraw)
91- {
92- _powerCell.SetDrawEnabled((uid, powerCellDrawComp), false);
93- continue;
94- }
95- */
96-
9788 _powerCell . SetDrawEnabled ( ( uid , powerCellDrawComp ) , true ) ;
9889 }
9990 }
@@ -204,20 +195,7 @@ private void OnGetLightBulb(EntityUid android, AndroidComponent comp, BeforeDeal
204195 args . Cancel ( ) ;
205196 }
206197
207- private void OnMobstateChanged ( EntityUid android , AndroidComponent comp , MobStateChangedEvent args )
208- {
209- if ( ! TryComp < PowerCellDrawComponent > ( android , out var powerCellDrawComp ) )
210- return ;
211-
212- /*
213- if (args.NewMobState == MobState.Dead)
214- powerCellDrawComp.CanDraw = false;
215- else powerCellDrawComp.CanDraw = true;
216- */
217- }
218-
219- private void CheckAndDoForcedSleep ( EntityUid android ,
220- AndroidComponent comp )
198+ private void CheckAndDoForcedSleep ( EntityUid android , AndroidComponent comp )
221199 {
222200 if ( _gameTiming . CurTime < comp . NextTime )
223201 return ;
@@ -227,12 +205,14 @@ private void CheckAndDoForcedSleep(EntityUid android,
227205 if ( ! _powerCell . TryGetBatteryFromSlot ( android , out var battery ) )
228206 return ;
229207
230- if ( battery == null )
231- return ;
232-
233- if ( battery . Value . Comp . ChargeRate / battery . Value . Comp . MaxCharge * 100 > 5f )
234- return ;
208+ if ( battery == null || ! _powerCell . HasDrawCharge ( android ) )
209+ {
210+ DoForcedSleep ( android , comp ) ;
211+ }
212+ }
235213
214+ private void DoForcedSleep ( EntityUid android , AndroidComponent comp )
215+ {
236216 if ( _random . Prob ( comp . ForcedSleepChance ) )
237217 {
238218 var duration = _random . Next ( comp . SleepTimeMin , comp . SleepTimeMax ) ;
@@ -246,11 +226,12 @@ private void OnVerb(EntityUid target, AndroidChargeTargetComponent comp, GetVerb
246226 return ;
247227
248228 if ( ! HasComp < AndroidComponent > ( args . User ) ||
249- ! _powerCell . TryGetBatteryFromSlot ( args . User , out var battery_ent ) )
229+ ! _powerCell . TryGetBatteryFromSlot ( args . User , out var batteryEnt ) ||
230+ batteryEnt . Value . Comp . State == BatteryState . Full )
250231 return ;
251232
252233 if ( ! TryComp < BatteryComponent > ( args . Target , out var targetBattery ) ||
253- targetBattery . ChargeRate / targetBattery . MaxCharge * 100f <= 5f )
234+ targetBattery . State == BatteryState . Empty )
254235 return ;
255236
256237 var doAfter = new DoAfterArgs ( EntityManager , args . User , AndroidDoAfterChargeTime , new AndroidChargeEvent ( ) , args . User , target , null )
@@ -275,21 +256,30 @@ private void OnDoAfter(EntityUid android, AndroidComponent comp, AndroidChargeEv
275256 if ( args . Cancelled || args . Handled )
276257 return ;
277258
278- if ( ! _powerCell . TryGetBatteryFromSlot ( android , out var batteryEnt )
279- || batteryEnt . Value . Comp . ChargeRate / batteryEnt . Value . Comp . MaxCharge * 100f >= 95f
280- || batteryEnt == null
281- || ! TryComp < BatteryComponent > ( args . Target , out var targetBattery )
282- || targetBattery . ChargeRate / targetBattery . MaxCharge * 100f <= 5f )
259+ if ( ! _powerCell . TryGetBatteryFromSlot ( android , out var batteryEnt ) || ! TryComp < BatteryComponent > ( batteryEnt , out var battery ) )
283260 {
284261 args . Handled = true ;
285262 return ;
286263 }
287264
288- if ( ! EntityManager . TryGetComponent < BatteryComponent > ( batteryEnt , out var battery ) )
265+ float chargeTransfer = Math . Clamp ( comp . ChargeRate , 0f , battery . MaxCharge - _battery . GetCharge ( batteryEnt . Value . Owner ) ) ;
266+
267+ if ( chargeTransfer == 0f
268+ || ! HasComp < BatteryComponent > ( args . Target )
269+ || _battery . GetCharge ( args . Target . Value ) < chargeTransfer * comp . TargetDecreaseFactor )
270+ {
271+ args . Handled = true ;
289272 return ;
273+ }
274+
275+ _battery . ChangeCharge ( ( batteryEnt . Value , battery ) , chargeTransfer ) ;
276+ _battery . ChangeCharge ( args . Target . Value , - chargeTransfer * comp . TargetDecreaseFactor ) ;
290277
291- _battery . SetCharge ( ( batteryEnt . Value , battery ) , battery . ChargeRate + comp . ChargeRate ) ;
292- _battery . SetCharge ( args . Target . Value , targetBattery . ChargeRate - comp . ChargeRate * comp . TargetDecreaseFactor ) ;
278+ if ( battery . State == BatteryState . Full )
279+ {
280+ args . Handled = true ;
281+ return ;
282+ }
293283
294284 args . Repeat = true ;
295285 }
0 commit comments