private void DetectHit(Player player, int damage) { var playerPosition = new Vector2(player.transform.position.x, player.transform.position.y); var direction = player.IsFacingLeft() ? new Vector2(-1, 0) // left : new Vector2(1, 0); // right var yOffset = 2f; var xOffset = 0f; var tempOffset = player.IsFacingLeft() ? new Vector2(-xOffset, yOffset) : new Vector2(xOffset, yOffset); Debug.DrawRay(playerPosition + tempOffset, direction * attackDistance, Color.red, 3); RaycastHit2D[] rayCasts = Physics2D.RaycastAll(playerPosition + tempOffset, direction, attackDistance, playerLayerMask); foreach (var hit2D in rayCasts) { Player target = hit2D.collider.GetComponent <Player>(); BoulderController boulder = hit2D.collider.GetComponentInParent <BoulderController>(); if (target != null) { if (target == player) { continue; } if (target.combatState == Player.CombatState.Blocking && Player.IsOpponentFacingPlayer(player, target)) { // successful block target.SuccessfulBlock(); target.KnockBack(opponentKnockBackDistance); player.KnockBack(selfKnockBackDistance); } else if (target.combatState == Player.CombatState.Rolling) { // successful roll, play sound effect } else if (target.combatState == Player.CombatState.Dead) { } else { // add sfx AudioController.instance.PlaySoundEffect("Slash"); target.TakeDamage(damage); } } if (boulder != null) { Debug.Log("Hit"); var boulderProjectile = boulder.GetComponentInChildren <BoulderProjectileController>(); boulderProjectile.Impact(); } } combo.UpdateCombo(); }
public void CreateBoulder() { //create a new boulder prefab on top of this tile string toLoad = boulderPrefab + boulderPrefabChoice; //select random prefab GameObject newBoulder = (GameObject)Instantiate(Resources.Load(prefabsPath + toLoad), new Vector3(transform.position.x, transform.position.y, 0.0f), transform.rotation); //instantiate new boulder //establish the two way references tileBoulder = newBoulder.GetComponent <BoulderController>(); tileBoulder.tileBoulderIsOn = this.gameObject.GetComponent <TileController>(); newBoulder.GetComponent <BoulderController> ().randomElementFactor = randomFactor; //boulder handles it's own destruction }