private void InteractionActivate(IEntity user, IEntity used) { var activateMsg = new ActivateInWorldMessage(user, used); RaiseLocalEvent(activateMsg); if (activateMsg.Handled) { return; } if (!used.TryGetComponent(out IActivate activateComp)) { return; } // all activates should only fire when in range / unbostructed var activateEventArgs = new ActivateEventArgs { User = user, Target = used }; if (InteractionChecks.InRangeUnobstructed(activateEventArgs)) { activateComp.Activate(activateEventArgs); } }
private void InteractionActivate(IEntity user, IEntity used) { var activateMsg = new ActivateInWorldMessage(user, used); RaiseEvent(activateMsg); if (activateMsg.Handled) { return; } if (!used.TryGetComponent(out IActivate activateComp)) { return; } activateComp.Activate(new ActivateEventArgs { User = user }); }
private void HandleUseItemInWorld(ICommonSession session, GridCoordinates coords, EntityUid uid) { if (!EntityManager.TryGetEntity(uid, out var used)) { return; } var playerEnt = ((IPlayerSession)session).AttachedEntity; if (playerEnt == null || !playerEnt.IsValid()) { return; } if (!playerEnt.Transform.GridPosition.InRange(_mapManager, used.Transform.GridPosition, INTERACTION_RANGE)) { return; } var activateMsg = new ActivateInWorldMessage(playerEnt, used); RaiseEvent(activateMsg); if (activateMsg.Handled) { return; } if (!used.TryGetComponent(out IActivate activateComp)) { return; } activateComp.Activate(new ActivateEventArgs { User = playerEnt }); }
private async void HandleActivateInWorld(EntityUid uid, DisassembleOnActivateComponent component, ActivateInWorldMessage args) { if (string.IsNullOrEmpty(component.Prototype)) { return; } if (!args.User.InRangeUnobstructed(args.Activated)) { return; } if (component.DoAfterTime > 0 && TryGet <DoAfterSystem>(out var doAfterSystem)) { var doAfterArgs = new DoAfterEventArgs(args.User, component.DoAfterTime, component.TokenSource.Token) { BreakOnUserMove = true, BreakOnStun = true, }; var result = await doAfterSystem.DoAfter(doAfterArgs); if (result != DoAfterStatus.Finished) { return; } component.TokenSource.Cancel(); } if (component.Deleted || component.Owner.Deleted) { return; } var entity = EntityManager.SpawnEntity(component.Prototype, component.Owner.Transform.Coordinates); if (args.User.TryGetComponent <HandsComponent>(out var hands) && entity.TryGetComponent <ItemComponent>(out var item)) { hands.PutInHandOrDrop(item); } component.Owner.Delete(); return; }