Esempio n. 1
0
    // 远程与近战武器携带时的角度调整 -- 如果是远程就调整子弹生成点 -- 如果是近战,就调整伤害框
    private void AdjustCurrentWeapon(WeaponType type, int index)
    {
        switch (type)
        {
        case WeaponType.MeleeType:
            Hands.transform.localEulerAngles = new Vector3(0, 0, -80f);
            CurrentTakeWeaponSprite.transform.localEulerAngles = new Vector3(0, 0, 90f);
            TakeDamager takeDamager = MeleeAttackDamager.GetComponent <TakeDamager>();
            takeDamager.offset   = ((MeleeWeapon)CurrentTakeWeapons[index]).offset;
            takeDamager.size     = ((MeleeWeapon)CurrentTakeWeapons[index]).size;
            takeDamager.hitPoint = ((MeleeWeapon)CurrentTakeWeapons[index]).HitPoint;
            break;

        case WeaponType.RangeType:
            Hands.transform.localEulerAngles = new Vector3(0, 0, -45f);
            CurrentTakeWeaponSprite.transform.localEulerAngles = new Vector3(0, 0, 0f);
            //if (CurrentTakeWeapons[index].getWeaponType() == WeaponType.RangeType)
            BulletPoint.localPosition = ((RangedWeapon)CurrentTakeWeapons[index]).OffsetPoint;
            // resert bullet pool
            GameObject bullet = ((RangedWeapon)CurrentTakeWeapons[index]).bullet;
            BulletsPool.prefab = bullet;
            GameObject[] bullets = BulletsPool.Restart(PoolGameobj.transform, 5);
            foreach (GameObject obj in bullets)
            {
                m_Status.RegisteredTakeDamger(obj.GetComponent <TakeDamager>());
            }
            m_Status.TakeDamagerFlush();
            break;
        }
    }
Esempio n. 2
0
        public void OnHurt(TakeDamager damager, TakeDamageable damageable)
        {
            //if the player don't have control, we shouldn't be able to be hurt as this wouldn't be fair
            if (!PlayerInput.Instance.HaveControl)
            {
                return;
            }

            UpdateFacing(damageable.GetDamageDirection().x > 0f);
            damageable.EnableInvulnerability();

            m_Animator.SetTrigger(m_HashHurtPara);

            //we only force respawn if health > 0, otherwise both forceRespawn & Death trigger are set in the animator, messing with each other.
            if (damageable.CurrentHealth > 0 && damager.forceRespawn)
            {
                m_Animator.SetTrigger(m_HashForcedRespawnPara);
            }

            m_Animator.SetBool(m_HashGroundedPara, false);
            hurtAudioPlayer.PlayRandomSound();

            //if the health is < 0, mean die callback will take care of respawn
            if (damager.forceRespawn && damageable.CurrentHealth > 0)
            {
                //StartCoroutine(DieRespawnCoroutine(false, true));
            }
        }
Esempio n. 3
0
 public void unRegisteredTakeDamger(TakeDamager takeDamager)
 {
     if (TakeDamagers.Contains(takeDamager))
     {
         TakeDamagers.Remove(takeDamager);
         takeDamager.status = null;
     }
 }
Esempio n. 4
0
 public void RegisteredTakeDamger(TakeDamager takeDamager)
 {
     if (!TakeDamagers.Contains(takeDamager))
     {
         TakeDamagers.Add(takeDamager);
         takeDamager.status = this;
     }
 }
Esempio n. 5
0
    public void ShowNum(TakeDamager damager, TakeDamageable able)
    {
        Text text = FindFreeText();

        text.text = damager.CurrentDamagNum.ToString();
        text.transform.localPosition = Vector3.zero;
        text.gameObject.SetActive(true);
        StartCoroutine(ShowAndFindPath(text));
    }
Esempio n. 6
0
    //public GameObject BlowoutObj;

    public void OnHit(TakeDamager takeDamagerBase, TakeDamageable damageable)
    {
        //GameObject vfx = Instantiate(Resources.Load<GameObject>("VFX/Blowout/PistolBulletHit"));
        //vfx.transform.position = transform.position;
        //vfx.GetComponent<Animation>().Play();
        //Destroy(this.gameObject);
        //gameObject.SetActive(false);
        // GameObject obj = MonoBehaviour.Instantiate(BlowoutObj);
        //obj.transform.position = transform.position;
    }
Esempio n. 7
0
 public void TakeDamagerFlush()
 {
     for (int i = 0; i < TakeDamagers.Count; i++)//foreach (TakeDamager damager in TakeDamagers)
     {
         TakeDamager damager = TakeDamagers[i];
         if (damager == null || damager.gameObject == null)
         {
             unRegisteredTakeDamger(damager);
         }
     }
 }
    /// <summary>
    /// 目前的弹射未携带之前的攻击特效 -- 同时可以优化,缓存GameObject.FindGameObjectsWithTag("Enemy");
    /// 不用每次都计算
    /// </summary>
    /// <param name="_damager"></param>
    /// <param name="_damageable"></param>
    public void Calculat(TakeDamager _damager, TakeDamageable _damageable)
    {
        GameObject calculatObj = FindOtherEnemyInRange(_damageable.transform);

        if (calculatObj == null)
        {
            return;
        }
        VFXControllerM.Instance.MakeLighting(_damageable.transform, calculatObj.transform, 0.2f);
        calculatObj.GetComponent <TakeDamageable>().TakeDamage(_damager);
    }
Esempio n. 9
0
    public void Die(TakeDamager damager, TakeDamageable damageable)
    {
        m_Animator.SetTrigger(m_HashDeathPara);
        dieAudio.PlayRandomSound();

        m_Dead = true;
        //Debug.Log(moveVector);
        //m_Collider.enabled = false;
        //gameObject.layer = 20;
        //CameraShaker.Shake(0.15f, 0.3f);
        plots[end - 1].gameObject.SetActive(true);
    }
Esempio n. 10
0
        public void Die(TakeDamager damager, TakeDamageable damageable)
        {
            //Vector2 throwVector = new Vector2(0, 2.0f);
            //Vector2 damagerToThis = damager.transform.position - transform.position;

            //throwVector.x = Mathf.Sign(damagerToThis.x) * -4.0f;
            //SetMoveVector(throwVector);

            m_Animator.SetTrigger(m_HashDeathPara);

            dieAudio.PlayRandomSound();

            m_Dead = true;
            //Debug.Log(moveVector);
            //m_Collider.enabled = false;
            gameObject.layer = 20;
            CameraShaker.Shake(0.15f, 0.3f);
        }
Esempio n. 11
0
    void OnSceneGUI()
    {
        TakeDamager damager = (TakeDamager)target;

        if (!damager.enabled)
        {
            return;
        }

        Matrix4x4 handleMatrix = damager.transform.localToWorldMatrix;

        ////Hotkang 2018.7.24 疑问: 用处何在? 注释掉后暂未发现区别
        ////Debug.Log(handleMatrix);
        handleMatrix.SetRow(0, Vector4.Scale(handleMatrix.GetRow(0), new Vector4(1f, 1f, 0f, 1f)));
        handleMatrix.SetRow(1, Vector4.Scale(handleMatrix.GetRow(1), new Vector4(1f, 1f, 0f, 1f)));
        handleMatrix.SetRow(2, new Vector4(0f, 0f, 1f, damager.transform.position.z));
        ////Debug.Log(handleMatrix);
        using (new Handles.DrawingScope(handleMatrix))
        {
            s_BoxBoundsHandle.center = damager.offset;
            s_BoxBoundsHandle.size   = damager.size;

            s_BoxBoundsHandle.SetColor(s_EnabledColor);
            EditorGUI.BeginChangeCheck();
            s_BoxBoundsHandle.DrawHandle();
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(damager, "Modify Damager");

                damager.size   = s_BoxBoundsHandle.size;
                damager.offset = s_BoxBoundsHandle.center;
            }
        }
        // 画点
        //Handles.DotHandleCap(0, damager.hitPoint+ new Vector2(10, 0), Quaternion.identity, 2, EventType.DragUpdated);
        //Handles.DotHandleCap(0, damager.hitPoint + new Vector2(0, 5), Quaternion.identity, 2, EventType.DragUpdated);
        //Debug.Log("drow nice");
    }
Esempio n. 12
0
    public void Hit(TakeDamager damager, TakeDamageable damageable)
    {
        if (damageable.CurrentHealth <= 0)
        {
            return;
        }

        m_Animator.SetTrigger(m_HashHitPara);

        //Vector2 throwVector = new Vector2(0, 3.0f);
        //Vector2 damagerToThis = damager.transform.position - transform.position;

        //throwVector.x = Mathf.Sign(damagerToThis.x) * -2.0f;
        //m_MoveVector = throwVector;

        if (m_FlickeringCoroutine != null)
        {
            StopCoroutine(m_FlickeringCoroutine);
            m_SpriteRenderer.color = m_OriginalColor;
        }

        m_FlickeringCoroutine = StartCoroutine(Flicker(damageable));
        CameraShaker.Shake(0.15f, 0.3f);
    }
Esempio n. 13
0
 public void ToPool(TakeDamager damager, TakeDamageable damageable)
 {
     base.ReturnToPool();
 }
Esempio n. 14
0
    public void Blowout(TakeDamager damager, TakeDamageable damageable)
    {
        GameObject vfx = MonoBehaviour.Instantiate(BlowoutEffect);

        vfx.transform.position = damageable.AttackPoint;
    }
Esempio n. 15
0
        public void OnDie(TakeDamager damager, TakeDamageable able)
        {
            m_Animator.SetTrigger(m_HashDeadPara);

            StartCoroutine(DieRespawnCoroutine(true, false));
        }
Esempio n. 16
0
 public void HitEnemy(TakeDamager take, TakeDamageable takeDamageable)
 {
     MeleeAcAudio.Stop();
     MeleeAcAudio.PlayRandomSound(HitObject.Enemy);
 }
Esempio n. 17
0
 public void HitAir(TakeDamager take)
 {
     MeleeAcAudio.PlayRandomSound(HitObject.Air);
 }
Esempio n. 18
0
 void PlayerDied(TakeDamager d, TakeDamageable da)
 {
     BackgroundMusicPlayer.Instance.PushClip(playerDeathClip);
 }
Esempio n. 19
0
    /// <summary>
    /// 造成伤害
    /// </summary>
    /// <param name="damager"></param>
    /// <param name="ignoreInvincible"></param>
    public void TakeDamage(TakeDamager damager, List <IBuff> buffs = null, bool ignoreInvincible = false)
    {
        AttackPoint = damager.hitPoint;//damager.AttackPoints[0].point;
        // 无敌,或忽略伤害
        if ((m_Invulnerable && !ignoreInvincible) || CurrentHealth <= 0)
        {
            return;
        }

        //we can reach that point if the damager was one that was ignoring invincible state.
        //We still want the callback that we were hit, but not the damage to be removed from health.
        if (!m_Invulnerable)
        {
            // 如果身上带有buff, 则刷新buff时间持续时间和效果 -- 需求变为可以有相同 buff
            if (buffs != null)
            {
                foreach (IBuff buff in buffs)
                {
                    if (buff != null)
                    {
                        status.AddStatusBuff(buff);
                        //buff.BuffOnEnter(gameObject);
                    }

                    /* 需求变为可以有相同 buff
                     * if (buff != null)
                     * {
                     *  if (!status.ContainsStatusBuff(buff.getBuffType()))
                     *  {
                     *      status.AddStatusBuff(buff);
                     *      buff.BuffOnEnter(gameObject);
                     *  }
                     *  else
                     *  {
                     *      IBuff b = status.FindStatusBuff(buff.getBuffType());
                     *      if (b != null && buff.LV > b.LV) b.FlushLV(b.LV);
                     *  }
                     * }*/
                }
            }

            if (damager.IsSpike() && status.StatusType != CharacterType.Boss)
            {
                status.HP -= float.MaxValue;
            }
            else
            {
                status.HP -= damager.CurrentDamagNum * status.HurtInfluences;
            }

            //Debug.Log( status.HP);
            OnHealthSet.Invoke(this);
        }

        m_DamageDirection = transform.position + (Vector3)centreOffset - damager.transform.position;

        OnTakeDamage.Invoke(damager, this);

        if (status.HP <= 0)
        {
            OnDie.Invoke(damager, this);
            //m_ResetHealthOnSceneReload = true;
            EnableInvulnerability();
            if (disableOnDeath)
            {
                gameObject.SetActive(false);
            }
        }
    }
Esempio n. 20
0
 public void Miss(TakeDamager damager, TakeDamageable able)
 {
 }