Ejemplo n.º 1
0
    private void OnGotEquipped(EntityUid uid, SpillableComponent component, GotEquippedEvent args)
    {
        if (!component.SpillWorn)
        {
            return;
        }

        if (!TryComp(uid, out ClothingComponent? clothing))
        {
            return;
        }

        // check if entity was actually used as clothing
        // not just taken in pockets or something
        var isCorrectSlot = clothing.SlotFlags.HasFlag(args.SlotFlags);

        if (!isCorrectSlot)
        {
            return;
        }

        if (!_solutionContainerSystem.TryGetSolution(uid, component.SolutionName, out var solution))
        {
            return;
        }
        if (solution.TotalVolume == 0)
        {
            return;
        }

        // spill all solution on the player
        var drainedSolution = _solutionContainerSystem.Drain(uid, solution, solution.DrainAvailable);

        SpillAt(args.Equipee, drainedSolution, "PuddleSmear");
    }
Ejemplo n.º 2
0
    private void AddSpillVerb(EntityUid uid, SpillableComponent component, GetVerbsEvent <Verb> args)
    {
        if (!args.CanAccess || !args.CanInteract)
        {
            return;
        }

        if (!_solutionContainerSystem.TryGetDrainableSolution(args.Target, out var solution))
        {
            return;
        }

        if (solution.DrainAvailable == FixedPoint2.Zero)
        {
            return;
        }

        Verb verb = new();

        verb.Text = Loc.GetString("spill-target-verb-get-data-text");
        // TODO VERB ICONS spill icon? pouring out a glass/beaker?
        verb.Act = () =>
        {
            var puddleSolution = _solutionContainerSystem.SplitSolution(args.Target,
                                                                        solution, solution.DrainAvailable);
            SpillAt(puddleSolution, Transform(args.Target).Coordinates, "PuddleSmear");
        };
        verb.Impact = LogImpact.Medium; // dangerous reagent reaction are logged separately.
        args.Verbs.Add(verb);
    }
Ejemplo n.º 3
0
        private void AddSpillVerb(EntityUid uid, SpillableComponent component, GetOtherVerbsEvent args)
        {
            if (!args.CanAccess || !args.CanInteract)
            {
                return;
            }

            if (!_solutionContainerSystem.TryGetDrainableSolution(args.Target.Uid, out var solution))
            {
                return;
            }

            if (solution.DrainAvailable == ReagentUnit.Zero)
            {
                return;
            }

            Verb verb = new();

            verb.Text = Loc.GetString("spill-target-verb-get-data-text");
            // TODO VERB ICONS spill icon? pouring out a glass/beaker?
            verb.Act = () => _solutionContainerSystem.SplitSolution(args.Target.Uid,
                                                                    solution, solution.DrainAvailable).SpillAt(args.Target.Transform.Coordinates, "PuddleSmear");
            args.Verbs.Add(verb);
        }
Ejemplo n.º 4
0
    private void OnSpikeOverflow(EntityUid uid, SpillableComponent component, SolutionSpikeOverflowEvent args)
    {
        if (!args.Handled)
        {
            SpillAt(args.Overflow, Transform(uid).Coordinates, "PuddleSmear");
        }

        args.Handled = true;
    }
Ejemplo n.º 5
0
    private void SpillOnLand(EntityUid uid, SpillableComponent component, LandEvent args)
    {
        if (!_solutionContainerSystem.TryGetSolution(uid, component.SolutionName, out var solution))
        {
            return;
        }

        if (args.User != null)
        {
            _logSystem.Add(LogType.Landed,
                           $"{ToPrettyString(uid):entity} spilled a solution {SolutionContainerSystem.ToPrettyString(solution):solution} on landing");
        }

        var drainedSolution = _solutionContainerSystem.Drain(uid, solution, solution.DrainAvailable);

        SpillAt(drainedSolution, EntityManager.GetComponent <TransformComponent>(uid).Coordinates, "PuddleSmear");
    }