Example #1
0
        //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);
                }
            }
        }
Example #2
0
 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);
     }
 }
Example #3
0
        public override void OnAttack()
        {
            base.OnAttack();

            DamageProperty dp = new DamageProperty();

            dp.damage = hp;

            Explode();
            OnHit(dp, WeaponType.NoGun, true);
        }
Example #4
0
        //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);
                    }
                }
            }
        }
Example #5
0
File: Saw.cs Project: kidundead/ow
        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;
        }
Example #6
0
 //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);
     }
 }
Example #7
0
        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);
        }
Example #8
0
        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;
            }
        }
Example #9
0
        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);
        }