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); } }
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); }
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>()); } } } }
/// <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); }