private void OnExpLightInit(EntityUid uid, ExpendableLightComponent component, ComponentInit args)
        {
            if (TryComp <SharedItemComponent?>(uid, out var item))
            {
                item.EquippedPrefix = "unlit";
            }

            component.CurrentState = ExpendableLightState.BrandNew;
            EntityManager.EnsureComponent <PointLightComponent>(uid);
        }
Ejemplo n.º 2
0
        private void OnExpLightInit(EntityUid uid, ExpendableLightComponent component, ComponentInit args)
        {
            if (TryComp <ItemComponent?>(uid, out var item))
            {
                _item.SetHeldPrefix(uid, "unlit", item);
            }

            component.CurrentState = ExpendableLightState.BrandNew;
            EntityManager.EnsureComponent <PointLightComponent>(uid);
        }
        private void OnExpLightUse(EntityUid uid, ExpendableLightComponent component, UseInHandEvent args)
        {
            if (args.Handled)
            {
                return;
            }

            if (TryActivate(component))
            {
                args.Handled = true;
            }
        }
        private void UpdateSpriteAndSounds(ExpendableLightComponent component)
        {
            if (TryComp <SpriteComponent>(component.Owner, out var sprite))
            {
                switch (component.CurrentState)
                {
                case ExpendableLightState.Lit:
                {
                    SoundSystem.Play(component.LitSound.GetSound(), Filter.Pvs(component.Owner), component.Owner);

                    if (component.IconStateLit != string.Empty)
                    {
                        sprite.LayerSetState(2, component.IconStateLit);
                        sprite.LayerSetShader(2, "shaded");
                    }

                    sprite.LayerSetVisible(1, true);
                    break;
                }

                case ExpendableLightState.Fading:
                {
                    break;
                }

                default:
                case ExpendableLightState.Dead:
                {
                    if (component.DieSound != null)
                    {
                        SoundSystem.Play(component.DieSound.GetSound(), Filter.Pvs(component.Owner), component.Owner);
                    }

                    sprite.LayerSetState(0, component.IconStateSpent);
                    sprite.LayerSetShader(0, "shaded");
                    sprite.LayerSetVisible(1, false);
                    break;
                }
                }
            }

            if (TryComp <ClothingComponent>(component.Owner, out var clothing))
            {
                clothing.EquippedPrefix = component.Activated ? "Activated" : string.Empty;
            }
        }
        /// <summary>
        ///     Enables the light if it is not active. Once active it cannot be turned off.
        /// </summary>
        public bool TryActivate(ExpendableLightComponent component)
        {
            if (!component.Activated && component.CurrentState == ExpendableLightState.BrandNew)
            {
                if (TryComp <SharedItemComponent>(component.Owner, out var item))
                {
                    item.EquippedPrefix = "lit";
                }

                component.CurrentState    = ExpendableLightState.Lit;
                component.StateExpiryTime = component.GlowDuration;

                UpdateSpriteAndSounds(component);
                UpdateVisualizer(component);

                return(true);
            }

            return(false);
        }
Ejemplo n.º 6
0
        private void AddIgniteVerb(EntityUid uid, ExpendableLightComponent component, GetActivationVerbsEvent args)
        {
            if (!args.CanAccess || !args.CanInteract)
            {
                return;
            }

            if (component.CurrentState != ExpendableLightState.BrandNew)
            {
                return;
            }

            // Ignite the flare or make the glowstick glow.
            // Also hot damn, those are some shitty glowsticks, we need to get a refund.
            Verb verb = new();

            verb.Text        = Loc.GetString("expendable-light-start-verb");
            verb.IconTexture = "/Textures/Interface/VerbIcons/light.svg.192dpi.png";
            verb.Act         = () => component.TryActivate();
            args.Verbs.Add(verb);
        }
        private void UpdateLight(ExpendableLightComponent component, float frameTime)
        {
            if (!component.Activated)
            {
                return;
            }

            component.StateExpiryTime -= frameTime;

            if (component.StateExpiryTime <= 0f)
            {
                switch (component.CurrentState)
                {
                case ExpendableLightState.Lit:
                    component.CurrentState    = ExpendableLightState.Fading;
                    component.StateExpiryTime = component.FadeOutDuration;

                    UpdateVisualizer(component);

                    break;

                default:
                case ExpendableLightState.Fading:
                    component.CurrentState = ExpendableLightState.Dead;
                    var meta = MetaData(component.Owner);
                    meta.EntityName        = component.SpentName;
                    meta.EntityDescription = component.SpentDesc;

                    UpdateSpriteAndSounds(component);
                    UpdateVisualizer(component);

                    if (TryComp <SharedItemComponent>(component.Owner, out var item))
                    {
                        item.EquippedPrefix = "unlit";
                    }

                    break;
                }
            }
        }
        private void UpdateVisualizer(ExpendableLightComponent component, AppearanceComponent?appearance = null)
        {
            if (!Resolve(component.Owner, ref appearance, false))
            {
                return;
            }

            appearance.SetData(ExpendableLightVisuals.State, component.CurrentState);

            switch (component.CurrentState)
            {
            case ExpendableLightState.Lit:
                appearance.SetData(ExpendableLightVisuals.Behavior, component.TurnOnBehaviourID);
                break;

            case ExpendableLightState.Fading:
                appearance.SetData(ExpendableLightVisuals.Behavior, component.FadeOutBehaviourID);
                break;

            case ExpendableLightState.Dead:
                appearance.SetData(ExpendableLightVisuals.Behavior, string.Empty);
                break;
            }
        }