Example #1
0
 void recoveryBreath()                                                                                                                                                                                                                           //恢复气息
 {
     if (CharacterAttribute.GetInstance().Breath_real < CharacterAttribute.GetInstance().MaxBreath&& (CharacterControl.instance.currentState == state.normal || CharacterControl.instance.currentState == state.walk) && !Scene.instance.isInit) //初始化中不可回复
     {
         CharacterAttribute.GetInstance().Breath = CharacterAttribute.GetInstance().Breath_real + (CharacterAttribute.GetInstance().isOverLoad_breath? CharacterAttribute.GetInstance().Speed_recovery_overload : CharacterAttribute.GetInstance().Speed_recovery) * Time.deltaTime;
     }
 }
Example #2
0
 bool shoot()   //射击
 {
     if (MyInput.instance.isGetShoot() && isEnable[(int)state.shoot] && isGetInput)
     {
         if (isJump)
         {
             if (JumpShootTimes < MaxJumpShootTimes && !CharacterAttribute.GetInstance().isOverLoad_breath)
             {
                 currentState = state.jumpshoot;
                 //CharacterObjectManager.instance.arrow_2();
                 YJumpSpeed   = 0;
                 rig.velocity = new Vector2(0, 0);                                                             //停滞在空中
                 JumpShootTimes++;
                 CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_jumpshoot; //气息消耗
             }
         }
         else
         {
             if (!CharacterAttribute.GetInstance().isOverLoad_breath)
             {
                 currentState = state.shoot;
                 CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_shoot;   //气息消耗
                 Invoke("arrow", 0.2f);
             }
         }
         return(true);
     }
     return(false);
 }
Example #3
0
    public bool hurt(int Damage, Attribute attribute, Vector3 CollCenter) //受伤调用函数
    {
        float hurt_contined_time = 1;                                     //无敌持续时间

        if (!isHurt)
        {
            //方向
            if (CollCenter.x > transform.position.x)
            {
                Dir = dir.right;
            }
            else
            {
                Dir = dir.left;
            }

            if (Event_hurt != null)
            {
                Event_hurt();
            }
            CharacterAttribute.GetInstance().reduce_HP(Damage);
            isHurt       = true;
            currentState = state.hurt;
            _dashTime    = 0;
            Invoke("end_invincibility", hurt_contined_time);
            CharacterObjectManager.instance.BeHurt();  //开启图片动画
            return(true);
        }
        return(false);
    }
Example #4
0
    private void opneNewGemGroove(int i)   //开启一个新的武器槽
    {
        int currentNum = 0;

        i -= 1;

        switch (armsInfo[currentArms].name)   //更新人物数据
        {
        case "swords":
            CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].currentGemNum++;
            currentNum = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].currentGemNum;
            break;

        case "arrow":
            CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].currentGemNum++;
            currentNum = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].currentGemNum;
            break;

        case "spear":
            CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].currentGemNum++;
            currentNum = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].currentGemNum;
            break;
        }

        StartCoroutine(IE_openNewGroove(currentNum - 1));

        GemGroove[currentNum - 1].GetComponent <Button>().enabled = false; //禁用按钮

        Bag.getInstance().ConsumeFragment(PerGrooveFragNum);               //消耗碎片
    }
Example #5
0
    private void OnEnable()
    {
        CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].GemWork();   //结晶作用

        rig.velocity    = new Vector2(CharacterControl.instance.Dir == dir.left ? -speed : speed, 0);
        SRenderer.flipX = CharacterControl.instance.Dir == dir.left ? true : false;

        boxCol.enabled        = true;
        trailRenderer.enabled = true;
        particle.enabled      = true;
        isTrigger             = false;

        Vector3 characterPosition = CharacterControl.instance.transform.position;

        transform.parent        = null;                                                                                                                                                                                                                 // 防止物体跟随主角
        transform.localPosition = CharacterControl.instance.Dir == dir.left ? new Vector3(characterPosition.x - 1.3f, characterPosition.y + 1.37f, characterPosition.z - 9) : new Vector3(characterPosition.x + 1.3f, characterPosition.y + 1.32f, -9); //初始化位置

        //根据属性改变颜色
        Material a = trailRenderer.material;

        a.SetColor("_Color", GameData.Attribute2Color(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.arrow]));  //颜色减淡
        SR.color = GameData.Attribute2Color(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.arrow]);

        //获取当前属性和伤害
        currentAttribute = CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.arrow];
        damage           = CharacterAttribute.GetInstance().Attack[(int)Arms.arrow];

        ElementTrigger.element = currentAttribute;
    }
Example #6
0
    void work()
    {
        //增加血量
        CharacterAttribute.GetInstance().add_HP(SoulAmout);

        StartCoroutine(IE_effect());
    }
Example #7
0
 virtual public bool Take(Arms arms)                                                        //返回是否操作成功
 {
     if (CharacterAttribute.GetInstance().ArmsGemGroove[(int)arms].getLeftGrooveNum() <= 0) //是否有空出的槽
     {
         return(false);
     }
     attachArms = arms;
     return(true);
 }   //佩戴
Example #8
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (t == false)
     {
         CharacterAttribute.GetInstance().add_HP(add_num);
         sRenderer.color = new Color(sRenderer.color.r, sRenderer.color.g, sRenderer.color.b, 0.5f);
         t = true;
     }
 }
Example #9
0
 bool Throw()   //扔
 {
     if (MyInput.instance.isGetThrow() && CharacterAttribute.GetInstance().isEnable[(int)state.Throw] && !CharacterAttribute.GetInstance().isOverLoad_breath&& isGetInput)
     {
         currentState = state.Throw;
         CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_throw;
         return(true);
     }
     return(false);
 }
Example #10
0
    public override bool TakeOff()
    {
        if (base.TakeOff() == false)
        {
            return(false);
        }

        CharacterAttribute.GetInstance().ArmsAttribute[(int)attachArms] = Attribute.normal;
        return(true);
    }
Example #11
0
    public void putOnGem(int ItemIndex)
    {
        if (Bag.getInstance().GemItem[ItemIndex] != null) //当前格子是否有物品
        {
            switch (armsInfo[currentArms].name)           //更新人物数据
            {
            case "swords":
                if (Bag.getInstance().GemItem[ItemIndex].Take(Arms.swords))
                {
                    int i = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].takeOn(Bag.getInstance().GemItem[ItemIndex]); //装备结晶
                    Bag.getInstance().GemItem[ItemIndex] = null;                                                                           //该格子变为空

                    updateGemGroove();                                                                                                     //更新显示
                    updateGemItemShow();
                    InfoBoxRect.gameObject.SetActive(false);

                    StartCoroutine(Animation_putonGem(i));
                    return;
                }
                break;

            case "arrow":
                if (Bag.getInstance().GemItem[ItemIndex].Take(Arms.arrow))
                {
                    int i = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].takeOn(Bag.getInstance().GemItem[ItemIndex]);       //装备结晶
                    Bag.getInstance().GemItem[ItemIndex] = null;

                    updateGemGroove();      //更新显示
                    updateGemItemShow();
                    InfoBoxRect.gameObject.SetActive(false);

                    StartCoroutine(Animation_putonGem(i));
                    return;
                }
                break;

            case "spear":
                if (Bag.getInstance().GemItem[ItemIndex].Take(Arms.spear))
                {
                    int i = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].takeOn(Bag.getInstance().GemItem[ItemIndex]);        //装备结晶
                    Bag.getInstance().GemItem[ItemIndex] = null;

                    updateGemGroove();      //更新显示
                    updateGemItemShow();
                    InfoBoxRect.gameObject.SetActive(false);

                    StartCoroutine(Animation_putonGem(i));
                    return;
                }
                break;
            }
        }

        StartCoroutine(Animation_shake(GemItem[ItemIndex].transform));  //播放无法穿戴动画
    }
Example #12
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.tag.CompareTo("Player") == 0 && isEnable)
     {
         isEnable       = false;
         bloom_SR.color = GameFunction.Transparent;
         coin_SR.color  = GameFunction.Transparent;
         bl_SR.color    = GameFunction.Transparent;
         CharacterAttribute.GetInstance().coinNum++; //加钱
         StartCoroutine(animation_getCoin());
     }
 }
Example #13
0
 private void OnEnable()
 {
     CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].GemWork();   //结晶作用
     try
     {
         ElementTrigger.element = CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.swords];
     }
     catch
     {
     }
     animator.SetTrigger(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.swords].ToString());   //根据属性更改动画
     isContact = false;
 }
Example #14
0
 bool dash()
 {
     if (MyInput.instance.isGetDash() && isEnable[(int)state.dash] && !CharacterAttribute.GetInstance().isOverLoad_breath&& dashTimes < 1 && isGetInput)
     {
         dashTimes++;
         currentState = state.dash;  //冲刺
         CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_dash;
         CharacterObjectManager.instance.dash();
         Timer_dashScale = 0;
         return(true);
     }
     return(false);
 }
Example #15
0
    // Update is called once per frame
    void Update()
    {
        if (CharacterAttribute.GetInstance().isOverLoad_breath)
        {
            Img.color = Color.Lerp(overload_min, overload_max, CharacterAttribute.GetInstance().Breath_real / CharacterAttribute.GetInstance().MaxBreath);
        }
        else
        {
            Img.color = normal;
        }

        rTrans.sizeDelta = GameFunction.getVector2(CharacterAttribute.GetInstance().Breath_real * 183 / CharacterAttribute.GetInstance().MaxBreath, 18);
    }
Example #16
0
    private void FixedUpdate()
    {
        //过载
        if (CharacterAttribute.GetInstance().Breath_real <= 0)
        {
            CharacterAttribute.GetInstance().isOverLoad_breath = true;
        }
        //是否恢复
        if (CharacterAttribute.GetInstance().Breath_real >= CharacterAttribute.GetInstance().MaxBreath)
        {
            CharacterAttribute.GetInstance().isOverLoad_breath = false;
        }

        recoveryBreath();
    }
Example #17
0
    IEnumerator IE_getSoul()
    {
        isNone = true;

        Halo.GetComponent <TrailRenderer>().enabled = true;

        float   _time0 = 0;
        Vector3 t_originPos_Halo = Halo.transform.position;
        Vector3 p1, p2;
        Vector3 _dir   = Halo.transform.position - CharacterControl.instance.transform.position;
        Vector3 _dir_2 = Vector3.Cross(_dir, Vector3.back);

        _dir.z   = 0;
        _dir_2.z = 0;
        p1       = Halo.transform.position + _dir * 2f;
        p2       = (CharacterControl.instance.transform.position + Halo.transform.position) / 2.0f + _dir_2 * 1f;
        p1.z     = 0;
        p2.z     = 0;
        while (_time0 < animation_duration)
        {
            _time0 += Time.deltaTime;
            float t = _time0 / animation_duration;
            Halo.transform.position = BezierLine(t_originPos_Halo, CharacterControl.instance.transform.position + Vector3.up, p1, p2, t);

            yield return(null);
        }
        CharacterAttribute.GetInstance().add_HP(CharacterAttribute.GetInstance().MaxHP);

        _time0 = 0;
        Soul.SetActive(false);
        SpriteRenderer t_SR = Halo.GetComponent <SpriteRenderer>();

        while (_time0 < duration_expand)
        {
            _time0 += Time.deltaTime;
            float t = _time0 / duration_expand;
            Halo.transform.localScale = Vector3.Lerp(Halo.transform.localScale, Vector3.one * 6f, t);
            t_SR.color = Color.Lerp(t_SR.color, new Color(1, 1, 1, 0), t);

            yield return(null);
        }

        Particle.SetActive(false);
        Halo.SetActive(false);
    }
Example #18
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag.CompareTo("enemy") == 0)                                                                                                        //攻击敌人
        {
            CharacterControl.instance.add_Velocity(new Vector2(CharacterControl.instance.Dir == dir.left ?  backVelocity_enemy: -backVelocity_enemy, 0)); //击退并加特效
            if (!isContact)
            {
                GameObject t = CharacterObjectManager.instance.getHitPoint();
                t.SetActive(true);
                t.transform.position = collision.bounds.center;
                t.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360));
                CharacterObjectManager.instance.PlaySwordHurtParticle(collision.bounds.center);
                isContact = true;
            }

            CharacterObjectManager.instance.sendHurt(CharacterAttribute.GetInstance().Attack[(int)Arms.swords], CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.swords], collision.gameObject.GetInstanceID(), CharacterControl.instance._collider.bounds.center);
        }
    }
Example #19
0
    private void OnCollisionStay2D(Collision2D collision)
    {
        Collider.isTrigger = true;                  //碰到物体变为触发器
        HitPoint           = collision.contacts[0]; //获取碰撞点
        if (collision.gameObject.layer.CompareTo(LayerMask.NameToLayer("terrain")) == 0)
        {
            if (!isContact)
            {
                GameObject t = CharacterObjectManager.instance.getHitPoint();
                t.SetActive(true);
                t.transform.position = HitPoint.point;
                t.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 360));
                CharacterObjectManager.instance.PlaySwordHurtParticle(HitPoint.point);
                isContact = true;
            }

            CharacterObjectManager.instance.sendHurt(0, CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.swords], collision.gameObject.GetInstanceID(), Vector2.zero);
        }
    }
Example #20
0
    void Start()
    {
        startPoint = GameObject.Find("startPoint").transform;

        current_HP = CharacterAttribute.GetInstance().HP;
        MaxHP      = CharacterAttribute.GetInstance().MaxHP;
        Icon       = new ArrayList();
        for (int i = 0; i < MaxHP; i++)
        {
            GameObject t = Instantiate(soulIcon, position: (Vector2)startPoint.position + new Vector2(soul_space_width * i, soul_space_height * (i % 2 == 0?-1:1)), rotation: new Quaternion(0, 0, 0, 0)) as GameObject;
            t.transform.SetParent(this.transform, true);
            t.transform.localScale = new Vector3(1, 1, 1); //改回原来的比例
            Icon.Add(t);
            if (i >= current_HP)                           //     对空灵魂槽的操作
            {
                t.GetComponent <Image>().color = new Color(1, 1, 1, 0.2f);
            }
        }
    }
Example #21
0
    public bool hurt(int Damage, Attribute attribute) //受伤调用函数(不指定方向)
    {
        float hurt_contined_time = 1;                 //无敌持续时间

        if (!isHurt)
        {
            if (Event_hurt != null)
            {
                Event_hurt();
            }
            CharacterAttribute.GetInstance().reduce_HP(Damage);
            isHurt       = true;
            currentState = state.hurt;
            _dashTime    = 0;
            Invoke("end_invincibility", hurt_contined_time);
            CharacterObjectManager.instance.BeHurt();  //开启图片动画
            return(true);
        }
        return(false);
    }
Example #22
0
 void Update()
 {
     if (CharacterAttribute.GetInstance().HP > current_HP)     //HP已增加
     {
         int num = CharacterAttribute.GetInstance().HP - current_HP;
         current_HP = CharacterAttribute.GetInstance().HP;
         add_soul(num);
     }
     if (CharacterAttribute.GetInstance().HP < current_HP)  //HP已减少
     {
         int num = current_HP - CharacterAttribute.GetInstance().HP;
         current_HP = CharacterAttribute.GetInstance().HP;
         reduce_soul(num);
     }
     if (CharacterAttribute.GetInstance().MaxHP > MaxHP)  //最大HP已增加
     {
         int num = CharacterAttribute.GetInstance().MaxHP - MaxHP;
         MaxHP = CharacterAttribute.GetInstance().MaxHP;
         add_MaxSoul(num);
     }
 }
Example #23
0
    public void TakeOffGem(int i)  //卸下结晶
    {
        //放入背包
        //从武器槽脱下
        //属性重设
        if (Bag.getInstance().getLeftItem() <= 0)
        {
            return;  //背包空间不足
        }
        Arms type = name2type(armsInfo[currentArms].name);

        CharacterAttribute.GetInstance().ArmsGemGroove[(int)type].GemItem[i].TakeOff();
        int t = Bag.getInstance().putGemIntoBag(CharacterAttribute.GetInstance().ArmsGemGroove[(int)type].GemItem[i]);

        CharacterAttribute.GetInstance().ArmsGemGroove[(int)type].GemItem[i] = null;

        //更新显示
        updateGemGroove();
        updateGemItemShow();

        StartCoroutine(Animation_putoffGem(t));  //动画
        return;
    }
Example #24
0
 bool attack()  //封装攻击
 {
     if (MyInput.instance.isGetAttack() && isEnable[(int)state.attack1] && !CharacterAttribute.GetInstance().isOverLoad_breath&& isGetInput)
     {
         if (isAttack && _DoubleAttackSpaceTime < DoubleAttackSpaceTime)
         {
             currentState           = state.attack2;
             isAttack               = false;
             _DoubleAttackSpaceTime = 0;
             CharacterObjectManager.instance.attack2(Dir);
         }
         else
         {
             currentState           = state.attack1;
             isAttack               = true;
             _DoubleAttackSpaceTime = 0;
             CharacterObjectManager.instance.attack1(Dir);
         }
         CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_attack; //气息消耗
         return(true);
     }
     return(false);
 }
Example #25
0
    private void OnEnable()
    {
        CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].GemWork();                   //结晶作用

        rig.velocity = new Vector2(CharacterControl.instance.Dir == dir.left ? -1 : 1, tan) * speed; //初始速度

        boxCol.enabled        = true;
        trailRenderer.enabled = true;
        particle.enabled      = true;
        isTrigger             = false;

        transform.parent = null; // 防止物体跟随主角

        //根据属性改变颜色
        Material t = trailRenderer.material;

        t.SetColor("_Color", GameData.Attribute2Color(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.spear]));  //颜色减淡
        SR.color = GameData.Attribute2Color(CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.spear]);

        currentAttribute = CharacterAttribute.GetInstance().ArmsAttribute[(int)Arms.spear]; //获取当前属性
        damage           = CharacterAttribute.GetInstance().Attack[(int)Arms.spear];        //获取当前伤害

        ElementTrigger.element = currentAttribute;
    }
Example #26
0
 void Init()  //重新读取人物属性
 {
     JumpTimes         = CharacterAttribute.GetInstance().JumpTimes;
     MaxJumpShootTimes = CharacterAttribute.GetInstance().MaxJumpShootTimes;
     isEnable          = CharacterAttribute.GetInstance().isEnable;
 }
Example #27
0
    private void Start()
    {
        headOutline   = GameObject.Find("Head").GetComponent <Outline>();
        HeadOriginPos = headOutline.gameObject.transform.position;

        GemInfo = readInfo();  //读取结晶信息

        //--初始化
        point    = new RectTransform[3];
        point[2] = GameObject.Find("arms_point_left").GetComponent <RectTransform>();
        point[0] = GameObject.Find("arms_point_middle").GetComponent <RectTransform>();
        point[1] = GameObject.Find("arms_point_right").GetComponent <RectTransform>();

        //初始化各个武器的位置
        if (CharacterAttribute.GetInstance().isEnable[(int)state.attack1])  //检查当前有哪些武器
        {
            ArmsList.Add(sword);
        }
        else
        {
            sword.gameObject.SetActive(false);
        }
        if (CharacterAttribute.GetInstance().isEnable[(int)state.shoot])
        {
            ArmsList.Add(arrow);
        }
        else
        {
            arrow.gameObject.SetActive(false);
        }
        if (CharacterAttribute.GetInstance().isEnable[(int)state.jumpshoot])
        {
            ArmsList.Add(spear);
        }
        else
        {
            spear.gameObject.SetActive(false);
        }
        armsInfo = new ArmsInfo[ArmsList.Count];
        for (int i = 0; i < ArmsList.Count; i++)
        {
            ((RectTransform)ArmsList[i]).position = point[i].position;

            armsInfo[i].rectTrans = ((RectTransform)ArmsList[i]);
            armsInfo[i].name      = ((RectTransform)ArmsList[i]).name;
            armsInfo[i].pos       = i;
            armsInfo[i].image     = ((RectTransform)ArmsList[i]).gameObject.GetComponent <Image>();

            if (i == 0)   //改变样式
            {
                ((RectTransform)ArmsList[i]).localScale = new Vector2(maxArmsScale, maxArmsScale);
                armsInfo[i].image.color = Color.white;

                currentArms = i;
            }
            else
            {
                ((RectTransform)ArmsList[i]).localScale = new Vector2(1, 1);
                armsInfo[i].image.color = backArmsColor;
            }
        }

        updateGemGroove();   //更新当前武器槽的显示
        updateGemItemShow(); //更新所携带的结晶
        updateArmsFragNum(); //更新武器槽碎片数量
    }
Example #28
0
    void updateGemGroove()  //更新武器槽的显示
    {
        ArmsGemGroove currentGemGroove;

        for (int i = 0; i < Gem.Length; i++)  //初始化武器上结晶的大小
        {
            Gem[i].transform.localScale = new Vector3(1, 1, 1);
        }

        switch (armsInfo[currentArms].name)  //获取当前武器槽的信息
        {
        case "swords":
            currentGemGroove = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords];
            break;

        case "arrow":
            currentGemGroove = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow];
            break;

        case "spear":
            currentGemGroove = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear];
            break;

        default:
            currentGemGroove = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords];
            break;
        }

        for (int i = 0; i < GemGroove.Length; i++)
        {
            if (i < currentGemGroove.currentGemNum)
            {
                GemGroove_Disable[i].gameObject.SetActive(false);
                GemGroove[i].GetComponent <Image>().color    = Color.white;
                GemGroove[i].GetComponent <Button>().enabled = false;
                if (currentGemGroove.GemItem[i] == null)  //有格子无物品
                {
                    GemGroove_None[i].gameObject.SetActive(true);
                    Gem[i].gameObject.SetActive(false);
                }
                else//  添加当前所镶嵌宝石的图片    有格子有物品
                {
                    Gem[i].color = Color.white;
                    GemGroove_None[i].gameObject.SetActive(false);
                    Gem[i].gameObject.SetActive(true);
                    switch (armsInfo[currentArms].name)
                    {
                    case "swords":
                        Gem[i].sprite = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.swords].GemItem[i].sprite;
                        break;

                    case "arrow":
                        Gem[i].sprite = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.arrow].GemItem[i].sprite;
                        break;

                    case "spear":
                        Gem[i].sprite = CharacterAttribute.GetInstance().ArmsGemGroove[(int)Arms.spear].GemItem[i].sprite;
                        break;
                    }
                }
            }
            else   //无格子
            {
                GemGroove_Disable[i].gameObject.SetActive(true);
                GemGroove_None[i].gameObject.SetActive(false);
                Gem[i].gameObject.SetActive(false);
                GemGroove[i].GetComponent <Image>().color    = GemGrooveDisableColor;
                GemGroove[i].GetComponent <Button>().enabled = true;
            }
        }
    }
Example #29
0
    private void OnEnable()
    {
        if (isInt)
        {
            ArmsList.Clear();
            //初始化各个武器的位置
            if (CharacterAttribute.GetInstance().isEnable[(int)state.attack1])  //检查当前有哪些武器
            {
                ArmsList.Add(sword);
            }
            else
            {
                sword.gameObject.SetActive(false);
            }
            if (CharacterAttribute.GetInstance().isEnable[(int)state.shoot])
            {
                ArmsList.Add(arrow);
            }
            else
            {
                arrow.gameObject.SetActive(false);
            }
            if (CharacterAttribute.GetInstance().isEnable[(int)state.jumpshoot])
            {
                ArmsList.Add(spear);
            }
            else
            {
                spear.gameObject.SetActive(false);
            }
            armsInfo = new ArmsInfo[ArmsList.Count];
            for (int i = 0; i < ArmsList.Count; i++)
            {
                ((RectTransform)ArmsList[i]).position = point[i].position;

                armsInfo[i].rectTrans = ((RectTransform)ArmsList[i]);
                armsInfo[i].name      = ((RectTransform)ArmsList[i]).name;
                armsInfo[i].pos       = i;
                armsInfo[i].image     = ((RectTransform)ArmsList[i]).gameObject.GetComponent <Image>();

                if (i == 0)   //改变样式
                {
                    ((RectTransform)ArmsList[i]).localScale = new Vector2(maxArmsScale, maxArmsScale);
                    armsInfo[i].image.color = Color.white;

                    currentArms = i;
                }
                else
                {
                    ((RectTransform)ArmsList[i]).localScale = new Vector2(1, 1);
                    armsInfo[i].image.color = backArmsColor;
                }
            }


            headOutline.effectDistance = Vector2.zero;   //初始化徽章的状态
            isPlayAnimation_0          = false;
            headOutline.gameObject.transform.position = HeadOriginPos;

            InfoBoxRect.gameObject.SetActive(false);

            for (int i = 0; i < Dirty.Length; i++)
            {
                Dirty[i].SetActive(false);  //防止重复播放
            }

            //初始化开启武器槽动画
            for (int i = 0; i < Frags.Length; i++)
            {
                Frags[i].transform.position = Frag_icon.transform.position;
                Frags[i].SetActive(false);
            }
            Frags[0].GetComponent <TrailRenderer>().enabled = true;
            Frags[0].transform.GetChild(0).gameObject.SetActive(true);
            Frags[0].transform.localScale = Frags[1].transform.localScale;

            //提示框隐藏
            OpenNewGroove_MessageBox.SetActive(false);
            isAnimation_openGroove = false;

            updateGemGroove();   //更新当前武器槽的显示
            updateGemItemShow(); //更新所携带的结晶
            updateArmsFragNum(); //更新武器槽碎片数量
        }
        else
        {
            isInt = true;
        }
    }
Example #30
0
    private void Update()
    {
        isJump   = !OnGround();     //测试
        isInRain = checkIsInRain(); //是否在雨中

        if (isHorizontalBounce)
        {
            rig.velocity = new Vector2(rig.velocity.x, rig.velocity.y);
        }
        else
        {
            rig.velocity = new Vector2(0, rig.velocity.y);
        }

        switch (currentState)
        {
        case state.normal:
            changeDir();      // 行走
            if ((isDoubleKeyDown() != 0 || MyInput.instance.isGetRun()) && isEnable[(int)state.run] && !CharacterAttribute.GetInstance().isOverLoad_breath)
            {
                currentState = state.run;      //双击变为奔跑
            }
            if (MyInput.instance.isGetJumpDown() && isEnable[(int)state.jump] && isGetInput)
            {
                currentState = state.jump;        //跳跃
                XJumpSpeed   = Walkspeed + 2.5f;
            }

            attack();   // 攻击
            shoot();    //射击
            Throw();    //扔
            dash();     //冲刺

            if (OnGround() == false)
            {
                currentState = state.fall;      //落下
                XJumpSpeed   = Walkspeed + 2.5f;
                YJumpSpeed   = 0;
            }
            break;

        case state.walk:
            currentState = state.normal;        //闲置
            changeDir();
            if ((isDoubleKeyDown() != 0 || MyInput.instance.isGetRun()) && isEnable[(int)state.run] && !CharacterAttribute.GetInstance().isOverLoad_breath)
            {
                currentState = state.run;        //奔跑
            }
            if (MyInput.instance.isGetJumpDown() && isEnable[(int)state.jump] && isGetInput)
            {
                currentState = state.jump;        //跳跃
                XJumpSpeed   = Walkspeed + 2.5f;
            }

            dash();     //冲刺
            Throw();    //扔
            attack();   // 攻击
            shoot();    //射击

            if (OnGround() == false)
            {
                currentState = state.fall;      //落下
                XJumpSpeed   = Walkspeed + 2.5f;
                YJumpSpeed   = 0;
            }
            break;

        case state.run:

            if ((CharacterAttribute.GetInstance().isOverLoad_breath))
            {
                currentState = state.normal;
                break;                                                                                              //如果气息不够则退回站立状态
            }
            CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_run *Time.deltaTime; //奔跑气息消耗

            if (MyInput.instance.isGetLeft() && isGetInput)
            {
                rig.velocity += new Vector2(-RunSpeed, 0);
                Dir           = dir.left;
            }
            if (MyInput.instance.isGetRight() && isGetInput)
            {
                rig.velocity += new Vector2(RunSpeed, 0);
                Dir           = dir.right;
            }

            if (MyInput.instance.isGetLeftUp() || MyInput.instance.isGetRightUp() && isGetInput)
            {
                currentState = state.normal;        //闲置
            }

            attack();   // 攻击
            shoot();    //射击
            Throw();    //扔
            dash();     //冲刺

            if (MyInput.instance.isGetJumpDown() && isEnable[(int)state.jump] && isGetInput)
            {
                currentState = state.jump;        //跳跃
                XJumpSpeed   = RunSpeed + 1;
            }

            if (OnGround() == false)
            {
                currentState = state.fall;       //落下
                XJumpSpeed   = RunSpeed + 1;
                YJumpSpeed   = 0;
            }
            break;

        case state.jump:
            if (JumpAccelerateTime < 0.01f)
            {
                _Timer_JumpScale = 0;
            }

            isDoubleKeyDown();         //计时
            currentState = state.fall; //下落

            if (isPlatJump)            //连跳
            {
                isPlatJump         = false;
                JumpAccelerateTime = 0;
                YJumpSpeed         = JumpSpeed;
                rig.velocity       = Vector2.zero;
                _jumpTimes++;
                canJump           = false;
                Time_pressJumpKey = 0;
            }

            //是否在跳跃(按键)
            if (MyInput.instance.isGetJump() && isGetInput)
            {
                Time_pressJumpKey += Time.deltaTime;
                canJump            = true;
            }
            else
            {
                canJump = false;
            }
            if (Time_pressJumpKey > MaxJumpTime * (XJumpSpeed < RunSpeed ? 0.92f : 1.0f) * 0.6f)       //剩余50%时间自动跳跃
            {
                canJump = true;
            }

            if (JumpAccelerateTime < MaxJumpTime * (XJumpSpeed < RunSpeed ? 0.92f : 1.0f) && !CharacterAttribute.GetInstance().isOverLoad_breath&& canJump)
            {
                CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_jump *Time.deltaTime;       //气息消耗
                JumpAccelerateTime += (Time.deltaTime * jumpTimeFactor);
                //YJumpSpeed = YJumpSpeed - Mathf.Pow(Yacceleration * Time.deltaTime,3);
                YJumpSpeed = ((-JumpSpeed / Mathf.Pow(MaxJumpTime * (XJumpSpeed < RunSpeed ? 0.92f : 1.0f), 2)) * Mathf.Pow(JumpAccelerateTime, 2) + JumpSpeed);

                if (YJumpSpeed < 0)
                {
                    YJumpSpeed = 0;
                }
                rig.velocity = GameFunction.getVector2(rig.velocity.x, YJumpSpeed);
                currentState = state.jump;
            }
            JumpMove();     //跳跃时移动

            //跳跃形变
            _Timer_JumpScale += (Time.deltaTime * jumpTimeFactor);
            float t_jumpScale = _Timer_JumpScale / (jumpScale_Time);
            transform.localScale = Vector3.Lerp(Dir == dir.right?jumpScale:GameFunction.getVector3(-jumpScale.x, jumpScale.y, jumpScale.z), Dir == dir.right?originScale:GameFunction.getVector3(-originScale.x, originScale.y, originScale.z), t_jumpScale);

            if (attack())     //攻击
            {
                rig.velocity = GameFunction.getVector2(rig.velocity.x, 0);
                YJumpSpeed   = 0;
            }
            shoot();     //射击
            if (Throw()) //扔
            {
                rig.velocity = GameFunction.getVector2(rig.velocity.x, 0);
                YJumpSpeed   = 0;
            }

            if (dash())      //冲刺
            {
                dashTimes = 1;
            }

            if (AtTop())      //判断是否顶到墙
            {
                currentState = state.fall;
                YJumpSpeed   = 0;
            }

            if (currentState == state.fall)     //使动作更加自然
            {
                YJumpSpeed = 0;
            }

            break;

        case state.dash:

            isDoubleKeyDown(); //计时
            if (attack())      //攻击
            {
                YJumpSpeed = 0;
                _dashTime  = 0;
            }
            if (shoot())    //射击
            {
                YJumpSpeed = 0;
                _dashTime  = 0;
            }

            _dashTime       += Time.deltaTime;
            Timer_dashScale += Time.deltaTime;

            float t_dashScale = Timer_dashScale / (proportion_dashScale * DashTime);
            transform.localScale = Vector3.Lerp(Dir == dir.right ? dashScale : GameFunction.getVector3(-dashScale.x, dashScale.y, dashScale.z), Dir == dir.right ? originScale : GameFunction.getVector3(-originScale.x, originScale.y, originScale.z), t_dashScale);
            rig.velocity         = new Vector2(Dir == dir.left ? -DashSpeed : DashSpeed, 0);
            if (_dashTime > DashTime)
            {
                currentState = isJump ? state.fall : state.endDash;
                YJumpSpeed   = 0;
                _dashTime    = 0;

                //完全冲刺后产生惯性
                if (isJump)
                {
                    StartCoroutine(IE_dashInertia());
                }
                else
                {
                    _Timer_dash = 0;
                }
            }
            break;

        case state.attack1:
            //  空中攻击移动-----------------
            if (isJump)
            {
                //JumpMove();
                YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime;
                if (YJumpSpeed > JumpSpeed)
                {
                    YJumpSpeed = JumpSpeed;
                }
                rig.velocity = new Vector2(rig.velocity.x, -YJumpSpeed);
            }
            //---------------------------------

            if (!isPlayAnimation())
            {
                if (isJump)
                {
                    currentState = state.fall;
                }
                else
                {
                    currentState = state.normal;
                }
            }
            break;

        case state.attack2:
            //  空中攻击移动-----------------
            if (isJump)
            {
                //JumpMove();
                YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime;
                if (YJumpSpeed > JumpSpeed)
                {
                    YJumpSpeed = JumpSpeed;
                }
                rig.velocity = new Vector2(rig.velocity.x, -YJumpSpeed);
            }
            //---------------------------------

            if (!isPlayAnimation())
            {
                if (isJump)
                {
                    currentState = state.fall;
                }
                else
                {
                    currentState = state.normal;
                }
            }
            break;

        case state.jumpshoot:
            if (isJumpShootBack)
            {
                _time3 += Time.deltaTime;      //后退效果
                if (_time3 < jumpshoot_backTime)
                {
                    rig.velocity = new Vector2(Dir == dir.left ? 20 : -20, 18);
                }
                else
                {
                    rig.velocity = Vector2.zero;
                }

                if (!isPlayAnimation())
                {
                    isJumpShootBack = false;
                    _time3          = 0;
                    currentState    = state.fall;
                }
            }
            break;

        case state.shoot:
            if (!isPlayAnimation())
            {
                currentState = state.normal;
            }
            break;

        case state.hurt:
            int t = 20;

            _hurtTime   += Time.deltaTime;
            rig.velocity = new Vector2((Dir == dir.left ? (-t / HurtTime * _hurtTime + t) : -(-t / HurtTime * _hurtTime + t)), 0);

            YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime;       //为Y轴添加重力
            if (YJumpSpeed > JumpSpeed)
            {
                YJumpSpeed = JumpSpeed;
            }
            rig.velocity = new Vector2(rig.velocity.x, -YJumpSpeed);

            if (_hurtTime > HurtTime)
            {
                currentState = isJump == true ? state.fall : state.normal;
                _hurtTime    = 0;
            }
            break;

        case state.fall:
            isDoubleKeyDown();      //计时
            if (!isHorizontalBounce)
            {
                JumpMove();      //水平弹飞中不能移动
            }
            YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime * jumpTimeFactor;
            if (YJumpSpeed > JumpSpeed)
            {
                YJumpSpeed = JumpSpeed;
            }

            if (!isBounce)
            {
                rig.velocity = GameFunction.getVector2(rig.velocity.x, -YJumpSpeed);
            }

            if (isBounce)
            {
                AtTop();
            }

            if (MyInput.instance.isGetAttack() && isEnable[(int)state.attack1] && !CharacterAttribute.GetInstance().isOverLoad_breath&& isGetInput)       //攻击
            {
                CharacterAttribute.GetInstance().Breath -= CharacterAttribute.GetInstance().expend_attack;
                currentState = state.attack1;      //攻击
                CharacterObjectManager.instance.attack1(Dir);
            }

            if ((MyInput.instance.isGetJumpDown() && _jumpTimes < JumpTimes && isEnable[(int)state.jump] && isGetInput) || isPlatJump)     //连跳
            {
                isPlatJump         = false;
                currentState       = state.jump;
                JumpAccelerateTime = 0;
                YJumpSpeed         = JumpSpeed;
                rig.velocity       = Vector2.zero;
                _jumpTimes++;
                canJump           = false;
                Time_pressJumpKey = 0;
            }

            shoot();     //射击
            Throw();     //扔

            if (dash())  //冲刺
            {
                dashTimes = 1;
            }

            if (OnGround())     // 判断是否落地
            {
                currentState = state.normal;
            }
            break;

        case state.endDash:
            //惯性
            _Timer_dash += Time.deltaTime;
            float t_endDash = _Timer_dash / DashInertiaTime;
            rig.velocity = Vector2.Lerp((Dir == dir.left ? Vector2.left : Vector2.right) * DashSpeed, Vector2.zero, t_endDash);

            if (_Timer_dash > DashInertiaTime)
            {
                currentState = state.normal;
                //播放粒子特效
                if (!isJump)
                {
                    CharacterObjectManager.instance.PlayFallParticle(isInRain);
                }
            }
            break;

        case state.Throw:
            //  空中移动-----------------
            if (isJump)
            {
                YJumpSpeed = YJumpSpeed + Yacceleration * Time.deltaTime;
                if (YJumpSpeed > JumpSpeed)
                {
                    YJumpSpeed = JumpSpeed;
                }
                rig.velocity = new Vector2(rig.velocity.x, -YJumpSpeed);
            }
            //---------------------------------

            if (!isPlayAnimation())
            {
                currentState = isJump? state.fall:state.normal;
            }
            break;
        }

        if (isAttack)  // 为双击计时
        {
            _DoubleAttackSpaceTime += Time.deltaTime;
            if (_DoubleAttackSpaceTime > DoubleAttackSpaceTime)
            {
                isAttack = false;
                _DoubleAttackSpaceTime = 0;
            }
        }

        if (isHurt)  //受伤
        {
            flash(); // 人物闪烁
        }

        rig.velocity      += additionalVelocity; //计算额外的速度
        additionalVelocity = Vector2.zero;

        if (lastDir != Dir) // 翻转图片  判断减少运算量
        {
            //SpriteRenderer.flipX = SpriteRenderer.flipX == false ? true : false;
            GameFunction.t_Vector3    = transform.localScale;
            GameFunction.t_Vector3.x *= -1;
            transform.localScale      = GameFunction.t_Vector3;
        }
        lastDir = Dir;

        changeAnimation();                                                                                  //改变当前动画
        CharacterObjectManager.instance.changeDustParticle(currentState, lastState, isJump, isInRain, Dir); //改变尘土粒子效果
        correctJumpScale();                                                                                 //修正跳跃形变
        correntDashScale();                                                                                 //修正冲刺形变
        lastState = currentState;
    }