/// <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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 5
0
        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}");
        }
Esempio n. 7
0
    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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 13
0
        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);
            }
        }
Esempio n. 14
0
        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");
            }
        }
Esempio n. 16
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");
                }
            }
        }
Esempio n. 17
0
        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");
        }
Esempio n. 20
0
        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}");
        }
Esempio n. 21
0
        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");
            }
        }
Esempio n. 23
0
    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);
        }
    }
Esempio n. 24
0
        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}");
        }
Esempio n. 27
0
        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;
            }
        }
Esempio n. 30
0
        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);
        }