Exemplo n.º 1
0
        protected bool AllowedRandomDecoration(MapDirection direction, WallTileData data, out int?decorationNumber)
        {
            decorationNumber = null;
            if (data != null)
            {
                if (direction == MapDirection.North)
                {
                    decorationNumber = data.NorthRandomDecoration;
                }
                if (direction == MapDirection.South)
                {
                    decorationNumber = data.SouthRandomDecoration;
                }
                if (direction == MapDirection.East)
                {
                    decorationNumber = data.EastRandomDecoration;
                }
                if (direction == MapDirection.West)
                {
                    decorationNumber = data.WestRandomDecoration;
                }
            }

            return(decorationNumber != null);
        }
Exemplo n.º 2
0
        public void RenderWall(WallTileData wallTileData)
        {
            RewardPool.Flush();

            LayerBedrock.ClearAllTiles();
            LayerRock.ClearAllTiles();
            LayerGravel.ClearAllTiles();
            LayerSurface.ClearAllTiles();

            var bedrockPositions = new List <Vector3Int>();
            var rockPositions    = new List <Vector3Int>();
            var gravelPositions  = new List <Vector3Int>();
            var surfacePositions = new List <Vector3Int>();

            for (int x = 0; x < 22; x++)
            {
                for (int y = 0; y < 16; y++)
                {
                    var pos = new Vector3Int(x, y, 0);

                    bedrockPositions.Add(pos);

                    var node = wallTileData.Nodes[x, y];
                    if (node.Layers.Rock)
                    {
                        rockPositions.Add(pos);
                    }
                    if (node.Layers.Gravel)
                    {
                        gravelPositions.Add(pos);
                    }
                    if (node.Layers.Surface)
                    {
                        surfacePositions.Add(pos);
                    }
                }
            }

            LayerBedrock.SetTiles(bedrockPositions.ToArray(), AsTileMap(TileBedrock, bedrockPositions));
            LayerRock.SetTiles(rockPositions.ToArray(), AsTileMap(TileRock, rockPositions));
            LayerGravel.SetTiles(gravelPositions.ToArray(), AsTileMap(TileGravel, gravelPositions));
            LayerSurface.SetTiles(surfacePositions.ToArray(), AsTileMap(TileSurface, surfacePositions));

            foreach (var reward in wallTileData.Rewards)
            {
                if (reward.Claimed)
                {
                    continue;
                }

                var clone = RewardPool.Grab(RewardHolder);

                clone.transform.localPosition = new Vector3(reward.Offset.x * 0.5f, reward.Offset.y * 0.5f, 0.0f);

                clone.sprite = reward.Type.MiningGraphic;
            }
        }
Exemplo n.º 3
0
        public Tile GetTile(WallTileData t)
        {
            var logicSensors = t.Actuators
                               .Where(x => x.ActuatorType == 5 || x.ActuatorType == 6)
                               .ToArray();

            if (logicSensors.Any())
            {
                var logicTileInitializer = new LogicTileInitializer();
                initializer = logicTileInitializer;
                logicActuatorCreator.SetLogicActuator(logicTileInitializer, logicSensors);
                return(new LogicTile(logicTileInitializer));
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 4
0
        protected virtual async Task <TileSide> CreateWallSide(MapDirection wallDirection, WallTileData wall, Point pos)
        {
            ActuatorItemData[] sensorsData;
            if (wall != null)
            {
                sensorsData = wall.Actuators.Where(a => a.TilePosition == wallDirection.Opposite.ToTilePosition()).ToArray();
            }
            else
            {
                sensorsData = new ActuatorItemData[0];
            }

            TextDataItem textData = wall?.TextTags.FirstOrDefault(x => x.TilePosition == wallDirection.Opposite.ToTilePosition());

            int?randomTexture;

            if (!sensorsData.Any() && AllowedRandomDecoration(wallDirection, wall, out randomTexture))
            {
                sensorsData = new[]
                {
                    new ActuatorItemData
                    {
                        ActuatorType = 0,
                        IsLocal      = true,
                        Decoration   = randomTexture.Value + 1
                    }
                }
            }
            ;

            if (textData != null)
            {
                var res = new TextTileSide(wallDirection, textData.IsVisible, textData.Text);
                res.Renderer = builder.Factories.RenderersSource.GetTextSideRenderer(res, builder.WallTexture);
                return(res);
            }
            else if (!sensorsData.Any())
            {
                var res = new TileSide(wallDirection);
                res.Renderer = builder.Factories.RenderersSource.GetWallSideRenderer(res, builder.WallTexture);
                return(res);
            }
            else
            {
                var items = wall.GrabableItems
                            .Select(builder.ItemCreator.CreateItem)
                            .ToList();

                var res = new ActuatorWallTileSide(await wallCreator.ParseActuatorX(sensorsData, items, pos), wallDirection);
                res.Renderer = builder.Factories.RenderersSource.GetActuatorWallSideRenderer(res, builder.WallTexture);
                return(res);
            }
        }
Exemplo n.º 5
0
 public Tile GetTile(WallTileData t)
 {
     throw new InvalidOperationException();
 }