コード例 #1
0
        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);
        }
コード例 #2
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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public IGrabableItem CreateTextData(TextDataItem textTag)
 {
     throw new InvalidOperationException("Not supported.");
 }
コード例 #6
0
 public ItemData CreateTextData(TextDataItem textTag)
 {
     currentTile.TextTags.Add(textTag);
     return(textTag);
 }
コード例 #7
0
ファイル: DungeonParser.cs プロジェクト: ggrrin/DungeonMaster
        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;
        }
コード例 #8
0
ファイル: DungeonParser.cs プロジェクト: ggrrin/DungeonMaster
 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;
 }