Jump to content

Retornar objeto instanciado de uma classe derivada num ciclo da classe mãe


PauLinhu221

Recommended Posts

Boas programadores, estou a desenvolver um jogo no unity e uma das partes fundamentais desse jogo é o inventário.

Aqui está uma pequena contextualização de código: 

//Item.cs
public class Item{}

//Vestige.cs
public class Vestige : Item{}

//VestigeBag.cs
public class VestigeBag: Item {
  
  //Um VestigeBag requer um objeto do tipo Vestige e um objeto do tipo Bag
  Vestige vestige;
  Bag bag;
  
  public VestigeBag(Vestige vestige, Bag bag) {
    
  this.vestige=vestige;
  this.bag=bag;
    
 }
  
  
}

Sendo assim, para instanciar um objeto do tipo VestigeBag (saco de vestígios) seria necessário um objeto do tipo Vestige e um do tipo Bag.

*O player quando recolhe um Vestige fica sem o saco e recebe um VestigeBag

O Vestige é um item que está no mapa, porém o player tem de ter um Bag no inventário para poder recolher o Vestige do mapa.

O inventário está feito numa lista do tipo Item.

Estou a tentar adicionar o VestigeBag ao inventário do player desta forma: 

//Inventory.cs
public class Inventory {
    
    public List<Item> itemList;

    public Inventory() {
        
        itemList = new List<Item>();
    }

    public void AddItem(string item, Inventory playerInventory) {
        
        if(item=="VestigeBag") itemList.Add(new VestigeBag(new Vestige(), playerInventory.GetItem("Bag")));
    }
}

//player.cs
(...)
inventory.AddItem("VestigeBag", inventory); //inventário é transportado como argumento para a funcao ter acesso ao inventario do player (para remover o Bag)
(...)

A função GetItem() serviria para encontrar e retornar o objeto requisitado (neste caso o Bag) presente no inventário do jogador, para o incluir na instancia do objeto VestigeBag: 

public Item GetItem(string req_item) {    
              
  foreach(Item item in GetItemList()) { //A func GetItemList() retorna lista do inventário
    
    if(item.GetType().Name==req_item) {
      return item;
    }    
  } 

	return null;
}

O problema está onde se chama a função para obter o item, que retorna um objeto do tipo Item e não do tipo bag, o que origina o erro: Cannot convert from 'Item' to 'Bag'

Se alguém me pudesse dar uma mãozinha ficaria agradecido, já estou a bater a cabeça em todos os conceitos de POO e ainda n resolvi isto. Antecipadamente grato!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.