void Start()
    {
        if (mapgeneratoractive)
        {
            if (ItemSpawns.Sum(i => i.ItemSpawnCountPerSquareSize) > SquareSize)
            {
                throw new System.Exception("Die Globale ItemSpawnCountPerSquareSize variable darf nicht größer wie der SquareSize sein");
            }
            foreach (var tileType in TileTypes)
            {
                if (tileType.UniqueItemsForTileType.Sum(i => i.ItemSpawnCountPerSquareSize) > SquareSize)
                {
                    throw new System.Exception("Die ItemSpawnCountPerSquareSize variable für das Tile '" + tileType.TypeSprite.name + "' darf nicht größer wie der SquareSize sein");
                }
            }

            float totalitemSpawns = ItemSpawns.Sum(i => i.ItemSpawnCountPerSquareSize) + TileTypes.Sum(t => t.UniqueItemsForTileType.Sum(i => i.ItemSpawnCountPerSquareSize));
            if (totalitemSpawns > mapWidth * mapHeight)
            {
                throw new System.Exception("Die gesamte Item spawn Anzahl ist zu hoch");
            }

            cameraTransform = Camera.main.transform;

            Vector3 cameraP1 = Camera.main.ScreenToWorldPoint(Vector3.zero);
            Vector3 cameraP2 = Camera.main.ScreenToWorldPoint(new Vector3(Camera.main.pixelWidth, Camera.main.pixelHeight));
            screenWidth  = (int)(Mathf.Abs(cameraP2.x - cameraP1.x) / spriteGroesse) + 5;
            screenHeight = (int)(Mathf.Abs(cameraP2.y - cameraP1.y) / spriteGroesse) + 5;

            //Erstelle eine gerade anzahl an SpriteRenderer auf der map
            screenWidth  += screenWidth % 2 == 0 ? 0 : 1;
            screenHeight += screenHeight % 2 == 0 ? 0 : 1;

            if (ShowWholeMap)
            {
                screenWidth  = mapWidth + 20;
                screenHeight = mapHeight + 20;
            }

            spriteRenderer = new SpriteRenderer[screenWidth, screenHeight]; //Speicher für SpriteRenderer

            int halfScreenWidth  = screenWidth / 2;                         //erstellen der Sprites
            int halfScreenHeight = screenHeight / 2;
            for (int x = 0; x < screenWidth; x++)
            {
                for (int y = 0; y < screenHeight; y++)
                {
                    GameObject NewTile = GameObject.Instantiate(tile, new Vector3((spriteGroesse * x - halfScreenWidth * spriteGroesse), (spriteGroesse * y - halfScreenHeight * spriteGroesse), 0), Quaternion.identity, parent);
                    spriteRenderer[x, y] = NewTile
                                           .GetComponent <SpriteRenderer>(); //Instantiert ein neues Objekt mit SpriteRender, und speichert diesen im SpriteRendererArray
                }
            }

            sprites = new Sprite[TileTypes.Length + 1];
            for (int i = 1; i < TileTypes.Length + 1; i++)
            {
                sprites[i] = TileTypes[i - 1].TypeSprite;
            }
            sprites[0] = BorderSprite;

            availableSpawnPoints = new byte[mapWidth, mapHeight];

            VoronoiMap voronoiMap = new VoronoiMap(TileTypes);

            Dictionary <VoronoiPoint, List <Vector2> > regions;
            map = voronoiMap.GenerateMap(mapWidth, mapHeight, VoronoiPointCount, out regions);

            //GenerateBorder();

            SpawnItems(regions);
            refreshScreen(); //SpriteRenderer erneuern

            // Wassertile Colider hinzufügen, nicht passierbar machen und fischbar machen
            int childcounterM = Tilemap.transform.childCount;
            for (int i = 0; i < childcounterM; i++)
            {
                Transform      Tile     = Tilemap.transform.GetChild(i);
                SpriteRenderer Renderer = Tile.gameObject.GetComponent <SpriteRenderer>();
                if (Renderer.sprite.name == "water")
                {
                    Tile.GetComponent <BoxCollider2D>().enabled   = true;
                    Tile.GetComponent <BoxCollider2D>().isTrigger = false;
                    Tile.GetComponent <BoxCollider2D>().size      = new Vector2(0.2f, 0.2f);
                    Tile.gameObject.AddComponent <Fishable>();
                }
            }
        }
    }
示例#2
0
    void Start()
    {
        if (mapgeneratoractive)
        {
            cameraTransform = Camera.main.transform;

            Vector3 cameraP1 = Camera.main.ScreenToWorldPoint(Vector3.zero);
            Vector3 cameraP2 = Camera.main.ScreenToWorldPoint(new Vector3(Camera.main.pixelWidth, Camera.main.pixelHeight));
            screenWidth  = (int)(Mathf.Abs(cameraP2.x - cameraP1.x) / spriteGroesse) + 5;
            screenHeight = (int)(Mathf.Abs(cameraP2.y - cameraP1.y) / spriteGroesse) + 5;

            //Erstelle eine gerade anzahl an SpriteRenderer auf der map
            screenWidth  += screenWidth % 2 == 0 ? 0 : 1;
            screenHeight += screenHeight % 2 == 0 ? 0 : 1;

            if (ShowWholeMap)
            {
                screenWidth  = mapWidth + 20;
                screenHeight = mapHeight + 20;
            }

            spriteRenderer = new SpriteRenderer[screenWidth, screenHeight]; //Speicher für SpriteRenderer

            int halfScreenWidth  = screenWidth / 2;                         //erstellen der Sprites
            int halfScreenHeight = screenHeight / 2;
            for (int x = 0; x < screenWidth; x++)
            {
                for (int y = 0; y < screenHeight; y++)
                {
                    GameObject NewTile = GameObject.Instantiate(tile, new Vector3((spriteGroesse * x - halfScreenWidth * spriteGroesse), (spriteGroesse * y - halfScreenHeight * spriteGroesse), 0), Quaternion.identity, parent);
                    spriteRenderer[x, y] = NewTile
                                           .GetComponent <SpriteRenderer>(); //Instantiert ein neues Objekt mit SpriteRender, und speichert diesen im SpriteRendererArray
                }
            }

            sprites = new Sprite[TileTypes.Length + 1];
            for (int i = 1; i < TileTypes.Length + 1; i++)
            {
                sprites[i] = TileTypes[i - 1].TypeSprite;
            }
            sprites[0] = BorderSprite;

            VoronoiMap voronoiMap = new VoronoiMap(TileTypes);
            map = voronoiMap.GenerateMap(mapWidth, mapHeight, VoronoiPointCount);

            //GenerateBorder();

            GenerateItemSpawnLotteries();
            SpawnItems();
            refreshScreen(); //SpriteRenderer erneuern

            // Wassertile Colider hinzufügen, nicht passierbar machen und fischbar machen
            int childcounterM = Tilemap.transform.childCount;
            for (int i = 0; i < childcounterM; i++)
            {
                Transform      Tile     = Tilemap.transform.GetChild(i);
                SpriteRenderer Renderer = Tile.gameObject.GetComponent <SpriteRenderer>();
                if (Renderer.sprite.name == "water")
                {
                    Tile.GetComponent <BoxCollider2D>().enabled   = true;
                    Tile.GetComponent <BoxCollider2D>().isTrigger = false;
                    Tile.GetComponent <BoxCollider2D>().size      = new Vector2(0.2f, 0.2f);
                    Tile.gameObject.AddComponent <Fishable>();
                }
            }
        }
    }