public void Invoke() { var iterationSet = m_sourceConfig.GetSet(m_iterateOnTileConfig); var filters = new TilesSetFilter[m_filter.Length]; for (var i = 0; i < m_filter.Length; i++) { var filterSet = m_sourceConfig.GetSet(m_filter[i].Config.Result); filters[i] = new TilesSetFilter() { Data = filterSet, FilterIdx = m_filter[i].TileIdx }; } var startNode = 0; ushort[] texTypesDone = { ushort.MaxValue, ushort.MaxValue, ushort.MaxValue }; var texTypesDoneIdx = 0; ushort next; while ((next = NextType(iterationSet, filters, ref startNode, ref texTypesDone, ref texTypesDoneIdx)) != ushort.MaxValue) { m_tilesSetFilter.SetValue(new TilesSetFilter() { Data = iterationSet, FilterIdx = next }); m_continueAction.Invoke(); } }
void CollectNodeInfo(Vector3 pos, ref int activeFloorNodes, ref bool forceHardEdge, ref int floorTexTypes, ref int wallTexTypes, ref int equalNodesGeoType) { var x = (int)pos.x; var y = (int)pos.y; var z = (int)pos.z; var sourceGrid = m_sourceGrid.Value; var geoDatSet = m_tilesSetListConfig.GetSet(m_floorNode.Config.Result); var texSet = m_tilesSetListConfig.GetSet(m_texTypeConfig); for (var nodeAOffIdx = 0; nodeAOffIdx < IterationOffset.Length; nodeAOffIdx++) { var offA = IterationOffset[nodeAOffIdx]; var nodeA = sourceGrid[x + offA.x, y + offA.y, z + offA.z]; var equalsInTexType = false; var nodeAGeoType = geoDatSet.GetTileIdx(nodeA); var nodeATexType = texSet.GetTileIdx(nodeA); for (var nodeBOffIdx = nodeAOffIdx + 1; nodeBOffIdx < IterationOffset.Length; nodeBOffIdx++) { var offB = IterationOffset[nodeBOffIdx]; var nodeB = sourceGrid[x + offB.x, y + offB.y, z + offB.z]; var nodeBGeoType = geoDatSet.GetTileIdx(nodeB); var nodeBTexType = texSet.GetTileIdx(nodeB); if (nodeAGeoType != nodeBGeoType) { continue; } ++equalNodesGeoType; equalsInTexType |= (nodeATexType == nodeBTexType); } var isFloor = nodeAGeoType == m_floorNode.TileIdx; var isWall = nodeAGeoType == m_wallNode.TileIdx; if (isFloor) { ++activeFloorNodes; if (m_texTypeConfig != null) { forceHardEdge |= m_texTypeConfig.IsForce(nodeATexType); } } if (!isFloor || equalsInTexType) { --floorTexTypes; } if (!isWall || equalsInTexType) { --wallTexTypes; } } }
public override IBaseAction CreateAction(IContext ctx) { var setData = m_setListConfig.GetSet(m_autoTile.Config.Result); return(new UpdateAutoTileAction(new GridReference(ctx, m_grid), new Vector3Reference(ctx, m_currentPosition), setData, m_autoTile, m_floorTile, m_wallTile, m_emptyTile)); }
public override IBaseAction CreateAction(IContext ctx) { var pos = new Vector3Reference(ctx, m_currentPosition); var grid = new GridReference(ctx, m_sourceGrid); var editGrid = new GridReference(ctx, m_targetGrid); var hardEdgeSet = m_tilesEditConfig.GetSet(m_hardEdgeConfig); var floorTexTypesSet = m_tilesEditConfig.GetSet(m_floorTexTypesConfig); var activeFloorNodesSet = m_tilesEditConfig.GetSet(m_activeFloorNodesConfig); return(new AddDefaultCustomFlagsAction(m_tilesSetListConfig, m_floorNode, m_wallNode, m_texTypeConfig, pos, grid, editGrid, hardEdgeSet, floorTexTypesSet, activeFloorNodesSet)); }
public void Invoke() { var resultData = m_resultGrid.Value; var pos = m_currentPosition.Value.Vector3Int(); var x = pos.x; var y = pos.y; var z = pos.z; var set = m_destinationConfig.GetSet(m_resultTag.Config.Result); resultData[x, y, z] = set.GetCombinedTile(resultData[x, y, z], m_resultTag.TileIdx); }
public override IBaseAction CreateAction(IContext ctx) { var grid = new GridReference(ctx, m_grid); var currentPos = new Vector3Reference(ctx, m_currentPosition); var tileSetFilter = new TilesSetFilterReference(ctx, m_tileSetFilter); var texConfigSetData = m_sourceConfig.GetSet(m_texConfig); return(new SelectTextureTypeFromTileAction(texConfigSetData, grid, currentPos, tileSetFilter)); }
public TileTypeSwitchAction(TilesSetListConfig sourceConfig, ITileConfig config, GridReference grid, Vector3Reference currentPos, IDefaultAction[] actions) { m_setData = sourceConfig.GetSet(config); m_grid = grid; m_currentPos = currentPos; m_actions = actions; }
public void Invoke() { m_result = false; var set = m_sourceConfig.GetSet(m_identifier.Config.Result); if (set.TileConfig == null) { Debug.LogError($"{nameof(ITileConfig)} {m_identifier.Config} not found in given {nameof(TilesSetListConfig)}"); return; } var tiles = m_grid.Value; var x = (int)m_pos.Value.x; var y = (int)m_pos.Value.y; var z = (int)m_pos.Value.z; //tileTypes: var config = GetConfiguration(new TilesSetFilter() { Data = set, FilterIdx = m_identifier.TileIdx }, m_tilesSetFilter, tiles, x, y, z).Configuration; if (m_invertSourceConfiguration) { config = ~config; } switch (m_binaryOperation) { case BinaryOperation.AND: config &= m_configuration; break; case BinaryOperation.OR: config |= m_configuration; break; case BinaryOperation.None: break; default: throw new ArgumentOutOfRangeException(); } m_result = m_configuration == config; }
bool GetFilter(out TilesSetFilter primaryFilter) { primaryFilter = default; var primaryFilterSetData = m_primaryFilterSetListConfig.GetSet(m_primaryFilterIdentifier.Config.Result); if (primaryFilterSetData.TileConfig == null) { Debug.LogError( $"{nameof(ITileConfig)} {m_primaryFilterIdentifier.Config} not found in given {nameof(TilesSetListConfig)}"); return(false); } primaryFilter = new TilesSetFilter() { Data = primaryFilterSetData, FilterIdx = m_primaryFilterIdentifier.TileIdx }; return(true); }
public TileTypeCheckAction(TilesSetListConfig sourceConfig, TileTypeIdentifier identifier, GridReference grid, Vector3Reference currentPos, IDefaultAction trueAction, IDefaultAction falseAction) { var iterationSet = sourceConfig.GetSet(identifier.Config.Result); m_filter = new TilesSetFilter() { Data = iterationSet, FilterIdx = identifier.TileIdx }; m_grid = grid; m_currentPos = currentPos; m_trueAction = trueAction; m_falseAction = falseAction; }