public PlantPiece getPlantByPosition(int posX_, int posY_) { PlantPiece plant_ = null; foreach (PlantPiece p_ in plants) { if (p_.posX == posX_ && p_.posY == posY_) { plant_ = p_; break; } } return(plant_); }
public void instantiatePlant(int plantId_, int posX_, int posY_) { if (posX_ < boardWidth && posY_ < boardHeight) { float halfHeight_ = ((float)boardHeight / 2) - 0.5f; float halfWidth_ = ((float)boardWidth / 2) - 0.5f; GameObject inst_ = Instantiate(getPlantById(plantId_).prefab, new Vector3(posX_ - halfWidth_, 0, posY_ - halfHeight_), Quaternion.Euler(0, 0, 0), gameboardPivot.transform.parent); PlantPiece plantPiece_ = inst_.GetComponent <PlantPiece>(); plantPiece_.posX = posX_; plantPiece_.posY = posY_; plants.Add(inst_.GetComponent <PlantPiece>()); } else { Debug.Log("- plant position is out of board range!"); } }
// Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Space)) { InstantiateGameBoard(); } Ray ray_ = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit_; if (Physics.Raycast(ray_, out hit_, Mathf.Infinity)) { if (lastSelectedPiece != hit_.transform.gameObject) { hit_.transform.gameObject.GetComponent <GameBoardPiece>().setActive(true); if (lastSelectedPiece != null) { lastSelectedPiece.GetComponent <GameBoardPiece>().setActive(false); } lastSelectedPiece = hit_.transform.gameObject; } if (isPlantingPlant) { if (getPlantByPosition(lastSelectedPiece.GetComponent <GameBoardPiece>().posX, lastSelectedPiece.GetComponent <GameBoardPiece>().posY) == null) { lastSelectedPiece.GetComponent <GameBoardPiece>().setColor(Color.green); if (Input.GetKeyDown(KeyCode.Mouse0)) { instantiatePlant(plantToPlantId, lastSelectedPiece.GetComponent <GameBoardPiece>().posX, lastSelectedPiece.GetComponent <GameBoardPiece>().posY); isPlantingPlant = false; plantToPlantId = 0; } } else { lastSelectedPiece.GetComponent <GameBoardPiece>().setColor(Color.red); } } else if (isMovingPlant) { if (getPlantByPosition(lastSelectedPiece.GetComponent <GameBoardPiece>().posX, lastSelectedPiece.GetComponent <GameBoardPiece>().posY) == null) { lastSelectedPiece.GetComponent <GameBoardPiece>().setColor(Color.green); if (Input.GetKeyDown(KeyCode.Mouse0)) { selectedPlant.posX = lastSelectedPiece.GetComponent <GameBoardPiece>().posX; selectedPlant.posY = lastSelectedPiece.GetComponent <GameBoardPiece>().posY; float halfHeight_ = ((float)boardHeight / 2) - 0.5f; float halfWidth_ = ((float)boardWidth / 2) - 0.5f; selectedPlant.transform.position = new Vector3(selectedPlant.posX - halfWidth_, 0, selectedPlant.posY - halfHeight_); isMovingPlant = false; selectedPlant = null; } } else { if (getPlantByPosition(lastSelectedPiece.GetComponent <GameBoardPiece>().posX, lastSelectedPiece.GetComponent <GameBoardPiece>().posY) == selectedPlant) { lastSelectedPiece.GetComponent <GameBoardPiece>().setColor(Color.yellow); if (Input.GetKeyDown(KeyCode.Mouse0)) { isMovingPlant = false; selectedPlant = null; } } lastSelectedPiece.GetComponent <GameBoardPiece>().setColor(Color.yellow); } } else { if (getPlantByPosition(lastSelectedPiece.GetComponent <GameBoardPiece>().posX, lastSelectedPiece.GetComponent <GameBoardPiece>().posY) != null) { lastSelectedPiece.GetComponent <GameBoardPiece>().setColor(Color.green); if (Input.GetKeyDown(KeyCode.Mouse0)) { isMovingPlant = true; selectedPlant = getPlantByPosition(lastSelectedPiece.GetComponent <GameBoardPiece>().posX, lastSelectedPiece.GetComponent <GameBoardPiece>().posY); } } else { lastSelectedPiece.GetComponent <GameBoardPiece>().alpha = 0; } } } else { if (lastSelectedPiece != null) { lastSelectedPiece.GetComponent <GameBoardPiece>().setActive(false); lastSelectedPiece = null; } } }