public bool Damage(int damage) { bool hitSuccess = false; bool canDamage = true; if (health == 0 || character.rolling == 1 || character.invulnerable || character.stunned == 2) { canDamage = false; } if (character.isPlayer) { if (character.stunned == 1) { canDamage = false; hitSuccess = true; } } if (canDamage) { health -= damage; if (health < 0) { health = 0; } if (character.isPlayer == false) { character.ai.Damage(); } AlterHealthBar(); character.AttackCancel(); if (health > 0) { character.Hurt(); } else { healthBar.Kill(); character.Kill(); SCR_main.PlayRandomSound(SND_death); } hitSuccess = true; } return(hitSuccess); }
public void AttackHit() { if (lockActive == false) { TargetLock(); } if (lockActive) { float dist = Vector2.Distance(new Vector2(transform.position.x, transform.position.z), new Vector2(target.transform.position.x, target.transform.position.z)); if (dist <= (attackRange + (target.GetComponent <BoxCollider>().size.x *target.transform.localScale.x))) { bool hitSuccess = target.GetComponent <SCR_characterHealth>().Damage(damage); if (hitSuccess) { SCR_character targetCha = target.GetComponent <SCR_character>(); Vector3 hitDir = (new Vector3(target.transform.position.x, 0f, target.transform.position.z) - new Vector3(transform.position.x, 0f, transform.position.z)); float distTotal = hitDir.magnitude; hitDir /= distTotal; targetCha.speed[0] += (hitDir * force); if (attackHitObj) { Vector3 relativePos = (target.transform.position - transform.position); Quaternion attackRotation = Quaternion.LookRotation(relativePos); GameObject attackHitInst = Instantiate(attackHitObj, transform.position, attackRotation) as GameObject; Vector3 attackHitPos = (transform.position + (attackHitInst.transform.forward * attackHitOffset.z) + (attackHitInst.transform.up * attackHitOffset.y) + (attackHitInst.transform.right * attackHitOffset.x)); attackHitInst.transform.position = attackHitPos; } SCR_main.PlayRandomSound(SND_attackHit); } } } }
void Kill() { if (isActive) { isActive = false; mesh.GetComponent <Renderer> ().enabled = false; destroyCounter = 1.5f; SCR_main.PlayRandomSound(SND_impact); if (impactEffectObj) { GameObject impactInst = Instantiate(impactEffectObj, transform.position, transform.rotation) as GameObject; } if (trail) { trail.Kill(); } } }
public void CreateProjectile() { dir.transform.rotation = character.rotTarget; float projectileZ = (projectileOffset.z * transform.localScale.z); Vector3 projectilePos = (transform.position + (dir.transform.right * projectileOffset.x * transform.localScale.x) + (dir.transform.up * projectileOffset.y * transform.localScale.y) + (dir.transform.forward * projectileZ)); float middleDist = Vector2.Distance(new Vector2(character.attackPoint.x, character.attackPoint.z), new Vector2(transform.position.x, transform.position.z)); if (middleDist > (projectileZ + 0.35f)) { Vector3 relativePos = (new Vector3(character.attackPoint.x, projectilePos.y, character.attackPoint.z) - projectilePos); dir.transform.rotation = Quaternion.LookRotation(relativePos); } if (muzzleFlareObj) { GameObject muzzleFlareInst = Instantiate(muzzleFlareObj, projectilePos, dir.transform.rotation) as GameObject; } int damageFinal = shotDamage; if (character.powerBoost > 0) { float damageExtra = ((float)shotDamage * ((float)character.powerBoost * 0.01f)); damageFinal += (int)damageExtra; } GameObject projectileInst = Instantiate(projectileObj, projectilePos, dir.transform.rotation) as GameObject; projectileInst.GetComponent <SCR_projectile>().StartUp(character.isPlayer, damageFinal); SCR_main.PlayRandomSound(SND_shot); }
void Update() { if (character.attacking) { if (!GetComponent <Animation>().IsPlaying(character.animArray[attackAnimSlot])) { lockActive = false; target = null; attackReady = true; attackBufferAllowed = true; if (attackBuffer == false) { character.attacking = false; attackCurrent = 0; if (character.isPlayer == false) { GetComponent <SCR_enemyAI>().SetAction(2); } } } } if (attackBuffer && attackReady) { character.attacking = true; attackReady = false; attackBuffer = false; attackBufferAllowed = false; if (attackCurrent == 0) { if (character.running == false) { attackAnimSlot = 5; hitTimeCounter = standingAttack_1_hitTime; damage = standingAttack_1_damage; } else { attackAnimSlot = 7; hitTimeCounter = runningAttack_1_hitTime; damage = runningAttack_1_damage; } } if (attackCurrent == 1) { if (character.running == false) { attackAnimSlot = 6; hitTimeCounter = standingAttack_2_hitTime; damage = standingAttack_2_damage; } else { attackAnimSlot = 8; hitTimeCounter = runningAttack_2_hitTime; damage = runningAttack_2_damage; } } if (character.powerBoost > 0) { float damageExtra = ((float)damage * ((float)character.powerBoost * 0.01f)); damage += (int)damageExtra; } attackSoundCounter = (hitTimeCounter - 0.15f); if (attackSoundCounter < 0f) { attackSoundCounter = 0f; } character.PlayAnim(attackAnimSlot); attackCurrent++; if (attackCurrent == attackTotal) { attackCurrent = 0; } if (character.isPlayer) { TargetLock(); } } if (hitTimeCounter >= 0f) { if (attackSoundCounter >= 0f) { attackSoundCounter -= Time.deltaTime; if (attackSoundCounter < 0f) { attackSoundCounter = -1f; SCR_main.PlayRandomSound(SND_attack); } } hitTimeCounter -= Time.deltaTime; if (hitTimeCounter < 0f) { hitTimeCounter = -1f; attackBufferAllowed = true; AttackHit(); } } if (lockActive) { Vector3 destination = new Vector3(target.transform.position.x, 0f, target.transform.position.z); character.dir = (destination - new Vector3(transform.position.x, 0f, transform.position.z)); float distTotal = character.dir.magnitude; character.dir /= distTotal; float rotAngle = SCR_main.GetAngle(new Vector2(transform.position.x, transform.position.z), new Vector2(destination.x, destination.z)); rotAngle = (-rotAngle + 90f); character.rotTarget = Quaternion.Euler(new Vector3(0f, rotAngle, 0f)); } }