private IList <TextDataItem> ReadTextsData(BinaryReader r) { var texts = new TextDataItem[Data.TextsCount]; for (int i = 0; i < Data.TextsCount; i++) { texts[i] = ParseTextData(r); } return(texts); }
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); } }
private TextDataItem ParseTextData(BinaryReader r) { var t = new TextDataItem(); t.NextObjectID = r.ReadUInt16(); ushort data = r.ReadUInt16(); if (((data >> 1) & twoBitsMask) == 0) { t.ReferredTextOffset = (data >> 3) * 2; //it is in words } t.IsVisible = (data & oneBitMask) == 1; t.Text = SetTextData(t.ReferredTextOffset); return(t); }
public static Point GetParentPosition(this TextDataItem tag, Point parentDataPosition) { Point relativePos; switch (tag.TilePosition) { case TilePosition.North_TopLeft: relativePos = new Point { Y = -1 }; break; case TilePosition.East_TopRight: relativePos = new Point { X = 1 }; break; case TilePosition.South_BottomLeft: relativePos = new Point { Y = 1 }; break; case TilePosition.West_BottomRight: relativePos = new Point { X = -1 }; break; default: throw new ArgumentOutOfRangeException(); } return(parentDataPosition + relativePos); }
public IGrabableItem CreateTextData(TextDataItem textTag) { throw new InvalidOperationException("Not supported."); }
public ItemData CreateTextData(TextDataItem textTag) { currentTile.TextTags.Add(textTag); return(textTag); }
private TextDataItem ParseTextData(BinaryReader r) { var t = new TextDataItem(); t.NextObjectID = r.ReadUInt16(); ushort data = r.ReadUInt16(); if (((data >> 1) & twoBitsMask) == 0) t.ReferredTextOffset = (data >> 3) * 2; //it is in words t.IsVisible = (data & oneBitMask) == 1; t.Text = SetTextData(t.ReferredTextOffset); return t; }
private IList<TextDataItem> ReadTextsData(BinaryReader r) { var texts = new TextDataItem[Data.TextsCount]; for (int i = 0; i < Data.TextsCount; i++) texts[i] = ParseTextData(r); return texts; }