Ejemplo n.º 1
0
    public bool MoveTile(Vector2 Pos, ref TileInform OnTile)
    {
        RaycastHit2D ray = Physics2D.Raycast(Pos, Vector2.down, 1, 1 << LayerMask.NameToLayer("Tile"));

        if (ray)
        {
            // 처음생성 오류 방지
            if (OnTile == null)
            {
                OnTile = ray.collider.GetComponent <TileInform>();
                return(true);
            }
            // 타일이 같으면 취소
            if (ray.collider.gameObject == OnTile.gameObject)
            {
                return(false);
            }
            // 타일 이동시
            OnTile = ray.collider.GetComponent <TileInform>();
            return(true);
        }
        else
        {
            Debug.Log("타일이 존재하지 않음" + "좌표 : " + Pos);
            return(false);
        }
    }
Ejemplo n.º 2
0
    public Vector2 GetBuildingPos(BuildingBase ObjectData, Vector2 Pos)
    {
        float      HalfX       = ObjectData.Size.x / 2;
        float      HalfY       = ObjectData.Size.y / 2;
        TileInform ClickTile   = MapData.Instance.GetTileInform(Pos);
        Vector2    BuildingPos = new Vector2(ClickTile.transform.position.x + -(HalfX) + 0.5f, ClickTile.transform.position.y - (HalfY) + 0.5f);

        return(BuildingPos);
    }
Ejemplo n.º 3
0
    protected void MoveOtherTile()
    {
        TileInform nowTile = OnTile;

        MapData.Instance.MoveTile(transform.position, ref OnTile);
        if (OnTile != null)
        {
            if (OnTile != nowTile)
            {
                if (OnTile.SO_TileEvent != null)
                {
                    OnTile.SO_TileEvent.TileEvent(gameObject.GetComponent <ObjectBase>());
                }
            }
        }
    }
Ejemplo n.º 4
0
    /// <summary>얻고자하는 건물의 청사진을 그립니다. BuildingPos를 매개변수로 청사진 건물의 위치를 얻습니다.</summary>
    public bool DrawBluePrint(BuildingBase ObjectData, Vector2 Pos, BuildingBase.Direction Dirc, ref Vector2 BuildingPos)
    {
        ObjectData.BuildingDirection = Dirc;
        bool IsCounstruct;

        IsCounstruct = true;
        DeleteGrid();
        ActiveGrids = new List <GameObject>();

        // 오브젝트 풀링 안에 있는 오브젝트가 생성할 그리드보다 적을경우
        while (Q_GridPool.Count < ObjectData.Size.x * ObjectData.Size.y)
        {
            GameObject grid = Instantiate(GridImage);
            grid.transform.parent = GridPool.transform;
            Q_GridPool.Enqueue(grid);
            grid.SetActive(false);
        }
        // 건물 청사진 생성
        TileInform ClickTile    = MapData.Instance.GetTileInform(Pos);
        Vector2    BluePrintPos = GetBuildingPos(ObjectData, ClickTile.transform.position);

        BuildingBluePrint.transform.position = BluePrintPos;
        BluePrintRender.sprite = ObjectData.GetComponent <SpriteRenderer>().sprite;
        BuildingBluePrint.transform.rotation = Quaternion.Euler(0, 0, (float)Dirc);
        BuildingBluePrint.SetActive(true);

        BuildingPos = BluePrintPos;
        // 그리드 생성
        TileInform[] UnderTiles = ObjectData.SearchUnderTile(BluePrintPos);
        foreach (TileInform Tile in UnderTiles)
        {
            GameObject grid = Q_GridPool.Dequeue();
            grid.SetActive(true);
            grid.transform.position = Tile.transform.position;
            ActiveGrids.Add(grid);
            if (Tile.Construted == false && Tile.isBuilding == true)
            {
                grid.gameObject.GetComponent <SpriteRenderer>().color = AllowGirdColor;
            }
            else
            {
                grid.gameObject.GetComponent <SpriteRenderer>().color = UnAllowGirdColor;
                IsCounstruct = false;
            }
        }
        return(IsCounstruct);
    }