/// <inheritdoc /> public override async Task <string> GetTextAsync(Appearance appearance, AppearanceComponent component) { var result = await _lua.ExecuteSnippetAsync ( this.Snippet, (nameof(appearance), appearance), ("character", appearance.Character), (nameof(component), component) ); if (!result.IsSuccess) { return($"[{result.ErrorReason}]"); } return(result.Entity); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var entities = IoCManager.Resolve <IEntityManager>(); if (!entities.TryGetComponent(component.Owner, out ISpriteComponent? sprite)) { return; } // Update the visuals : Is the canister connected to a port or not if (component.TryGetData(GasPortableVisuals.ConnectedState, out bool isConnected)) { sprite.LayerSetVisible(Layers.ConnectedToPort, isConnected); } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (!component.Owner.TryGetComponent(out ISpriteComponent sprite)) { return; } if (!component.TryGetData(SiphonVisuals.VisualState, out SiphonVisualState siphonVisualState)) { return; } var layer = sprite.LayerMapGet(Layer.SiphonEnabled); sprite.LayerSetVisible(layer, siphonVisualState.SiphonEnabled); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (!component.Owner.TryGetComponent <ISpriteComponent>(out var sprite)) { return; } if (!component.TryGetData(FilterVisuals.VisualState, out FilterVisualState filterVisualState)) { return; } var filterEnabledLayer = sprite.LayerMapGet(Layer.FilterEnabled); sprite.LayerSetVisible(filterEnabledLayer, filterVisualState.Enabled); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var sprite = IoCManager.Resolve <IEntityManager>().GetComponent <ISpriteComponent>(component.Owner); sprite.LayerSetVisible(PDAVisualLayers.Flashlight, false); if (component.TryGetData(UnpoweredFlashlightVisuals.LightOn, out bool isFlashlightOn)) { sprite.LayerSetVisible(PDAVisualLayers.Flashlight, isFlashlightOn); } if (component.TryGetData(PDAVisuals.IDCardInserted, out bool isCardInserted)) { sprite.LayerSetVisible(PDAVisualLayers.IDLight, isCardInserted); } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (!component.Owner.TryGetComponent <ISpriteComponent>(out var sprite)) { return; } if (component.TryGetData <bool>(DrinkCanStateVisual.Opened, out var opened) && opened) { sprite.LayerSetState(DrinkCanVisualLayers.Icon, $"{_stateOpen}"); return; } sprite.LayerSetState(DrinkCanVisualLayers.Icon, $"{_stateClosed}"); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var entities = IoCManager.Resolve <IEntityManager>(); if (!entities.TryGetComponent(component.Owner, out SpriteComponent? sprite)) { return; } if (component.TryGetData(KudzuVisuals.Variant, out int var) && component.TryGetData(KudzuVisuals.GrowthLevel, out int level)) { sprite.LayerMapReserveBlank(Layer); sprite.LayerSetState(0, $"kudzu_{level}{var}"); } }
public override void OnChangeData(AppearanceComponent component) { var sprite = component.Owner.GetComponent <ISpriteComponent>(); if (!component.TryGetData(BallisticMagazineVisuals.AmmoCapacity, out int capacity)) { return; } if (!component.TryGetData(BallisticMagazineVisuals.AmmoLeft, out int current)) { return; } var step = ContentHelpers.RoundToLevels(current, capacity, _steps); sprite.LayerSetState(0, $"{_baseState}-{step}"); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (component.Owner.Deleted) { return; } var sprite = component.Owner.GetComponent <ISpriteComponent>(); sprite.LayerSetVisible(PDAVisualLayers.Flashlight, false); if (!component.TryGetData <bool>(PDAVisuals.FlashlightLit, out var isScreenLit)) { return; } sprite.LayerSetState(PDAVisualLayers.Flashlight, "light_overlay"); sprite.LayerSetVisible(PDAVisualLayers.Flashlight, isScreenLit); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (!component.Owner.TryGetComponent(out ISpriteComponent sprite)) { return; } if (!component.TryGetData(PumpVisuals.VisualState, out PumpVisualState pumpVisualState)) { return; } var pumpEnabledLayer = sprite.LayerMapGet(Layer.PumpEnabled); sprite.LayerSetVisible(pumpEnabledLayer, pumpVisualState.PumpEnabled); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var sprite = component.Owner.GetComponent <ISpriteComponent>(); sprite.LayerSetVisible(PDAVisualLayers.Flashlight, false); if (component.TryGetData(PDAVisuals.FlashlightLit, out bool isScreenLit)) { sprite.LayerSetVisible(PDAVisualLayers.Flashlight, isScreenLit); } if (component.TryGetData(PDAVisuals.IDCardInserted, out bool isCardInserted)) { sprite.LayerSetVisible(PDAVisualLayers.IDLight, isCardInserted); } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (!component.Owner.TryGetComponent(out SpriteComponent? sprite)) { return; } if (!component.TryGetData(SingularityVisuals.Level, out int level)) { return; } sprite.LayerSetRSI(Layer, "Constructible/Power/Singularity/singularity_" + level + ".rsi"); sprite.LayerSetState(Layer, "singularity_" + level); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var sprite = IoCManager.Resolve <IEntityManager>().GetComponent <ISpriteComponent>(component.Owner); if (component.TryGetData <string>(PlantHolderVisuals.PlantRsi, out var rsi) && component.TryGetData <string>(PlantHolderVisuals.PlantState, out var state)) { var valid = !string.IsNullOrWhiteSpace(state); sprite.LayerSetVisible(PlantHolderLayers.Plant, valid); if (valid) { sprite.LayerSetRSI(PlantHolderLayers.Plant, rsi); sprite.LayerSetState(PlantHolderLayers.Plant, state); } } if (component.TryGetData <bool>(PlantHolderVisuals.HealthLight, out var health)) { sprite.LayerSetVisible(PlantHolderLayers.HealthLight, health); } if (component.TryGetData <bool>(PlantHolderVisuals.WaterLight, out var water)) { sprite.LayerSetVisible(PlantHolderLayers.WaterLight, water); } if (component.TryGetData <bool>(PlantHolderVisuals.NutritionLight, out var nutrition)) { sprite.LayerSetVisible(PlantHolderLayers.NutritionLight, nutrition); } if (component.TryGetData <bool>(PlantHolderVisuals.AlertLight, out var alert)) { sprite.LayerSetVisible(PlantHolderLayers.AlertLight, alert); } if (component.TryGetData <bool>(PlantHolderVisuals.HarvestLight, out var harvest)) { sprite.LayerSetVisible(PlantHolderLayers.HarvestLight, harvest); } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var entities = IoCManager.Resolve <IEntityManager>(); if (!entities.TryGetComponent(component.Owner, out ISpriteComponent? sprite)) { return; } if (component.TryGetData(MorgueVisuals.Open, out bool open)) { sprite.LayerSetState(MorgueVisualLayers.Base, open ? _stateOpen : _stateClosed); } else { sprite.LayerSetState(MorgueVisualLayers.Base, _stateClosed); } var lightState = ""; if (component.TryGetData(MorgueVisuals.HasContents, out bool hasContents) && hasContents) { lightState = _lightContents; } if (component.TryGetData(MorgueVisuals.HasMob, out bool hasMob) && hasMob) { lightState = _lightMob; } if (component.TryGetData(MorgueVisuals.HasSoul, out bool hasSoul) && hasSoul) { lightState = _lightSoul; } if (!string.IsNullOrEmpty(lightState)) { sprite.LayerSetState(MorgueVisualLayers.Light, lightState); sprite.LayerSetVisible(MorgueVisualLayers.Light, true); } else { sprite.LayerSetVisible(MorgueVisualLayers.Light, false); } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var ent = IoCManager.Resolve <IEntityManager>(); var sprite = ent.GetComponent <ISpriteComponent>(component.Owner); if (component.TryGetData <ApcChargeState>(ApcVisuals.ChargeState, out var state)) { switch (state) { case ApcChargeState.Lack: sprite.LayerSetState(Layers.ChargeState, "apco3-0"); break; case ApcChargeState.Charging: sprite.LayerSetState(Layers.ChargeState, "apco3-1"); break; case ApcChargeState.Full: sprite.LayerSetState(Layers.ChargeState, "apco3-2"); break; case ApcChargeState.Emag: sprite.LayerSetState(Layers.ChargeState, "emag-unlit"); break; } if (ent.TryGetComponent(component.Owner, out SharedPointLightComponent? light)) { light.Color = state switch { ApcChargeState.Lack => LackColor, ApcChargeState.Charging => ChargingColor, ApcChargeState.Full => FullColor, ApcChargeState.Emag => EmagColor, _ => LackColor }; } } else { sprite.LayerSetState(Layers.ChargeState, "apco3-0"); } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var entities = IoCManager.Resolve <IEntityManager>(); if (!entities.TryGetComponent(component.Owner, out ISpriteComponent? sprite)) { return; } component.TryGetData(StorageVisuals.Open, out bool open); if (sprite.LayerMapTryGet(StorageVisualLayers.Door, out _)) { sprite.LayerSetVisible(StorageVisualLayers.Door, true); if (open && _stateOpen != null) { sprite.LayerSetState(StorageVisualLayers.Door, _stateOpen); } else if (!open && _stateClosed != null) { sprite.LayerSetState(StorageVisualLayers.Door, _stateClosed); } else { sprite.LayerSetVisible(StorageVisualLayers.Door, false); } } if (component.TryGetData(StorageVisuals.CanLock, out bool canLock) && canLock) { if (!component.TryGetData(StorageVisuals.Locked, out bool locked)) { locked = true; } sprite.LayerSetVisible(StorageVisualLayers.Lock, !open); if (!open) { sprite.LayerSetState(StorageVisualLayers.Lock, locked ? "locked" : "unlocked"); } } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var sprite = component.Owner.GetComponent <ISpriteComponent>(); var loopingSoundComponent = component.Owner.GetComponentOrNull <LoopingSoundComponent>(); if (!component.TryGetData(PowerDeviceVisuals.VisualState, out MicrowaveVisualState state)) { state = MicrowaveVisualState.Idle; } switch (state) { case MicrowaveVisualState.Broken: sprite.LayerSetState(MicrowaveVisualizerLayers.BaseUnlit, "mwb"); loopingSoundComponent?.StopAllSounds(); break; case MicrowaveVisualState.Idle: sprite.LayerSetState(MicrowaveVisualizerLayers.Base, "mw"); sprite.LayerSetState(MicrowaveVisualizerLayers.BaseUnlit, "mw_unlit"); loopingSoundComponent?.StopAllSounds(); break; case MicrowaveVisualState.Cooking: sprite.LayerSetState(MicrowaveVisualizerLayers.Base, "mw"); sprite.LayerSetState(MicrowaveVisualizerLayers.BaseUnlit, "mw_running_unlit"); var audioParams = AudioParams.Default; audioParams.Loop = true; var scheduledSound = new ScheduledSound(); scheduledSound.Filename = "/Audio/Machines/microwave_loop.ogg"; scheduledSound.AudioParams = audioParams; loopingSoundComponent?.StopAllSounds(); loopingSoundComponent?.AddScheduledSound(scheduledSound); break; default: Logger.Debug($"Something terrible happened in {this}"); break; } var glowingPartsVisible = !(component.TryGetData(PowerDeviceVisuals.Powered, out bool powered) && !powered); sprite.LayerSetVisible(MicrowaveVisualizerLayers.BaseUnlit, glowingPartsVisible); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (!component.Owner.TryGetComponent(out ISpriteComponent? sprite)) { return; } if (!component.TryGetData(Key, out object status)) { return; } if (!States.TryGetValue(status, out var val)) { return; } sprite.LayerSetState(Layer, val); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var entities = IoCManager.Resolve <IEntityManager>(); if (!entities.TryGetComponent(component.Owner, out SpriteComponent? sprite)) { return; } if (!component.TryGetData(SignalSwitchVisuals.On, out bool on)) { return; } sprite.LayerSetState(0, on ? "on" : "off"); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var entities = IoCManager.Resolve <IEntityManager>(); if (!entities.TryGetComponent(component.Owner, out SpriteComponent? sprite)) { return; } if (!component.TryGetData(WireVisVisuals.ConnectedMask, out WireVisDirFlags mask)) { mask = WireVisDirFlags.None; } sprite.LayerSetState(0, $"{StateBase}{(int) mask}"); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (component.TryGetData <SharedSpeciesComponent.MobState>(SharedSpeciesComponent.MobVisuals.RotationState, out var state)) { switch (state) { case SharedSpeciesComponent.MobState.Standing: SetRotation(component, 0); break; case SharedSpeciesComponent.MobState.Down: SetRotation(component, Angle.FromDegrees(90)); break; } } }
public override void OnChangeData(AppearanceComponent component) { var sprite = component.Owner.GetComponent <ISpriteComponent>(); if (!component.TryGetData(BarrelBoltVisuals.BoltOpen, out bool boltOpen)) { return; } if (boltOpen) { sprite.LayerSetState(RangedBarrelVisualLayers.Bolt, "bolt-open"); } else { sprite.LayerSetState(RangedBarrelVisualLayers.Bolt, "bolt-closed"); } }
private void SetOnFire(SpriteComponent sprite, AppearanceComponent appearance, FireVisualsComponent component, bool onFire, float fireStacks) { if (component.Sprite != null) { sprite.LayerSetRSI(FireVisualLayers.Fire, component.Sprite); } sprite.LayerSetVisible(FireVisualLayers.Fire, onFire); if (fireStacks > component.FireStackAlternateState && !string.IsNullOrEmpty(component.AlternateState)) { sprite.LayerSetState(FireVisualLayers.Fire, component.AlternateState); } else { sprite.LayerSetState(FireVisualLayers.Fire, component.NormalState); } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (component.Owner.Deleted) { return; } var sprite = component.Owner.GetComponent <ISpriteComponent>(); if (!component.TryGetData(MedicalScannerVisuals.Status, out MedicalScannerStatus status)) { return; } sprite.LayerSetState(MedicalScannerVisualLayers.Machine, StatusToMachineStateId(status)); sprite.LayerSetState(MedicalScannerVisualLayers.Terminal, StatusToTerminalStateId(status)); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var entities = IoCManager.Resolve <IEntityManager>(); if (!entities.TryGetComponent(component.Owner, out SpriteComponent? sprite)) { return; } if (!component.TryGetData(EmergencyLightVisuals.On, out bool on)) { on = false; } sprite.LayerSetState(0, on ? "emergency_light_on" : "emergency_light_off"); }
public void SetDeconstructionStage(AppearanceComponent component, int stage) { var entity = component.Owner; if (!entity.TryGetComponent(out ISpriteComponent? sprite)) { return; } if (stage < 0) { sprite.LayerSetVisible(ReinforcedWallVisualLayers.Deconstruction, false); return; } sprite.LayerSetVisible(ReinforcedWallVisualLayers.Deconstruction, true); sprite.LayerSetState(ReinforcedWallVisualLayers.Deconstruction, $"reinf_construct-{stage}"); }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); if (component.TryGetData <RotationState>(RotationVisuals.RotationState, out var state)) { switch (state) { case RotationState.Vertical: SetRotation(component, 0); break; case RotationState.Horizontal: SetRotation(component, Angle.FromDegrees(90)); break; } } }
public override void OnChangeData(AppearanceComponent component) { base.OnChangeData(component); var entities = IoCManager.Resolve <IEntityManager>(); if (!entities.TryGetComponent(component.Owner, out ISpriteComponent? sprite)) { return; } if (!component.TryGetData(StorageVisuals.Locked, out bool locked)) { locked = false; } if (!component.TryGetData(EmitterVisuals.VisualState, out EmitterVisualState state)) { state = EmitterVisualState.Off; } switch (state) { case EmitterVisualState.On: sprite.LayerSetVisible(1, true); sprite.LayerSetState(1, OverlayBeam); break; case EmitterVisualState.Underpowered: sprite.LayerSetVisible(1, true); sprite.LayerSetState(1, OverlayUnderPowered); break; case EmitterVisualState.Off: sprite.LayerSetVisible(1, false); break; default: throw new ArgumentOutOfRangeException(); } sprite.LayerSetVisible(2, locked); }
private void PlayAnimation(AppearanceComponent component, HandheldLightPowerStates state) { component.Owner.EnsureComponent(out AnimationPlayerComponent animationPlayer); switch (state) { case HandheldLightPowerStates.LowPower: if (!animationPlayer.HasRunningAnimation("radiatingLight")) { animationPlayer.Play(_radiatingLightAnimation, "radiatingLight"); _radiatingCallback = (s) => animationPlayer.Play(_radiatingLightAnimation, s); animationPlayer.AnimationCompleted += _radiatingCallback; } break; case HandheldLightPowerStates.Dying: animationPlayer.Stop("radiatingLight"); animationPlayer.AnimationCompleted -= _radiatingCallback; if (!animationPlayer.HasRunningAnimation("blinkingLight")) { animationPlayer.Play(_blinkingLightAnimation, "blinkingLight"); _blinkingCallback = (s) => animationPlayer.Play(_blinkingLightAnimation, s); animationPlayer.AnimationCompleted += _blinkingCallback; } break; case HandheldLightPowerStates.FullPower: if (animationPlayer.HasRunningAnimation("blinkingLight")) { animationPlayer.Stop("blinkingLight"); animationPlayer.AnimationCompleted -= _blinkingCallback; } if (animationPlayer.HasRunningAnimation("radiatingLight")) { animationPlayer.Stop("radiatingLight"); animationPlayer.AnimationCompleted -= _radiatingCallback; } break; } }
public void ReplacesFluentTokensCorrectly() { var hairColour = new Colour { Shade = Shade.White, Modifier = ShadeModifier.Fluorescent }; var hairTransformation = new Transformation { DefaultBaseColour = hairColour, Part = Bodypart.Hair, SingleDescription = SampleFluentText }; var hairComponent = AppearanceComponent.CreateFrom(hairTransformation); var appearance = new Appearance { Components = new List <AppearanceComponent> { hairComponent } }; var character = new Character { Name = "Amby", CurrentAppearance = appearance, PronounProviderFamily = "Feminine" }; var characterService = new CharacterService(null, null, null, null) .WithPronounProvider(new FemininePronounProvider()); var serviceProvider = new ServiceCollection() .AddSingleton(characterService) .BuildServiceProvider(); var descriptionBuilder = new TransformationDescriptionBuilder(serviceProvider); var result = descriptionBuilder.ReplaceTokensWithContent(SampleFluentText, character, hairComponent); Assert.Equal(ExpectedText, result); }