void HitByLaser(RaycastHit2D victim) { Debug.Log("Player shot: " + victim.collider.gameObject.name + " with tag: " + victim.collider.gameObject.tag); var enemyHealth = victim.collider.gameObject.GetComponent <EnemyHealth>(); //NOTE: RaycastHit2D.transform returns parent transform, RaycastHit2D.collider returns the hit collider. switch (victim.collider.gameObject.tag) { //Add more cases as more types of enemies are added to the game case "SmallCritter": case "JumpingCritter": enemyHealth.TakeDamage(damage); break; case "HardCritter": //victim.transform.gameObject.GetComponent<HardCritter>().Rush(); break; case "BigEyeGuy": //Can't be hurt by laser, play relevant things break; case "CrawlerCritter": if (victim.collider.gameObject.GetComponent <CrawlerCritter>().noShell) { enemyHealth.TakeDamage(damage); } else { //Can't be hurt by laser, play relevant things } break; case "ShellMan": ShellMan shellMan = victim.collider.gameObject.GetComponent <ShellMan>(); if (shellMan.getDeShelled()) { enemyHealth.TakeDamage(damage); } else { //Can't be hurt by laser, play relevant things } break; case "BirdBossWeakSpot": Debug.Log("Hit Bird in the Mouth!"); victim.collider.transform.parent.GetComponent <BigBadBird>().TakeDamage(); break; case "BigEyeGuyWeakSpot": Debug.Log("Hit EyeGuy in the Eye!"); victim.collider.transform.parent.GetComponent <EnemyHealth>().TakeDamage(damage); break; case "FinalBossArmor": Debug.Log("Hit the boss in the armor!"); victim.collider.gameObject.GetComponent <Phase1>().Stunned(7f); break; case "FinalBossArmor2": victim.collider.gameObject.GetComponent <Phase2>().Stunned(7f); break; case "FinalBossWeakSpot": Debug.Log("Hit the boss in the weak spot!"); victim.collider.gameObject.GetComponent <Phase1>().Fall(); break; case "FinalBossHead": Debug.Log("Hit the boss in the head!"); victim.collider.gameObject.GetComponent <Phase2>().LaserShot(); break; case "FinalBossLastForm": Debug.Log("Shot last boss form"); //Check so that it goes after the correct child //victim.collider.gameObject.transform.GetChild(0).GetComponent<BigEyeGuy>().Shoot(); break; case "Barrier": Debug.Log("Laser hit barrier"); if (victim.collider.GetComponent <Barrier>().GetBarrierType().Equals("Laser")) { victim.collider.GetComponent <Barrier>().TakeDamage(1); } break; } }
//OverlapBox check and damage all victims in area. IEnumerator DamageArea(float sizeX) { gizmoSizeX = sizeX; if (status.isMirrored) { victims = Physics2D.OverlapBoxAll(transform.position + new Vector3(-sizeX / 2, offset), new Vector2(sizeX, 2f), 0, whatIsPunchable); } else { victims = Physics2D.OverlapBoxAll(transform.position + new Vector3(sizeX / 2, offset), new Vector2(sizeX, 2f), 0, whatIsPunchable); } foreach (Collider2D victim in victims) { var enemyHealth = victim.gameObject.GetComponent <EnemyHealth>(); if (attackType == "Branch" && !branchInv && victim.gameObject.tag != "Door") { if (inventory.GetHoldingItem().GetComponent <PickUpableItem>().Break() <= 0) { inventory.SetHoldingItem(null); } branchInv = true; } switch (victim.gameObject.tag) { case "Door": victim.gameObject.GetComponent <Door>().SetInvisible(); attackType = "Door"; break; case "Barrier": Debug.Log("BarrierType: " + victim.gameObject.GetComponent <Barrier>().GetBarrierType()); if (attackType == victim.gameObject.GetComponent <Barrier>().GetBarrierType()) { victim.gameObject.GetComponent <Barrier>().TakeDamage(damage); } // attackType = "Barrier"; break; case "SmallCritter": case "JumpingCritter": enemyHealth.TakeDamage(damage, gameObject, 4f); break; case "CrawlerCritter": if (victim.gameObject.GetComponent <CrawlerCritter>().noShell) { enemyHealth.TakeDamage(damage, gameObject, 4f); } else { enemyHealth.Knockback(gameObject, 4f); } break; case "ShellMan": ShellMan shellMan = victim.gameObject.GetComponent <ShellMan>(); if (shellMan.getDeShelled()) { enemyHealth.TakeDamage(damage, gameObject, 4f); } else { if (attackType == "Mega" || attackType == "FullMega") { shellMan.BreakShield(gameObject); } else { enemyHealth.Knockback(gameObject, 4f); } } break; case "HardCritter": if (attackType == "Rock") { enemyHealth.TakeDamage(damage, gameObject, 4f); } else if (attackType == "Mega" || attackType == "FullMega") { enemyHealth.TakeDamage(damage, gameObject, 4f); } else { enemyHealth.Knockback(gameObject, 4f); } break; case "BigEyeGuy": enemyHealth.Knockback(gameObject, 4f); break; case "StatueBossEye": if (attackType == "Branch") { if (inventory.IsHoldingItem()) { enemyHealth.TakeDamage(damage); inventory.GetHoldingItem().GetComponent <PickUpableItem>().Break(3); inventory.SetHoldingItem(null); } } break; case "FinalBossWeakSpot": if (attackType == "FullMega") { Debug.Log("Full MegaPunched the boss!"); victim.gameObject.GetComponent <Phase1>().TakeDamage(damage); } else if (attackType == "Mega") { Debug.Log("Regular MegaPunched the boss!"); victim.gameObject.GetComponent <Phase1>().TakeDamage(damage); } else { Debug.Log("Invulnerable to AttackType [ " + attackType + " ]"); } break; case "FinalBossArmor2": if (victim.gameObject.GetComponent <Phase2>().blued) { if (attackType == "FullMega") { Debug.Log("Full MegaPunched the boss phase 2!"); victim.gameObject.GetComponent <Phase2>().TakeDamage(damage); } else if (attackType == "Mega") { Debug.Log("Regular MegaPunched the boss phase 2!"); victim.gameObject.GetComponent <Phase2>().TakeDamage(damage); } else { Debug.Log("Invulnerable to AttackType [ " + attackType + " ]"); } } break; } Debug.Log("Punched [ " + victim + " ] - tag [ " + victim.gameObject.tag + " ] - attackType [ " + attackType + " ] - damage [ " + damage + " ]"); } punchVisual.transform.localPosition = new Vector3(sizeX / 2, offset); punchVisual.GetComponent <Animator>().SetTrigger(attackType); // if(!(attackType == "Door" || attackType == "Barrier")) GetComponent <AudioPlayer>().PlayClip(6, 1, 0.7f, 1.3f); yield return(new WaitForSeconds(0.1f)); onCooldown = false; branchInv = false; }