async Task <bool> IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) { if (_wirePrototypeID == null) { return(true); } if (!eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) { return(true); } if (!_mapManager.TryGetGrid(eventArgs.ClickLocation.GetGridId(Owner.EntityManager), out var grid)) { return(true); } var snapPos = grid.TileIndicesFor(eventArgs.ClickLocation); if (grid.GetTileRef(snapPos).Tile.IsEmpty) { return(true); } foreach (var anchored in grid.GetAnchoredEntities(snapPos)) { if (Owner.EntityManager.ComponentManager.TryGetComponent <WireComponent>(anchored, out var wire) && wire.WireType == _blockingWireType) { return(true); } } if (Owner.HasComponent <StackComponent>()) { var stackUse = new StackUseEvent() { Amount = 1 }; Owner.EntityManager.EventBus.RaiseLocalEvent(Owner.Uid, stackUse); if (!stackUse.Result) { return(true); } } Owner.EntityManager.SpawnEntity(_wirePrototypeID, grid.GridTileToLocal(snapPos)); return(true); }
async Task <bool> IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) { if (!eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) { return(true); } if (!Owner.TryGetComponent(out StackComponent? stack)) { return(true); } var mapManager = IoCManager.Resolve <IMapManager>(); var location = eventArgs.ClickLocation.AlignWithClosestGridTile(); var locationMap = location.ToMap(Owner.EntityManager); if (locationMap.MapId == MapId.Nullspace) { return(true); } mapManager.TryGetGrid(location.GetGridId(Owner.EntityManager), out var mapGrid); if (_outputTiles == null) { return(true); } foreach (var currentTile in _outputTiles) { var currentTileDefinition = (ContentTileDefinition)_tileDefinitionManager[currentTile]; if (mapGrid != null) { var tile = mapGrid.GetTileRef(location); var baseTurf = (ContentTileDefinition)_tileDefinitionManager[tile.Tile.TypeId]; if (HasBaseTurf(currentTileDefinition, baseTurf.Name)) { var stackUse = new StackUseEvent() { Amount = 1 }; Owner.EntityManager.EventBus.RaiseLocalEvent(Owner.Uid, stackUse); if (!stackUse.Result) { continue; } PlaceAt(mapGrid, location, currentTileDefinition.TileId); break; } } else if (HasBaseTurf(currentTileDefinition, "space")) { mapGrid = mapManager.CreateGrid(locationMap.MapId); mapGrid.WorldPosition = locationMap.Position; location = new EntityCoordinates(mapGrid.GridEntityId, Vector2.Zero); PlaceAt(mapGrid, location, _tileDefinitionManager[_outputTiles[0]].TileId, mapGrid.TileSize / 2f); break; } } return(true); }