Beispiel #1
0
    private void mapHeightsInitialize()
    {
        mapHeights1D = new float[maxX * maxY];

        mapHeights = new float[maxX, maxY];

        for (int i = 0; i < maxX; i++)
        {
            for (int k = 0; k < maxY; k++)
            {
                mapHeights[i, k] = UnityEngine.Random.Range(0, 5);
                if (mapHeights[i, k] < 1f)
                {
                    mapHeights[i, k] = 0f;
                }

                if (mapHeights[i, k] > 0)
                {
                    GameObject.Instantiate(originalTile, new Vector3((float)i, 0, (float)k), new Quaternion());
                }
                mapHeights1D[maxX * i + k] = mapHeights[i, k];
            }
        }

        tiles           = GameObject.FindGameObjectsWithTag("Tile");
        tileInitializer = new TileInitializer[tiles.Length];
        tilePathFinder  = new TilePathFinder[tiles.Length];

        mapHeights1DCleaned = mapHeights1D.Where(val => val != 0).ToArray();
    }
Beispiel #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);
        }
Beispiel #3
0
        public Tile GetTile(DoorTileData t)
        {
            if (t.Door == null)
            {
                throw new ArgumentNullException("Invalid map format. Door item should be at door tile.");
            }

            SetMinimapTile(Color.Purple);

            var initializer = new DoorInitializer {
                Door = CreateDoor(t)
            };

            initializer.HasButton = t.Door.HasButton;


            initializer.Direction = t.Orientation == Orientation.NorthSouth ? MapDirection.North : MapDirection.East;

            var res = new DoorTile(initializer);

            sidesCreator.SetupSidesAsync(initializer, currentGridPosition, res);
            res.Renderer     = builder.Factories.RenderersSource.GetDoorTileRenderer(res, builder.WallTexture, builder.DoorButtonTexture);
            this.initializer = initializer;
            return(res);
        }
Beispiel #4
0
        public void Reset()
        {
            tilePosition        = default(Vector3);
            currentGridPosition = default(Point);
            initializer         = null;

            texture     = new Texture2D(ResourceProvider.Instance.Device, this.builder.CurrentMap.OffsetX + this.builder.CurrentMap.Width, this.builder.CurrentMap.OffsetY + this.builder.CurrentMap.Height);
            miniMapData = new Color[texture.Width * texture.Height];
        }
Beispiel #5
0
        public Tile GetTile(FloorTileData t)
        {
            SetMinimapTile(Color.White);

            var initalizer = new FloorInitializer();
            var res        = new FloorTile(initalizer);

            sidesCreator.SetupSidesAsync(initalizer, currentGridPosition, res);
            res.Renderer     = builder.Factories.RenderersSource.GetTileRenderer(res);
            this.initializer = initalizer;
            return(res);
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        public Tile GetTile(PitTileData t)
        {
            SetMinimapTile(Color.Orange);

            var pitInitializer = new PitInitializer
            {
                Imaginary = t.Imaginary,
                Invisible = t.Invisible,
                IsOpen    = t.IsOpen
            };

            var res = new Pit(pitInitializer);

            sidesCreator.SetupSidesAsync(pitInitializer, currentGridPosition, res);
            res.Renderer = builder.Factories.RenderersSource.GetPitTileRenderer(res);
            initializer  = pitInitializer;
            return(res);
        }
Beispiel #8
0
        public virtual Tile GetTile(TileInfo <TileData> tileInfo)
        {
            tilePosition        = new Vector3(tileInfo.Position.X, -builder.CurrentLevelIndex, tileInfo.Position.Y);
            currentGridPosition = tileInfo.Position;
            var tile = tileInfo.Tile.GetTile(this);

            if (initializer != null)
            {
                foreach (var creatureData in tileInfo.Tile.Creatures)
                {
                    creatureCreator.AddCreatureToTile(creatureData, tile, tileInfo.Position);
                }

                initializer.GridPosition = currentGridPosition;
                builder.TileInitializers.Add(initializer);
                initializer = null;
            }
            return(tile);
        }
Beispiel #9
0
        public Tile GetTile(TrickTileData t)
        {
            SetMinimapTile(Color.Green);

            var trickTileInitializer = new WallIlusionInitializer
            {
                Imaginary        = t.IsImaginary,
                Open             = t.IsOpen,
                RandomDecoration = t.RandomDecoration,
            };

            var res = new WallIlusion(trickTileInitializer);

            SetupWallIllusionSidesAsync(trickTileInitializer, t.RandomDecoration, res);
            res.Renderer = builder.Factories.RenderersSource.GetWallIllusionTileRenderer(res, builder.WallTexture);

            initializer = trickTileInitializer;
            return(res);
        }
Beispiel #10
0
        public Tile GetTile(StairsTileData t)
        {
            SetMinimapTile(Color.Yellow);
            StairsInitializer stairsInitializer = new StairsInitializer {
                Down = t.Direction == VerticalDirection.Down
            };

            var res = new Stairs(stairsInitializer);

            SetupStairsSides(stairsInitializer, res);
            if (t.Direction == VerticalDirection.Down)
            {
                var upperStairsEntry = FindStairsEntryDirection(tilePosition.ToGrid(), -(int)tilePosition.Y);
                var lowerStairsEntry = FindStairsEntryDirection(tilePosition.ToGrid(), -(int)tilePosition.Y + 1);
                res.Renderer = builder.Factories.RenderersSource.GetUpperStairsTileRenderer(upperStairsEntry, lowerStairsEntry, res, builder.WallTexture);
            }
            else
            {
                res.Renderer = builder.Factories.RenderersSource.GetLowerStairsTileRenderer(res, builder.WallTexture);
            }

            this.initializer = stairsInitializer;
            return(res);
        }
Beispiel #11
0
 protected Tile(TileInitializer initializer) : base(initializer)
 {
 }