* Conveyor optimisations - Optimise movement for moving stuff. Better flags + less resolves + slapped parallelrobustjob on it. - Sleeping for entities getting conveyed into walls. * Blocker version * Finish * Final * Fix conveyor power mispredict * Bagel save * Revert "Bagel save" This reverts commit 1b93fda81fb852d89b89b0beae0b80f8a61165f2. * Conveyor resave * Init Commit * windows yelling at me to update commit * working commit, need prediciton and more dehardcoding * Project 0 warnings * Working Commit (Near Final) * ryder got confused commit * I love Merge Conflicts :) * Working commit, no prediction * Forgot the yaml changes * Comments and typos * Apparently while the reduced launch mult of lube was initialized it was never used so I revered back to default * Fixed an incorrect divisor * bit of cleanup * Prediciton fixed, and puddles now affect all entities * FORGOT TO RENAME A VERY IMPORTANT VARIABLE OOPS * Really big I forgor moment * Even bigger I forgor moment * four more merge conflicts to fix four more oopsies * fixed actual divide by zero moment and also im very dumb * Even bigger I forgor moment * four more merge conflicts to fix four more oopsies * fixed actual divide by zero moment and also im very dumb * Fix all test fails * code cleanup * Webedit whitespace * Code cleaup * whitespace webedit * whitespace webedit * whitespace webedit * whitespace removal * Comments and cleanup * Re-Added 20 warnings as per Ork's request * Cleanups * Spacing fix * bugfixes and cleanup * Small bugfix * Fix prediction * Mob movement rewrite * Bandaid * Working version * Tentatively working * Friction to fix cornering * More fixes * Refactor mob movement Trying to cleanup relay ordering / tryupdaterelative being cooked, purge ToParent, and fix all the eye rotation shenanigans. * Building * Re-implement jetpacks * Reorganise weightless movement * More work * Fix camera * reh * Revert bagel * Revert this * Revert held move buttons * Puddles work but are unpredicted and unoptimized * Fixes * Puddle code... * Actually dirty the slipComp for real * Sliding component done plus an extra suggestion from ArtisticRoomba * Atomized Commit * Added Friction field to Reagent Prototype per design discussion * Cleaned up Working Commit * a * Delete stinkers * Fix this code smell * Reviewed * Funky re-save * Our conveyance * Better conveyor sleeping * Remove this * Revert "Better conveyor sleeping" This reverts commit f5281f64bbae95b7b9feb56295c5cf931f9fb2e1. * Revert that Way too janky * Also this * a * Working Commit - Still a lot to do * Acceleration refactor * Minor jetpack cleanup * frictionnomovement no longer nullable * Shared Mover Feels 99% done * OffGrid/Weightless/Throwing Friction saved * Fix merge conflicts * Fix a debug assert * Final Commit for today * Some fixes * Actually use those CCVars Properly * Need to fix throwing * Second to last Commit for real * Jetpack bug fixed * Jetpack bug fixed * Test fail patch * Small patch * Skates Component cleanup + Bring Accel back to 5 (oops) * Fix test fail oops * yaml cleanup make dragons not fat --------- Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
89 lines
3.6 KiB
C#
89 lines
3.6 KiB
C#
using System.Numerics;
|
|
using Content.Shared.Movement.Systems;
|
|
using Robust.Shared.GameStates;
|
|
using Robust.Shared.Serialization;
|
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
|
|
using Robust.Shared.Timing;
|
|
|
|
namespace Content.Shared.Movement.Components
|
|
{
|
|
[RegisterComponent, NetworkedComponent]
|
|
public sealed partial class InputMoverComponent : Component
|
|
{
|
|
// This class has to be able to handle server TPS being lower than client FPS.
|
|
// While still having perfectly responsive movement client side.
|
|
// We do this by keeping track of the exact sub-tick values that inputs are pressed on the client,
|
|
// and then building a total movement vector based on those sub-tick steps.
|
|
//
|
|
// We keep track of the last sub-tick a movement input came in,
|
|
// Then when a new input comes in, we calculate the fraction of the tick the LAST input was active for
|
|
// (new sub-tick - last sub-tick)
|
|
// and then add to the total-this-tick movement vector
|
|
// by multiplying that fraction by the movement direction for the last input.
|
|
// This allows us to incrementally build the movement vector for the current tick,
|
|
// without having to keep track of some kind of list of inputs and calculating it later.
|
|
//
|
|
// We have to keep track of a separate movement vector for walking and sprinting,
|
|
// since we don't actually know our current movement speed while processing inputs.
|
|
// We change which vector we write into based on whether we were sprinting after the previous input.
|
|
// (well maybe we do but the code is designed such that MoverSystem applies movement speed)
|
|
// (and I'm not changing that)
|
|
|
|
public GameTick LastInputTick;
|
|
public ushort LastInputSubTick;
|
|
|
|
public Vector2 CurTickWalkMovement;
|
|
public Vector2 CurTickSprintMovement;
|
|
|
|
public MoveButtons HeldMoveButtons = MoveButtons.None;
|
|
|
|
// I don't know if we even need this networked? It's mostly so conveyors can calculate properly.
|
|
/// <summary>
|
|
/// Direction to move this tick.
|
|
/// </summary>
|
|
public Vector2 WishDir;
|
|
|
|
/// <summary>
|
|
/// Entity our movement is relative to.
|
|
/// </summary>
|
|
public EntityUid? RelativeEntity;
|
|
|
|
/// <summary>
|
|
/// Although our movement might be relative to a particular entity we may have an additional relative rotation
|
|
/// e.g. if we've snapped to a different cardinal direction
|
|
/// </summary>
|
|
[ViewVariables]
|
|
public Angle TargetRelativeRotation = Angle.Zero;
|
|
|
|
/// <summary>
|
|
/// The current relative rotation. This will lerp towards the <see cref="TargetRelativeRotation"/>.
|
|
/// </summary>
|
|
[ViewVariables]
|
|
public Angle RelativeRotation;
|
|
|
|
/// <summary>
|
|
/// If we traverse on / off a grid then set a timer to update our relative inputs.
|
|
/// </summary>
|
|
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
|
public TimeSpan LerpTarget;
|
|
|
|
public const float LerpTime = 1.0f;
|
|
|
|
public bool Sprinting => (HeldMoveButtons & MoveButtons.Walk) == 0x0;
|
|
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
public bool CanMove = true;
|
|
}
|
|
|
|
[Serializable, NetSerializable]
|
|
public sealed class InputMoverComponentState : ComponentState
|
|
{
|
|
public MoveButtons HeldMoveButtons;
|
|
public NetEntity? RelativeEntity;
|
|
public Angle TargetRelativeRotation;
|
|
public Angle RelativeRotation;
|
|
public TimeSpan LerpTarget;
|
|
public bool CanMove;
|
|
}
|
|
}
|