Esempio n. 1
0
    private void OnEnable()
    {
        controls.Gameplay.Enable();
        controls.Gameplay.Move.performed += OnMovePerformed;
        controls.Gameplay.Move.canceled  += OnMovePerformed;
        controls.Gameplay.Jump.started   += OnJumpPerformed;

        _jumpInputEvent = new JumpInputEvent();
        _moveInputEvent = new MoveInputEvent();

        SpawnManager.PlayerSpawnedEvent += SetupPlayerControls;
    }
        private void HandleDirChange(EntityUid entity, Direction dir, ushort subTick, bool state)
        {
            // Relayed movement just uses the same keybinds given we're moving the relayed entity
            // the same as us.
            TryComp <InputMoverComponent>(entity, out var moverComp);

            // Can't relay inputs if you're dead.
            if (TryComp <RelayInputMoverComponent>(entity, out var relayMover) && !_mobState.IsIncapacitated(entity))
            {
                // if we swap to relay then stop our existing input if we ever change back.
                if (moverComp != null)
                {
                    SetMoveInput(moverComp, MoveButtons.None);
                }

                if (relayMover.RelayEntity == null)
                {
                    return;
                }

                HandleDirChange(relayMover.RelayEntity.Value, dir, subTick, state);
                return;
            }

            if (moverComp == null)
            {
                return;
            }

            // Relay the fact we had any movement event.
            // TODO: Ideally we'd do these in a tick instead of out of sim.
            var owner     = moverComp.Owner;
            var moveEvent = new MoveInputEvent(entity);

            RaiseLocalEvent(owner, ref moveEvent);

            // For stuff like "Moving out of locker" or the likes
            // We'll relay a movement input to the parent.
            if (_container.IsEntityInContainer(owner) &&
                TryComp <TransformComponent>(owner, out var xform) &&
                xform.ParentUid.IsValid() &&
                _mobState.IsAlive(owner))
            {
                var relayMoveEvent = new ContainerRelayMovementEntityEvent(owner);
                RaiseLocalEvent(xform.ParentUid, ref relayMoveEvent);
            }

            SetVelocityDirection(moverComp, dir, subTick, state);
        }
        private void OnRelayMoveInput(EntityUid uid, BodyComponent component, ref MoveInputEvent args)
        {
            if (EntityManager.TryGetComponent <MobStateComponent>(uid, out var mobState) &&
                mobState.IsDead() &&
                EntityManager.TryGetComponent <MindComponent>(uid, out var mind) &&
                mind.HasMind)
            {
                if (!mind.Mind !.TimeOfDeath.HasValue)
                {
                    mind.Mind.TimeOfDeath = _gameTiming.RealTime;
                }

                _ticker.OnGhostAttempt(mind.Mind !, true);
            }
        }
Esempio n. 4
0
        private void OnRelayMoveInput(EntityUid uid, GhostOnMoveComponent component, ref MoveInputEvent args)
        {
            // Let's not ghost if our mind is visiting...
            if (EntityManager.HasComponent <VisitingMindComponent>(uid))
            {
                return;
            }
            if (!EntityManager.TryGetComponent <MindComponent>(uid, out var mind) || !mind.HasMind || mind.Mind !.IsVisitingEntity)
            {
                return;
            }
            if (component.MustBeDead && TryComp <MobStateComponent>(uid, out var state) && !state.IsDead())
            {
                return;
            }

            _ticker.OnGhostAttempt(mind.Mind !, component.CanReturn);
        }
Esempio n. 5
0
 void MoveInput(MoveInputEvent e)
 {
     StartCoroutine(ButtonSet(e.direction));
 }
Esempio n. 6
0
        private void OnRelayMoveInput(EntityUid uid, SharedPullableComponent component, ref MoveInputEvent args)
        {
            var entity = args.Entity;

            if (_mobState.IsIncapacitated(entity) || !_blocker.CanMove(entity))
            {
                return;
            }

            _pullSystem.TryStopPull(component);
        }
Esempio n. 7
0
 private void OnFollowerMove(EntityUid uid, FollowerComponent component, ref MoveInputEvent args)
 {
     StopFollowingEntity(uid, component.Following);
 }
Esempio n. 8
0
    private void OnRelayMovement(EntityUid uid, CanEscapeInventoryComponent component, ref MoveInputEvent args)
    {
        //Prevents the user from creating multiple DoAfters if they're already resisting.
        if (component.IsResisting == true)
        {
            return;
        }

        if (_containerSystem.TryGetContainingContainer(uid, out var container) &&
            (HasComp <SharedStorageComponent>(container.Owner) || HasComp <InventoryComponent>(container.Owner) || HasComp <SharedHandsComponent>(container.Owner)))
        {
            if (_actionBlockerSystem.CanInteract(uid, container.Owner))
            {
                AttemptEscape(uid, container.Owner, component);
            }
        }
    }