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); }
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; } }
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); } }
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); } }
public Tile GetTile(WallTileData t) { throw new InvalidOperationException(); }