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); } } } }
/// <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 // } }
// 무기 옮기기 및 교환. 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); } } }
// 무기를 넣기위해 모든 슬롯을 검사. 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); }
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)); } }
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; } }
// 무기!!!!!!!!!! 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); }
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(); } } }
//착용 중인 무기의 정보를 받습니다. public void GetWeaponCtrl(WeaponCtrl w) { weapon = w; }