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();
            }
        }
Exemplo n.º 2
0
        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();
            }
        }