Please help me with this. Here’s the code, I’ll explain at the bottom of the post:
public class PerkListItem : MonoBehaviour
{
[Header(“Preview Info Objects”)]
[SerializeField]
private Text perkName;
[SerializeField] private Text perkType;
[SerializeField] private Text perkHealth;
[SerializeField] private Text perkUpgradeCost;
[SerializeField] private Image perkImage;
private KingdomPerk info;
private UpgradeManager manager;
void Start()
{
Debug.Log(“Started”);
manager = FindObjectOfType();
manager.CloseInfoOverlay();
}
public void Setup(KingdomPerk data)
{
info = data;
Debug.Log(“Info set.”);
perkName.text = data.Name;
perkType.text = "Type: " + data.Type.ToString();
perkHealth.text = "Health: " + data.Health.ToString() + “HP”;
perkUpgradeCost.text = "Upgrade Cost: " + data.UpgradeCost.ToString();
perkImage.sprite = data.Sprite;
}
public void InfoButtonPressed()
{
manager.OpenInfoOverlay();
RefreshInfo();
}
public void RefreshInfo()
{
Debug.Log("RefreshInfo: " + info.Name);
manager.infoName.text = info.Name;
manager.infoType.text = "TYPE: " + info.Type;
manager.infoUpgradeCost.text = “$” + info.UpgradeCost.ToString();
manager.infoDamage.text = "DAMAGE: " + info.DamagePerShot.ToString();
manager.infoFirerate.text = "FIRERATE: " + info.FireRate.ToString();
manager.infoHealth.text = "HEALTH: " + info.Health.ToString() + “HP”;
}
public void UpgradeButtonPressed()
{
float money = FindObjectOfType().worldInfo.money;
if (money >= info.UpgradeCost && info.Level != info.MaxUpgradeLevel)
{
Debug.Log(“We’ve got enough!”);
money -= info.UpgradeCost;
info.DamagePerShot *= info.DamageMultiplier;
info.Health *= info.HealthMultiplier;
info.Level++;
info.UpgradeCost *= info.CostMultiplier;
info.FireRate *= info.FireRateMultiplier;
RefreshInfo();
}
else if (money < info.UpgradeCost)
Debug.Log(“Get more money!”);
else if (info.Level == info.MaxUpgradeLevel)
Debug.Log(“Already max level!”);
}
}
Setup is called by another script, the “UpgradeManager”, in the following function, which is called on Start():
void RefreshListItems()
{
ClearListItems();
for (var i = 0; i < perks.Count; i++)
{
if (perks*.UnlockLevel <= FindObjectOfType().worldInfo.playerLevel)*
{
GameObject perkObject = Instantiate(itemPrefab);
perkObject.transform.SetParent(scrollViewTransform);
PerkListItem perkItem = perkObject.GetComponent();
perkItem.Setup(perks*);*
upgradeGOList.Add(perkObject);
}
}
}
the list “perks” is just a bunch of objects of the class “KingdomPerk” which are each loaded from a JSON file.
For some reason, the variable “info” in the “PerkListItem” script is set to null in the “UpgradeButtonPressed” function even though I set it to the value that is passed in by “Setup” when the UpgradeManager starts.
Anyone know the issue?
Thanks