예제 #1
0
    public void CreateTiles(int width, int height)
    {
        InitializeTiles();

        spawnedTiles = new TilePrefab[height][];

        // Resize the ScrollView
        tileScrollViewContent.transform.localScale = new Vector3(1f, 1f, 1f);
        tileScrollViewContent.GetComponent <RectTransform>().SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0f, width * 100f);
        tileScrollViewContent.GetComponent <RectTransform>().SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0f, height * 100f);

        // Dispose tiles
        float xOffset = 55.5f;
        float yOffset = 60f;

        for (int heightIndex = height - 1; heightIndex >= 0; heightIndex--)             // 위쪽부터 생성해야 가장 아래쪽 타일이 위로 오므로 이미지가 커도 보임.
        {
            spawnedTiles[heightIndex] = new TilePrefab[width];
            for (int widthIndex = 0; widthIndex < width; widthIndex++)
            {
                spawnedTiles[heightIndex][widthIndex] = Instantiate(tile, tileScrollViewContent.transform);
                spawnedTiles[heightIndex][widthIndex].transform.SetPositionAndRotation(new Vector3(xOffset + widthIndex * 100f, yOffset + heightIndex * 100f), Quaternion.identity);
            }
        }
    }
예제 #2
0
    private void instantiateTile(int x, int y)
    {
        GameObject container = getContainer(new Vector2(x, y));

        MapLayer[] layers = (MapLayer[])Enum.GetValues(typeof(MapLayer));
        foreach (MapLayer layer in layers)
        {
            GameObject layerContainer = container.transform.Find(layer.ToString()).gameObject;

            foreach (Transform child in layerContainer.transform)
            {
                GameObject.Destroy(child.gameObject);
            }

            Tile t = this.map.getTile(layer, x, y);
            if (t != null)
            {
                TilePrefab tilePrefab = Resources.Load <Transform>(t.PrefabPath).GetComponent <TilePrefab>();

                GameObject newTile = new GameObject();
                newTile.transform.SetParent(layerContainer.transform, false);
                newTile.transform.localScale = t.Scale;
                SpriteRenderer spriteComp = newTile.AddComponent <SpriteRenderer>();
                spriteComp.sprite = tilePrefab.Icon;

                Material mat = layer == MapLayer.GROUND ? groundLayerMat : backgroundLayerMat;
                spriteComp.material = mat;
            }
        }
        updateLines();
    }
예제 #3
0
    public override void perform(Vector2 startPos, Vector2 endPos)
    {
        slectedTiles.Clear();

        int xStart = (int)Mathf.Min(startPos.x, endPos.x);
        int yStart = (int)Mathf.Min(startPos.y, endPos.y);
        int xEnd   = (int)Mathf.Max(startPos.x, endPos.x);
        int yEnd   = (int)Mathf.Max(startPos.y, endPos.y);

        for (int x = xStart; x <= xEnd; x++)
        {
            for (int y = yStart; y <= yEnd; y++)
            {
                Tile t = map.getTile(MapLayer.GROUND, x, y);
                if (t != null)
                {
                    TilePrefab prefab = Resources.Load <TilePrefab>(t.PrefabPath);

                    if (prefab.GetComponent <T>() != null)
                    {
                        slectedTiles.Add(t);
                    }
                }
            }
        }

        if (onSelected != null && slectedTiles.Count > 0)
        {
            onSelected();
        }
    }
예제 #4
0
 private void ApplyTilePrefab(TilePrefab tilePrefab, Vector3Int pos, Tilemap tilemap, int zPos)
 {
     foreach (var preset in tilePrefab.Presets)
     {
         var adjPos = pos;
         adjPos.z += zPos;
         tilemap.SetTile(adjPos, preset.Tile);
     }
 }
예제 #5
0
    private void configureTile(int x, int y)
    {
        Tile t = this.map.getTile(MapLayer.GROUND, x, y);

        if (t != null)
        {
            TilePrefab tileComp = getTileInstance(t.ID);
            tileComp.configure(t.Settings, this);
        }
    }
예제 #6
0
    // Use this for initialization
    void Awake()
    {
        Input.backButtonLeavesApp = true;
        self        = this;
        colorMap[0] = Color.green;
        colorMap[1] = Color.blue;
        colorMap[2] = new Color(0f, 1f, 1f);
        colorMap[3] = Color.black;
        colorMap[4] = Color.red;
        colorMap[5] = new Color(1f, 0f, 1f);
        colorMap[6] = new Color(1f, 1f, 0f);
        Mesh tileMesh = TilePrefab.GetComponent <MeshFilter>().sharedMesh;

        baseMainVerts = tileMesh.vertices;
        convertToSides(tileMesh, baseMainVerts, ref sideVerts);
        tileMesh.vertices = baseMainVerts;
        sideView          = false;
        inventory         = new Inventory(GameObject.FindGameObjectWithTag("inventory"), false);
        equipment         = new Inventory(GameObject.FindGameObjectWithTag("equipS"), true);

        myCam   = GameObject.FindGameObjectWithTag("Cam2").GetComponent <Camera> ();
        mainCam = GameObject.FindGameObjectWithTag("MainCamera").GetComponent <Camera> ();

        soundUI    = myCam.transform.GetChild(1).GetComponent <AudioSource> ();
        soundEquip = myCam.transform.GetChild(2).GetComponent <AudioSource> ();

        playerLocation = GameObject.FindGameObjectWithTag("Player").GetComponent <Transform> ();
        //playerAnim = playerLocation.GetComponent<Animator> ();
        //playerFollowL = GameObject.FindGameObjectWithTag ("PlayerFollow").GetComponent<Transform> ();
        UIInventory.SetActive(false);
        UINormal.SetActive(false);
        UIEdit.SetActive(false);
        UIMove.SetActive(false);
        UIChat.SetActive(false);
        UIStats.SetActive(false);
        UIHaS.SetActive(false);
        UICompass.SetActive(false);
        UIOptions.SetActive(false);
        chCam         = chatCam.GetComponent <Camera> ();
        chCam.enabled = false;
        //chatCam.SetActive (false);
        selBox  = GameObject.FindGameObjectWithTag("selectBox");
        selCirc = GameObject.FindGameObjectWithTag("selectCircle");
        selBox.SetActive(false);
        selCirc.SetActive(false);
        selectBox = selBox;
        foreach (EnemyType type in Enum.GetValues(EnemyType.archer.GetType()))
        {
            GameObject prefab = Resources.Load <GameObject>("Prefabs/enemy/" + type.ToString());
            enemyPrefabs.Add(type, prefab);
        }
    }
예제 #7
0
 public override void configure(TileSettings settings, LevelLoader loader)
 {
     foreach (int targetID in settings.triggerTargets)
     {
         Debug.Log(targetID);
         TilePrefab target = loader.getTileInstance(targetID);
         Debug.Log(target);
         Debug.Log(target.GetType());
         if (typeof(Triggerable).IsAssignableFrom(target.GetType()))
         {
             targets.Add((Triggerable)target);
         }
     }
 }
예제 #8
0
        public static void AddDetail(TilePrefab Prefab, int Tileset, int X, int Y, int TileType)
        {
            int DetailCount = 0;

            DetailCount = (Detail.Length - 1) + 1;

            Array.Resize(ref Detail, DetailCount + 1);
            Array.Resize(ref Detail[DetailCount].Tile.Layer, (int)Enums.LayerType.Count);

            Detail[DetailCount].DetailBase            = (byte)Prefab;
            Detail[DetailCount].Tile.Type             = (byte)TileType;
            Detail[DetailCount].Tile.Layer[3].Tileset = (byte)Tileset;
            Detail[DetailCount].Tile.Layer[3].X       = (byte)X;
            Detail[DetailCount].Tile.Layer[3].Y       = (byte)Y;
        }
예제 #9
0
 private void instantiateTile(int x, int y)
 {
     MapLayer[] layers = (MapLayer[])Enum.GetValues(typeof(MapLayer));
     foreach (MapLayer layer in layers)
     {
         Tile t = this.map.getTile(layer, x, y);
         if (t != null)
         {
             GameObject newTile = Instantiate <Transform>(Resources.Load <Transform>(t.PrefabPath)).gameObject;
             newTile.name = String.Format("({0}|{1}) {2}", x, y, newTile.name);
             newTile.transform.position   = new Vector3(x, y, newTile.transform.position.z);
             newTile.transform.localScale = t.Scale;
             TilePrefab tileComp = newTile.GetComponent <TilePrefab>();
             tileInstances.Add(t.ID, tileComp);
         }
     }
 }
예제 #10
0
    public void CreatePreviewTiles(int width, int height)
    {
        if (previewTiles != null)
        {
            DestroyPreviewTiles();
        }

        previewTiles = new TilePrefab[height][];

        for (int heightIndex = height - 1; heightIndex >= 0; heightIndex--)         // 위쪽부터 생성해야 가장 아래쪽 타일이 위로 오므로 이미지가 커도 보임.
        {
            previewTiles[heightIndex] = new TilePrefab[width];
            for (int widthIndex = 0; widthIndex < width; widthIndex++)
            {
                previewTiles[heightIndex][widthIndex] = Instantiate(tile, previewContent.transform);
            }
        }
    }
예제 #11
0
        private void AddTile(TilePrefab prefab)
        {
            var item = new MenuItem
            {
                Header = prefab.Name,
                Icon   = new Border {
                    Background = new SolidColorBrush(prefab.EditColor)
                }
            };

            item.Click += delegate
            {
                var prefabTile = PlacementTarget as PrefabTile;
                if (prefabTile == null)
                {
                    return;
                }

                ((PrefabTileData)prefabTile.DataContext).Reassign((PrefabTileData)prefab);
            };
            AddChild(item);
        }
예제 #12
0
        public static void LoadDetail(TilePrefab Prefab, int Tileset, int X, int Y, int TileType = 0, int EndX = 0, int EndY = 0)
        {
            if (EndX == 0)
            {
                EndX = X;
            }
            if (EndY == 0)
            {
                EndY = Y;
            }

            int pX = 0;
            int pY = 0;

            for (pX = X; pX <= EndX; pX++)
            {
                for (pY = Y; pY <= EndY; pY++)
                {
                    AddDetail(Prefab, Tileset, pX, pY, TileType);
                }
            }
        }
예제 #13
0
    private void replaceMapTile(Tilemap map, List <TilePrefab> tilePrefabMap, Vector3Int tilePos)
    {
        TileBase tile = map.GetTile(tilePos);

        if (tile == null)
        {
            return;
        }

        TilePrefab tileObj = tilePrefabMap.Where(t => t.tile.name == tile.name).FirstOrDefault();

        if (tileObj == null)
        {
            //Debug.Log("Tile with the name " + tile.name + " is not defined in TilePrefabConfig.");
            return;
        }

        Item item = tileObj.prefab.GetComponent <Item>();

        if (item != null)
        {
            PlayerInventory invConf = Configs.main.PlayerInventory;
            if (invConf.PlayerItems.Any(x => x.Type == item.GetItemType()))
            {
                map.SetTile(tilePos, null);
                return;
            }
        }

        GameObject prefab   = tileObj.prefab;
        GameObject instance = Instantiate(prefab);

        instance.transform.position =
            map.CellToWorld(tilePos) + new Vector3(map.tileAnchor.x, map.tileAnchor.y, map.tileAnchor.z);

        map.SetTile(tilePos, null);
    }
예제 #14
0
    private void switchTab(Tab selectedTab)
    {
        MapLayer layer = MapLayer.GROUND;

        decorationTabBtn.interactable = true;
        specialTabBtn.interactable    = true;
        blockTabBtn.interactable      = true;
        TilePrefab[] prefabs = new TilePrefab[0]; //TODO Bad Code...
        switch (selectedTab)
        {
        case Tab.DECORATION:
            layer = MapLayer.BACKGROUND;
            decorationTabBtn.interactable = false;
            prefabs = decorationTiles;
            break;

        case Tab.BLOCK:
            layer = MapLayer.GROUND;
            blockTabBtn.interactable = false;
            prefabs = groundTiles;
            break;

        case Tab.SPECIAL:
            layer = MapLayer.GROUND;
            specialTabBtn.interactable = false;
            prefabs = specialTiles;
            break;
        }

        //Clear Content
        foreach (GameObject g in availibleBlocks)
        {
            Destroy(g);
        }


        //Update content
        foreach (TilePrefab prefab in prefabs)
        {
            Sprite sprite = prefab.Icon;

            int[] xScales = prefab.AllowFlipHorizontal ? new int[] { 1, -1 } : new int[] { 1 };
            int[] yScales = prefab.AllowFlipVertical ? new int[] { 1, -1 } : new int[] { 1 };

            foreach (int xScale in xScales)
            {
                foreach (int yScale in yScales)
                {
                    GameObject newTileBtn = new GameObject();
                    newTileBtn.transform.SetParent(content, false);
                    newTileBtn.transform.localScale = new Vector3(xScale, yScale, 1);
                    Image imageComponent = newTileBtn.AddComponent <Image>();
                    imageComponent.sprite = sprite;
                    Button btnComponent = newTileBtn.AddComponent <Button>();
                    btnComponent.transition = Selectable.Transition.None;
                    btnComponent.onClick.AddListener(delegate {
                        this.SelectedTilePrefabPath = "Tiles/" + selectedTab.ToString() + "/" + prefab.gameObject.name; //TODO echt kacke so
                        this.SelectedTileSprite     = sprite;
                        this.SelectedTileLayer      = layer;
                        this.SelectedTileScale      = new Vector3(xScale, yScale, 1);

                        if (onTileSelected != null)
                        {
                            onTileSelected();
                        }
                    });

                    availibleBlocks.Add(newTileBtn);
                }
            }
        }
    }