void RaycastGround(Ray r, bool hitUI) { RaycastHit[] hits = Physics.RaycastAll(r, 1000.0f, groundOrObstacleMask); HitTile = hits.Length > 0; if (hitUI) { HitTile = false; } System.Predicate <string> nameCheck = hitName => hitName.Contains(Strings.REAL_BLOCK); raycastHitTile = HitTile ? GetClosestHit(hits, nameCheck) : null; if (HitTile) { if (raycastHitTile == null) { raycastHitTile = hits[0]; } currentBlockUnit = raycastHitTile.Value.transform.GetComponent <PLEBlockUnit>(); if (currentBlockUnit == null) { HitTile = false; raycastHitTile = null; } } else { currentBlockUnit = null; } }
private void SyncWorkingTileData() { WorkingTileData.Clear(); for (int i = 0; i < tileParent.childCount; i++) { Transform tile = tileParent.GetChild(i); PLEBlockUnit blockUnit = tile.GetComponent <PLEBlockUnit>(); if (blockUnit) { List <LevelUnitStates> levelStates = blockUnit.GetLevelStates(); int tileType = blockUnit.TileType; TileData tileData = new TileData(tileType, tile.position, levelStates); WorkingTileData.Add(tileData); } } }
public void ColorAction(int tileType) { List <GridTile> tiles = levelEditor.gridController.GetSelectedGridTiles(); if (tiles.Count == 0) { return; } int currentWaveIndex = PLESpawnManager.Instance.CurrentWaveIndex; Color newColor = TileColors.GetColor(tileType); for (int i = 0; i < tiles.Count; i++) { GridTile tile = tiles[i]; PLEBlockUnit blockUnit = tile.blockUnit; blockUnit.riseColor = newColor; blockUnit.SyncTileStatesAndColors(); } }
private void LoadTiles() { PLEGrid gridController = levelEditor.gridController; gridController.ResetGrid(); for (int i = 0; i < WorkingTileData.Count; i++) { TileData tileData = WorkingTileData[i]; List <LevelUnitStates> levelStates = new List <LevelUnitStates>(); foreach (LevelUnitStates levelUnitState in tileData.levelStates) { levelStates.Add(levelUnitState); } GridTile tile = gridController.GetTileAtPoint(tileData.position.AsVector); tile.IsActive = true; LevelUnit levelUnit = tile.levelUnit; PLEBlockUnit blockUnit = tile.blockUnit; blockUnit.SetLevelStates(levelStates, tileData.RiseColor); List <GameObject> props = Physics.OverlapBox(tile.realTile.transform.position, new Vector3(1, 10, 1)).ToList().Where(prop => prop.GetComponent <PLEProp>()).Select(item => item.gameObject).ToList(); if (props.Count > 0) { blockUnit.SetProp(props[0]); } List <PLESpawn> spawns = Physics.OverlapBox(tile.realTile.transform.position, new Vector3(1, 10, 1), Quaternion.identity, spawnLayerMask).ToList().Select(prop => prop.GetComponent <PLESpawn>()).ToList(); spawns.ForEach(spawn => { blockUnit.AddSpawn(spawn.gameObject); }); tile.realTile.transform.SetParent(tileParent); } gridController.ShowWalls(); if (!SceneTracker.IsCurrentSceneEditor) { gridController.SetGridVisiblity(false); } }
private void UpdateTiles(List <GridTile> tiles, LevelUnitStates state, bool wasToldToChangeColor) { if (tiles.Count == 0) { return; } SFXManager.Instance.Play(SFXType.UI_Click); int currentWaveIndex = PLESpawnManager.Instance.CurrentWaveIndex; for (int i = 0; i < tiles.Count; i++) { GridTile tile = tiles[i]; PLEBlockUnit blockUnit = tile.blockUnit; LevelUnit levelUnit = tile.levelUnit; if (!blockUnit.HasActiveSpawn) { List <LevelUnitStates> levelUnitStates = blockUnit.GetLevelStates(); levelUnitStates[currentWaveIndex] = state; blockUnit.SyncTileStatesAndColors(); levelUnit.TryTransitionToState(state, wasToldToChangeColor); } } }