MovementSpeedModifierComponent.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using Content.Shared.Movement.Systems;
  2. using Robust.Shared.GameStates;
  3. namespace Content.Shared.Movement.Components
  4. {
  5. /// <summary>
  6. /// Applies basic movement speed and movement modifiers for an entity.
  7. /// If this is not present on the entity then they will use defaults for movement.
  8. /// </summary>
  9. [RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
  10. [Access(typeof(MovementSpeedModifierSystem))]
  11. public sealed partial class MovementSpeedModifierComponent : Component
  12. {
  13. // Weightless
  14. public const float DefaultMinimumFrictionSpeed = 0.005f;
  15. public const float DefaultWeightlessFriction = 1f;
  16. public const float DefaultWeightlessFrictionNoInput = 0.2f;
  17. public const float DefaultOffGridFriction = 0.05f;
  18. public const float DefaultWeightlessModifier = 0.7f;
  19. public const float DefaultWeightlessAcceleration = 1f;
  20. public const float DefaultAcceleration = 20f;
  21. public const float DefaultFriction = 20f;
  22. public const float DefaultFrictionNoInput = 20f;
  23. public const float DefaultBaseWalkSpeed = 2.5f;
  24. public const float DefaultBaseSprintSpeed = 4.5f;
  25. [AutoNetworkedField, ViewVariables]
  26. public float WalkSpeedModifier = 1.0f;
  27. [AutoNetworkedField, ViewVariables]
  28. public float SprintSpeedModifier = 1.0f;
  29. [ViewVariables(VVAccess.ReadWrite)]
  30. private float _baseWalkSpeedVV
  31. {
  32. get => BaseWalkSpeed;
  33. set
  34. {
  35. BaseWalkSpeed = value;
  36. Dirty();
  37. }
  38. }
  39. [ViewVariables(VVAccess.ReadWrite)]
  40. private float _baseSprintSpeedVV
  41. {
  42. get => BaseSprintSpeed;
  43. set
  44. {
  45. BaseSprintSpeed = value;
  46. Dirty();
  47. }
  48. }
  49. /// <summary>
  50. /// Minimum speed a mob has to be moving before applying movement friction.
  51. /// </summary>
  52. [ViewVariables(VVAccess.ReadWrite), DataField]
  53. public float MinimumFrictionSpeed = DefaultMinimumFrictionSpeed;
  54. /// <summary>
  55. /// The negative velocity applied for friction when weightless and providing inputs.
  56. /// </summary>
  57. [ViewVariables(VVAccess.ReadWrite), DataField]
  58. public float WeightlessFriction = DefaultWeightlessFriction;
  59. /// <summary>
  60. /// The negative velocity applied for friction when weightless and not providing inputs.
  61. /// This is essentially how much their speed decreases per second.
  62. /// </summary>
  63. [ViewVariables(VVAccess.ReadWrite), DataField]
  64. public float WeightlessFrictionNoInput = DefaultWeightlessFrictionNoInput;
  65. /// <summary>
  66. /// The negative velocity applied for friction when weightless and not standing on a grid or mapgrid
  67. /// </summary>
  68. [ViewVariables(VVAccess.ReadWrite), DataField]
  69. public float OffGridFriction = DefaultOffGridFriction;
  70. /// <summary>
  71. /// The movement speed modifier applied to a mob's total input velocity when weightless.
  72. /// </summary>
  73. [ViewVariables(VVAccess.ReadWrite), DataField]
  74. public float WeightlessModifier = DefaultWeightlessModifier;
  75. /// <summary>
  76. /// The acceleration applied to mobs when moving and weightless.
  77. /// </summary>
  78. [ViewVariables(VVAccess.ReadWrite), DataField]
  79. public float WeightlessAcceleration = DefaultWeightlessAcceleration;
  80. /// <summary>
  81. /// The acceleration applied to mobs when moving.
  82. /// </summary>
  83. [AutoNetworkedField, ViewVariables(VVAccess.ReadWrite), DataField]
  84. public float Acceleration = DefaultAcceleration;
  85. /// <summary>
  86. /// The negative velocity applied for friction.
  87. /// </summary>
  88. [AutoNetworkedField, ViewVariables(VVAccess.ReadWrite), DataField]
  89. public float Friction = DefaultFriction;
  90. /// <summary>
  91. /// The negative velocity applied for friction.
  92. /// </summary>
  93. [AutoNetworkedField, ViewVariables(VVAccess.ReadWrite), DataField]
  94. public float? FrictionNoInput;
  95. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  96. public float BaseWalkSpeed { get; set; } = DefaultBaseWalkSpeed;
  97. [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField]
  98. public float BaseSprintSpeed { get; set; } = DefaultBaseSprintSpeed;
  99. [ViewVariables]
  100. public float CurrentWalkSpeed => WalkSpeedModifier * BaseWalkSpeed;
  101. [ViewVariables]
  102. public float CurrentSprintSpeed => SprintSpeedModifier * BaseSprintSpeed;
  103. }
  104. }