Predict passive welding fuel consumption (#38876)
* predict welding fuel consumption * autopaused * review Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> --------- Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com>
This commit is contained in:
@@ -17,13 +17,16 @@ public abstract partial class SharedToolSystem
|
||||
|
||||
public void InitializeWelder()
|
||||
{
|
||||
SubscribeLocalEvent<WelderComponent, MapInitEvent>(OnWelderInit);
|
||||
SubscribeLocalEvent<WelderComponent, ExaminedEvent>(OnWelderExamine);
|
||||
SubscribeLocalEvent<WelderComponent, AfterInteractEvent>(OnWelderAfterInteract);
|
||||
|
||||
SubscribeLocalEvent<WelderComponent, ToolUseAttemptEvent>((uid, comp, ev) => {
|
||||
SubscribeLocalEvent<WelderComponent, ToolUseAttemptEvent>((uid, comp, ev) =>
|
||||
{
|
||||
CanCancelWelderUse((uid, comp), ev.User, ev.Fuel, ev);
|
||||
});
|
||||
SubscribeLocalEvent<WelderComponent, DoAfterAttemptEvent<ToolDoAfterEvent>>((uid, comp, ev) => {
|
||||
SubscribeLocalEvent<WelderComponent, DoAfterAttemptEvent<ToolDoAfterEvent>>((uid, comp, ev) =>
|
||||
{
|
||||
CanCancelWelderUse((uid, comp), ev.Event.User, ev.Event.Fuel, ev);
|
||||
});
|
||||
SubscribeLocalEvent<WelderComponent, ToolDoAfterEvent>(OnWelderDoAfter);
|
||||
@@ -71,6 +74,12 @@ public abstract partial class SharedToolSystem
|
||||
return (fuelSolution.GetTotalPrototypeQuantity(welder.FuelReagent), fuelSolution.MaxVolume);
|
||||
}
|
||||
|
||||
private void OnWelderInit(Entity<WelderComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
ent.Comp.NextUpdate = _timing.CurTime + ent.Comp.WelderUpdateTimer;
|
||||
Dirty(ent);
|
||||
}
|
||||
|
||||
private void OnWelderExamine(Entity<WelderComponent> entity, ref ExaminedEvent args)
|
||||
{
|
||||
using (args.PushGroup(nameof(WelderComponent)))
|
||||
@@ -169,7 +178,8 @@ public abstract partial class SharedToolSystem
|
||||
|
||||
private void OnActivateAttempt(Entity<WelderComponent> entity, ref ItemToggleActivateAttemptEvent args)
|
||||
{
|
||||
if (args.User != null && !_actionBlocker.CanComplexInteract(args.User.Value)) {
|
||||
if (args.User != null && !_actionBlocker.CanComplexInteract(args.User.Value))
|
||||
{
|
||||
args.Cancelled = true;
|
||||
return;
|
||||
}
|
||||
@@ -191,9 +201,34 @@ public abstract partial class SharedToolSystem
|
||||
|
||||
private void OnDeactivateAttempt(Entity<WelderComponent> entity, ref ItemToggleDeactivateAttemptEvent args)
|
||||
{
|
||||
if (args.User != null && !_actionBlocker.CanComplexInteract(args.User.Value)) {
|
||||
if (args.User != null && !_actionBlocker.CanComplexInteract(args.User.Value))
|
||||
{
|
||||
args.Cancelled = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateWelders()
|
||||
{
|
||||
var query = EntityQueryEnumerator<WelderComponent, SolutionContainerManagerComponent>();
|
||||
var curTime = _timing.CurTime;
|
||||
while (query.MoveNext(out var uid, out var welder, out var solutionContainer))
|
||||
{
|
||||
if (curTime < welder.NextUpdate)
|
||||
continue;
|
||||
|
||||
welder.NextUpdate += welder.WelderUpdateTimer;
|
||||
Dirty(uid, welder);
|
||||
|
||||
if (!welder.Enabled)
|
||||
continue;
|
||||
|
||||
if (!SolutionContainerSystem.TryGetSolution((uid, solutionContainer), welder.FuelSolutionName, out var solutionComp, out var solution))
|
||||
continue;
|
||||
|
||||
SolutionContainerSystem.RemoveReagent(solutionComp.Value, welder.FuelReagent, welder.FuelConsumption * welder.WelderUpdateTimer.TotalSeconds);
|
||||
|
||||
if (solution.GetTotalPrototypeQuantity(welder.FuelReagent) <= FixedPoint2.Zero)
|
||||
ItemToggle.Toggle(uid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user