//enemy on hit public override void OnHit(DamageProperty dp, WeaponType weaponType, bool criticalAttack) { if (state != GRAVEBORN_STATE) { beWokeUp = true; if (player.GetAvatarType() == AvatarType.Marine) { dp.damage *= Constant.MARINE_POWER_UP; } else if (player.GetAvatarType() == AvatarType.EnegyArmor) { dp.damage *= Constant.ENEGY_ARMOR__DAMAGE_BOOST; } Object.Instantiate(rConfig.hitBlood, enemyTransform.position + Vector3.up * 0.5f, Quaternion.identity); hp -= dp.damage; if (weaponType == WeaponType.AssaultRifle || weaponType == WeaponType.Saw) { if (Time.time - gotHitTime > 0.3f) { gotHitTime = Time.time; state.OnHit(this); } } else { gotHitTime = Time.time; state.OnHit(this); } } }
protected void RemoveExceptionPositionEnemy() { if (enemyTransform.position.y < Constant.FLOORHEIGHT - 20.0f) { DamageProperty dp = new DamageProperty(); dp.damage = HP; OnHit(dp, WeaponType.NoGun, false); Debug.Log("~~~~~~~~~~~~~~~~Remove Kill~~~~~~~~~~~~~~~" + Name); } }
public override void OnAttack() { base.OnAttack(); DamageProperty dp = new DamageProperty(); dp.damage = hp; Explode(); OnHit(dp, WeaponType.NoGun, true); }
//enemy on hit public override void OnHit(DamageProperty dp, WeaponType weaponType, bool criticalAttack) { if (state != GRAVEBORN_STATE) { beWokeUp = true; if (player.GetAvatarType() == AvatarType.Marine) { dp.damage *= Constant.MARINE_POWER_UP; } else if (player.GetAvatarType() == AvatarType.EnegyArmor) { dp.damage *= Constant.ENEGY_ARMOR__DAMAGE_BOOST; } Object.Instantiate(rConfig.hitBlood, enemyTransform.position + Vector3.up * 1.5f, Quaternion.identity); hp -= dp.damage; if (weaponType == WeaponType.RocketLauncher || weaponType == WeaponType.Sniper || weaponType == WeaponType.LaserGun) { gotHitTime = Time.time; state.OnHit(this); } else if (weaponType == WeaponType.AssaultRifle || weaponType == WeaponType.Saw) { if (Math.RandomRate(10) && Time.time - gotHitTime > 2.0f) { gotHitTime = Time.time; state.OnHit(this); } } else if (weaponType == WeaponType.ShotGun || weaponType == WeaponType.MachineGun) { if (Math.RandomRate(30)) { gotHitTime = Time.time; PlayBloodExplodeEffect(enemyTransform.TransformPoint(new Vector3(0, 1f, 1f))); state.OnHit(this); } } } }
public override void Fire(float deltaTime) { //gunfire.renderer.enabled = true; if (shootAudio != null) { if (!shootAudio.isPlaying) { AudioPlayer.PlayAudio(shootAudio); } } Hashtable enemyList = gameScene.GetEnemies(); foreach (Enemy enemy in enemyList.Values) { Collider c = enemy.GetCollider(); if (gun.GetComponent <Collider>().bounds.Intersects(c.bounds)) { DamageProperty dp = new DamageProperty(); dp.damage = damage; enemy.OnHit(dp, WeaponType.Saw, true); } } GameObject[] woodboxes = gameScene.GetWoodBoxes(); foreach (GameObject woodbox in woodboxes) { if (woodbox != null) { Collider c = woodbox.GetComponent <Collider>(); if (gun.GetComponent <Collider>().bounds.Intersects(c.bounds)) { WoodBoxScript ws = woodbox.GetComponent <WoodBoxScript>(); ws.OnHit(damage * player.PowerBuff); } } } lastShootTime = Time.time; }
//enemy on hit public virtual void OnHit(DamageProperty dp, WeaponType weaponType, bool criticalAttack) { if (state != GRAVEBORN_STATE) { beWokeUp = true; if (player.GetAvatarType() == AvatarType.Marine) { dp.damage *= Constant.MARINE_POWER_UP; } else if (player.GetAvatarType() == AvatarType.EnegyArmor) { dp.damage *= Constant.ENEGY_ARMOR__DAMAGE_BOOST; } Object.Instantiate(rConfig.hitBlood, enemyTransform.position + Vector3.up * 1f, Quaternion.identity); gotHitTime = Time.time; hp -= dp.damage; this.criticalAttacked = criticalAttack; state.OnHit(this); } }
public bool Rush(float deltaTime) { Collider pcollider = player.GetCollider(); enemyTransform.LookAt(rushingTarget); Vector3 moveDir = enemyTransform.TransformDirection(Vector3.forward) * rushingSpeed + Physics.gravity * 0.5f; controller.Move(moveDir * deltaTime); if (!rushingCollided) { if (pcollider != null) { Vector3 relativePos = enemyTransform.InverseTransformPoint(player.GetTransform().position); //Debug.Log(relativePos); if (relativePos.sqrMagnitude < 5.0f * 5.0f && relativePos.z > 1.0f) { player.OnHit(rushingDamage); //player.GetHit(attackDamage * 2.0f,getHitFlySpeed); lastAttackTime = Time.time; rushingCollided = true; } /* * if (collider.bounds.Intersects(pcollider.bounds)) * { * //Vector3 getHitFlySpeed = (rushingTarget - enemyTransform.position).normalized *10.0f + Vector3.up*10; * player.OnHit(rushingDamage); * //player.GetHit(attackDamage * 2.0f,getHitFlySpeed); * lastAttackTime = Time.time; * rushingCollided = true; * }*/ } } foreach (Enemy enemy in gameScene.GetEnemies().Values) { if (enemy.GetState() == Enemy.DEAD_STATE || enemy.EnemyType == EnemyType.E_TANK) { continue; } if (collider.bounds.Intersects(enemy.GetCollider().bounds)) { DamageProperty dp = new DamageProperty(); dp.damage = rushingDamage; enemy.OnHit(dp, WeaponType.NoGun, true); } } GameObject[] woodboxes = gameScene.GetWoodBoxes(); foreach (GameObject woodbox in woodboxes) { if (woodbox != null) { if (collider.bounds.Intersects(woodbox.GetComponent <Collider>().bounds)) { WoodBoxScript ws = woodbox.GetComponent <WoodBoxScript>(); ws.OnHit(attackDamage); } } } if ((enemyTransform.position - rushingTarget).sqrMagnitude < 1.0f || (enemyTransform.position - player.GetTransform().position).sqrMagnitude < 4.0f || Time.time - lastRushingTime > 3.0f) { animation[AnimationName.ENEMY_RUSHINGEND].wrapMode = WrapMode.ClampForever; animation.CrossFade(AnimationName.ENEMY_RUSHINGEND); return(true); } return(false); }
public override void Fire(float deltaTime) { gunfire.GetComponent <Renderer>().enabled = true; Ray ray = new Ray(); if (gameCamera.GetCameraType() == CameraType.TPSCamera) { Vector3 tempTargetPoint = cameraComponent.ScreenToWorldPoint(new Vector3(gameCamera.ReticlePosition.x, Screen.height - gameCamera.ReticlePosition.y, 0.1f)); ray = new Ray(cameraTransform.position, (tempTargetPoint - cameraTransform.position)); } else if (gameCamera.GetCameraType() == CameraType.TopWatchingCamera) { ray = new Ray(player.GetTransform().position + Vector3.up * 0.5f, player.GetTransform().TransformDirection(Vector3.forward)); } RaycastHit hit = new RaycastHit(); RaycastHit[] hits; float tan = Mathf.Tan(Mathf.Deg2Rad * 60.0f); hits = Physics.RaycastAll(ray, 1000, 1 << PhysicsLayer.ENEMY | 1 << PhysicsLayer.WALL | 1 << PhysicsLayer.FLOOR | 1 << PhysicsLayer.WOODBOX); float minDistance = 1000000f; for (int i = 0; i < hits.Length; i++) { Vector3 relativePos = Vector3.zero; if (hits[i].collider.gameObject.layer == PhysicsLayer.ENEMY) { relativePos = gunfire.transform.InverseTransformPoint(hits[i].collider.transform.position); } else { relativePos = gunfire.transform.InverseTransformPoint(hits[i].point); } if (relativePos.z < 1)// || Mathf.Abs(relativePos.z / relativePos.x) > tan { float dis = (hits[i].point - gunfire.transform.position).sqrMagnitude; if (dis < minDistance) { hit = hits[i]; minDistance = dis; } } } if (hit.collider != null) //if (Physics.Raycast(ray, out hit, 1000, 1 << PhysicsLayer.ENEMY | 1 << PhysicsLayer.WALL | 1 << PhysicsLayer.FLOOR | 1 << PhysicsLayer.WOODBOX)) { //Debug.Log(hit.collider.name); aimTarget = hit.point; Vector3 dir = (aimTarget - rightGun.position).normalized; Vector3 relativeDir = player.GetTransform().InverseTransformPoint(aimTarget); if (relativeDir.z > Constant.SPARK_MIN_DISTANCE) { GameObject fireLineObj = firelineObjectPool.CreateObject(gunfire.transform.position + dir * 2, dir); fireLineObj.transform.Rotate(180, 0, 0); if (fireLineObj == null) { Debug.Log("fire line obj null"); } else { FireLineScript f = fireLineObj.GetComponent <FireLineScript>(); f.transform.Rotate(90, 0, 0); f.beginPos = rightGun.position; f.endPos = hit.point; } } bulletsObjectPool.CreateObject(rightGun.position, dir); GameObject hitObject = hit.collider.gameObject; if (hitObject.name.StartsWith(ConstData.ENEMY_NAME)) { Enemy enemy = gameScene.GetEnemyByID(hitObject.name); if (enemy.GetState() != Enemy.DEAD_STATE) { if (relativeDir.z > Constant.SPARK_MIN_DISTANCE) { sparksObjectPool.CreateObject(hit.point, -ray.direction); } DamageProperty dp = new DamageProperty(); dp.hitForce = ray.direction * hitForce; dp.damage = damage * player.PowerBuff; bool criticalAttack = false; int rnd = Random.Range(0, 100); if (rnd < 70) { criticalAttack = true; } float dis = (enemy.GetPosition() - player.GetTransform().position).sqrMagnitude; float radiusSqr = range * range; if (dis < radiusSqr) { enemy.OnHit(dp, GetWeaponType(), criticalAttack); } else { if (rnd < accuracy) { enemy.OnHit(dp, GetWeaponType(), criticalAttack); } } } } else { if (relativeDir.z > Constant.SPARK_MIN_DISTANCE) { sparksObjectPool.CreateObject(hit.point, -ray.direction); } if (hitObject.layer == PhysicsLayer.WOODBOX) { Debug.Log(hitObject.name); WoodBoxScript ws = hitObject.GetComponent <WoodBoxScript>(); ws.OnHit(damage * player.PowerBuff); } } if (Time.time - lastPlayAudioTime >= shootAudio.clip.length) { lastPlayAudioTime = Time.time; AudioPlayer.PlayAudio(shootAudio); } sbulletCount--; sbulletCount = Mathf.Clamp(sbulletCount, 0, maxCapacity); player.LastHitPosition = hit.point; lastShootTime = Time.time; } else { aimTarget = cameraTransform.TransformPoint(0, 0, 1000); Vector3 dir = (aimTarget - rightGun.position).normalized; bulletsObjectPool.CreateObject(rightGun.position, dir); GameObject fireLineObj = firelineObjectPool.CreateObject(gunfire.transform.position + dir * 2, dir); if (fireLineObj == null) { Debug.Log("fire line obj null"); } else { FireLineScript f = fireLineObj.GetComponent <FireLineScript>(); f.transform.Rotate(90, 0, 0); f.beginPos = rightGun.position; f.endPos = hit.point; } if (!shootAudio.isPlaying) { AudioPlayer.PlayAudio(shootAudio); } sbulletCount--; sbulletCount = Mathf.Clamp(sbulletCount, 0, maxCapacity); player.LastHitPosition = hit.point; lastShootTime = Time.time; } }
public override void Fire(float deltaTime) { AudioPlayer.PlayAudio(shootAudio); gun.GetComponent <UnityEngine.Animation>()[AnimationName.SHOTGUN_RELOAD].wrapMode = WrapMode.Once; gun.GetComponent <UnityEngine.Animation>().Play(AnimationName.SHOTGUN_RELOAD); gunfire.GetComponent <Renderer>().enabled = true; shotgunFireTimer.SetTimer(0.2f, false); Object.Instantiate(rConf.shotgunBullet, rightGun.position, player.GetTransform().rotation); player.LastHitPosition = player.GetTransform().position; GameObject shotgunfireObj = Object.Instantiate(rConf.shotgunfire, gunfire.transform.position, player.GetTransform().rotation) as GameObject; shotgunfireObj.transform.parent = player.GetTransform(); float tan60 = Mathf.Tan(Mathf.Deg2Rad * 60.0f); int oneShotKills = 0; foreach (Enemy enemy in gameScene.GetEnemies().Values) { if (enemy.GetState() == Enemy.DEAD_STATE) { continue; } Vector3 relativeEnemyPos = player.GetTransform().InverseTransformPoint(enemy.GetPosition()); float dis = (enemy.GetPosition() - player.GetTransform().position).sqrMagnitude; float radiusSqr = range * range; if (relativeEnemyPos.z > 0) { if (Mathf.Abs(relativeEnemyPos.z / relativeEnemyPos.x) > tan60) { DamageProperty dp = new DamageProperty(); dp.damage = damage * player.PowerBuff; if (dis < radiusSqr) { enemy.OnHit(dp, GetWeaponType(), true); } else if (dis < radiusSqr * 2 * 2) { int rnd = Random.Range(0, 100); if (rnd < accuracy) { enemy.OnHit(dp, GetWeaponType(), true); } } else if (dis < radiusSqr * 3 * 3) { int rnd = Random.Range(0, 100); if (rnd < accuracy / 2) { enemy.OnHit(dp, GetWeaponType(), true); } } else if (dis < radiusSqr * 4 * 4) { int rnd = Random.Range(0, 100); if (rnd < accuracy / 4) { enemy.OnHit(dp, GetWeaponType(), true); } } } } if (enemy.HP <= 0) { oneShotKills++; } } if (oneShotKills >= 4) { GameApp.GetInstance().GetGameState().Achievement.CheckAchievemnet_WeaponMaster(); } GameObject[] woodboxes = gameScene.GetWoodBoxes(); foreach (GameObject woodbox in woodboxes) { if (woodbox != null) { Vector3 relativeBoxPos = player.GetTransform().InverseTransformPoint(woodbox.transform.position); float dis = (woodbox.transform.position - player.GetTransform().position).sqrMagnitude; float radiusSqr = range * range; if ((dis < radiusSqr * 2 * 2) && relativeBoxPos.z > 0) { WoodBoxScript ws = woodbox.GetComponent <WoodBoxScript>(); ws.OnHit(damage * player.PowerBuff); } } } lastShootTime = Time.time; sbulletCount--; sbulletCount = Mathf.Clamp(sbulletCount, 0, maxCapacity); }