bool TryProcessStep(ConstructionStep step, IEntity slapped, IEntity user) { if (step == null) { return(false); } var sound = EntitySystem.Get <AudioSystem>(); switch (step) { case ConstructionStepMaterial matStep: if (!slapped.TryGetComponent(out StackComponent stack) || !MaterialStackValidFor(matStep, stack) || !stack.Use(matStep.Amount)) { return(false); } if (matStep.Material == MaterialType.Cable) { sound.PlayAtCoords("/Audio/items/zip.ogg", Transform.GridPosition); } else { sound.PlayAtCoords("/Audio/items/deconstruct.ogg", Transform.GridPosition); } return(true); case ConstructionStepTool toolStep: if (!slapped.TryGetComponent <ToolComponent>(out var tool)) { return(false); } // Handle welder manually since tool steps specify fuel amount needed, for some reason. if (toolStep.ToolQuality.HasFlag(ToolQuality.Welding)) { return(slapped.TryGetComponent <WelderComponent>(out var welder) && welder.UseTool(user, Owner, toolStep.ToolQuality, toolStep.Amount)); } return(tool.UseTool(user, Owner, toolStep.ToolQuality)); default: throw new NotImplementedException(); } }
bool TryProcessStep(ConstructionStep step, IEntity slapped) { if (step == null) { return(false); } var sound = IoCManager.Resolve <IEntitySystemManager>().GetEntitySystem <AudioSystem>(); switch (step) { case ConstructionStepMaterial matStep: if (!slapped.TryGetComponent(out StackComponent stack) || !MaterialStackValidFor(matStep, stack) || !stack.Use(matStep.Amount)) { return(false); } if (matStep.Material == MaterialType.Cable) { sound.Play("/Audio/items/zip.ogg", Transform.GridPosition); } else { sound.Play("/Audio/items/deconstruct.ogg", Transform.GridPosition); } return(true); case ConstructionStepTool toolStep: switch (toolStep.Tool) { case ToolType.Crowbar: if (slapped.HasComponent <CrowbarComponent>()) { sound.Play("/Audio/items/crowbar.ogg", Transform.GridPosition); return(true); } return(false); case ToolType.Welder: if (slapped.TryGetComponent(out WelderComponent welder) && welder.TryUse(toolStep.Amount)) { if (_random.NextDouble() > 0.5) { sound.Play("/Audio/items/welder.ogg", Transform.GridPosition); } else { sound.Play("/Audio/items/welder2.ogg", Transform.GridPosition); } return(true); } return(false); case ToolType.Wrench: if (slapped.HasComponent <WrenchComponent>()) { sound.Play("/Audio/items/ratchet.ogg", Transform.GridPosition); return(true); } return(false); case ToolType.Screwdriver: if (slapped.HasComponent <ScrewdriverComponent>()) { if (_random.NextDouble() > 0.5) { sound.Play("/Audio/items/screwdriver.ogg", Transform.GridPosition); } else { sound.Play("/Audio/items/screwdriver2.ogg", Transform.GridPosition); } return(true); } return(false); case ToolType.Wirecutters: if (slapped.HasComponent <WirecutterComponent>()) { sound.Play("/Audio/items/wirecutter.ogg", Transform.GridPosition); return(true); } return(false); default: throw new NotImplementedException(); } default: throw new NotImplementedException(); } }