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));
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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;
        }