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; } }
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); }
protected virtual void OnAppearanceChange(EntityUid uid, T component, ref AppearanceChangeEvent args) { }
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); } }
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); }
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); } }
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; }
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); }
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); } } }
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); } }
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); } }
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); } }
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; } } }
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; } }
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}"); }
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}"); } }
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); }
private void OnAppearanceChange(EntityUid uid, ClientBatteryBarrelComponent component, ref AppearanceChangeEvent args) { component.ItemStatus?.Update(args.Component); }
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); }
private void OnProxAppChange(EntityUid uid, TriggerOnProximityComponent component, ref AppearanceChangeEvent args) { OnChangeData(uid, component, args.Component); }
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); } }
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); }
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); } }
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); } }
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}"); } }
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; } } }
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); } }
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; } }
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())); } }
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); } }