Esempio n. 1
0
    private void OnCollisionEnter2D(Collision2D other)
    {
        Debug.Log(other.gameObject.layer);
        if (other.transform.CompareTag("Enemy"))
        {
            other.transform.GetComponent <Enemy>().hurt(dmg, dir, force);

            float r = Random.Range(0.0f, 1.0f);
            if (r >= explosionRate)
            {
                MyInpulse.GenerateImpulse();
                PoolManager.Spawn("explosion", transform.position, Quaternion.identity, 0.2f);
                AudioManager.instance.PlaySound("explosion");
                var collider2Ds =
                    Physics2D.OverlapCircleAll(transform.position, explosionRadius, LayerMask.GetMask("Enemy"));
                foreach (var collider in collider2Ds)
                {
                    collider.gameObject.GetComponent <Enemy>().hurt(dmg, Random.Range(-1, 1) > 0.5 ? 1 : -1, 0);
                }
            }
        }

        var pos = transform.position;

        pos.x += dir * 0.65f;
        PoolManager.Spawn("hitEffect1", pos, transform.localRotation, 0.07f);
        Destroy(this.gameObject);
    }
Esempio n. 2
0
 /// <summary>
 /// 减少生命值
 /// </summary>
 /// <param name="value">要减少的值</param>
 public void ReduceLife(int value)
 {
     playerData.life -= value;
     if (playerData.life < 0)
     {
         playerData.life = 0;
     }
     UpdateStateUI();
     cinemachineCollisionImpulseSource.GenerateImpulse();
 }
    void initialBoom(float rotateTime)
    {
        float basef = 10;
        //if (rotateTime >= 0.5)
        //    basef = 5;
        //if (rotateTime >= 0.7)
        //    basef = 10;
        //if (rotateTime >= 0.8)
        //    basef = 20;
        //if(rotateTime >= 0.9)
        //    basef = 30;
        //if (rotateTime >= 1)
        //    basef = 50;
        //if (rotateTime >= 1.1)
        //    basef = 70;
        //if (rotateTime >= 1.2)
        //    basef = 90;
        //if (rotateTime >= 1.3)
        //    basef = 110;
        //if (rotateTime >= 1.4)
        //    basef = 130;

        float       booMPower   = rotateTime * rotateTime * basef + 0.2f;
        AttackPower attackPower = AttackPower.pa;

        if (booMPower >= 6.2f)
        {
            attackPower = AttackPower.boom;
            centerController.showNotify("DOOM", Color.red, attackPower);
        }
        else if (booMPower > 3f)
        {
            attackPower = AttackPower.dong;
            centerController.showNotify("Dong", Color.yellow, attackPower);
        }
        else
        {
            attackPower = AttackPower.pa;
            centerController.showNotify("Pa", Color.white, attackPower);
        }



        // Debug.Log("Roteta" + rotateTime * rotateTime *basef+ "velo " );
        GameObject a = Instantiate(BoomEFprefab, armController.getHitPos(), Quaternion.identity);

        a.transform.localScale *= 1 + rotateTime * 2;
        a.GetComponent <BoomEF>().beCreat(attackPower);
        CinemachineCollisionImpulseSource cs = this.GetComponent <CinemachineCollisionImpulseSource>();

        cs.m_ImpulseDefinition.m_AmplitudeGain = booMPower;
        cs.GenerateImpulse();
    }
Esempio n. 4
0
    private void PowerHit()
    {
        Ray ray = new Ray(hitPoint.position, transform.forward);

        RaycastHit[] hits = Physics.SphereCastAll(ray, 1f, hitDistance, LayerMask.GetMask("Enemy"));
        if (hits != null)
        {
            foreach (var hit in hits)
            {
                ILife life = hit.collider.GetComponent <ILife>();
                if (life != null)
                {
                    life.Reduce(gameObject, power * 2);
                    cinemachineCollisionImpulseSource.GenerateImpulse(new Vector3(1, 2, 0));
                }
            }
        }
    }