示例#1
0
    //【特殊武器】使用后(武器)硬直计时
    IEnumerator SpecialGunShowTiming()
    {
        float specialGunShowTiming = 0;

        while (true)
        {
            specialGunShowTiming += Time.deltaTime;
            if (specialGunShowTiming >= 0.3f)
            {
                break;
            }
            yield return(0);
        }
        //更新当前使用左/右手
        m_CurrentUseGunis = UseLeftOrRightGun.LeftGun;

        //【特殊武器】使用完之后(主武器显示,特殊武器消失)
        //计时结束,消失特殊武器,展现主武器
        //特殊武器关闭(开启使用)【关闭Renderer进行显示,关闭(开启可用)Enable】
        AllGunCDic[RightGunType].IfGunCanUse(false);
        AllGunCDic[RightGunType].SpriteRendererEnabled = false;
        AllGunDic[RightGunType].GetComponent <BoxCollider2D>().enabled = false;
        //主武器可用【开启Renderer进行显示,开启(开启可用)Enable】
        AllGunCDic[LeftGunType[m_CurrentLeftGunIndex]].SpriteRendererEnabled = true;
        AllGunCDic[LeftGunType[m_CurrentLeftGunIndex]].IfGunCanUse(true);
        AllGunDic[LeftGunType[m_CurrentLeftGunIndex]].GetComponent <BoxCollider2D>().enabled = true;
    }
示例#2
0
    /// <summary>
    /// 创建子弹
    /// </summary>
    /// <param name="ButtleName">子弹名字</param>
    /// <param name="Pos">子弹初始位置</param>
    /// <param name="Rotate">子弹初始旋转</param>
    /// <param name="Scatte">散射度数</param>
    /// <param name="ButtleSpeed">子弹速度</param>
    /// <param name="AttackDistance">子弹飞行距离</param>
    /// <param name="DemageNums">子弹伤害</param>
    private void CreateBullet(string ButtleName, Vector3 Pos, Vector3 Rotate, float Scatte, uint ButtleSpeed, float AttackDistance, float DemageNums)
    {
        //生成子弹(调整位置与角度)
        //【判断当前使用左/右手】
        GunType currentGunType = m_CurrentLeftGunType;

        switch (m_CurrentUseGunis)
        {
        case UseLeftOrRightGun.LeftGun:
            currentGunType = m_CurrentLeftGunType;
            break;

        case UseLeftOrRightGun.RightGun:
            currentGunType = RightGunType;
            break;
        }
        //【判断当前是否核心攻击】
        string        currentBulletName    = "Bullet/" + currentGunType + "/" + ButtleName;
        CoreAttribute currentCoreAttribute = CoreAttribute.Initial;

        if (m_CurrentBaseCore != null)
        {
            switch (m_CurrentBaseCore.Element)
            {
            case BaseCore.CoreElement.Primary:
                currentBulletName    = "Bullet/Core/Initial/" + m_CoreBullet[0].name;
                currentCoreAttribute = CoreAttribute.Initial;
                break;

            case BaseCore.CoreElement.Fire:
                currentBulletName    = "Bullet/Core/Fire/" + m_CoreBullet[1].name;
                currentCoreAttribute = CoreAttribute.Fire;
                break;

            case BaseCore.CoreElement.Amethyst:
                currentBulletName    = "Bullet/Core/Amethyst/" + m_CoreBullet[2].name;
                currentCoreAttribute = CoreAttribute.Amethyst;
                break;

            case BaseCore.CoreElement.Ice:
                currentBulletName    = "Bullet/Core/Frozen/" + m_CoreBullet[3].name;
                currentCoreAttribute = CoreAttribute.Frozen;
                break;
            }
        }
        //currentBulletName = ButtleName;//敌人子弹测试
        GameObject buttleGameObject = ObjectPool.Instance.Spawn(currentBulletName);

        buttleGameObject.transform.position = Pos;
        buttleGameObject.transform.rotation = Quaternion.Euler(
            Rotate + new Vector3(0, 0, Scatte));
        //子弹数据填充
        Bullet buttle        = buttleGameObject.GetComponent <Bullet>();
        float  currentDeamge = DemageNums * m_CurrentButtleDemagePercent;//伤害比例加成

        buttle.BulletStart(ButtleSpeed, AttackDistance, currentDeamge, AllGunCDic[currentGunType].Gun_Data.HardStraight, AllGunCDic[currentGunType].Gun_Data.BeatBack, currentGunType.ToString(), currentCoreAttribute);

        //更新当前使用左/右手
        m_CurrentUseGunis = UseLeftOrRightGun.LeftGun;

        //当前为火箭系统
        if (m_RocketGunState)
        {
            UseRocketGun(true);
        }
    }
示例#3
0
    /// <summary>
    /// -------------------------------------------------------------------------------------------------------------------important!!!
    /// 特殊武器使用时,状态检测
    /// 判断当前特殊武器是否可以射击
    /// 1、特殊武器,判断是否是消耗Mp为不是Hp
    /// </summary>
    /// <returns>是否可以射击</returns>
    public bool SpecialGunCheckOut()
    {
        //判断特殊武器是否违背Hp不可用原则
        //【并且更新特殊武器GunSpecialEnable】
        bool ifSpecialGunCanUse;//特殊武器是否可以用

        MpAndHpListener(out ifSpecialGunCanUse);

        //如果特殊武器可以用【开启Renderer进行显示】
        if (ifSpecialGunCanUse)
        {
            //特殊武器可以用【开启Renderer进行显示,开启(开启可用)Enable】
            AllGunCDic[RightGunType].SpriteRendererEnabled = true;
            AllGunCDic[RightGunType].IfGunCanUse(true);
            AllGunDic[RightGunType].GetComponent <BoxCollider2D>().enabled = true;
            //主武器不可用【关闭Renderer进行显示,关闭(开启可用)Enable】
            AllGunCDic[LeftGunType[m_CurrentLeftGunIndex]].SpriteRendererEnabled = false;
            AllGunCDic[LeftGunType[m_CurrentLeftGunIndex]].IfGunCanUse(false);
            AllGunDic[LeftGunType[m_CurrentLeftGunIndex]].GetComponent <BoxCollider2D>().enabled = false;
        }
        else//特殊武器不能用
        {
            return(false);
        }


        //---------------------------------------------------
        //【特殊武器可以用情况下】
        //当前使用的是右手(特殊武器)
        m_CurrentUseGunis = UseLeftOrRightGun.RightGun;
        //判断当前特殊武器种类
        switch (RightGunType)
        {
        //以下等待攻击结束才切回主武器
        case GunType.AK47Gun:
            break;

        case GunType.Sword:
            break;

        case GunType.Hammer:
            break;

        case GunType.RocketGun:
            break;

        //----------------------------
        //todo 以下会自身【硬直】0.3s才切回主武器
        case GunType.RevolverGun:
            StartCoroutine(SpecialGunShowTiming());
            break;

        case GunType.ShotGun:
            StartCoroutine(SpecialGunShowTiming());
            break;

        case GunType.AWMGun:
            StartCoroutine(SpecialGunShowTiming());
            break;
        }

        return(true);
    }