public IGrabableItem CreateItem(ItemData itemData, Tile parentTile)
 {
     CurrentTile        = parentTile;
     itemData.Processed = true;
     descriptor         = builder.Data.GetItemDescriptor(itemData.ObjectID.Category, ((GrabableItemData)itemData).ItemTypeIndex);
     return(itemData.CreateItem(this));
 }
Esempio n. 2
0
        public override Actuator CreateItem(LegacyMapBuilder context, Tile currentTile, IReadOnlyList<ActuatorItemData> matchedSequence)
        {
            descriptor = FindChampionDescriptor(context).Split('|');

            var champion = new Champion(context.ChampionToken, context.CreatureToken.ToEnumerable(), this)
            {
                Name = descriptor[0],
                Title = descriptor[1] + descriptor[2],
                IsMale = descriptor[3] == "M",
            };

            var items = context.WallActuatorCreator.CurrentGrabableItems.Select(k => context.ItemCreator.CreateItem(k, currentTile));

            var res = new ChampoinActuator(context.GetWallPosition(matchedSequence[0].TilePosition, context.WallActuatorCreator.CurrentTile), champion);
            ((CubeGraphic)res.Graphics).Texture = context.WallTextures[matchedSequence[0].Decoration - 1];

            return res;
        }
Esempio n. 3
0
        public override Actuator CreateItem(LegacyMapBuilder context, Tile currentTile, IReadOnlyList <ActuatorItemData> matchedSequence)
        {
            descriptor = FindChampionDescriptor(context).Split('|');

            var champion = new Champion(context.ChampionToken, context.CreatureToken.ToEnumerable(), this)
            {
                Name   = descriptor[0],
                Title  = descriptor[1] + descriptor[2],
                IsMale = descriptor[3] == "M",
            };

            var items = context.WallActuatorCreator.CurrentGrabableItems.Select(k => context.ItemCreator.CreateItem(k, currentTile));

            var res = new ChampoinActuator(context.GetWallPosition(matchedSequence[0].TilePosition, context.WallActuatorCreator.CurrentTile), champion);

            ((CubeGraphic)res.Graphics).Texture = context.WallTextures[matchedSequence[0].Decoration - 1];

            return(res);
        }
        public virtual async Task <Tuple <Tile, MapDirection> > GetTargetTile(Point?target, MapDirection requesteDirection)
        {
            MapDirection invertMessageDirection = requesteDirection;

            if (target == null)
            {
                return(null);
            }

            await tileInitialized.Task;

            Tile tile = null;

            TilePositions.TryGetValue(target.Value, out tile);

            if (tile == null)
            {
                var targetTileData = CurrentMap.GetTileData(target.Value);
                if (targetTileData.Actuators.Any() && targetTileData.Actuators.All(x => x.ActuatorType == 5 || x.ActuatorType == 6))
                {
                    throw new InvalidOperationException("this should not be possible");
                }
                else if (targetTileData.Actuators.Any() && !targetTileData.Actuators.All(x => x.ActuatorType != 5 && x.ActuatorType != 6))
                {
                    throw new InvalidOperationException("mixture of wall and virtual actuators");
                }
                else
                {//find floor tile where is wall actuator put & thus invert message direction
                    invertMessageDirection = requesteDirection.Opposite;
                    TilePositions.TryGetValue(target.Value + requesteDirection.RelativeShift, out tile);
                    if (tile == null)
                    {
                        throw new InvalidOperationException();
                    }
                }
            }

            return(Tuple.Create(tile, invertMessageDirection));
        }