Verificar inventario
3 participantes
Página 1 de 1
Verificar inventario
Boa noite pessoal, gostaria de saber como verificar todos os slots de um inventario e saber se todos estão cheios
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
Se o inventario está cheio
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
Bom cara ai depende, você já tem o limite máximo de itens em cada slot?
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
eu estou tentando usa o for para tentar verificar se todos os slots estão ocupados e cheios mas não estou conseguindo vc tem alguma ideia?
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
Sem os scripts é bem difícil ajudar em alguma coisa.. por que o for não está funcionando?
Madness- Designer
- PONTOS : 3609
REPUTAÇÃO : 222
Áreas de atuação : Designer
Iniciante C++
Quase um programador C#
Respeito as regras :
Re: Verificar inventario
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class InventoryController : MonoBehaviour {
public SlotItemBehavior[] slots;
public Text IdPanel;
public WeaponSlot MeleeSlot;
public WeaponSlot PrimarySlot;
public WeaponSlot SecundarySlot;
public Text takeItemText;
// Use this for initialization
void Start () {
DisableSlots ();
}
void OnDisable(){
DisableSlots ();
IdPanel.GetComponent<Text> ().text = "";
}
// Update is called once per frame
void Update () {
}
public void DisableSlots(){
for (int x = 0; x < slots.Length; x++) {
slots [x].MenuItemOpen = false;
IdPanel.GetComponent<Text> ().text = "";
}
}
public void AddItem (ItemBase item) {
if (CheckForSlot (item) != null) {
CheckForSlot (item).StockItem(item);
}else{
foreach (SlotItemBehavior s in slots) {
if (s.CheckSlotIsEmpty) {
s.SetNewItem (item);
break;
}
}
}
}
public SlotItemBehavior CheckForSlot(ItemBase item){
foreach (SlotItemBehavior slot in slots) {
if (slot.ReferenceItem != null)
if (slot.ReferenceItem.ID == item.ID)
if (slot.ReferenceItem.amount + item.amount <= slot.ReferenceItem.amountLimit)
return slot;
}
return null;
}
public void EquipMeleeSlot(){
MeleeSlot.EquipWeapon ();
}
public void EquipPrimarySlot (){
PrimarySlot.EquipWeapon ();
}
public void EquipSecundarySlot(){
SecundarySlot.EquipWeapon ();
}
}
aí está o script inteiro sem os erros
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
na linha 45 eu tentei por um else{ takeItemText.text = ¨Inventory is full¨;} porém isso acontece toda vez que pego algum item, sabem me informar se é assim que se verifica? ou tem ideias de como eu posso fazer?
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
você pode usar algo semelhante a void CheckForSlot
- Código:
public void CheckSlotIsFull()
{
foreach (SlotItemBehavior slot in slots)
{
if (slot.ReferenceItem.amount >= slot.ReferenceItem.amountLimit)
Print(slot + " Esta cheio");
}
}
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Verificar inventario
Não é isso, é verificar se todo o inventário está cheio e não pode mais por itens, pois quando ele enche o player continua catando itens porem eles vão pro além vida, simplesmente somem
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
bom o método AddItem já deveria fazer isso, poste o script do item e do slot
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
inventorio
slot
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class InventoryController : MonoBehaviour {
public SlotItemBehavior[] slots;
public Text IdPanel;
public WeaponSlot MeleeSlot;
public WeaponSlot PrimarySlot;
public WeaponSlot SecundarySlot;
public Text takeItemText;
// Use this for initialization
void Start () {
DisableSlots ();
}
void OnDisable(){
DisableSlots ();
IdPanel.GetComponent<Text> ().text = "";
}
// Update is called once per frame
void Update () {
}
public void DisableSlots(){
for (int x = 0; x < slots.Length; x++) {
slots [x].MenuItemOpen = false;
IdPanel.GetComponent<Text> ().text = "";
}
}
public void AddItem (ItemBase item) {
if (CheckForSlot (item) != null) {
CheckForSlot (item).StockItem(item);
}else{
foreach (SlotItemBehavior s in slots) {
if (s.CheckSlotIsEmpty) {
s.SetNewItem (item);
break;
}
}
}
}
public SlotItemBehavior CheckForSlot(ItemBase item){
foreach (SlotItemBehavior slot in slots) {
if (slot.ReferenceItem != null)
if (slot.ReferenceItem.ID == item.ID)
if (slot.ReferenceItem.amount + item.amount <= slot.ReferenceItem.amountLimit)
return slot;
}
return null;
}
public void EquipMeleeSlot(){
MeleeSlot.EquipWeapon ();
}
public void EquipPrimarySlot (){
PrimarySlot.EquipWeapon ();
}
public void EquipSecundarySlot(){
SecundarySlot.EquipWeapon ();
}
}
slot
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SlotItemBehavior : MonoBehaviour {
protected InventoryController inventory;
public Image icon;
public Text amountItemText;
public Text ammoAmountText;
public bool IsEmpty;
public bool full;
public bool IsStackable;
public bool MenuItemOpen;
public GameObject MenuItem;
public ItemBase currentItem;
//equipar
public Button EquipButton;
public Button UseButton;
// Use this for initialization
void Start () {
inventory = FindObjectOfType (typeof(InventoryController)) as InventoryController;
}
// Update is called once per frame
void Update () {
if (currentItem == null) {
IsEmpty = true;
icon.enabled = false;
amountItemText.enabled = false;
ammoAmountText.enabled = false;
} else {
IsEmpty = false;
IsStackable = currentItem.isStackable;
icon.enabled = true;
icon.sprite = currentItem.icon;
if (IsStackable) {
amountItemText.text = currentItem.amount + "";
amountItemText.enabled = true;
} else
amountItemText.enabled = false;
switch (currentItem.typeItem) {
case TYPE_ITEM.WEAPON:
UseButton.interactable = false;
EquipButton.interactable = true;
if (currentItem.GetComponent<Item_Weapon> ().weaponType != WEAPON_TYPE.MELEE) {
ammoAmountText.enabled = true;
ammoAmountText.text = currentItem.GetComponent<BaseWeapon> ().currentAmmo + "";
}
break;
case TYPE_ITEM.AMMO:
EquipButton.interactable = false;
UseButton.interactable = true;
break;
case TYPE_ITEM.KEY:
EquipButton.interactable = false;
UseButton.interactable = true;
break;
case TYPE_ITEM.RECOVERY:
EquipButton.interactable = false;
UseButton.interactable = true;
break;
}
}
if (MenuItemOpen) {
MenuItem.SetActive (true);
} else {
MenuItem.SetActive (false);
}
}
public void SetNewItem(ItemBase item){
if (currentItem == null) {
IsEmpty = false;
currentItem = item;
}
}
public void StockItem(ItemBase item){
currentItem.amount += item.amount;
Destroy (item.gameObject);
}
public ItemBase ReferenceItem{get{return currentItem;} set{currentItem = value; }}
public bool CheckSlotIsEmpty{ get { return IsEmpty; } }
public ItemBase GetItem(){
return currentItem;
}
public void OpenItemMenu(){
if (!IsEmpty) {
inventory.DisableSlots ();
MenuItemOpen = true;
} else {
inventory.DisableSlots ();
}
}
public void IdentifyItem(){
if(!IsEmpty)
inventory.IdPanel.GetComponent<Text> ().text = currentItem.name + "";
}
public void IdentifyItemEnd(){
if(!IsEmpty)
inventory.IdPanel.GetComponent<Text> ().text = "";
}
public void EquipItem(){
PlayerFire player = GameController.instance.fire;
inventory.DisableSlots();
currentItem.gameObject.SetActive (true);
currentItem.GetComponent<SphereCollider> ().enabled = false;
currentItem.Equip ();
switch (currentItem.GetComponent<Item_Weapon> ().weaponType) {
case WEAPON_TYPE.MELEE:
inventory.EquipMeleeSlot ();
inventory.MeleeSlot.weaponImagem.sprite = icon.sprite;
inventory.MeleeSlot.currentItem = currentItem;
inventory.MeleeSlot.currentWeapon = currentItem.GetComponent<BaseWeapon> ();
currentItem.gameObject.transform.SetParent (player.meleeWeapon);
if (player.weapons [0] != null) {
player.weapons [0].gameObject.SetActive (false);
if (player.weapons [0] == currentItem.GetComponent<BaseWeapon> ()) {
inventory.MeleeSlot.IsEmpty = true;
player.weapons [0] = null;
return;
}
else
player.weapons [0] = null;
}
player.weapons [0] = currentItem.GetComponent<BaseWeapon> ();
player.weapons [0].gameObject.SetActive(true);
currentItem.gameObject.transform.position = player.meleeWeapon.position;
currentItem.gameObject.transform.rotation = player.meleeWeapon.rotation;
break;
case WEAPON_TYPE.PRIMARY:
inventory.EquipPrimarySlot ();
inventory.PrimarySlot.weaponImagem.sprite = icon.sprite;
inventory.PrimarySlot.currentItem = currentItem;
inventory.PrimarySlot.currentWeapon = currentItem.GetComponent<BaseWeapon> ();
currentItem.gameObject.transform.SetParent (player.primaryWeapon);
if (player.weapons [1] != null) {
player.weapons [1].gameObject.SetActive (false);
if (player.weapons [1] == currentItem.GetComponent<BaseWeapon>()){
inventory.PrimarySlot.IsEmpty = true;
player.weapons [1] = null;
return;
}
else
player.weapons [1] = null;
}
player.weapons [1] = currentItem.GetComponent<BaseWeapon> ();
player.weapons [1].gameObject.SetActive(true);
currentItem.gameObject.transform.position = player.primaryWeapon.position;
currentItem.gameObject.transform.rotation = player.primaryWeapon.rotation;
break;
case WEAPON_TYPE.SECUNDARY:
inventory.EquipSecundarySlot ();
inventory.SecundarySlot.weaponImagem.sprite = icon.sprite;
inventory.SecundarySlot.currentItem = currentItem;
inventory.SecundarySlot.currentWeapon = currentItem.GetComponent<BaseWeapon> ();
currentItem.gameObject.transform.SetParent (player.secundaryWeapon);
if (player.weapons [2] != null) {
player.weapons [2].gameObject.SetActive (false);
if (player.weapons [2] == currentItem.GetComponent<BaseWeapon> ()) {
inventory.SecundarySlot.IsEmpty = true;
player.weapons [2] = null;
return;
}
else
player.weapons [2] = null;
}
player.weapons [2] = currentItem.GetComponent<BaseWeapon> ();
player.weapons [2].gameObject.SetActive(true);
currentItem.gameObject.transform.position = player.secundaryWeapon.position;
currentItem.gameObject.transform.rotation = player.secundaryWeapon.rotation;
break;
}
}
public void UseItem(){
inventory.DisableSlots();
switch(currentItem.typeItem){
case TYPE_ITEM.RECOVERY:
if (currentItem.isStackable && currentItem.amount > 1) {
currentItem.Use ();
currentItem.amount--;
} else {
currentItem.Use ();
}
break;
}
}
public void InfoItem(){
inventory.DisableSlots();
currentItem.Info ();
}
public void DropItem(){
inventory.DisableSlots();
currentItem.Drop ();
}
}
916anderson- Avançado
- PONTOS : 2875
REPUTAÇÃO : 13
Idade : 25
Áreas de atuação : Programação C#, Sonoplastia, Unity 5
Respeito as regras :
Re: Verificar inventario
bom falto o do item, começo por verificar onde e chamado o método de adicionar item, tem um Setactive ou destroy
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Tópicos semelhantes
» Como posso verificar um simples inventario de arma ?
» Verificar de um arquivo é PNG e verificar resolução
» Verificar Colisão
» Verificar distância
» Verificar se não há uma Colisão
» Verificar de um arquivo é PNG e verificar resolução
» Verificar Colisão
» Verificar distância
» Verificar se não há uma Colisão
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos