Пример #1
0
    private void UpdateElectrocution(Wire wire)
    {
        var allCut = AllWiresCut(wire.Owner);

        var activePulse = false;

        if (WiresSystem.TryGetData(wire.Owner, PowerWireActionKey.Pulsed, out bool pulsed))
        {
            activePulse = pulsed;
        }

        // if this is actively pulsed,
        // and there's not already an electrification cancel occurring,
        // we need to start that timer immediately
        if (!WiresSystem.HasData(wire.Owner, PowerWireActionKey.ElectrifiedCancel) &&
            activePulse &&
            IsPowered(wire.Owner) &&
            !allCut)
        {
            WiresSystem.StartWireAction(wire.Owner, _pulseTimeout, PowerWireActionKey.ElectrifiedCancel, new TimedWireEvent(AwaitElectrifiedCancel, wire));
        }
        else
        {
            if (!activePulse && allCut || AllWiresMended(wire.Owner))
            {
                SetElectrified(wire.Owner, false);
            }
        }
    }
Пример #2
0
    /// <returns>false if failed, true otherwise, or if the entity cannot be electrified</returns>
    private bool TrySetElectrocution(EntityUid user, Wire wire, bool timed = false)
    {
        if (!EntityManager.TryGetComponent <ElectrifiedComponent>(wire.Owner, out var electrified))
        {
            return(true);
        }

        var allCut = AllWiresCut(wire.Owner);

        // always set this to true
        SetElectrified(wire.Owner, true, electrified);

        // if we were electrified, then return false
        var electrifiedAttempt = _electrocutionSystem.TryDoElectrifiedAct(wire.Owner, user);

        // if this is timed, we set up a doAfter so that the
        // electrocution continues - unless cancelled
        //
        // if the power is disabled however, just don't bother
        if (timed && IsPowered(wire.Owner) && !allCut)
        {
            WiresSystem.StartWireAction(wire.Owner, _pulseTimeout, PowerWireActionKey.ElectrifiedCancel, new TimedWireEvent(AwaitElectrifiedCancel, wire));
        }
        else
        {
            if (allCut)
            {
                SetElectrified(wire.Owner, false, electrified);
            }
        }

        return(!electrifiedAttempt);
    }
    public override bool Pulse(EntityUid user, Wire wire)
    {
        if (EntityManager.TryGetComponent <AirlockComponent>(wire.Owner, out var door))
        {
            door.Safety = false;
            WiresSystem.StartWireAction(wire.Owner, _timeout, PulseTimeoutKey.Key, new TimedWireEvent(AwaitSafetyTimerFinish, wire));
        }

        return(true);
    }
    public override bool Pulse(EntityUid user, Wire wire)
    {
        if (EntityManager.TryGetComponent <AccessReaderComponent>(wire.Owner, out var access))
        {
            access.Enabled = false;
            WiresSystem.StartWireAction(wire.Owner, _pulseTimeout, PulseTimeoutKey.Key, new TimedWireEvent(AwaitPulseCancel, wire));
        }

        return(true);
    }
    public override bool Pulse(EntityUid user, Wire wire)
    {
        if (EntityManager.TryGetComponent <AirlockComponent>(wire.Owner, out var door))
        {
            door.AutoCloseDelayModifier = 0.5f;
            WiresSystem.StartWireAction(wire.Owner, _timeout, PulseTimeoutKey.Key, new TimedWireEvent(AwaitTimingTimerFinish, wire));
        }


        return(true);
    }
    public override bool Pulse(EntityUid user, Wire wire)
    {
        ToggleValue(wire.Owner, !GetValue(wire.Owner));

        if (TimeoutKey != null)
        {
            WiresSystem.StartWireAction(wire.Owner, Delay, TimeoutKey, new TimedWireEvent(AwaitPulseCancel, wire));
        }

        return(true);
    }
Пример #7
0
    public override bool Pulse(EntityUid user, Wire wire)
    {
        WiresSystem.TryCancelWireAction(wire.Owner, PowerWireActionKey.ElectrifiedCancel);

        var electrocuted = !TrySetElectrocution(user, wire, true);

        if (WiresSystem.TryGetData(wire.Owner, PowerWireActionKey.Pulsed, out bool pulsedKey) &&
            pulsedKey)
        {
            return(false);
        }

        WiresSystem.SetData(wire.Owner, PowerWireActionKey.Pulsed, true);
        WiresSystem.StartWireAction(wire.Owner, _pulseTimeout, PowerWireActionKey.PulseCancel, new TimedWireEvent(AwaitPulseCancel, wire));

        if (electrocuted)
        {
            return(false);
        }

        SetPower(wire.Owner, true);
        return(true);
    }