コード例 #1
0
    private void OnJetpackAppearance(EntityUid uid, JetpackComponent component, ref AppearanceChangeEvent args)
    {
        args.Component.TryGetData(JetpackVisuals.Enabled, out bool enabled);

        var state = "icon" + (enabled ? "-on" : "");

        args.Sprite?.LayerSetState(0, state);

        if (TryComp <ClothingComponent>(uid, out var clothing))
        {
            clothing.EquippedPrefix = enabled ? "on" : null;
        }
    }
コード例 #2
0
    private void OnAppearanceChange(EntityUid uid, SurveillanceCameraVisualsComponent component,
                                    ref AppearanceChangeEvent args)
    {
        if (!args.AppearanceData.TryGetValue(SurveillanceCameraVisualsKey.Key, out var data) ||
            data is not SurveillanceCameraVisuals key ||
            args.Sprite == null ||
            !args.Sprite.LayerMapTryGet(SurveillanceCameraVisualsKey.Layer, out int layer) ||
            !component.CameraSprites.TryGetValue(key, out var state))
        {
            return;
        }

        args.Sprite.LayerSetState(layer, state);
    }
コード例 #3
0
 protected virtual void OnAppearanceChange(EntityUid uid, T component, ref AppearanceChangeEvent args)
 {
 }
コード例 #4
0
 protected override void OnAppearanceChange(EntityUid uid, PipeColorVisualsComponent component, ref AppearanceChangeEvent args)
 {
     if (TryComp <SpriteComponent>(uid, out var sprite) &&
         args.Component.TryGetData <Color>(PipeColorVisuals.Color, out var color))
     {
         // T-ray scanner / sub floor runs after this visualizer. Lets not bulldoze transparency.
         var layer = sprite[PipeVisualLayers.Pipe];
         layer.Color = color.WithAlpha(layer.Color.A);
     }
 }
コード例 #5
0
    protected override void OnAppearanceChange(EntityUid uid, ToggleableLightVisualsComponent component, ref AppearanceChangeEvent args)
    {
        if (!args.Component.TryGetData(ToggleableLightVisuals.Enabled, out bool enabled))
        {
            return;
        }

        var modulate = args.Component.TryGetData(ToggleableLightVisuals.Color, out Color color);

        // Update the item's sprite
        if (args.Sprite != null && args.Sprite.LayerMapTryGet(component.SpriteLayer, out var layer))
        {
            args.Sprite.LayerSetVisible(layer, enabled);
            if (modulate)
            {
                args.Sprite.LayerSetColor(layer, color);
            }
        }

        // Update any point-lights
        if (TryComp(uid, out PointLightComponent? light))
        {
            DebugTools.Assert(!light.NetSyncEnabled, "light visualizers require point lights without net-sync");
            light.Enabled = enabled;
            if (enabled && modulate)
            {
                light.Color = color;
            }
        }

        // update clothing & in-hand visuals.
        _itemSys.VisualsChanged(uid);
    }
コード例 #6
0
        protected override void OnAppearanceChange(EntityUid uid, PortableScrubberVisualsComponent component, ref AppearanceChangeEvent args)
        {
            if (args.Sprite == null)
            {
                return;
            }

            if (args.Component.TryGetData(PortableScrubberVisuals.IsFull, out bool isFull) &&
                args.Component.TryGetData(PortableScrubberVisuals.IsRunning, out bool isRunning))
            {
                var runningState = isRunning ? component.RunningState : component.IdleState;
                args.Sprite.LayerSetState(PortableScrubberVisualLayers.IsRunning, runningState);

                var fullState = isFull ? component.FullState : component.ReadyState;
                args.Sprite.LayerSetState(PowerDeviceVisualLayers.Powered, fullState);
            }

            if (args.Component.TryGetData(PortableScrubberVisuals.IsDraining, out bool isDraining))
            {
                args.Sprite.LayerSetVisible(PortableScrubberVisualLayers.IsDraining, isDraining);
            }
        }
コード例 #7
0
    protected override void OnAppearanceChange(EntityUid uid, StickyVisualizerComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        if (!args.Component.TryGetData(StickyVisuals.IsStuck, out bool isStuck))
        {
            return;
        }

        var drawDepth = isStuck ? component.StuckDrawDepth : component.DefaultDrawDepth;

        args.Sprite.DrawDepth = drawDepth;
    }
コード例 #8
0
    protected override void OnAppearanceChange(EntityUid uid, StorageFillVisualizerComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        if (!TryComp(uid, out SpriteComponent? sprite))
        {
            return;
        }

        if (!args.Component.TryGetData(StorageFillVisuals.FillLevel, out int level))
        {
            return;
        }

        var state = $"{component.FillBaseName}-{level}";

        args.Sprite.LayerSetState(StorageFillLayers.Fill, state);
    }
コード例 #9
0
    private void OnMagazineVisualsChange(EntityUid uid, MagazineVisualsComponent component, ref AppearanceChangeEvent args)
    {
        // tl;dr
        // 1.If no mag then hide it OR
        // 2. If step 0 isn't visible then hide it (mag or unshaded)
        // 3. Otherwise just do mag / unshaded as is
        var sprite = args.Sprite;

        if (sprite == null)
        {
            return;
        }

        if (!args.AppearanceData.TryGetValue(AmmoVisuals.MagLoaded, out var magloaded) ||
            magloaded is true)
        {
            if (!args.AppearanceData.TryGetValue(AmmoVisuals.AmmoMax, out var capacity))
            {
                capacity = component.MagSteps;
            }

            if (!args.AppearanceData.TryGetValue(AmmoVisuals.AmmoCount, out var current))
            {
                current = component.MagSteps;
            }

            var step = ContentHelpers.RoundToLevels((int)current, (int)capacity, component.MagSteps);

            if (step == 0 && !component.ZeroVisible)
            {
                if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
                {
                    sprite.LayerSetVisible(GunVisualLayers.Mag, false);
                }

                if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
                {
                    sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, false);
                }

                return;
            }

            if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
            {
                sprite.LayerSetVisible(GunVisualLayers.Mag, true);
                sprite.LayerSetState(GunVisualLayers.Mag, $"{component.MagState}-{step}");
            }

            if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
            {
                sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, true);
                sprite.LayerSetState(GunVisualLayers.MagUnshaded, $"{component.MagState}-unshaded-{step}");
            }
        }
        else
        {
            if (sprite.LayerMapTryGet(GunVisualLayers.Mag, out _))
            {
                sprite.LayerSetVisible(GunVisualLayers.Mag, false);
            }

            if (sprite.LayerMapTryGet(GunVisualLayers.MagUnshaded, out _))
            {
                sprite.LayerSetVisible(GunVisualLayers.MagUnshaded, false);
            }
        }
    }
コード例 #10
0
 protected override void OnAppearanceChange(EntityUid uid, StasisBedVisualsComponent component, ref AppearanceChangeEvent args)
 {
     if (args.Sprite != null &&
         args.Component.TryGetData(StasisBedVisuals.IsOn, out bool isOn))
     {
         args.Sprite.LayerSetVisible(StasisBedVisualLayers.IsOn, isOn);
     }
 }
コード例 #11
0
        protected override void OnAppearanceChange(EntityUid uid, LatheVisualsComponent component, ref AppearanceChangeEvent args)
        {
            if (args.Sprite == null)
            {
                return;
            }

            if (args.Component.TryGetData(PowerDeviceVisuals.Powered, out bool powered) &&
                args.Sprite.LayerMapTryGet(PowerDeviceVisualLayers.Powered, out _))
            {
                args.Sprite.LayerSetVisible(PowerDeviceVisualLayers.Powered, powered);
            }

            if (args.Component.TryGetData(WiresVisuals.MaintenancePanelState, out bool panel) &&
                args.Sprite.LayerMapTryGet(WiresVisualizer.WiresVisualLayers.MaintenancePanel, out _))
            {
                args.Sprite.LayerSetVisible(WiresVisualizer.WiresVisualLayers.MaintenancePanel, panel);
            }

            // Lathe specific stuff
            if (args.Component.TryGetData(LatheVisuals.IsRunning, out bool isRunning))
            {
                var state = isRunning ? component.RunningState : component.IdleState;
                args.Sprite.LayerSetAnimationTime(LatheVisualLayers.IsRunning, 0f);
                args.Sprite.LayerSetState(LatheVisualLayers.IsRunning, state);
            }

            if (args.Component.TryGetData(LatheVisuals.IsInserting, out bool isInserting) &&
                args.Sprite.LayerMapTryGet(LatheVisualLayers.IsInserting, out var isInsertingLayer))
            {
                if (args.Component.TryGetData(LatheVisuals.InsertingColor, out Color color) &&
                    !component.IgnoreColor)
                {
                    args.Sprite.LayerSetColor(isInsertingLayer, color);
                }

                args.Sprite.LayerSetAnimationTime(isInsertingLayer, 0f);
                args.Sprite.LayerSetVisible(isInsertingLayer, isInserting);
            }
        }
コード例 #12
0
 protected override void OnAppearanceChange(EntityUid uid, ItemCabinetVisualsComponent component, ref AppearanceChangeEvent args)
 {
     if (TryComp(uid, out SpriteComponent? sprite) &&
         args.Component.TryGetData(ItemCabinetVisuals.IsOpen, out bool isOpen) &&
         args.Component.TryGetData(ItemCabinetVisuals.ContainsItem, out bool contains))
     {
         var state = isOpen ? component.OpenState : component.ClosedState;
         sprite.LayerSetState(ItemCabinetVisualLayers.Door, state);
         sprite.LayerSetVisible(ItemCabinetVisualLayers.ContainsItem, contains);
     }
 }
コード例 #13
0
    protected override void OnAppearanceChange(EntityUid uid, AMEShieldingVisualsComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        if (args.Component.TryGetData <string>(AMEShieldVisuals.Core, out var core))
        {
            if (core == "isCore")
            {
                args.Sprite.LayerSetState(AMEShieldingVisualsLayer.Core, "core");
                args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.Core, true);
            }
            else
            {
                args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.Core, false);
            }
        }

        if (args.Component.TryGetData <string>(AMEShieldVisuals.CoreState, out var coreState))
        {
            switch (coreState)
            {
            case "weak":
                args.Sprite.LayerSetState(AMEShieldingVisualsLayer.CoreState, "core_weak");
                args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.CoreState, true);
                break;

            case "strong":
                args.Sprite.LayerSetState(AMEShieldingVisualsLayer.CoreState, "core_strong");
                args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.CoreState, true);
                break;

            case "off":
                args.Sprite.LayerSetVisible(AMEShieldingVisualsLayer.CoreState, false);
                break;
            }
        }
    }
コード例 #14
0
    private void OnAppearanceChanged(EntityUid uid, PipeAppearanceComponent component, ref AppearanceChangeEvent args)
    {
        if (!TryComp(uid, out SpriteComponent? sprite))
        {
            return;
        }

        if (!args.Component.TryGetData(PipeColorVisuals.Color, out Color color))
        {
            color = Color.White;
        }

        if (!args.Component.TryGetData(PipeVisuals.VisualState, out PipeDirection worldConnectedDirections))
        {
            return;
        }

        // transform connected directions to local-coordinates
        var connectedDirections = worldConnectedDirections.RotatePipeDirection(-Transform(uid).LocalRotation);

        foreach (PipeConnectionLayer layerKey in Enum.GetValues(typeof(PipeConnectionLayer)))
        {
            if (!sprite.LayerMapTryGet(layerKey, out var key))
            {
                continue;
            }

            var layer   = sprite[key];
            var dir     = (PipeDirection)layerKey;
            var visible = connectedDirections.HasDirection(dir);

            layer.Visible &= visible;

            if (!visible)
            {
                continue;
            }

            layer.Color = color;
        }
    }
コード例 #15
0
    private void OnAppearanceChanged(EntityUid uid, CableVisualizerComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        if (!args.Sprite.Visible)
        {
            // This entity is probably below a floor and is not even visible to the user -> don't bother updating sprite data.
            // Note that if the subfloor visuals change, then another AppearanceChangeEvent will get triggered.
            return;
        }

        if (!args.Component.TryGetData(WireVisVisuals.ConnectedMask, out WireVisDirFlags mask))
        {
            mask = WireVisDirFlags.None;
        }

        args.Sprite.LayerSetState(0, $"{component.StatePrefix}{(int) mask}");
    }
コード例 #16
0
 protected override void OnAppearanceChange(EntityUid uid, KudzuVisualsComponent component, ref AppearanceChangeEvent args)
 {
     if (args.Sprite == null)
     {
         return;
     }
     if (args.Component.TryGetData(KudzuVisuals.Variant, out int var) &&
         args.Component.TryGetData(KudzuVisuals.GrowthLevel, out int level))
     {
         var index = args.Sprite.LayerMapReserveBlank(component.Layer);
         args.Sprite.LayerSetState(index, $"kudzu_{level}{var}");
     }
 }
コード例 #17
0
    protected override void OnAppearanceChange(EntityUid uid, ToiletComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        args.Component.TryGetData(ToiletVisuals.LidOpen, out bool lidOpen);
        args.Component.TryGetData(ToiletVisuals.SeatUp, out bool seatUp);

        var state = (lidOpen, seatUp) switch
        {
            (false, false) => "closed_toilet_seat_down",
            (false, true) => "closed_toilet_seat_up",
            (true, false) => "open_toilet_seat_down",
            (true, true) => "open_toilet_seat_up"
        };

        args.Sprite.LayerSetState(0, state);
    }
コード例 #18
0
 private void OnAppearanceChange(EntityUid uid, ClientBatteryBarrelComponent component, ref AppearanceChangeEvent args)
 {
     component.ItemStatus?.Update(args.Component);
 }
コード例 #19
0
    protected override void OnAppearanceChange(EntityUid uid, FireVisualsComponent component, ref AppearanceChangeEvent args)
    {
        if (!args.Component.TryGetData(FireVisuals.OnFire, out bool onFire) ||
            !TryComp <SpriteComponent>(component.Owner, out var sprite))
        {
            return;
        }

        var fireStacks = 0f;

        if (args.Component.TryGetData(FireVisuals.FireStacks, out float stacks))
        {
            fireStacks = stacks;
        }

        SetOnFire(sprite, args.Component, component, onFire, fireStacks);
    }
コード例 #20
0
 private void OnProxAppChange(EntityUid uid, TriggerOnProximityComponent component, ref AppearanceChangeEvent args)
 {
     OnChangeData(uid, component, args.Component);
 }
コード例 #21
0
    protected override void OnAppearanceChange(EntityUid uid, PotencyVisualsComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        if (args.Component.TryGetData(ProduceVisuals.Potency, out float potency))
        {
            var scale = MathHelper.Lerp(component.MinimumScale, component.MaximumScale, potency / 100);
            args.Sprite.Scale = new Vector2(scale, scale);
        }
    }
コード例 #22
0
    private void OnSpentAmmoAppearance(EntityUid uid, SpentAmmoVisualsComponent component, ref AppearanceChangeEvent args)
    {
        var sprite = args.Sprite;

        if (sprite == null)
        {
            return;
        }

        if (!args.AppearanceData.TryGetValue(AmmoVisuals.Spent, out var varSpent))
        {
            return;
        }

        var    spent = (bool)varSpent;
        string state;

        if (spent)
        {
            state = component.Suffix ? $"{component.State}-spent" : "spent";
        }
        else
        {
            state = component.State;
        }

        sprite.LayerSetState(AmmoVisualLayers.Base, state);
    }
コード例 #23
0
    protected override void OnAppearanceChange(EntityUid uid, WelderComponent component, ref AppearanceChangeEvent args)
    {
        base.OnAppearanceChange(uid, component, ref args);

        if (!TryComp(uid, out SpriteComponent? sprite))
        {
            return;
        }

        if (args.Component.TryGetData(WelderVisuals.Lit, out bool isLit))
        {
            sprite.LayerSetVisible(WelderLayers.Flame, isLit);
        }
    }
コード例 #24
0
    protected override void OnAppearanceChange(EntityUid uid, TypingIndicatorComponent component, ref AppearanceChangeEvent args)
    {
        base.OnAppearanceChange(uid, component, ref args);

        if (!TryComp(uid, out SpriteComponent? sprite))
        {
            return;
        }

        args.Component.TryGetData(TypingIndicatorVisuals.IsTyping, out bool isTyping);
        if (sprite.LayerMapTryGet(TypingIndicatorLayers.Base, out var layer))
        {
            sprite.LayerSetVisible(layer, isTyping);
        }
    }
コード例 #25
0
    private void OnPowerCellVisualsChange(EntityUid uid, PowerCellVisualsComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        if (args.Component.TryGetData(PowerCellVisuals.ChargeLevel, out byte level))
        {
            if (level == 0)
            {
                args.Sprite.LayerSetVisible(PowerCellVisualLayers.Unshaded, false);
                return;
            }

            args.Sprite.LayerSetVisible(PowerCellVisualLayers.Unshaded, true);
            args.Sprite.LayerSetState(PowerCellVisualLayers.Unshaded, $"o{level}");
        }
    }
コード例 #26
0
    protected override void OnAppearanceChange(EntityUid uid, AMEControllerVisualsComponent component, ref AppearanceChangeEvent args)
    {
        base.OnAppearanceChange(uid, component, ref args);

        if (args.Sprite != null &&
            args.Component.TryGetData <string>(AMEControllerVisuals.DisplayState, out var state))
        {
            switch (state)
            {
            case "on":
                args.Sprite.LayerSetState(AMEControllerVisualLayers.Display, "control_on");
                args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, true);
                break;

            case "critical":
                args.Sprite.LayerSetState(AMEControllerVisualLayers.Display, "control_critical");
                args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, true);
                break;

            case "f**k":
                args.Sprite.LayerSetState(AMEControllerVisualLayers.Display, "control_fuck");
                args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, true);
                break;

            case "off":
                args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, false);
                break;

            default:
                args.Sprite.LayerSetVisible(AMEControllerVisualLayers.Display, false);
                break;
            }
        }
    }
コード例 #27
0
        protected override void OnAppearanceChange(EntityUid uid, DiseaseMachineVisualsComponent component, ref AppearanceChangeEvent args)
        {
            if (args.Sprite == null)
            {
                return;
            }

            if (args.Component.TryGetData(DiseaseMachineVisuals.IsOn, out bool isOn) &&
                args.Component.TryGetData(DiseaseMachineVisuals.IsRunning, out bool isRunning))
            {
                var state = isRunning ? component.RunningState : component.IdleState;
                args.Sprite.LayerSetVisible(DiseaseMachineVisualLayers.IsOn, isOn);
                args.Sprite.LayerSetState(DiseaseMachineVisualLayers.IsRunning, state);
            }
        }
コード例 #28
0
    private void OnAppearanceChanged(EntityUid uid, PipeAppearanceComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        if (!args.Sprite.Visible)
        {
            // This entity is probably below a floor and is not even visible to the user -> don't bother updating sprite data.
            // Note that if the subfloor visuals change, then another AppearanceChangeEvent will get triggered.
            return;
        }

        if (!args.Component.TryGetData(PipeColorVisuals.Color, out Color color))
        {
            color = Color.White;
        }

        if (!args.Component.TryGetData(PipeVisuals.VisualState, out PipeDirection worldConnectedDirections))
        {
            return;
        }

        // transform connected directions to local-coordinates
        var connectedDirections = worldConnectedDirections.RotatePipeDirection(-Transform(uid).LocalRotation);

        foreach (PipeConnectionLayer layerKey in Enum.GetValues(typeof(PipeConnectionLayer)))
        {
            if (!args.Sprite.LayerMapTryGet(layerKey, out var key))
            {
                continue;
            }

            var layer   = args.Sprite[key];
            var dir     = (PipeDirection)layerKey;
            var visible = connectedDirections.HasDirection(dir);

            layer.Visible &= visible;

            if (!visible)
            {
                continue;
            }

            layer.Color = color;
        }
    }
コード例 #29
0
    private void OnAppearanceChange(EntityUid uid, AlertLevelDisplayComponent component, ref AppearanceChangeEvent args)
    {
        if (args.Sprite == null)
        {
            return;
        }

        if (!args.Sprite.LayerMapTryGet(AlertLevelDisplay.Layer, out _))
        {
            var layer = args.Sprite.AddLayer(new RSI.StateId(component.AlertVisuals.Values.First()));
            args.Sprite.LayerMapSet(AlertLevelDisplay.Layer, layer);
        }

        if (!args.AppearanceData.TryGetValue(AlertLevelDisplay.CurrentLevel, out var level))
        {
            args.Sprite.LayerSetState(AlertLevelDisplay.Layer, new RSI.StateId(component.AlertVisuals.Values.First()));
            return;
        }

        if (component.AlertVisuals.TryGetValue((string)level, out var visual))
        {
            args.Sprite.LayerSetState(AlertLevelDisplay.Layer, new RSI.StateId(visual));
        }
        else
        {
            args.Sprite.LayerSetState(AlertLevelDisplay.Layer, new RSI.StateId(component.AlertVisuals.Values.First()));
        }
    }
コード例 #30
0
        protected override void OnAppearanceChange(EntityUid uid, VehicleVisualsComponent component, ref AppearanceChangeEvent args)
        {
            if (args.Sprite == null)
            {
                return;
            }

            // First check is for the sprite itself
            if (args.Component.TryGetData(VehicleVisuals.DrawDepth, out int drawDepth))
            {
                args.Sprite.DrawDepth = drawDepth;
            }

            // Set vehicle layer to animated or not (i.e. are the wheels turning or not)
            if (args.Component.TryGetData(VehicleVisuals.AutoAnimate, out bool autoAnimate))
            {
                args.Sprite.LayerSetAutoAnimated(VehicleVisualLayers.AutoAnimate, autoAnimate);
            }
        }