コード例 #1
0
    void Shoot(Vector3 targetLocation)
    {
        timer   = 0f;
        canFire = false;

        weaponComponents.gunAudio.Play();

        weaponComponents.gunLight.enabled = true;

        weaponComponents.gunParticles.Stop();
        weaponComponents.gunParticles.Play();

        weaponComponents.gunLine.enabled = true;
        weaponComponents.gunLine.SetPosition(0, weaponComponents.barrel.transform.position);

        shootRay.origin    = weaponComponents.barrel.transform.position;
        shootRay.direction = (targetLocation + Vector3.up * 0.5f) - weaponComponents.barrel.transform.position;


        if (Physics.Raycast(shootRay, out shootHit, range, shootMask))
        {
            Entity enemy = shootHit.collider.GetComponent <Entity> ();
            if (enemy != null)
            {
                enemy.OnHit(damage, shootHit.point);
            }
            weaponComponents.gunLine.SetPosition(1, shootHit.point);
        }
        else
        {
            weaponComponents.gunLine.SetPosition(1, shootRay.origin + shootRay.direction * range);
        }
    }
コード例 #2
0
ファイル: Damage.cs プロジェクト: Flaygon/Boss_Battles
    private void OnCollisionEnter2D(Collision2D collision)
    {
        Entity entity = collision.gameObject.GetComponent <Entity>();

        if (entity)
        {
            entity.OnHit(damage);
        }
    }
コード例 #3
0
ファイル: Damage.cs プロジェクト: Flaygon/Boss_Battles
    private void OnTriggerEnter2D(Collider2D collider)
    {
        Entity entity = collider.gameObject.GetComponent <Entity>();

        if (entity)
        {
            entity.OnHit(damage);
        }
    }
コード例 #4
0
    void Explode()
    {
        Collider[] cols = Physics.OverlapSphere(transform.position, explosionRadius, targetMask);

        foreach (Collider c in cols)
        {
            Entity e = c.GetComponent <Entity>();
            if (e != null)
            {
                e.OnHit(this);
            }
        }
    }
コード例 #5
0
    private void Start()
    {
        Collider2D[] results = new Collider2D[4];
        int          numHits = Physics2D.OverlapCircle(transform.position, radius, filter, results);

        for (int iResult = 0; iResult < numHits; ++iResult)
        {
            Debug.Log(results[iResult].gameObject);
            Entity hitEntity = results[iResult].gameObject.GetComponent <Entity>();
            if (hitEntity)
            {
                hitEntity.OnHit(damage);
            }
        }
    }
コード例 #6
0
    // Use this for initialization
    void Start()
    {
        Collider[] col = Physics.OverlapSphere(transform.position, 10.0f);

        foreach (Collider c in col)
        {
            Entity e = c.gameObject.GetComponent <Entity> ();

            if (e != null)
            {
                EnemyHit hit;
                hit.damage = 20;

                e.OnHit(hit);
            }
        }
    }
コード例 #7
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        EnemyEntity enemy = collision.gameObject.GetComponentInParent <EnemyEntity>();

        if (enemy == null)
        {
            // Hit tower or some other thing
            return;
        }

        if (source != null)
        {
            source.OnHit(enemy, damage);
        }

        HitTarget(enemy);
    }
コード例 #8
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.GetComponent <Entity>() != null)
     {
         if (collision.GetComponent <Player>() != null)
         {
             return;
         }
         Entity e = collision.GetComponent <Entity>();
         //e.GetComponent<SpriteRenderer>().color = new Color(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), 1);
         e.OnHit(-10);
         Rigidbody2D rb = e.GetComponent <Rigidbody2D>();
         if (rb != null)
         {
             rb.AddForce((e.transform.position - transform.position).normalized * 500);
         }
     }
 }
コード例 #9
0
        public virtual void OnHit(Collider hit)
        {
            Entity entity = hit.gameObject.GetComponent <Entity>();

            if (entity != null)
            {
                if ((owner.enemyFactions & entity.currentFaction) == entity.currentFaction)
                {
                    owner.OnHit(entity, damage);
                    entity.Damage(owner, damage);
                    if (knockback)
                    {
                        Vector3 direction = (entity.transform.position - owner.transform.position).normalized;
                        entity.gameObject.GetComponent <Rigidbody>().AddForce(direction * knockbackForce, ForceMode.Impulse);
                    }
                }
            }
        }
コード例 #10
0
    public override void OnItersect(Box box, Entity owner1, Entity owner2)
    {
        if (box is HitBox)
        {
            //TODO: deal with this appropratiely later
            Debug.Log("CLASH");
            return;
        }

        Vector2 impact        = HitData.TrajectoryModData.Impact;
        float   angularImpact = HitData.TrajectoryModData.AngularImpact;

        if (!owner1.FacingRight)
        {
            impact.x      *= -1.0f;
            angularImpact *= -1.0f;
        }

        HitBox hitBox = new HitBox(impact + HitData.MomentumGainData.GetMomentumGain(owner1.Velocity), angularImpact, this);

        owner1.OnHit(hitBox, (HurtBox)box, owner2);
        owner2.OnHitReceived(hitBox, (HurtBox)box, owner1);
    }
コード例 #11
0
ファイル: Grenade.cs プロジェクト: cloera/ZombieGame
    void Explode()
    {
        Collider[] col = Physics.OverlapSphere(transform.position, 10.0f);

        foreach (Collider c in col)
        {
            Entity e = c.gameObject.GetComponent <Entity> ();

            if (e != null)
            {
                if (e.gameObject.layer != LayerMask.NameToLayer("Survivor"))
                {
                    EnemyHit hit;
                    hit.damage = 50;

                    e.OnHit(hit);
                }
            }
        }

        Instantiate(explosionAnimPrefab, transform.position, explosionAnimPrefab.transform.rotation);
        Destroy(gameObject);
    }
コード例 #12
0
 public virtual void OnHit(Entity target)
 {
     if (isHealing)
     {
         target.Heal(damage);
     }
     else
     {
         target.Damage(owner, damage);
         if (owner != null)
         {
             owner.OnHit(target, damage);
         }
     }
     if (knockback)
     {
         if (target != null && owner != null)
         {
             Vector3 direction = (target.transform.position - owner.transform.position).normalized;
             target.gameObject.GetComponent <Rigidbody>().AddForce(direction * knockbackForce, ForceMode.Impulse);
         }
     }
 }
コード例 #13
0
ファイル: Gun.cs プロジェクト: qualiabyte/mukei-dolphin
    public virtual void OnHit(Entity target)
    {
        if (target.spirit == null) return;
        target.OnHit(this);

        if (user.isPlayer)
        {
            Debug.Log(
                "Hit! " + user + " -> " + target + " " +
                "power: " +
                target.spirit.light.power + " / " +
                target.spirit.darkness.power + ", exp: " +
                target.spirit.light.exp + " / " +
                target.spirit.darkness.exp
            );
        }
    }
コード例 #14
0
    void Shoot(Vector3 targetLocation)
    {
        GameManager.UseAmmo(WEAPON_TYPE.SNIPER);

        timer   = 0f;
        canFire = false;

        weaponComponents.gunAudio.Play();
        weaponComponents.gunLight.enabled = true;
        weaponComponents.gunParticles.Stop();
        weaponComponents.gunParticles.Play();
        weaponComponents.gunLine.enabled = true;
        weaponComponents.gunLine.SetPosition(0, weaponComponents.barrel.transform.position);

        shootRay.origin    = weaponComponents.barrel.transform.position;
        shootRay.direction = (targetLocation + Vector3.up * 0.5f) - weaponComponents.barrel.transform.position;

        RaycastHit[] shootHits;

        shootHits = Physics.RaycastAll(shootRay, range, shootMask);

        Vector3 farthestHitPoint = Vector3.zero;


        if (shootHits.Length > 0)
        {
            List <RaycastHit> sortedHits = SortHitListByDistance(shootHits);


            for (int i = 0; i < sortedHits.Count; i++)
            {
                RaycastHit hit = sortedHits[i];
                farthestHitPoint = hit.point;

                Entity      enemy       = hit.collider.GetComponent <Entity>();
                ClownShield clownShield = hit.collider.GetComponent <ClownShield>();

                if (enemy != null)
                {
                    enemy.OnHit(this, hit.point);

                    if (clownShield != null)
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
        }

        if (shootHits.Length > 0)
        {
            weaponComponents.gunLine.SetPosition(1, farthestHitPoint);
        }
        else
        {
            weaponComponents.gunLine.SetPosition(1, shootRay.origin + shootRay.direction * range);
        }
    }
コード例 #15
0
ファイル: Laser.cs プロジェクト: qualiabyte/mukei-dolphin
    public virtual void OnHit(Entity target)
    {
        if (target.spirit == null) return;
        target.OnHit(this);

        if (!(user is Dolphin)) return;
        /*
        Debug.Log(
            "Hit! " + user + " -> " + target + " " +
            "power: " +
            target.spirit.light.power + " / " +
            target.spirit.darkness.power + ", exp: " +
            target.spirit.light.exp + " / " +
            target.spirit.darkness.exp
        );
        */
    }
コード例 #16
0
    void Shoot(Vector3 targetLocation)
    {
        GameManager.UseAmmo(WEAPON_TYPE.SHOTGUN);

        timer   = 0f;
        canFire = false;

        weaponComponents.gunAudio.Play();
        weaponComponents.gunLight.enabled = true;
        weaponComponents.gunParticles.Stop();
        weaponComponents.gunParticles.Play();

        //gunLine.enabled = true;
        //gunLine.SetPosition (0, transform.position);


        Ray[] rays = CreateShotgunSpread();


        for (int i = 0; i < rays.Length; i++)
        {
            RaycastHit[] hits = Physics.RaycastAll(rays[i].origin, rays[i].direction, range, shootMask);

            Vector3 farthestHitPoint = Vector3.zero;

            if (hits.Length > 0)
            {
                List <RaycastHit> sortedHits = SortHitListByDistance(hits);


                foreach (RaycastHit rHit in sortedHits)
                {
                    Entity enemy = rHit.collider.GetComponent <Entity>();

                    farthestHitPoint = rHit.point;
                    if (enemy != null)
                    {
                        enemy.OnHit(this, shootHit.point);
                        break;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            GameObject   obj  = Instantiate(LineRenderPrefab, weaponComponents.barrel.transform.position, Quaternion.identity);
            LineRenderer line = obj.GetComponent <LineRenderer>();
            line.enabled = true;
            line.SetPosition(0, rays[i].origin);

            if (hits.Length > 0)
            {
                line.SetPosition(1, farthestHitPoint);
            }
            else
            {
                line.SetPosition(1, rays[i].origin + rays[i].direction * range);
            }
        }
    }