void Start() { // get references _tileDB = TileDatabase.instance; _camera = Camera.main; // freeze camera _camera.GetComponent <SimpleCameraController>().Freeze(); // generate standard 10x10 grid GenerateGrid(_gridDefaultSize.x, _gridDefaultSize.y); // add all existing tiletypes to dropdown menu _dropDownTiles.options.Clear(); for (int i = 0; i < _tileDB.tileCount; i++) { _dropDownTiles.options.Add(new Dropdown.OptionData(_tileDB.GetTile(i).typeName)); } // create tile of first type in typearray _selectedTile = Instantiate(_tileDB.GetTile(0).data.prefab, _tileFolder); _selectedTileType = _tileDB.GetTile(0).typeName.ToLower(); _currentEditMode = EDIT_MODE.PLACE_SINGLE; // add collider and set layer of tile (need this to be able to select alredy placed tiles) AddcolliderToSelectedTile(); _currentMinTintText.text = _tintMin.value.ToString("0.00"); _currentMaxTintText.text = _tintMax.value.ToString("0.00"); }
public Tile(Vector2DInt position, string tileName, float yRotation, float tintStrength, Transform tilesFolder) { _tileDB = TileDatabase.instance; model = _tileDB.GetTile(tileName); this.position = position; currentHealth = model.data.health; CreateView(position, yRotation, tintStrength, tilesFolder); CreateSounds(); }
void Update() { // change editmode if (Input.GetMouseButtonDown(1)) { if ((int)_currentEditMode < (int)EDIT_MODE.NUM_MODES - 1) { _currentEditMode++; } else { _currentEditMode = 0; } _editModeText.text = string.Format("EDIT MODE: {0}", _currentEditMode); // if in place tile mode, delete tile to go into select mode if (_currentEditMode == EDIT_MODE.DELETE) { if (_selectedTile) { Destroy(_selectedTile); _selectedTile = null; } } } // in placetile mode if (_currentEditMode == EDIT_MODE.PLACE_SINGLE || _currentEditMode == EDIT_MODE.PAINT) { // create plane at zero to raycast at from camera Plane targetPlane = new Plane(Vector3.up, Vector3.zero); Ray hitRay = _camera.ScreenPointToRay(Input.mousePosition); float dst = 0; targetPlane.Raycast(hitRay, out dst); // get hitpoint from ray and convert to 2d coordinates Vector3 hitPoint = hitRay.GetPoint(dst); int CoordY = Mathf.CeilToInt(hitPoint.z); int CoordX = Mathf.CeilToInt(hitPoint.x); // check so coordinates is inside grid if (CoordX >= 0 && CoordX < _gridSize.x && CoordY >= 0 && CoordY < _gridSize.y) { // check if tile is already placed on coords (all tiles is set to "Death" by defualt meaning they are empty) bool occupied = _tileProperties[CoordY, CoordX].name.ToLower() != "empty"; float yPos = 0.0f; if (occupied) { yPos = 1.0f; } if (!_selectedTile) { _selectedTile = Instantiate(_tileDB.GetTile(_selectedTileType).data.prefab, Vector3.zero, _tileDB.GetTile(_selectedTileType).data.prefab.transform.rotation *Quaternion.Euler(0, _rotationY, 0), _tileFolder); AddcolliderToSelectedTile(); } TintCurrentTile(); if (Input.GetMouseButtonDown(3) || Input.GetKeyDown(KeyCode.R)) { _rotationY += 90.0f; if (_rotationY > 360.0f) { _rotationY = 90.0f; } Vector3 oldRotation = _selectedTile.transform.rotation.eulerAngles; oldRotation.y = _rotationY; _selectedTile.transform.rotation = Quaternion.Euler(oldRotation); } _selectedTile.transform.position = new Vector3(Mathf.CeilToInt(hitPoint.x), yPos, Mathf.CeilToInt(hitPoint.z)); // set the tiletype and position of this coord in the grid if (!occupied) { if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) { return; } if (_currentEditMode == EDIT_MODE.PLACE_SINGLE && Input.GetMouseButtonDown(0)) { PlaceTile(CoordX, CoordY, _rotationY); } else if (_currentEditMode == EDIT_MODE.PAINT && Input.GetMouseButton(0)) { PlaceTile(CoordX, CoordY, _rotationY); } } } } else // in delete mode { if (Input.GetMouseButtonDown(0)) { if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) { return; } // raycast and se if we hit a already placed tile and then we can move it Ray ray = _camera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.layer == 9) { _tileProperties[(int)hit.transform.position.z, (int)hit.transform.position.x].name = "empty"; Destroy(hit.collider.gameObject); } } } } }