public void ChangeState(HexStates state) { if (state == this.state) { Debug.LogError("This is already my state!"); return; } this.state = state; switch (state) { case HexStates.PotentiallyFull: MarkAsPotentiallyFull(); break; case HexStates.AwaitingFill: MarkAsAwiatingFill(); break; case HexStates.Full: Fill(); break; case HexStates.Hard: Harden(); break; case HexStates.Empty: MarkAsEmpty(); break; } }
public HexTile(HexTile tile, GameObject worldObject, TileData data) { tileType = TileType.Default; _currentState = HexStates.Idle; _worldtransform = worldObject.transform; _defaultPosition = _worldtransform.position; _renderer = worldObject.GetComponentInChildren <MeshRenderer>(); _material = _renderer.material; _highlightedPosition = _defaultPosition + Vector3.up * 0.1f; _colorCoding = tile._colorCoding; highestPoint = _defaultPosition + Vector3.up * (data.meshSizeY - MapGenerator.DefaultTile.meshSizeY / 2); }
public void ChangeState(HexStates state) { if (state == this.state) { Debug.LogError("This is already my state!"); return; } this.state = state; switch (state) { case HexStates.Path: MarkAsPotentiallyFull(); break; case HexStates.AwaitingFill: StartCoroutine(MarkAsAwiatingFill()); break; case HexStates.Full: Fill(); break; /* case HexStates.Hard: * Harden(); * break;*/ case HexStates.Empty: MarkAsEmpty(); break; case HexStates.MarkedForFailure: MarkForFailure(); break; case HexStates.FullOfFailure: FillWithFailure(); break; case HexStates.Bombed: MarkForBombing(); break; } }
public void FloorCheck() { isOnAPotentialWall = false; Vector3 overlapSpherePosition = myTransform.position; overlapSpherePosition.y = Hex.HEX_LOW_Y; Collider[] overlappingColliders = Physics.OverlapSphere(overlapSpherePosition, overlapSphereCollider.radius); for (int i = 0; i < overlappingColliders.Length; i++) { Transform t = overlappingColliders[i].transform; // if (t.parent != null) { Hex hex = t /*.parent*/.GetComponent <Hex>(); if (hex != null) { HexStates hexState = hex.State; switch (hexState) { case HexStates.AwaitingFill: isOnAPotentialWall = true; break; /*case HexStates.Full: * Collide(); break;*/ case HexStates.Empty: if (hex.Specialty != HexSpecialties.Enemy) { hex.ChangeState(HexStates.Path); } break; /*case HexStates.Hard: * hex.ChangeState(HexStates.Empty); break;*/ } } } } }
private void OnCollisionEnter(Collision collision) { //return; if (collision.collider != null && collision.collider.transform.parent != null) { Hex hex = collision.collider.transform.parent.GetComponent <Hex>(); if (hex != null) { HexStates hexState = hex.State; if (hexState == HexStates.Full) { Collide(); } else if (hexState == HexStates.Empty) { hex.ChangeState(HexStates.PotentiallyFull); } else if (hexState == HexStates.Hard) { hex.ChangeState(HexStates.Empty); } } } }
public void FloorCheck(List <Vector3> positions, int currentPositionIndex) { bool changed = false; int count = positions.Count; //Debug.Log("positions to check: " + count); overlapSphereCollider.transform.position = positions[count - 1]; for (int j = 0; j < count; j++) { Vector3 top = positions[j]; Vector3 bottom = positions[j] + new Vector3(0, -3, 0); Collider[] overlappingColliders = Physics.OverlapCapsule (bottom, top, overlapSphereCollider.radius); //Debug.Log("positions[j]: " + positions[j]); // Debug.Log("overlapSphereCollider.radius: " + overlapSphereCollider.radius); //Debug.Log("overlappingColliders.Length: " + overlappingColliders.Length); for (int i = 0; i < overlappingColliders.Length; i++) { Transform t = overlappingColliders[i].transform; //if (t.parent != null) { Hex hex = t /*.parent*/.GetComponent <Hex>(); if (hex != null) { HexStates hexState = hex.State; if (hexState != HexStates.Full)//TODO: I dont like the full/enemy deal here { if (hex.Specialty == HexSpecialties.Enemy) { Debug.Log("An enemy is touching a sensitive hexagon..."); HexMap.InfectPlayerPath(hex); return; } switch (hexState) { /* case HexStates.AwaitingFill: * isOnAPotentialWall = true; break;*/ /*case HexStates.Full: * Collide(); break;*/ case HexStates.Empty: { hex.ChangeState(HexStates.Path); changed = true; } break; } Vector3 hexPosition = hex.transform.position; hexPosition.y = Hex.HEX_PRESSED_Y; hex.transform.position = hexPosition; } } else { HexBomb bomb = t /*.parent*/.GetComponent <HexBomb>(); if (bomb != null) { bomb.Explode(); } } } } } if (changed) { SoundManager.PlayOneShotSoundAt(SoundNames.HexPressed, positions[currentPositionIndex]);// t.position); if (HexMap.CalculateFill()) { SoundManager.PlayOneShotSoundAt(SoundNames.AllGlocken, positions[currentPositionIndex]); } } }
private void ChangeState(HexStates desiredState) { if (desiredState == _currentState) { return; } switch (desiredState) { case HexStates.Idle: if (_currentState == HexStates.Highlighted || _currentState == HexStates.Deselected) { Lift(false); ChangeColor(false); _currentState = desiredState; break; } break; case HexStates.Highlighted: if (_currentState == HexStates.Idle) { _currentColor = _colorCoding.highLightColor; Lift(true); ChangeColor(true); _currentState = desiredState; break; } if (_currentState == HexStates.Selected) { break; } break; case HexStates.Selected: if (_currentState == HexStates.Idle) { Lift(true); _currentColor = _colorCoding.selectedColor; ChangeColor(true); _currentState = desiredState; break; } else if (_currentState == HexStates.Highlighted) { _currentColor = _colorCoding.selectedColor; ChangeColor(true); _currentState = desiredState; break; } break; case HexStates.Deselected: if (_currentState == HexStates.Selected) { Lift(false); ChangeColor(false); _currentState = desiredState; ChangeState(HexStates.Idle); break; } break; } }
private IEnumerator PrepareHexExplosionCoroutine(Hex origin) { SoundManager.PlayOneShotSoundAt(SoundNames.BombActivation, origin.transform.position); HexStates statePostExplosion = HexStates.Full; int range = 4; float waitTime = 0.15f; List <Hex> hexesInRange = new List <Hex>(6); hexesInRange.Add(origin); if (origin.State != statePostExplosion) { origin.ChangeState(HexStates.Bombed); } for (int i = 0; i < range; i++) { int count = hexesInRange.Count; for (int j = 0; j < count; j++) { Hex[] neighbours = hexesInRange[j].GetNeighbours(); for (int n = 0; n < neighbours.Length; n++) { Hex neighbour = neighbours[n]; //30.9 if (neighbour.State == HexStates.Empty)// || neighbour.State == HexStates.PotentiallyFull ) if (neighbour.State != statePostExplosion && neighbour.State != HexStates.Bombed) { neighbour.ChangeState(HexStates.Bombed); } hexesInRange.Add(neighbour); } } } //ANNNND Again hexesInRange.Clear(); hexesInRange.Add(origin); if (origin.State != statePostExplosion) { origin.ChangeState(statePostExplosion); } for (int i = 0; i < range; i++) { yield return(new WaitForSeconds(waitTime)); int count = hexesInRange.Count; for (int j = 0; j < count; j++) { Hex[] neighbours = hexesInRange[j].GetNeighbours(); for (int n = 0; n < neighbours.Length; n++) { Hex neighbour = neighbours[n]; //30.9 if (neighbour.State == HexStates.Empty)// || neighbour.State == HexStates.PotentiallyFull ) if (neighbour.State != statePostExplosion) { neighbour.ChangeState(statePostExplosion); } hexesInRange.Add(neighbour); } if (HexMap.CalculateFill()) { SoundManager.PlayOneShotSoundAt(SoundNames.AllGlocken, origin.transform.position); } KillEnemiesOnTopOfFullHexes(); } } UpdateFullPercentage(); //awaitingFill = true; }