Esempio n. 1
0
    public void CreateMapObject(int tileX, int tileY, eMapObjectType type, string name)
    {
        TileSystem tileSystem = TileSystem.Instance;
        GameObject prefab     = GetPrefabByType(type);
        GameObject go         = Instantiate(prefab);

        go.InitTransformAsChild(tileSystem.GetTilemap(eTilemapType.GROUND).transform);
        eTileLayer layer     = eTileLayer.NONE;
        MapObject  mapObject = null;

        switch (type)
        {
        case eMapObjectType.ITEM:
            ItemObject itemObject = go.AddComponent <ItemObject>();
            Item       item       = Resources.Load <Item>("Items/" + name);
            itemObject.Init(item);

            mapObject = itemObject;
            layer     = eTileLayer.ITEM;
            break;
        }

        TileCell tileCell = tileSystem.GetTileCell(tileX, tileY);

        if (null != tileCell)
        {
            tileCell.SetObject(mapObject, layer);
        }
    }
Esempio n. 2
0
    public void SetCanvasLayer(eTileLayer layer)
    {
        GameObject canvasObject = transform.Find("Canvas").gameObject;
        int        sortingID    = SortingLayer.NameToID(layer.ToString());

        canvasObject.GetComponent <Canvas>().sortingLayerID = sortingID;
    }
Esempio n. 3
0
    override public void SetSortingOrder(eTileLayer layer, int sortingOrder)
    {
        _tileLayer = layer;
        int sortingID = SortingLayer.NameToID(layer.ToString());

        _characterView.GetComponent <SpriteRenderer>().sortingLayerID = sortingID;
        _characterView.GetComponent <SpriteRenderer>().sortingOrder   = sortingOrder;
    }
Esempio n. 4
0
    //Sort
    virtual public void SetSortingOrder(eTileLayer layer, int sortingOrder)
    {
        _tileLayer = layer;
        int sortingID = SortingLayer.NameToID(layer.ToString());

        gameObject.GetComponent <SpriteRenderer>().sortingLayerID = sortingID;
        gameObject.GetComponent <SpriteRenderer>().sortingOrder   = sortingOrder;
    }
Esempio n. 5
0
 public List <MapObject> GetMapObjectList(eTileLayer layer)
 {
     if (0 == _mapObjectMap[(int)layer].Count)
     {
         return(null);
     }
     return(_mapObjectMap[(int)layer]);
 }
Esempio n. 6
0
    public void AddObject(eTileLayer layer, MapObject mapObject)
    {
        List <MapObject> mapObjectList = _mapObjectMap[(int)layer];

        int sortingOder = mapObjectList.Count;

        mapObject.SetSortingOrder(layer, sortingOder);
        mapObject.SetPosition(_position);
        mapObjectList.Add(mapObject);
    }
Esempio n. 7
0
    public void AddObject(eTileLayer layer, MapObject mapObject)
    {
        List <MapObject> mapObjectList = _mapObjectMap[(int)layer];

        int sortingID    = SortingLayer.NameToID(layer.ToString());
        int sortingOrder = mapObjectList.Count;

        mapObject.SetSortingOrder(sortingID, sortingOrder);
        mapObject.SetPosition(_position);
        mapObjectList.Add(mapObject);
    }
Esempio n. 8
0
    //GROUND 타일맵에 깔린 타일 오브젝트들 정보
    //타일 정렬되어 있어야함!!
    void InitTileCell()
    {
        eTileLayer layer = eTileLayer.GROUND;

        for (int y = 0; y < _height; y++)
        {
            for (int x = 0; x < _width; x++)
            {
                int        index      = y * _width + x;
                GameObject tile       = _tilemaps[eTilemapType.GROUND].transform.GetChild(index).gameObject;
                TileObject tileObject = tile.GetComponent <TileObject>();

                GetTileCell(x, y).Init(tile.GetComponent <SpriteRenderer>().sortingOrder);

                Vector3 pos         = _grid.CellToWorld(new Vector3Int(x, y, 0));
                float   gridCenterY = (pos.y + _grid.cellSize.y / 2);
                float   offset      = 0.0f;
                if (tile.transform.position.y.EqualApproximately(gridCenterY, 0.01f))
                {
                    offset = 0.0f;
                }
                else
                {
                    if (tile.transform.position.y < gridCenterY)
                    {
                        offset = gridCenterY - tile.transform.position.y;
                    }
                    else
                    {
                        offset = tile.transform.position.y - gridCenterY;
                    }
                }
                //test pathfinding
                SpriteRenderer spriteRenderer = tile.GetComponent <SpriteRenderer>();
                GetTileCell(x, y).SetSpriteRenderer(spriteRenderer);

                GetTileCell(x, y).SetTileObject(tileObject);
                GetTileCell(x, y).SetOffset(offset);
                GetTileCell(x, y).SetPosition(tile.transform.position);                 //객체 월드 포지션
                GetTileCell(x, y).SetTilePosition(x, y);                                //타일 좌표
                GetTileCell(x, y).AddObject(tileObject, layer);
                Tile baseTile = _tilemaps[eTilemapType.BLOCK].GetTile(new Vector3Int(x, y, 0)) as Tile;
                if (baseTile != null && baseTile.sprite != null)
                {
                    GetTileCell(x, y).SetCanMove(false);
                }
                else
                {
                    GetTileCell(x, y).SetCanMove(true);
                }
            }
        }
    }
Esempio n. 9
0
    //타일셀 정보에서 제거
    public void RemoveObject(MapObject mapObject, eTileLayer layer)
    {
        if (eTileLayer.NONE != layer)
        {
            if (eTileLayer.ITEM == layer)
            {
                _itemLayerOrder--;
            }

            List <MapObject> mapObjectList = _mapObjectListByLayer[(int)layer];
            mapObjectList.Remove(mapObject);
        }
    }
Esempio n. 10
0
    public MapObject FindObjectByType(eMapObjectType mapObjectType, eTileLayer layer)
    {
        List <MapObject> mapObjects = _mapObjectListByLayer[(int)layer];

        for (int i = 0; i < mapObjects.Count; i++)
        {
            if (mapObjectType == mapObjects[i].GetMapObjectType())
            {
                return(mapObjects[i]);
            }
        }
        return(null);
    }
Esempio n. 11
0
    public HashSet <MapObject> FindObjectsByRange(eMapObjectType type, eTileLayer layer, TileCell center, int range = 1)
    {
        int minX = center.GetTileX() - range;
        int minY = center.GetTileY() - range;
        int maxX = center.GetTileX() + range;
        int maxY = center.GetTileY() + range;

        if (minX < 0)
        {
            minX = 0;
        }
        if (minY < 0)
        {
            minY = 0;
        }
        if (_width <= maxX)
        {
            maxX = _width;
        }
        if (_height <= maxY)
        {
            maxY = _height;
        }

        HashSet <MapObject> mapObjects = new HashSet <MapObject>();

        for (int y = minY; y <= maxY; y++)
        {
            for (int x = minX; x <= maxX; x++)
            {
                var mapObject = GetTileCell(x, y)?.FindObjectByType(type, layer);
                if (null != mapObject)
                {
                    mapObjects.Add(mapObject);
                }
            }
        }

        if (0 == mapObjects.Count)
        {
            return(null);
        }
        return(mapObjects);
    }
Esempio n. 12
0
    public sTileProperties GetProperties(eTileLayer layer)
    {
        sTileProperties tileProperties = new sTileProperties();

        tileProperties.speed = 0.0f;

        List <MapObject> mapObjectList = _mapObjectListByLayer[(int)layer];

        for (int i = 0; i < mapObjectList.Count; i++)
        {
            if (eMapObjectType.TILEOBJECT == mapObjectList[i].GetMapObjectType())
            {
                TileObject tileObject = mapObjectList[i].GetComponent <TileObject>();
                tileProperties = tileObject.GetProperties();
                return(tileProperties);
            }
        }
        return(tileProperties);
    }
Esempio n. 13
0
    //타일셀 정보에 추가
    public void AddObject(MapObject mapObject, eTileLayer layer, bool setTilePos = true)
    {
        List <MapObject> mapObjectList = _mapObjectListByLayer[(int)layer];

        if (!mapObjectList.Contains(mapObject))         //중복삽입 방지
        {
            mapObjectList.Add(mapObject);
        }

        if (eTileLayer.RANGE == layer)
        {
            return;
        }

        if (eTileLayer.ITEM == layer)
        {
            //아이템: 최신이 제일 앞에 오게
            mapObject.GetComponent <SpriteRenderer>().sortingOrder = _itemLayerOrder;
            _itemLayerOrder++;
        }
        else
        {
            if (eMapObjectType.CHARACTER != mapObject.GetMapObjectType() &&
                eMapObjectType.PLAYER != mapObject.GetMapObjectType() &&
                eMapObjectType.ENEMY != mapObject.GetMapObjectType())
            {
                mapObject.GetComponent <SpriteRenderer>().sortingOrder = _groundLayerOrder;
            }
        }

        mapObject.SetCurrentLayer(layer);

        int sortingLayerID = SortingLayer.NameToID(layer.ToString());

        mapObject.GetComponentInChildren <SpriteRenderer>().sortingLayerID = sortingLayerID;

        if (setTilePos)
        {
            mapObject.SetTilePosition(_tileX, _tileY);
        }
    }
Esempio n. 14
0
    public void SetObject(int tileX, int tileY, MapObject mapObject, eTileLayer layer)
    {
        TileCell tileCell = GetTileCell(tileX, tileY);

        tileCell.AddObject(layer, mapObject);
    }
Esempio n. 15
0
 public void SetCurrentLayer(eTileLayer layer)
 {
     _currentLayer = layer;
 }
Esempio n. 16
0
    //타일셀 정보 추가 및 포지션까지 세팅
    public void SetObject(MapObject mapObject, eTileLayer layer)
    {
        AddObject(mapObject, layer);

        mapObject.SetPosition(_position);
    }