Decouple Lights from Toggleable Visuals (and headphone music notes bugfix) (#35341)
* - Combine enum keys `ToggleableLightVisuals` and `ToggleVisuals` into `ToggleableVisuals` - Rename `ToggleableLightVisualsComponent` to `ToggleableVisualsComponent` and `ToggleableLightVisualsSystem` to `ToggleableVisualsSystem` - (The `SpriteLayer` field on the component is now required because the old default of `light` doesn't make sense anymore) - Make it so that `ToggleableVisualsComponent` works even when there's not a light attached to the entity - (Amazingly this seems to have only applied to Headphones, but I can only imagine there are many other things people would like to do with simple toggleable visuals) - Explicitly make `ItemTogglePointLightComponent`'s purpose to make `ToggleVisualsComponent` apply to `PointLightComponent`s on the same entity. - Add field `ToggleableVisualsColorModulatesLights`, which makes the `Color` appearance value of `ToggleableVisuals` modulate the color of lights on the same entity - Lots of prototype updates to uptake the above * fix bad merge * unbork robust * blindly letting rider reformat stuff * I guess I never cleaned up these imports at all
This commit is contained in:
@@ -44,7 +44,7 @@ public sealed class HandheldLightSystem : SharedHandheldLightSystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_appearance.TryGetData<bool>(uid, ToggleableLightVisuals.Enabled, out var enabled, args.Component))
|
if (!_appearance.TryGetData<bool>(uid, ToggleableVisuals.Enabled, out var enabled, args.Component))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
using Content.Shared.Hands.Components;
|
|
||||||
|
|
||||||
namespace Content.Client.Toggleable;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Component that handles the toggling the visuals of some light emitting entity.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// This will toggle the visibility of layers on an entity's sprite, the in-hand visuals, and the clothing/equipment
|
|
||||||
/// visuals. This will modify the color of any attached point lights.
|
|
||||||
/// </remarks>
|
|
||||||
[RegisterComponent]
|
|
||||||
public sealed partial class ToggleableLightVisualsComponent : Component
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Sprite layer that will have its visibility toggled when this item is toggled.
|
|
||||||
/// </summary>
|
|
||||||
[DataField("spriteLayer")]
|
|
||||||
public string? SpriteLayer = "light";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Layers to add to the sprite of the player that is holding this entity (while the component is toggled on).
|
|
||||||
/// </summary>
|
|
||||||
[DataField("inhandVisuals")]
|
|
||||||
public Dictionary<HandLocation, List<PrototypeLayerData>> InhandVisuals = new();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Layers to add to the sprite of the player that is wearing this entity (while the component is toggled on).
|
|
||||||
/// </summary>
|
|
||||||
[DataField("clothingVisuals")]
|
|
||||||
public Dictionary<string, List<PrototypeLayerData>> ClothingVisuals = new();
|
|
||||||
}
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
using Content.Client.Clothing;
|
|
||||||
using Content.Client.Items.Systems;
|
|
||||||
using Content.Shared.Clothing;
|
|
||||||
using Content.Shared.Hands;
|
|
||||||
using Content.Shared.Inventory;
|
|
||||||
using Content.Shared.Item;
|
|
||||||
using Content.Shared.Toggleable;
|
|
||||||
using Robust.Client.GameObjects;
|
|
||||||
using Robust.Shared.Utility;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace Content.Client.Toggleable;
|
|
||||||
|
|
||||||
public sealed class ToggleableLightVisualsSystem : VisualizerSystem<ToggleableLightVisualsComponent>
|
|
||||||
{
|
|
||||||
[Dependency] private readonly SharedItemSystem _itemSys = default!;
|
|
||||||
[Dependency] private readonly SharedPointLightSystem _lights = default!;
|
|
||||||
|
|
||||||
public override void Initialize()
|
|
||||||
{
|
|
||||||
base.Initialize();
|
|
||||||
SubscribeLocalEvent<ToggleableLightVisualsComponent, GetInhandVisualsEvent>(OnGetHeldVisuals, after: new[] { typeof(ItemSystem) });
|
|
||||||
SubscribeLocalEvent<ToggleableLightVisualsComponent, GetEquipmentVisualsEvent>(OnGetEquipmentVisuals, after: new[] { typeof(ClientClothingSystem) });
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnAppearanceChange(EntityUid uid, ToggleableLightVisualsComponent component, ref AppearanceChangeEvent args)
|
|
||||||
{
|
|
||||||
if (!AppearanceSystem.TryGetData<bool>(uid, ToggleableLightVisuals.Enabled, out var enabled, args.Component))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var modulate = AppearanceSystem.TryGetData<Color>(uid, ToggleableLightVisuals.Color, out var color, args.Component);
|
|
||||||
|
|
||||||
// Update the item's sprite
|
|
||||||
if (args.Sprite != null && component.SpriteLayer != null && SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.SpriteLayer, out var layer, false))
|
|
||||||
{
|
|
||||||
SpriteSystem.LayerSetVisible((uid, args.Sprite), layer, enabled);
|
|
||||||
if (modulate)
|
|
||||||
SpriteSystem.LayerSetColor((uid, args.Sprite), layer, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update any point-lights
|
|
||||||
if (TryComp(uid, out PointLightComponent? light))
|
|
||||||
{
|
|
||||||
DebugTools.Assert(!light.NetSyncEnabled, "light visualizers require point lights without net-sync");
|
|
||||||
_lights.SetEnabled(uid, enabled, light);
|
|
||||||
if (enabled && modulate)
|
|
||||||
{
|
|
||||||
_lights.SetColor(uid, color, light);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// update clothing & in-hand visuals.
|
|
||||||
_itemSys.VisualsChanged(uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Add the unshaded light overlays to any clothing sprites.
|
|
||||||
/// </summary>
|
|
||||||
private void OnGetEquipmentVisuals(EntityUid uid, ToggleableLightVisualsComponent component, GetEquipmentVisualsEvent args)
|
|
||||||
{
|
|
||||||
if (!TryComp(uid, out AppearanceComponent? appearance)
|
|
||||||
|| !AppearanceSystem.TryGetData<bool>(uid, ToggleableLightVisuals.Enabled, out var enabled, appearance)
|
|
||||||
|| !enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!TryComp(args.Equipee, out InventoryComponent? inventory))
|
|
||||||
return;
|
|
||||||
List<PrototypeLayerData>? layers = null;
|
|
||||||
|
|
||||||
// attempt to get species specific data
|
|
||||||
if (inventory.SpeciesId != null)
|
|
||||||
component.ClothingVisuals.TryGetValue($"{args.Slot}-{inventory.SpeciesId}", out layers);
|
|
||||||
|
|
||||||
// No species specific data. Try to default to generic data.
|
|
||||||
if (layers == null && !component.ClothingVisuals.TryGetValue(args.Slot, out layers))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var modulate = AppearanceSystem.TryGetData<Color>(uid, ToggleableLightVisuals.Color, out var color, appearance);
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
foreach (var layer in layers)
|
|
||||||
{
|
|
||||||
var key = layer.MapKeys?.FirstOrDefault();
|
|
||||||
if (key == null)
|
|
||||||
{
|
|
||||||
key = i == 0 ? $"{args.Slot}-toggle" : $"{args.Slot}-toggle-{i}";
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modulate)
|
|
||||||
layer.Color = color;
|
|
||||||
|
|
||||||
args.Layers.Add((key, layer));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnGetHeldVisuals(EntityUid uid, ToggleableLightVisualsComponent component, GetInhandVisualsEvent args)
|
|
||||||
{
|
|
||||||
if (!TryComp(uid, out AppearanceComponent? appearance)
|
|
||||||
|| !AppearanceSystem.TryGetData<bool>(uid, ToggleableLightVisuals.Enabled, out var enabled, appearance)
|
|
||||||
|| !enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!component.InhandVisuals.TryGetValue(args.Location, out var layers))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var modulate = AppearanceSystem.TryGetData<Color>(uid, ToggleableLightVisuals.Color, out var color, appearance);
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
var defaultKey = $"inhand-{args.Location.ToString().ToLowerInvariant()}-toggle";
|
|
||||||
foreach (var layer in layers)
|
|
||||||
{
|
|
||||||
var key = layer.MapKeys?.FirstOrDefault();
|
|
||||||
if (key == null)
|
|
||||||
{
|
|
||||||
key = i == 0 ? defaultKey : $"{defaultKey}-{i}";
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modulate)
|
|
||||||
layer.Color = color;
|
|
||||||
|
|
||||||
args.Layers.Add((key, layer));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
30
Content.Client/Toggleable/ToggleableVisualsComponent.cs
Normal file
30
Content.Client/Toggleable/ToggleableVisualsComponent.cs
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
using Content.Shared.Hands.Components;
|
||||||
|
|
||||||
|
namespace Content.Client.Toggleable;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Component that handles toggling the visuals of an entity, including layers on an entity's sprite,
|
||||||
|
/// the in-hand visuals, and the clothing/equipment visuals.
|
||||||
|
/// </summary>
|
||||||
|
/// <see cref="ToggleableVisualsSystem"/>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class ToggleableVisualsComponent : Component
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Sprite layer that will have its visibility toggled when this item is toggled.
|
||||||
|
/// </summary>
|
||||||
|
[DataField(required: true)]
|
||||||
|
public string? SpriteLayer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Layers to add to the sprite of the player that is holding this entity (while the component is toggled on).
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public Dictionary<HandLocation, List<PrototypeLayerData>> InhandVisuals = new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Layers to add to the sprite of the player that is wearing this entity (while the component is toggled on).
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public Dictionary<string, List<PrototypeLayerData>> ClothingVisuals = new();
|
||||||
|
}
|
||||||
140
Content.Client/Toggleable/ToggleableVisualsSystem.cs
Normal file
140
Content.Client/Toggleable/ToggleableVisualsSystem.cs
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using Content.Client.Clothing;
|
||||||
|
using Content.Client.Items.Systems;
|
||||||
|
using Content.Shared.Clothing;
|
||||||
|
using Content.Shared.Hands;
|
||||||
|
using Content.Shared.Inventory;
|
||||||
|
using Content.Shared.Item;
|
||||||
|
using Content.Shared.Light.Components;
|
||||||
|
using Content.Shared.Toggleable;
|
||||||
|
using Robust.Client.GameObjects;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
|
namespace Content.Client.Toggleable;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Implements the behavior of <see cref="ToggleableVisualsComponent"/> by reacting to
|
||||||
|
/// <see cref="AppearanceChangeEvent"/>, for the sprite directly; <see cref="OnGetHeldVisuals"/> for the
|
||||||
|
/// in-hand visuals; and <see cref="OnGetEquipmentVisuals"/> for the clothing visuals.
|
||||||
|
/// </summary>
|
||||||
|
/// <see cref="ToggleableVisualsComponent"/>
|
||||||
|
public sealed class ToggleableVisualsSystem : VisualizerSystem<ToggleableVisualsComponent>
|
||||||
|
{
|
||||||
|
[Dependency] private readonly SharedItemSystem _item = default!;
|
||||||
|
[Dependency] private readonly SharedPointLightSystem _pointLight = default!;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<ToggleableVisualsComponent, GetInhandVisualsEvent>(OnGetHeldVisuals,
|
||||||
|
after: [typeof(ItemSystem)]);
|
||||||
|
SubscribeLocalEvent<ToggleableVisualsComponent, GetEquipmentVisualsEvent>(OnGetEquipmentVisuals,
|
||||||
|
after: [typeof(ClientClothingSystem)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnAppearanceChange(EntityUid uid,
|
||||||
|
ToggleableVisualsComponent component,
|
||||||
|
ref AppearanceChangeEvent args)
|
||||||
|
{
|
||||||
|
if (!AppearanceSystem.TryGetData<bool>(uid, ToggleableVisuals.Enabled, out var enabled, args.Component))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var modulateColor =
|
||||||
|
AppearanceSystem.TryGetData<Color>(uid, ToggleableVisuals.Color, out var color, args.Component);
|
||||||
|
|
||||||
|
// Update the item's sprite
|
||||||
|
if (args.Sprite != null && component.SpriteLayer != null &&
|
||||||
|
SpriteSystem.LayerMapTryGet((uid, args.Sprite), component.SpriteLayer, out var layer, false))
|
||||||
|
{
|
||||||
|
SpriteSystem.LayerSetVisible((uid, args.Sprite), layer, enabled);
|
||||||
|
if (modulateColor)
|
||||||
|
SpriteSystem.LayerSetColor((uid, args.Sprite), component.SpriteLayer, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there's a `ItemTogglePointLightComponent` that says to apply the color to attached lights, do so.
|
||||||
|
if (TryComp<ItemTogglePointLightComponent>(uid, out var toggleLights) &&
|
||||||
|
TryComp(uid, out PointLightComponent? light))
|
||||||
|
{
|
||||||
|
DebugTools.Assert(!light.NetSyncEnabled,
|
||||||
|
$"{typeof(ItemTogglePointLightComponent)} requires point lights without net-sync");
|
||||||
|
_pointLight.SetEnabled(uid, enabled, light);
|
||||||
|
if (modulateColor && toggleLights.ToggleableVisualsColorModulatesLights)
|
||||||
|
{
|
||||||
|
_pointLight.SetColor(uid, color, light);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// update clothing & in-hand visuals.
|
||||||
|
_item.VisualsChanged(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGetEquipmentVisuals(EntityUid uid,
|
||||||
|
ToggleableVisualsComponent component,
|
||||||
|
GetEquipmentVisualsEvent args)
|
||||||
|
{
|
||||||
|
if (!TryComp(uid, out AppearanceComponent? appearance)
|
||||||
|
|| !AppearanceSystem.TryGetData<bool>(uid, ToggleableVisuals.Enabled, out var enabled, appearance)
|
||||||
|
|| !enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!TryComp(args.Equipee, out InventoryComponent? inventory))
|
||||||
|
return;
|
||||||
|
List<PrototypeLayerData>? layers = null;
|
||||||
|
|
||||||
|
// attempt to get species specific data
|
||||||
|
if (inventory.SpeciesId != null)
|
||||||
|
component.ClothingVisuals.TryGetValue($"{args.Slot}-{inventory.SpeciesId}", out layers);
|
||||||
|
|
||||||
|
// No species specific data. Try to default to generic data.
|
||||||
|
if (layers == null && !component.ClothingVisuals.TryGetValue(args.Slot, out layers))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var modulateColor = AppearanceSystem.TryGetData<Color>(uid, ToggleableVisuals.Color, out var color, appearance);
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
foreach (var layer in layers)
|
||||||
|
{
|
||||||
|
var key = layer.MapKeys?.FirstOrDefault();
|
||||||
|
if (key == null)
|
||||||
|
{
|
||||||
|
key = i == 0 ? $"{args.Slot}-toggle" : $"{args.Slot}-toggle-{i}";
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modulateColor)
|
||||||
|
layer.Color = color;
|
||||||
|
|
||||||
|
args.Layers.Add((key, layer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnGetHeldVisuals(EntityUid uid, ToggleableVisualsComponent component, GetInhandVisualsEvent args)
|
||||||
|
{
|
||||||
|
if (!TryComp(uid, out AppearanceComponent? appearance)
|
||||||
|
|| !AppearanceSystem.TryGetData<bool>(uid, ToggleableVisuals.Enabled, out var enabled, appearance)
|
||||||
|
|| !enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!component.InhandVisuals.TryGetValue(args.Location, out var layers))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var modulateColor = AppearanceSystem.TryGetData<Color>(uid, ToggleableVisuals.Color, out var color, appearance);
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
var defaultKey = $"inhand-{args.Location.ToString().ToLowerInvariant()}-toggle";
|
||||||
|
foreach (var layer in layers)
|
||||||
|
{
|
||||||
|
var key = layer.MapKeys?.FirstOrDefault();
|
||||||
|
if (key == null)
|
||||||
|
{
|
||||||
|
key = i == 0 ? defaultKey : $"{defaultKey}-{i}";
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modulateColor)
|
||||||
|
layer.Color = color;
|
||||||
|
|
||||||
|
args.Layers.Add((key, layer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -282,7 +282,7 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
// This is intended so that matches & candles can re-use code for un-shaded layers on in-hand sprites.
|
// This is intended so that matches & candles can re-use code for un-shaded layers on in-hand sprites.
|
||||||
// However, this could cause conflicts if something is ACTUALLY both a toggleable light and flammable.
|
// However, this could cause conflicts if something is ACTUALLY both a toggleable light and flammable.
|
||||||
// if that ever happens, then fire visuals will need to implement their own in-hand sprite management.
|
// if that ever happens, then fire visuals will need to implement their own in-hand sprite management.
|
||||||
_appearance.SetData(uid, ToggleableLightVisuals.Enabled, flammable.OnFire, appearance);
|
_appearance.SetData(uid, ToggleableVisuals.Enabled, flammable.OnFire, appearance);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AdjustFireStacks(EntityUid uid, float relativeFireStacks, FlammableComponent? flammable = null, bool ignite = false)
|
public void AdjustFireStacks(EntityUid uid, float relativeFireStacks, FlammableComponent? flammable = null, bool ignite = false)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public sealed partial class ContainerHeldComponent: Component
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The amount of weight needed to be in the container
|
/// The amount of weight needed to be in the container
|
||||||
/// in order for it to toggle it's appearance
|
/// in order for it to toggle it's appearance
|
||||||
/// to ToggleVisuals.Toggled = true, and
|
/// to ToggleableVisuals.Enabled = true, and
|
||||||
/// SetHeldPrefix() to "full" instead of "empty".
|
/// SetHeldPrefix() to "full" instead of "empty".
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("threshold")]
|
[DataField("threshold")]
|
||||||
|
|||||||
@@ -32,12 +32,12 @@ public sealed class ContainerHeldSystem : EntitySystem
|
|||||||
if (_storage.GetCumulativeItemAreas(uid) >= comp.Threshold)
|
if (_storage.GetCumulativeItemAreas(uid) >= comp.Threshold)
|
||||||
{
|
{
|
||||||
_item.SetHeldPrefix(uid, "full", component: item);
|
_item.SetHeldPrefix(uid, "full", component: item);
|
||||||
_appearance.SetData(uid, ToggleVisuals.Toggled, true, appearance);
|
_appearance.SetData(uid, ToggleableVisuals.Enabled, true, appearance);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_item.SetHeldPrefix(uid, "empty", component: item);
|
_item.SetHeldPrefix(uid, "empty", component: item);
|
||||||
_appearance.SetData(uid, ToggleVisuals.Toggled, false, appearance);
|
_appearance.SetData(uid, ToggleableVisuals.Enabled, false, appearance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -282,7 +282,7 @@ public sealed class ItemToggleSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
if (TryComp(ent, out AppearanceComponent? appearance))
|
if (TryComp(ent, out AppearanceComponent? appearance))
|
||||||
{
|
{
|
||||||
_appearance.SetData(ent, ToggleVisuals.Toggled, ent.Comp.Activated, appearance);
|
_appearance.SetData(ent, ToggleableVisuals.Enabled, ent.Comp.Activated, appearance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
|
using Content.Shared.Item.ItemToggle.Components;
|
||||||
using Robust.Shared.GameStates;
|
using Robust.Shared.GameStates;
|
||||||
|
using Content.Shared.Toggleable;
|
||||||
|
|
||||||
namespace Content.Shared.Light.Components;
|
namespace Content.Shared.Light.Components;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Toggles point light on an entity whenever ItemToggle hits.
|
/// Makes <see cref="ItemToggledEvent"/> enable and disable point lights on this entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[RegisterComponent, NetworkedComponent]
|
[RegisterComponent, NetworkedComponent]
|
||||||
public sealed partial class ItemTogglePointLightComponent : Component
|
public sealed partial class ItemTogglePointLightComponent : Component
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// When true, causes the color specified in <see cref="ToggleableVisuals.Color"/>
|
||||||
|
/// be used to modulate the color of lights on this entity.
|
||||||
|
/// </summary>
|
||||||
|
[DataField] public bool ToggleableVisualsColorModulatesLights = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
using Content.Shared.Item.ItemToggle.Components;
|
using Content.Shared.Item.ItemToggle.Components;
|
||||||
using Content.Shared.Light.Components;
|
using Content.Shared.Light.Components;
|
||||||
using Content.Shared.Toggleable;
|
|
||||||
using ItemTogglePointLightComponent = Content.Shared.Light.Components.ItemTogglePointLightComponent;
|
using ItemTogglePointLightComponent = Content.Shared.Light.Components.ItemTogglePointLightComponent;
|
||||||
|
|
||||||
namespace Content.Shared.Light.EntitySystems;
|
namespace Content.Shared.Light.EntitySystems;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles ItemToggle for PointLight
|
/// Implements the behavior of <see cref="ItemTogglePointLightComponent"/>, causing <see cref="ItemToggledEvent"/>s to
|
||||||
|
/// enable and disable lights on the entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class ItemTogglePointLightSystem : EntitySystem
|
public sealed class ItemTogglePointLightSystem : EntitySystem
|
||||||
{
|
{
|
||||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
|
||||||
[Dependency] private readonly SharedPointLightSystem _light = default!;
|
[Dependency] private readonly SharedPointLightSystem _light = default!;
|
||||||
[Dependency] private readonly SharedHandheldLightSystem _handheldLight = default!;
|
[Dependency] private readonly SharedHandheldLightSystem _handheldLight = default!;
|
||||||
|
|
||||||
@@ -25,7 +24,6 @@ public sealed class ItemTogglePointLightSystem : EntitySystem
|
|||||||
if (!_light.TryGetLight(ent.Owner, out var light))
|
if (!_light.TryGetLight(ent.Owner, out var light))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_appearance.SetData(ent, ToggleableLightVisuals.Enabled, args.Activated);
|
|
||||||
_light.SetEnabled(ent.Owner, args.Activated, comp: light);
|
_light.SetEnabled(ent.Owner, args.Activated, comp: light);
|
||||||
if (TryComp<HandheldLightComponent>(ent.Owner, out var handheldLight))
|
if (TryComp<HandheldLightComponent>(ent.Owner, out var handheldLight))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public abstract class SharedHandheldLightSystem : EntitySystem
|
|||||||
if (component.ToggleActionEntity != null)
|
if (component.ToggleActionEntity != null)
|
||||||
_actionSystem.SetToggled(component.ToggleActionEntity, component.Activated);
|
_actionSystem.SetToggled(component.ToggleActionEntity, component.Activated);
|
||||||
|
|
||||||
_appearance.SetData(uid, ToggleableLightVisuals.Enabled, component.Activated, appearance);
|
_appearance.SetData(uid, ToggleableVisuals.Enabled, component.Activated, appearance);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddToggleLightVerb(Entity<HandheldLightComponent> ent, ref GetVerbsEvent<ActivationVerb> args)
|
private void AddToggleLightVerb(Entity<HandheldLightComponent> ent, ref GetVerbsEvent<ActivationVerb> args)
|
||||||
|
|||||||
@@ -15,8 +15,24 @@ public sealed partial class ToggleActionEvent : InstantActionEvent;
|
|||||||
/// Generic enum keys for toggle-visualizer appearance data & sprite layers.
|
/// Generic enum keys for toggle-visualizer appearance data & sprite layers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
public enum ToggleVisuals : byte
|
public enum ToggleableVisuals : byte
|
||||||
{
|
{
|
||||||
Toggled,
|
Enabled,
|
||||||
Layer
|
Layer,
|
||||||
|
Color,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generic sprite layer keys.
|
||||||
|
/// </summary>
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public enum LightLayers : byte
|
||||||
|
{
|
||||||
|
Light,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used as a key for generic unshaded layers. Not necessarily related to an entity with an actual light source.
|
||||||
|
/// Use this instead of creating a unique single-purpose "unshaded" enum for every visualizer.
|
||||||
|
/// </summary>
|
||||||
|
Unshaded,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
using Robust.Shared.Serialization;
|
|
||||||
|
|
||||||
namespace Content.Shared.Toggleable;
|
|
||||||
|
|
||||||
// Appearance Data key
|
|
||||||
[Serializable, NetSerializable]
|
|
||||||
public enum ToggleableLightVisuals : byte
|
|
||||||
{
|
|
||||||
Enabled,
|
|
||||||
Color
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Generic sprite layer keys.
|
|
||||||
/// </summary>
|
|
||||||
[Serializable, NetSerializable]
|
|
||||||
public enum LightLayers : byte
|
|
||||||
{
|
|
||||||
Light,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Used as a key for generic unshaded layers. Not necessarily related to an entity with an actual light source.
|
|
||||||
/// Use this instead of creating a unique single-purpose "unshaded" enum for every visualizer.
|
|
||||||
/// </summary>
|
|
||||||
Unshaded,
|
|
||||||
}
|
|
||||||
@@ -33,7 +33,7 @@ public sealed class EnergySwordSystem : EntitySystem
|
|||||||
if (!TryComp(entity, out AppearanceComponent? appearanceComponent))
|
if (!TryComp(entity, out AppearanceComponent? appearanceComponent))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_appearance.SetData(entity, ToggleableLightVisuals.Color, entity.Comp.ActivatedColor, appearanceComponent);
|
_appearance.SetData(entity, ToggleableVisuals.Color, entity.Comp.ActivatedColor, appearanceComponent);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used to make the blade multicolored when using a multitool on it.
|
// Used to make the blade multicolored when using a multitool on it.
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ public abstract partial class SharedTetherGunSystem : EntitySystem
|
|||||||
|
|
||||||
TryComp<AppearanceComponent>(gunUid, out var appearance);
|
TryComp<AppearanceComponent>(gunUid, out var appearance);
|
||||||
_appearance.SetData(gunUid, TetherVisualsStatus.Key, true, appearance);
|
_appearance.SetData(gunUid, TetherVisualsStatus.Key, true, appearance);
|
||||||
_appearance.SetData(gunUid, ToggleableLightVisuals.Enabled, true, appearance);
|
_appearance.SetData(gunUid, ToggleableVisuals.Enabled, true, appearance);
|
||||||
|
|
||||||
// Target updates
|
// Target updates
|
||||||
TransformSystem.Unanchor(target, targetXform);
|
TransformSystem.Unanchor(target, targetXform);
|
||||||
@@ -280,7 +280,7 @@ public abstract partial class SharedTetherGunSystem : EntitySystem
|
|||||||
|
|
||||||
TryComp<AppearanceComponent>(gunUid, out var appearance);
|
TryComp<AppearanceComponent>(gunUid, out var appearance);
|
||||||
_appearance.SetData(gunUid, TetherVisualsStatus.Key, false, appearance);
|
_appearance.SetData(gunUid, TetherVisualsStatus.Key, false, appearance);
|
||||||
_appearance.SetData(gunUid, ToggleableLightVisuals.Enabled, false, appearance);
|
_appearance.SetData(gunUid, ToggleableVisuals.Enabled, false, appearance);
|
||||||
|
|
||||||
RemComp<TetheredComponent>(component.Tethered.Value);
|
RemComp<TetheredComponent>(component.Tethered.Value);
|
||||||
_blocker.UpdateCanMove(component.Tethered.Value);
|
_blocker.UpdateCanMove(component.Tethered.Value);
|
||||||
|
|||||||
@@ -216,14 +216,14 @@
|
|||||||
sprite: Clothing/Hands/Gloves/spaceninja.rsi
|
sprite: Clothing/Hands/Gloves/spaceninja.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Hands/Gloves/spaceninja.rsi
|
sprite: Clothing/Hands/Gloves/spaceninja.rsi
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: icon-green}
|
True: {state: icon-green}
|
||||||
False: {state: icon}
|
False: {state: icon}
|
||||||
- type: Insulated
|
- type: Insulated
|
||||||
@@ -566,15 +566,15 @@
|
|||||||
sprite: Clothing/Hands/Gloves/KnuckleDusters/electricknuckleduster.rsi
|
sprite: Clothing/Hands/Gloves/KnuckleDusters/electricknuckleduster.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: knuckleduster_off
|
- state: knuckleduster_off
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Hands/Gloves/KnuckleDusters/electricknuckleduster.rsi
|
sprite: Clothing/Hands/Gloves/KnuckleDusters/electricknuckleduster.rsi
|
||||||
equippedPrefix: on
|
equippedPrefix: on
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: knuckleduster_on}
|
True: {state: knuckleduster_on}
|
||||||
False: {state: knuckleduster_off}
|
False: {state: knuckleduster_off}
|
||||||
- type: ToggleClothing
|
- type: ToggleClothing
|
||||||
|
|||||||
@@ -62,7 +62,9 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
heldPrefix: off
|
heldPrefix: off
|
||||||
size: Normal
|
size: Normal
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
|
spriteLayer: light
|
||||||
|
- type: ItemTogglePointLight
|
||||||
- type: PointLight
|
- type: PointLight
|
||||||
enabled: false
|
enabled: false
|
||||||
radius: 3
|
radius: 3
|
||||||
@@ -207,7 +209,9 @@
|
|||||||
map: [ "light" ]
|
map: [ "light" ]
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
equippedPrefix: off
|
equippedPrefix: off
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
|
spriteLayer: light
|
||||||
|
- type: ItemTogglePointLight
|
||||||
- type: PointLight
|
- type: PointLight
|
||||||
enabled: false
|
enabled: false
|
||||||
radius: 3
|
radius: 3
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
sprite: Clothing/Head/Hardsuits/paramedhelm.rsi
|
sprite: Clothing/Head/Hardsuits/paramedhelm.rsi
|
||||||
- type: HandheldLight
|
- type: HandheldLight
|
||||||
addPrefix: false
|
addPrefix: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: light
|
spriteLayer: light
|
||||||
clothingVisuals:
|
clothingVisuals:
|
||||||
head:
|
head:
|
||||||
|
|||||||
@@ -25,22 +25,22 @@
|
|||||||
radiatingBehaviourId: radiating
|
radiatingBehaviourId: radiating
|
||||||
- type: LightBehaviour
|
- type: LightBehaviour
|
||||||
behaviours:
|
behaviours:
|
||||||
- !type:FadeBehaviour
|
- !type:FadeBehaviour
|
||||||
id: radiating
|
id: radiating
|
||||||
interpolate: Linear
|
interpolate: Linear
|
||||||
maxDuration: 2.0
|
maxDuration: 2.0
|
||||||
startValue: 3.0
|
startValue: 3.0
|
||||||
endValue: 2.0
|
endValue: 2.0
|
||||||
isLooped: true
|
isLooped: true
|
||||||
reverseWhenFinished: true
|
reverseWhenFinished: true
|
||||||
- !type:PulseBehaviour
|
- !type:PulseBehaviour
|
||||||
id: blinking
|
id: blinking
|
||||||
interpolate: Nearest
|
interpolate: Nearest
|
||||||
maxDuration: 1.0
|
maxDuration: 1.0
|
||||||
minValue: 0.1
|
minValue: 0.1
|
||||||
maxValue: 2.0
|
maxValue: 2.0
|
||||||
isLooped: true
|
isLooped: true
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: light
|
spriteLayer: light
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
@@ -50,6 +50,7 @@
|
|||||||
clothingVisuals:
|
clothingVisuals:
|
||||||
head:
|
head:
|
||||||
- state: on-equipped-HELMET
|
- state: on-equipped-HELMET
|
||||||
|
- type: ItemTogglePointLight
|
||||||
- type: PowerCellSlot
|
- type: PowerCellSlot
|
||||||
cellSlotId: cell_slot
|
cellSlotId: cell_slot
|
||||||
- type: ItemSlots
|
- type: ItemSlots
|
||||||
@@ -68,8 +69,8 @@
|
|||||||
- type: HideLayerClothing
|
- type: HideLayerClothing
|
||||||
layers:
|
layers:
|
||||||
Hair: HEAD
|
Hair: HEAD
|
||||||
HeadTop : HEAD
|
HeadTop: HEAD
|
||||||
HeadSide : HEAD
|
HeadSide: HEAD
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingHeadHatHardhatBase
|
parent: ClothingHeadHatHardhatBase
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
map: [ "light" ]
|
map: [ "light" ]
|
||||||
- type: HandheldLight
|
- type: HandheldLight
|
||||||
addPrefix: false
|
addPrefix: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: light
|
spriteLayer: light
|
||||||
clothingVisuals:
|
clothingVisuals:
|
||||||
head:
|
head:
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
map: [ "light" ]
|
map: [ "light" ]
|
||||||
- type: HandheldLight
|
- type: HandheldLight
|
||||||
addPrefix: false
|
addPrefix: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
clothingVisuals:
|
clothingVisuals:
|
||||||
head:
|
head:
|
||||||
- state: equipped-head-light
|
- state: equipped-head-light
|
||||||
@@ -150,7 +150,7 @@
|
|||||||
map: [ "light" ]
|
map: [ "light" ]
|
||||||
- type: HandheldLight
|
- type: HandheldLight
|
||||||
addPrefix: false
|
addPrefix: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
clothingVisuals:
|
clothingVisuals:
|
||||||
head:
|
head:
|
||||||
- state: equipped-head-light
|
- state: equipped-head-light
|
||||||
|
|||||||
@@ -508,7 +508,8 @@
|
|||||||
action: ActionToggleJusticeHelm
|
action: ActionToggleJusticeHelm
|
||||||
mustEquip: false
|
mustEquip: false
|
||||||
- type: ItemTogglePointLight
|
- type: ItemTogglePointLight
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
|
spriteLayer: light
|
||||||
clothingVisuals:
|
clothingVisuals:
|
||||||
head:
|
head:
|
||||||
- state: on-equipped-HELMET
|
- state: on-equipped-HELMET
|
||||||
|
|||||||
@@ -8,20 +8,20 @@
|
|||||||
sprite: Clothing/Neck/Misc/headphones.rsi
|
sprite: Clothing/Neck/Misc/headphones.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
equippedPrefix: off
|
equippedPrefix: off
|
||||||
sprite: Clothing/Neck/Misc/headphones.rsi
|
sprite: Clothing/Neck/Misc/headphones.rsi
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: enum.ToggleVisuals.Layer
|
spriteLayer: enum.ToggleableVisuals.Layer
|
||||||
clothingVisuals:
|
clothingVisuals:
|
||||||
neck:
|
neck:
|
||||||
- state: on-equipped-NECK
|
- state: on-equipped-NECK
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: icon-on}
|
True: {state: icon-on}
|
||||||
False: {state: icon}
|
False: {state: icon}
|
||||||
- type: ItemToggle
|
- type: ItemToggle
|
||||||
|
|||||||
@@ -243,7 +243,7 @@
|
|||||||
walkModifier: 0.9
|
walkModifier: 0.9
|
||||||
sprintModifier: 0.9
|
sprintModifier: 0.9
|
||||||
#Shoulder mounted flashlight
|
#Shoulder mounted flashlight
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: light
|
spriteLayer: light
|
||||||
clothingVisuals:
|
clothingVisuals:
|
||||||
outerClothing:
|
outerClothing:
|
||||||
@@ -252,6 +252,7 @@
|
|||||||
outerClothing-vox:
|
outerClothing-vox:
|
||||||
- state: equipped-OUTERCLOTHING-light-vox
|
- state: equipped-OUTERCLOTHING-light-vox
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
|
- type: ItemTogglePointLight
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: HandheldLight
|
- type: HandheldLight
|
||||||
addPrefix: false
|
addPrefix: false
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
sprite: Clothing/Shoes/Boots/magboots.rsi
|
sprite: Clothing/Shoes/Boots/magboots.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Shoes/Boots/magboots.rsi
|
sprite: Clothing/Shoes/Boots/magboots.rsi
|
||||||
- type: ToggleClothing
|
- type: ToggleClothing
|
||||||
@@ -29,8 +29,8 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: icon-on}
|
True: {state: icon-on}
|
||||||
False: {state: icon}
|
False: {state: icon}
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
|
|||||||
@@ -127,7 +127,7 @@
|
|||||||
sprite: Clothing/Shoes/Boots/speedboots.rsi
|
sprite: Clothing/Shoes/Boots/speedboots.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Shoes/Boots/speedboots.rsi
|
sprite: Clothing/Shoes/Boots/speedboots.rsi
|
||||||
- type: ToggleClothing
|
- type: ToggleClothing
|
||||||
@@ -138,8 +138,8 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: icon-on}
|
True: {state: icon-on}
|
||||||
False: {state: icon}
|
False: {state: icon}
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
|
|||||||
@@ -220,7 +220,8 @@
|
|||||||
minValue: 0.1
|
minValue: 0.1
|
||||||
maxValue: 2.0
|
maxValue: 2.0
|
||||||
isLooped: true
|
isLooped: true
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
|
spriteLayer: light
|
||||||
- type: PointLight
|
- type: PointLight
|
||||||
enabled: false
|
enabled: false
|
||||||
mask: /Textures/Effects/LightMasks/cone.png
|
mask: /Textures/Effects/LightMasks/cone.png
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
sprite: Objects/Fun/candy_bucket.rsi
|
sprite: Objects/Fun/candy_bucket.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: empty_icon
|
- state: empty_icon
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: ContainerHeld
|
- type: ContainerHeld
|
||||||
threshold: 1
|
threshold: 1
|
||||||
- type: Item
|
- type: Item
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: full_icon}
|
True: {state: full_icon}
|
||||||
False: {state: empty_icon}
|
False: {state: empty_icon}
|
||||||
- type: Storage
|
- type: Storage
|
||||||
|
|||||||
@@ -12,12 +12,12 @@
|
|||||||
- state: screen
|
- state: screen
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
visible: false
|
visible: false
|
||||||
map: ["enum.ToggleVisuals.Layer"]
|
map: ["enum.ToggleableVisuals.Layer"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: { visible: true }
|
True: { visible: true }
|
||||||
False: { visible: false }
|
False: { visible: false }
|
||||||
- type: ItemToggle
|
- type: ItemToggle
|
||||||
|
|||||||
@@ -1739,7 +1739,7 @@
|
|||||||
color: white
|
color: white
|
||||||
netsync: false
|
netsync: false
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: blade
|
spriteLayer: blade
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
@@ -2039,8 +2039,8 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: { state: icon }
|
True: { state: icon }
|
||||||
False: { state: icon-off }
|
False: { state: icon-off }
|
||||||
- type: ItemToggle
|
- type: ItemToggle
|
||||||
|
|||||||
@@ -70,18 +70,18 @@
|
|||||||
- state: flame
|
- state: flame
|
||||||
visible: false
|
visible: false
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
map: ["enum.ToggleVisuals.Layer"]
|
map: ["enum.ToggleableVisuals.Layer"]
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: { visible: true }
|
True: { visible: true }
|
||||||
False: { visible: false }
|
False: { visible: false }
|
||||||
- type: EntityStorageVisuals
|
- type: EntityStorageVisuals
|
||||||
stateBaseClosed: lamp
|
stateBaseClosed: lamp
|
||||||
stateDoorOpen: lamp
|
stateDoorOpen: lamp
|
||||||
stateDoorClosed: lamptop
|
stateDoorClosed: lamptop
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: flame
|
spriteLayer: flame
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
- type: FireVisuals
|
- type: FireVisuals
|
||||||
sprite: Objects/Misc/candles.rsi
|
sprite: Objects/Misc/candles.rsi
|
||||||
normalState: fire-big
|
normalState: fire-big
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: null
|
spriteLayer: null
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
sprite: Objects/Misc/fire_extinguisher.rsi
|
sprite: Objects/Misc/fire_extinguisher.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: fire_extinguisher_closed
|
- state: fire_extinguisher_closed
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Misc/fire_extinguisher.rsi
|
sprite: Objects/Misc/fire_extinguisher.rsi
|
||||||
size: Normal
|
size: Normal
|
||||||
@@ -67,8 +67,8 @@
|
|||||||
- FireExtinguisher
|
- FireExtinguisher
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: { state: fire_extinguisher_open }
|
True: { state: fire_extinguisher_open }
|
||||||
False: { state: fire_extinguisher_closed }
|
False: { state: fire_extinguisher_closed }
|
||||||
- type: PhysicalComposition
|
- type: PhysicalComposition
|
||||||
|
|||||||
@@ -45,7 +45,9 @@
|
|||||||
radius: 3
|
radius: 3
|
||||||
energy: 2
|
energy: 2
|
||||||
netsync: false
|
netsync: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
|
spriteLayer: light
|
||||||
|
- type: ItemTogglePointLight
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: Physics
|
- type: Physics
|
||||||
canCollide: false
|
canCollide: false
|
||||||
|
|||||||
@@ -28,12 +28,12 @@
|
|||||||
sprite: Objects/Misc/landmine.rsi
|
sprite: Objects/Misc/landmine.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: landmine-inactive
|
- state: landmine-inactive
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: landmine}
|
True: {state: landmine}
|
||||||
False: {state: landmine-inactive}
|
False: {state: landmine-inactive}
|
||||||
- type: Damageable
|
- type: Damageable
|
||||||
|
|||||||
@@ -401,7 +401,7 @@
|
|||||||
heldPrefix: eshield
|
heldPrefix: eshield
|
||||||
- type: UseDelay
|
- type: UseDelay
|
||||||
delay: 0.5
|
delay: 0.5
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: shield
|
spriteLayer: shield
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
@@ -513,7 +513,7 @@
|
|||||||
heldPrefix: teleriot
|
heldPrefix: teleriot
|
||||||
- type: UseDelay
|
- type: UseDelay
|
||||||
delay: 0.5
|
delay: 0.5
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: shield
|
spriteLayer: shield
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
|
|||||||
@@ -10,14 +10,14 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
- state: screen
|
- state: screen
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
visible: false
|
visible: false
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: { visible: true }
|
True: { visible: true }
|
||||||
False: { visible: false }
|
False: { visible: false }
|
||||||
- type: Item
|
- type: Item
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
- state: screen
|
- state: screen
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
visible: false
|
visible: false
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
- state: ready
|
- state: ready
|
||||||
@@ -106,7 +106,7 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
- state: screen
|
- state: screen
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
visible: false
|
visible: false
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
- state: ready
|
- state: ready
|
||||||
|
|||||||
@@ -36,12 +36,12 @@
|
|||||||
- state: screen
|
- state: screen
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
visible: false
|
visible: false
|
||||||
map: ["enum.ToggleVisuals.Layer"]
|
map: ["enum.ToggleableVisuals.Layer"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: { visible: true }
|
True: { visible: true }
|
||||||
False: { visible: false }
|
False: { visible: false }
|
||||||
- type: ItemToggle
|
- type: ItemToggle
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
- state: icon-o
|
- state: icon-o
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
visible: false
|
visible: false
|
||||||
map: ["enum.ToggleVisuals.Layer"]
|
map: ["enum.ToggleableVisuals.Layer"]
|
||||||
- type: ItemToggleActiveSound
|
- type: ItemToggleActiveSound
|
||||||
activeSound:
|
activeSound:
|
||||||
path: /Audio/Ambience/Objects/light_hum.ogg
|
path: /Audio/Ambience/Objects/light_hum.ogg
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: { visible: true }
|
True: { visible: true }
|
||||||
False: { visible: false }
|
False: { visible: false }
|
||||||
- type: ItemToggle
|
- type: ItemToggle
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
- state: adv-o
|
- state: adv-o
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
visible: false
|
visible: false
|
||||||
map: ["enum.ToggleVisuals.Layer"]
|
map: ["enum.ToggleableVisuals.Layer"]
|
||||||
- type: Item
|
- type: Item
|
||||||
storedRotation: -90
|
storedRotation: -90
|
||||||
- type: MiningScanner
|
- type: MiningScanner
|
||||||
|
|||||||
@@ -36,7 +36,9 @@
|
|||||||
nameFormat: name-format-nukie-generic
|
nameFormat: name-format-nukie-generic
|
||||||
- type: Damageable
|
- type: Damageable
|
||||||
damageContainer: Inorganic
|
damageContainer: Inorganic
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
|
spriteLayer: light
|
||||||
|
- type: ItemTogglePointLight
|
||||||
- type: Foldable
|
- type: Foldable
|
||||||
folded: true
|
folded: true
|
||||||
- type: PowerCellSlot
|
- type: PowerCellSlot
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
minValue: 0.1
|
minValue: 0.1
|
||||||
maxValue: 2.0
|
maxValue: 2.0
|
||||||
isLooped: true
|
isLooped: true
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: light
|
spriteLayer: light
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
right:
|
right:
|
||||||
- state: inhand-right-light
|
- state: inhand-right-light
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
|
- type: ItemTogglePointLight
|
||||||
- type: PowerCellSlot
|
- type: PowerCellSlot
|
||||||
cellSlotId: cell_slot
|
cellSlotId: cell_slot
|
||||||
- type: ContainerContainer
|
- type: ContainerContainer
|
||||||
@@ -91,7 +92,7 @@
|
|||||||
- type: HandheldLight
|
- type: HandheldLight
|
||||||
addPrefix: false
|
addPrefix: false
|
||||||
wattage: 0.5
|
wattage: 0.5
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
- state: inhand-left-light
|
- state: inhand-left-light
|
||||||
|
|||||||
@@ -42,7 +42,9 @@
|
|||||||
color: "#FFC458"
|
color: "#FFC458"
|
||||||
netsync: false
|
netsync: false
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
|
spriteLayer: light
|
||||||
|
- type: ItemTogglePointLight
|
||||||
- type: PowerCellSlot
|
- type: PowerCellSlot
|
||||||
cellSlotId: cell_slot
|
cellSlotId: cell_slot
|
||||||
- type: ItemSlots
|
- type: ItemSlots
|
||||||
|
|||||||
@@ -47,11 +47,11 @@
|
|||||||
basic_icon_base-11: ""
|
basic_icon_base-11: ""
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
flame:
|
flame:
|
||||||
True: { visible: true }
|
True: { visible: true }
|
||||||
False: { visible: false }
|
False: { visible: false }
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: lighter_flame
|
spriteLayer: lighter_flame
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
flame:
|
flame:
|
||||||
True: { visible: true }
|
True: { visible: true }
|
||||||
False: { visible: false }
|
False: { visible: false }
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
fuelConsumption: 0.01
|
fuelConsumption: 0.01
|
||||||
fuelLitCost: 0.1
|
fuelLitCost: 0.1
|
||||||
tankSafe: true
|
tankSafe: true
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: lighter_flame
|
spriteLayer: lighter_flame
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
|
|||||||
@@ -14,11 +14,11 @@
|
|||||||
- state: welder_flame
|
- state: welder_flame
|
||||||
visible: false
|
visible: false
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
map: ["enum.ToggleVisuals.Layer"]
|
map: ["enum.ToggleableVisuals.Layer"]
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: { visible: true }
|
True: { visible: true }
|
||||||
False: { visible: false }
|
False: { visible: false }
|
||||||
- type: Item
|
- type: Item
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: DisarmMalus
|
- type: DisarmMalus
|
||||||
malus: 0.6
|
malus: 0.6
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: flame
|
spriteLayer: flame
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
|
|||||||
@@ -218,7 +218,7 @@
|
|||||||
map: [ "unshaded" ]
|
map: [ "unshaded" ]
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
visible: false
|
visible: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: unshaded
|
spriteLayer: unshaded
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
@@ -266,7 +266,7 @@
|
|||||||
map: [ "unshaded" ]
|
map: [ "unshaded" ]
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
visible: false
|
visible: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: unshaded
|
spriteLayer: unshaded
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
@@ -338,7 +338,7 @@
|
|||||||
map: [ "unshaded" ]
|
map: [ "unshaded" ]
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
visible: false
|
visible: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: unshaded
|
spriteLayer: unshaded
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
@@ -380,7 +380,7 @@
|
|||||||
map: [ "unshaded" ]
|
map: [ "unshaded" ]
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
visible: false
|
visible: false
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableVisuals
|
||||||
spriteLayer: unshaded
|
spriteLayer: unshaded
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
- type: ItemToggleSize
|
- type: ItemToggleSize
|
||||||
activatedSize: Huge
|
activatedSize: Huge
|
||||||
- type: ItemTogglePointLight
|
- type: ItemTogglePointLight
|
||||||
|
toggleableVisualsColorModulatesLights: true
|
||||||
- type: ItemToggleMeleeWeapon
|
- type: ItemToggleMeleeWeapon
|
||||||
activatedSoundOnHit:
|
activatedSoundOnHit:
|
||||||
path: /Audio/Weapons/eblade1.ogg
|
path: /Audio/Weapons/eblade1.ogg
|
||||||
@@ -59,7 +60,7 @@
|
|||||||
color: white
|
color: white
|
||||||
netsync: false
|
netsync: false
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: ToggleableLightVisuals # Add support for multiple layers
|
- type: ToggleableVisuals # Add support for multiple layers
|
||||||
spriteLayer: blade
|
spriteLayer: blade
|
||||||
inhandVisuals:
|
inhandVisuals:
|
||||||
left:
|
left:
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
sprite: Objects/Weapons/Melee/stunprod.rsi
|
sprite: Objects/Weapons/Melee/stunprod.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: stunprod_off
|
- state: stunprod_off
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: ItemToggle
|
- type: ItemToggle
|
||||||
soundActivate:
|
soundActivate:
|
||||||
collection: sparks
|
collection: sparks
|
||||||
@@ -59,8 +59,8 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: stunprod_on}
|
True: {state: stunprod_on}
|
||||||
False: {state: stunprod_off}
|
False: {state: stunprod_off}
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
sprite: Objects/Weapons/Melee/stunbaton.rsi
|
sprite: Objects/Weapons/Melee/stunbaton.rsi
|
||||||
layers:
|
layers:
|
||||||
- state: stunbaton_off
|
- state: stunbaton_off
|
||||||
map: [ "enum.ToggleVisuals.Layer" ]
|
map: [ "enum.ToggleableVisuals.Layer" ]
|
||||||
- type: Stunbaton
|
- type: Stunbaton
|
||||||
energyPerUse: 50
|
energyPerUse: 50
|
||||||
- type: ItemToggle
|
- type: ItemToggle
|
||||||
@@ -64,8 +64,8 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: GenericVisualizer
|
- type: GenericVisualizer
|
||||||
visuals:
|
visuals:
|
||||||
enum.ToggleVisuals.Toggled:
|
enum.ToggleableVisuals.Enabled:
|
||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleableVisuals.Layer:
|
||||||
True: {state: stunbaton_on}
|
True: {state: stunbaton_on}
|
||||||
False: {state: stunbaton_off}
|
False: {state: stunbaton_off}
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
|
|||||||
Reference in New Issue
Block a user