public void UnloadWeapon(string side)
 {
     if (side == "Left")
     {
         if (wpnCtrlR.transform.childCount <= 0)
         {
         }
         else
         {
             foreach (Transform trans in wpnHdlLeft.transform)
             {
                 weaponColL = null;
                 wpnCtrlL   = null;
                 Destroy(trans.gameObject);
             }
         }
     }
     else if (side == "Right")
     {
         if (wpnCtrlR.transform.childCount <= 0)
         {
         }
         else
         {
             foreach (Transform trans in wpnHdlRight.transform)
             {
                 weaponColR     = null;
                 wpnCtrlR.wData = null;
                 Destroy(trans.gameObject);
             }
         }
     }
 }
Beispiel #2
0
 /// <summary>
 /// 遭遇后行为判定方法
 /// </summary>
 /// <param name="targetWpnCtrl"></param>
 public void TryDoDamage(WeaponCtrl targetWpnCtrl, bool attackerValid, bool counterValid) //, bool defenseValid
 {
     if (staMgr.isCounterBackSuccess)                                                     //盾反成功
     {
         if (counterValid)
         {
             targetWpnCtrl.wpnMgr.actMgr.Stunned();
         }
     }
     else if (staMgr.isCounterBackFaillure)//盾反失败
     {
         if (attackerValid)
         {
             HitOrDie(targetWpnCtrl, false);
         }
     }
     else if (staMgr.isImmortal)//无敌状态
     {
         //do nothing!
     }
     else if (staMgr.isDefense)//防御状态
     {
         //if (defenseValid){ Block(); }
         Block();
     }
     else//被打或者死亡
     {
         if (attackerValid)
         {
             HitOrDie(targetWpnCtrl, true);
         }
     }
 }
 private void Start()
 {
     try
     {
         wpnHdlLeft         = transform.DeepFind("weaponHandleL").gameObject;
         wpnCtrlL           = BindWeaponController(wpnHdlLeft);
         weaponColL         = wpnHdlLeft.GetComponentInChildren <Collider>();
         weaponColL.enabled = false;
     }
     catch (System.Exception)
     {
         //
         // if there is no "wenponHandle" or related object
         //
     }
     try
     {
         wpnHdlRight        = transform.DeepFind("weaponHandleR").gameObject;
         wpnCtrlR           = BindWeaponController(wpnHdlRight);
         weaponColR         = wpnCtrlR.GetComponentInChildren <Collider>();
         weaponColR.enabled = false;
     }
     catch (System.Exception)
     {
         //
         // if there is no "wenponHandle" or related object
         //
     }
 }
Beispiel #4
0
    // 무기 옮기기 및 교환.
    public void WeaponSwap1(WeaponSlotCtrl value, Vector3 Pos)
    {
        WeaponSlotCtrl FirstSlot = NearDisWeaponSlot(Pos);

        // 현재 슬롯과 옮기려는 슬롯이 같으면 함수 종료.
        if (value == FirstSlot || FirstSlot == null)
        {
            value.UpdateInfo(true, value.weaponSlot.Peek().DefaultImg);
            return;
        }

        // 가까운 슬롯이 비어있으면 옮기기.
        if (!FirstSlot.isSlots())
        {
            WeaponSwap2(FirstSlot, value);
            swapType();
        }
        // 교환.
        else
        {
            int                Count  = value.weaponSlot.Count;
            WeaponCtrl         weapon = value.weaponSlot.Peek();
            Stack <WeaponCtrl> temp   = new Stack <WeaponCtrl>();

            {
                for (int i = 0; i < Count; i++)
                {
                    temp.Push(weapon);
                }

                value.weaponSlot.Clear();
            }

            WeaponSwap2(value, FirstSlot);
            swapType();

            {
                Count  = temp.Count;
                weapon = temp.Peek();

                for (int i = 0; i < Count; i++)
                {
                    FirstSlot.weaponSlot.Push(weapon);
                }

                FirstSlot.UpdateInfo(true, temp.Peek().DefaultImg);
            }
        }
    }
Beispiel #5
0
    // 무기를 넣기위해 모든 슬롯을 검사.
    public bool AddWeapon(WeaponCtrl weapon)
    {
        // 슬롯에 총 개수.
        int slotCount = WeaponAllSlot.Count;

        // 넣기위한 무기가 슬롯에 존재하는지 검사.
        for (int i = 0; i < slotCount; i++)
        {
            // 그 슬롯의 스크립트를 가져온다.
            WeaponSlotCtrl slot = WeaponAllSlot[i].GetComponent <WeaponSlotCtrl>();

            slot.slotNumber = i + 1;

            // 슬롯이 비어있으면 통과.
            if (!slot.isSlots())
            {
                continue;
            }

            // 슬롯에 존재하는 무기 타입과 넣을려는 무기의 타입이 같고.
            // 슬롯에 존재하는 무기의 겹칠수 있는 최대치가 넘지않았을 때. (true일 때)
            if (slot.WeaponReturn().type == weapon.type)
            {
                // 슬롯에 무기을 넣는다.
                Debug.Log("중복 무기 이미 존재");
                //slot.AddWeapon(weapon, true, slot);
                return(false);
            }
        }

        // 빈 슬롯에 무기를 넣기위한 검사.
        for (int i = 0; i < slotCount; i++)
        {
            WeaponSlotCtrl slot = WeaponAllSlot[i].GetComponent <WeaponSlotCtrl>();

            // 슬롯이 비어있지 않으면 통과
            if (slot.isSlots())
            {
                continue;
            }

            slot.AddWeapon(weapon, false, null);
            return(true);
        }

        // 위에 조건에 해당되는 것이 없을 때 아이템을 먹지 못함.
        return(false);
    }
Beispiel #6
0
    private void OnTriggerEnter(Collider other)
    {
        WeaponCtrl targetWpnCtrl = other.GetComponentInParent <WeaponCtrl>();

        if (targetWpnCtrl == null)
        {
            return;
        }
        GameObject target = targetWpnCtrl.wpnMgr.gameObject;
        GameObject player = actMgr.wpnMrg.gameObject;

        if (other.tag == "Weapon")
        {
            actMgr.TryDoDamage(targetWpnCtrl, CheckAngleTarget(player, target, 60), CheckAnglePlayer(player, target, 30));
        }
    }
Beispiel #7
0
    public void AddWeapon(WeaponCtrl weapon, bool same, WeaponSlotCtrl sameSlot)
    {
        // 무기 추가
        weaponSlot.Push(weapon);

        // 정보 갱신
        UpdateInfo(true, weapon.DefaultImg);

        if (slotNumber == 1)
        {
            player.weaponSlotNumber[0] = (int)weaponSlot.Peek().type;
            player.now_Weapon          = (int)weaponSlot.Peek().type;
            player.WeaponDisPlay();
        }
        else
        {
            // 두번째의 경우 무기 슬롯 데이터를 넣어준다.
            player.weaponSlotNumber[1] = (int)weapon.type;
        }
    }
Beispiel #8
0
    // 무기!!!!!!!!!! 1: 비어있는 슬롯, 2: 안 비어있는 슬롯.
    void WeaponSwap2(WeaponSlotCtrl xFirst, WeaponSlotCtrl oSecond)
    {
        int        Count  = oSecond.weaponSlot.Count;
        WeaponCtrl weapon = oSecond.weaponSlot.Peek();

        for (int i = 0; i < Count; i++)
        {
            if (xFirst != null)
            {
                xFirst.weaponSlot.Push(weapon);
            }
        }

        if (xFirst != null)
        {
            xFirst.UpdateInfo(true, oSecond.WeaponReturn().DefaultImg);
        }

        oSecond.weaponSlot.Clear();
        oSecond.UpdateInfo(false, oSecond.DefaultImg);
    }
Beispiel #9
0
 public void HitOrDie(WeaponCtrl target, bool doHitAnimation)
 {
     if (staMgr.HP <= 0)
     {
         //already dead;
     }
     else
     {
         staMgr.Add(-1 * target.GetAtk());
         if (staMgr.HP > 0)
         {
             if (doHitAnimation)
             {
                 Hit();
             }
             //do some vfx, like splatter blood...
         }
         else
         {
             Die();
         }
     }
 }
Beispiel #10
0
 //착용 중인 무기의 정보를 받습니다.
 public void GetWeaponCtrl(WeaponCtrl w)
 {
     weapon = w;
 }