StalkerMoveSpeedSystem.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Content.Shared._Stalker.MoveSpeed;
  2. using Content.Shared.Mobs;
  3. using Content.Shared.Movement.Components;
  4. namespace Content.Server._Stalker.MoveSpeed;
  5. public sealed class StalkerMoveSpeedSystem : StalkerMoveSpeedSystemShared
  6. {
  7. public override void Initialize()
  8. {
  9. base.Initialize();
  10. SubscribeLocalEvent<MovementSpeedModifierComponent, ComponentInit>(InstallComponentSpeed);
  11. SubscribeAllEvent<StalkerMSSetBonusWalkEvent>(OnStalkerMSSetBonusWalkEvent);
  12. SubscribeAllEvent<StalkerMSSetBonusSprintEvent>(OnStalkerMSSetBonusSprintEvent);
  13. }
  14. private void OnStalkerMSSetBonusSprintEvent(StalkerMSSetBonusSprintEvent msg, EntitySessionEventArgs args)
  15. {
  16. if (!TryComp(msg.Entity, out StalkerMoveSpeedComponent? moveSpeedComponent) ||
  17. args.SenderSession.AttachedEntity == null)
  18. return;
  19. SetBonusSpeedSprint(args.SenderSession.AttachedEntity.Value, msg.NameBonus, msg.ValueBonus, moveSpeedComponent);
  20. }
  21. private void OnStalkerMSSetBonusWalkEvent(StalkerMSSetBonusWalkEvent msg, EntitySessionEventArgs args)
  22. {
  23. if (!TryComp(msg.Entity, out StalkerMoveSpeedComponent? moveSpeedComponent) ||
  24. args.SenderSession.AttachedEntity == null)
  25. return;
  26. SetBonusSpeedWalk(args.SenderSession.AttachedEntity.Value, msg.NameBonus, msg.ValueBonus, moveSpeedComponent);
  27. }
  28. private void InstallComponentSpeed(EntityUid uid, MovementSpeedModifierComponent component, ComponentInit args)
  29. {
  30. var stalkerSpeedComp = AddComp<StalkerMoveSpeedComponent>(uid);
  31. stalkerSpeedComp.StartWalkSpeed = component._baseWalkSpeedVVpublic;
  32. stalkerSpeedComp.StartSprintSpeed = component._baseSprintSpeedVVpublic;
  33. }
  34. public void SetBonusSpeedWalk(EntityUid uid, string nameBonus, float valueBonus, StalkerMoveSpeedComponent stalkerSpeedComp)
  35. {
  36. stalkerSpeedComp.BonusSpeedWalkProcent[nameBonus] = valueBonus;
  37. CalculateSpeedByFormula(stalkerSpeedComp);
  38. SyncWalkSpeed((uid, stalkerSpeedComp));
  39. }
  40. public void SetBonusSpeedSprint(EntityUid uid, string nameBonus, float valueBonus, StalkerMoveSpeedComponent stalkerSpeedComp)
  41. {
  42. stalkerSpeedComp.BonusSpeedSprintProcent[nameBonus] = valueBonus;
  43. CalculateSpeedByFormula(stalkerSpeedComp);
  44. SyncSprintSpeed((uid, stalkerSpeedComp));
  45. }
  46. public void SyncWalkSpeed(Entity<StalkerMoveSpeedComponent> stalkerSpeedComp)
  47. {
  48. if (!TryComp<MovementSpeedModifierComponent>(stalkerSpeedComp.Owner, out var movementSpeed))
  49. return;
  50. movementSpeed._baseWalkSpeedVVpublic = stalkerSpeedComp.Comp.SumBonusSpeedWalk;
  51. }
  52. public void SyncSprintSpeed(Entity<StalkerMoveSpeedComponent> stalkerSpeedComp)
  53. {
  54. if (!TryComp<MovementSpeedModifierComponent>(stalkerSpeedComp.Owner, out var movementSpeed))
  55. return;
  56. movementSpeed._baseSprintSpeedVVpublic = stalkerSpeedComp.Comp.SumBonusSpeedSprint;
  57. }
  58. public void CalculateSpeedByFormula(StalkerMoveSpeedComponent stalkerSpeedComp)
  59. {
  60. var sumProcentWalk = 0f;
  61. foreach (var keyValuePair in stalkerSpeedComp.BonusSpeedWalkProcent)
  62. {
  63. sumProcentWalk += keyValuePair.Value;
  64. }
  65. stalkerSpeedComp.SumBonusSpeedWalk = stalkerSpeedComp.StartWalkSpeed + stalkerSpeedComp.StartWalkSpeed / 100f * sumProcentWalk;
  66. var sumProcentSprint = 0f;
  67. foreach (var keyValuePair in stalkerSpeedComp.BonusSpeedSprintProcent)
  68. {
  69. sumProcentSprint += keyValuePair.Value;
  70. }
  71. stalkerSpeedComp.SumBonusSpeedSprint = stalkerSpeedComp.StartSprintSpeed + stalkerSpeedComp.StartSprintSpeed / 100f * sumProcentSprint;
  72. }
  73. }