예제 #1
0
        public Tile GetTile(TeleporterTileData t)
        {
            SetMinimapTile(Color.Blue);

            if (t.Teleport != null)
            {
                t.Teleport.Processed = true;

                var destinationPosition = t.Teleport.DestinationPosition.ToAbsolutePosition(builder.Data.Maps[t.Teleport.MapIndex]);

                if (t.Teleport.MapIndex == level)
                {
                    Successors = new[] { new TileInfo <TileData>
                                         {
                                             Position = destinationPosition,
                                             Tile     = builder.CurrentMap[destinationPosition.X, destinationPosition.Y]
                                         } };
                }
                return(new Teleport(tilePosition, t.Teleport.MapIndex, destinationPosition, t.Teleport.Rotation.ToMapDirection(), t.IsOpen, t.IsVisible, GetTeleportScopeType(t.Teleport.Scope)));
            }
            else
            {
                throw new InvalidOperationException("Invalid map format. Teleport tile has to have teleport");
            }
        }
예제 #2
0
        public Tile GetTile(TeleporterTileData t)
        {
            if (t.Teleport == null)
            {
                throw new InvalidOperationException("Invalid map format. Teleport tile has to have teleport");
            }

            SetMinimapTile(Color.Blue);

            var initializer = new TeleprotInitializer
            {
                Direction         = t.Teleport.Rotation.ToMapDirection(),
                AbsoluteDirection = t.Teleport.RotationType == RotationType.Absolute,
                Open               = t.IsOpen,
                ScopeConstrain     = GetTeleportScopeType(t.Teleport.Scope),
                TargetTilePosition = t.Teleport.DestinationPosition.ToAbsolutePosition(builder.Data.Maps[t.Teleport.MapIndex]),
                NextLevelIndex     = t.Teleport.MapIndex,
                Visible            = t.IsVisible,
            };


            var res = new TeleportTile(initializer);

            //setup target tile for in level teleports, cross lever teleportation doesn't work for creatures unless player is near by.
            GetTeleportTarget(initializer);
            SetupTeleportSides(initializer, currentGridPosition, true, res);
            res.Renderer     = builder.Factories.RenderersSource.GetTileRenderer(res);
            this.initializer = initializer;
            return(res);
        }