コード例 #1
0
    public override void OnEquip(Inventory equipper)
    {
        DamageReciever dr = equipper.myPawn.GetComponent <DamageReciever>();

        dr.Resistances.GenericResistance.SetModifier("resAugment", Resistance);
        dr.Resistances.ProjectileResistance.SetModifier("resAugment", Resistance);
    }
コード例 #2
0
ファイル: AIPawn.cs プロジェクト: Fornan-II/Appetent_Synapse
    public virtual void DeathBehavior(Pawn killer)
    {
        if (killer)
        {
            //Debug.Log("Ye killed me, " + killer.name);
        }

        _controller.ProcessTree = false;

        if (moveScript)
        {
            moveScript.enabled = false;
        }
        Rigidbody rb = GetComponent <Rigidbody>();

        if (rb)
        {
            rb.freezeRotation = false;
        }
        DamageReciever dr = GetComponent <DamageReciever>();

        if (dr)
        {
            dr.enabled = false;
        }
        LookAtTarget ls = GetComponent <LookAtTarget>();

        if (ls)
        {
            ls.enabled = false;
        }

        Destroy(gameObject, 3.0f);
    }
コード例 #3
0
    public virtual void ApplyDamage()
    {
        for (int i = 0; i < _intersectingColliders.Count; i++)
        {
            Collider c = _intersectingColliders[i];
            if (!c)
            {
                _intersectingColliders.Remove(c);
                i--;
            }
            else
            {
                DamageReciever dr = c.GetComponent <DamageReciever>();
                if (dr)
                {
                    if (_damageRecipient)
                    {
                        if (_damageRecipient == c.gameObject)
                        {
                            dr.TakeDamageFrom(this);
                        }
                    }
                    else
                    {
                        dr.TakeDamageFrom(this);
                    }
                }
            }
        }

        SetFreezePosition(false);
        currentlyAttacking = false;
    }
コード例 #4
0
    public static void DealDamageToTarget(GameObject target, DamagePacket dmg, Pawn source, RaycastHit?hitInfo = null)
    {
        DamageReciever targetDR = target.GetComponent <DamageReciever>();
        float          kbRes    = 0.0f;

        if (targetDR)
        {
            int finalDamage = targetDR.CalculateDamage(dmg);
            targetDR.TakeDamage(finalDamage, source);
            kbRes = Mathf.Clamp01(targetDR.Resistances.KnockbackResistance.Value);

            if (targetDR.HitParticles && hitInfo.HasValue && finalDamage > 0)
            {
                GameObject spawnedParticles = Instantiate(targetDR.HitParticles, hitInfo.Value.point, Quaternion.identity);
                spawnedParticles.transform.forward = hitInfo.Value.normal;
            }
        }

        Rigidbody targetRB = target.GetComponent <Rigidbody>();

        if (targetRB)
        {
            float   finalKnockback  = Mathf.Max(0.0f, dmg.Knockback * (1.0f - kbRes));
            Vector3 knockbackVector = (targetRB.transform.position - source.transform.position).normalized * finalKnockback;
            knockbackVector.y = finalKnockback * verticalKnockbackScalar;
            if (hitInfo.HasValue)
            {
                targetRB.AddForceAtPosition(knockbackVector, hitInfo.Value.point, ForceMode.Impulse);
            }
            else
            {
                targetRB.AddForce(knockbackVector, ForceMode.Impulse);
            }
        }
    }
コード例 #5
0
    public override bool DoAttack(GameObject target, Pawn user)
    {
        if (Ammo > 0)
        {
            Ammo--;
        }
        else if (Ammo == 0)
        {
            return(false);
        }
        //Else if ammo < 0 then player has "infinite" ammo

        //Just basic hitscan
        if (_anim)
        {
            _anim.SetTrigger("attack");
        }

        RaycastHit hit;

        if (Physics.Raycast(transform.position, transform.forward, out hit, maxRange, hittable, QueryTriggerInteraction.Ignore))
        {
            DamageReciever.DealDamageToTarget(hit.transform.gameObject, ScaleDamageByCharge(Damage), user, hit);
            return(true);
        }

        return(false);
    }
コード例 #6
0
    protected virtual void OnTriggerExit(Collider other)
    {
        DamageReciever dr = other.GetComponent <DamageReciever>();

        if (dr && WhereToDamage == DamageZone.OUTSIDE)
        {
            dr.Die(null);
        }
    }
コード例 #7
0
    public override bool DoAttack(GameObject target, Pawn user)
    {
        if (_anim)
        {
            _anim.SetTrigger("attack");
        }

        if (target)
        {
            RaycastHit?hitInfo = null;
            if (user is PlayerPawn)
            {
                PlayerPawn playerUser = user as PlayerPawn;
                hitInfo = playerUser.Raycaster.RaycastInfo.HitInfo;
            }

            DamageReciever.DealDamageToTarget(target, ScaleDamageByCharge(Damage), user, hitInfo);
            ResetAttackCharge();

            if (AttackCharge >= 0.848f)
            {
                Collider[] foundColliders = Physics.OverlapSphere(target.transform.position, SweepAttackRadius, Physics.AllLayers, QueryTriggerInteraction.Ignore);
                foreach (Collider col in foundColliders)
                {
                    Pawn foundPawn = col.GetComponent <Pawn>();
                    if (foundPawn)
                    {
                        bool hitThisPawn = true;

                        if (user)
                        {
                            hitThisPawn = user.MyFaction != foundPawn.MyFaction;
                        }

                        if (hitThisPawn)
                        {
                            DamageReciever.DealDamageToTarget(target, SweepAttackDamage, user, hitInfo);
                        }
                    }
                }
            }

            return(true);
        }

        ResetAttackCharge();
        return(false);
    }
コード例 #8
0
    protected virtual void CollideWith(RaycastHit hitInfo)
    {
        DamageReciever.DealDamageToTarget(hitInfo.transform.gameObject, _damage, _source, hitInfo);
        if (AfterCollisionLifeTime > 0 && !hitInfo.transform.GetComponent <ProjectileNonStick>())
        {
            Destroy(gameObject, AfterCollisionLifeTime);
        }
        else
        {
            Destroy(gameObject);
        }

        FreezePosition   = true;
        transform.parent = hitInfo.transform;
        _trail.enabled   = false;
    }
コード例 #9
0
 public override bool DoAttack(GameObject target, Pawn user)
 {
     if (_anim)
     {
         _anim.SetTrigger("attack");
     }
     if (target)
     {
         DamageReciever.DealDamageToTarget(target, ScaleDamageByCharge(Damage), user);
         ResetAttackCharge();
         return(true);
     }
     ResetAttackCharge();
     //If no target found to take damage, return false.
     return(false);
 }
コード例 #10
0
ファイル: Projectile.cs プロジェクト: kotality/whosejamisthis
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject == de.owner)
        {
            return;
        }

        DamageReciever dr = collision.gameObject.GetComponent <DamageReciever>();

        if (dr)
        {
            dr.TakeDamageFrom(de);
        }

        Destroy(gameObject);
    }
コード例 #11
0
    private void OnTriggerEnter(Collider other)
    {
        DamageReciever damageReciever = other.gameObject.GetComponent <DamageReciever>();

        if (damageReciever != null)
        {
            //print("Damage dealt in the amount of " + damageAmount);
            damageReciever.DamageRecieved(damageAmount);
            if (this.gameObject.CompareTag("Punch"))
            {
                AudioSource audioSource = GetComponent <AudioSource>();
                if (audioSource != null)
                {
                    audioSource.Play();
                    //add code to randomize pitch later
                }
            }
        }
    }
コード例 #12
0
ファイル: Projectile.cs プロジェクト: Fornan-II/AG231_Final
    protected virtual void FixedUpdate()
    {
        if (_initialized)
        {
            float distanceTravelledThisUpdate = Speed * Time.fixedDeltaTime;

            RaycastHit hit;
            if (Physics.Raycast(transform.position, transform.forward, out hit, distanceTravelledThisUpdate, hittableLayers, QueryTriggerInteraction.Ignore))
            {
                DamageReciever dr = hit.transform.GetComponent <DamageReciever>();
                if (dr)
                {
                    dr.ApplyDamage(Damage);
                }
                transform.position = hit.point;
                Destroy(gameObject);
            }
            else
            {
                transform.position += transform.forward * distanceTravelledThisUpdate;
            }
        }
    }
コード例 #13
0
ファイル: Pawn.cs プロジェクト: Fornan-II/Appetent_Synapse
 public virtual void OnKill(DamageReciever victim)
 {
 }
コード例 #14
0
 public override void OnKill(DamageReciever victim)
 {
     MyEnergyManager.AddEnergy(OnKillEnergyIncrease);
 }
コード例 #15
0
    public override void OnEquip(Inventory equipper)
    {
        DamageReciever dr = equipper.myPawn.GetComponent <DamageReciever>();

        dr.Resistances.KnockbackResistance.SetModifier("steadfastAugment", 1.0f - dr.Resistances.KnockbackResistance.Value);
    }
コード例 #16
0
    public override void OnUnequip(Inventory equipper)
    {
        DamageReciever dr = equipper.myPawn.GetComponent <DamageReciever>();

        dr.Resistances.GenericResistance.RemoveModifier("steadfastAugment");
    }