var xform = Transform(uid);
SpawnMaterialsFromComposition(uid, item, completion * component.Efficiency, xform: xform);
- SpawnChemicalsFromComposition(uid, item, completion, component, xform);
if (CanGib(uid, item, component))
{
+ SpawnChemicalsFromComposition(uid, item, completion, false, component, xform);
_body.GibBody(item, true);
_appearance.SetData(uid, RecyclerVisuals.Bloody, true);
}
+ else
+ {
+ SpawnChemicalsFromComposition(uid, item, completion, true, component, xform);
+ }
QueueDel(item);
}
private void SpawnChemicalsFromComposition(EntityUid reclaimer,
EntityUid item,
float efficiency,
+ bool sound = true,
MaterialReclaimerComponent? reclaimerComponent = null,
TransformComponent? xform = null,
PhysicalCompositionComponent? composition = null)
_solutionContainer.TryTransferSolution(reclaimer, reclaimerComponent.OutputSolution, totalChemicals, totalChemicals.Volume);
if (totalChemicals.Volume > 0)
{
- _puddle.TrySpillAt(reclaimer, totalChemicals, out _, transformComponent: xform);
+ _puddle.TrySpillAt(reclaimer, totalChemicals, out _, sound, transformComponent: xform);
}
}
}
SubscribeLocalEvent<MaterialReclaimerComponent, EntityUnpausedEvent>(OnUnpaused);
SubscribeLocalEvent<MaterialReclaimerComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<MaterialReclaimerComponent, GotEmaggedEvent>(OnEmagged);
+ SubscribeLocalEvent<MaterialReclaimerComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<CollideMaterialReclaimerComponent, StartCollideEvent>(OnCollide);
SubscribeLocalEvent<ActiveMaterialReclaimerComponent, ComponentStartup>(OnActiveStartup);
SubscribeLocalEvent<ActiveMaterialReclaimerComponent, EntityUnpausedEvent>(OnActiveUnpaused);
}
+ private void OnMapInit(EntityUid uid, MaterialReclaimerComponent component, MapInitEvent args)
+ {
+ component.NextSound = Timing.CurTime;
+ }
+
private void OnShutdown(EntityUid uid, MaterialReclaimerComponent component, ComponentShutdown args)
{
component.Stream?.Stop();
}
if (Timing.CurTime > component.NextSound)
- component.Stream = _audio.PlayPvs(component.Sound, uid);
- component.NextSound = Timing.CurTime + component.SoundCooldown;
+ {
+ component.Stream = _audio.PlayPredicted(component.Sound, uid, user);
+
+ component.NextSound = Timing.CurTime + component.SoundCooldown;
+ }
var duration = GetReclaimingDuration(uid, item, component);
// if it's instant, don't bother with all the active comp stuff.