RandomArtifactSpriteSystem.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Content.Server.Xenoarchaeology.XenoArtifacts.Events;
  2. using Content.Shared.Item;
  3. using Content.Shared.Xenoarchaeology.XenoArtifacts;
  4. using Robust.Server.GameObjects;
  5. using Robust.Shared.Random;
  6. using Robust.Shared.Timing;
  7. namespace Content.Server.Xenoarchaeology.XenoArtifacts;
  8. public sealed class RandomArtifactSpriteSystem : EntitySystem
  9. {
  10. [Dependency] private readonly IRobustRandom _random = default!;
  11. [Dependency] private readonly IGameTiming _time = default!;
  12. [Dependency] private readonly AppearanceSystem _appearance = default!;
  13. [Dependency] private readonly SharedItemSystem _item = default!;
  14. public override void Initialize()
  15. {
  16. base.Initialize();
  17. SubscribeLocalEvent<RandomArtifactSpriteComponent, MapInitEvent>(OnMapInit);
  18. SubscribeLocalEvent<RandomArtifactSpriteComponent, ArtifactActivatedEvent>(OnActivated);
  19. }
  20. public override void Update(float frameTime)
  21. {
  22. base.Update(frameTime);
  23. var query = EntityQueryEnumerator<RandomArtifactSpriteComponent, AppearanceComponent>();
  24. while (query.MoveNext(out var uid, out var component, out var appearance))
  25. {
  26. if (component.ActivationStart == null)
  27. continue;
  28. var timeDif = _time.CurTime - component.ActivationStart.Value;
  29. if (timeDif.Seconds >= component.ActivationTime)
  30. {
  31. _appearance.SetData(uid, SharedArtifactsVisuals.IsActivated, false, appearance);
  32. component.ActivationStart = null;
  33. }
  34. }
  35. }
  36. private void OnMapInit(EntityUid uid, RandomArtifactSpriteComponent component, MapInitEvent args)
  37. {
  38. var randomSprite = _random.Next(component.MinSprite, component.MaxSprite + 1);
  39. _appearance.SetData(uid, SharedArtifactsVisuals.SpriteIndex, randomSprite);
  40. _item.SetHeldPrefix(uid, "ano" + randomSprite.ToString("D2")); //set item artifact inhands
  41. }
  42. private void OnActivated(EntityUid uid, RandomArtifactSpriteComponent component, ArtifactActivatedEvent args)
  43. {
  44. _appearance.SetData(uid, SharedArtifactsVisuals.IsActivated, true);
  45. component.ActivationStart = _time.CurTime;
  46. }
  47. }