| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using Content.Shared.Projectiles;
- using Robust.Shared.Spawners;
- using Content.Shared.Weapons.Ranged.Systems;
- using Robust.Client.Animations;
- using Robust.Client.GameObjects;
- using Robust.Shared.GameStates;
- using TimedDespawnComponent = Robust.Shared.Spawners.TimedDespawnComponent;
- namespace Content.Client.Projectiles;
- public sealed class ProjectileSystem : SharedProjectileSystem
- {
- [Dependency] private readonly AnimationPlayerSystem _player = default!;
- public override void Initialize()
- {
- base.Initialize();
- SubscribeAllEvent<ImpactEffectEvent>(OnProjectileImpact);
- }
- private void OnProjectileImpact(ImpactEffectEvent ev)
- {
- var coords = GetCoordinates(ev.Coordinates);
- if (Deleted(coords.EntityId))
- return;
- var ent = Spawn(ev.Prototype, coords);
- if (TryComp<SpriteComponent>(ent, out var sprite))
- {
- sprite[EffectLayers.Unshaded].AutoAnimated = false;
- sprite.LayerMapTryGet(EffectLayers.Unshaded, out var layer);
- var state = sprite.LayerGetState(layer);
- var lifetime = 0.5f;
- if (TryComp<TimedDespawnComponent>(ent, out var despawn))
- lifetime = despawn.Lifetime;
- var anim = new Animation()
- {
- Length = TimeSpan.FromSeconds(lifetime),
- AnimationTracks =
- {
- new AnimationTrackSpriteFlick()
- {
- LayerKey = EffectLayers.Unshaded,
- KeyFrames =
- {
- new AnimationTrackSpriteFlick.KeyFrame(state.Name, 0f),
- }
- }
- }
- };
- _player.Play(ent, anim, "impact-effect");
- }
- }
- }
|