示例#1
0
    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);
    }
示例#2
0
    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);
                }
            }
        }
    }
示例#3
0
    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();
            }
        }
    }
示例#4
0
    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);
    }
示例#5
0
    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));
        }
    }