- updated all abilities to scale with new stat system - updated difficulty settings using new stat system - added S+ difficulty as the end game - updated items using new stat system - small re-balance to make things a bit more fun to test
76 lines
2.5 KiB
C#
76 lines
2.5 KiB
C#
using Kryz.CharacterStats.Examples;
|
|
using Photon.Pun;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class DropTable : MonoBehaviour
|
|
{
|
|
[SerializeField] private GameObject interactableDropPrefab;
|
|
[SerializeField] private GameObject coinPrefab;
|
|
[SerializeField] private int coinAmount;
|
|
[SerializeField] private int extraDropChance;
|
|
|
|
[SerializeField] private GameEvent_Int onCoinDrop;
|
|
|
|
public List<EquippableItem> guaranteedItemDrop = new List<EquippableItem>();
|
|
public List<EquippableItem> extraDrops = new List<EquippableItem>();
|
|
|
|
PhotonView photonView;
|
|
GameObject instantiatedDrop;
|
|
EquippableItemDrop itemDrop;
|
|
GameObject instantiatedCoinDrop;
|
|
CoinDrop coinDrop;
|
|
int finalCoinAmount;
|
|
|
|
Vector3 spawnPosition;
|
|
|
|
private void Awake()
|
|
{
|
|
photonView = GetComponentInParent<PhotonView>();
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
|
|
public bool CalculateLootDrop()
|
|
{
|
|
return Random.Range(0, 100) < (extraDropChance * (1 + GameConstants.GameBalancing.IncreasedItemDropBasedOnDifficultyMultiplier * GameDifficultyController.Instance.GetCurrentDifficultyLevel()));
|
|
}
|
|
|
|
public void DropLoot(bool lootDrop)
|
|
{
|
|
spawnPosition = this.transform.position;
|
|
spawnPosition.y = 0f;
|
|
|
|
instantiatedCoinDrop = Instantiate(coinPrefab, spawnPosition, this.transform.rotation);
|
|
coinDrop = instantiatedCoinDrop.GetComponent<CoinDrop>();
|
|
|
|
finalCoinAmount = Mathf.RoundToInt(coinAmount * (1 + GameConstants.GameBalancing.IncreasedCoinDropBasedOnDifficultyMultiplier * GameDifficultyController.Instance.GetCurrentDifficultyLevel()));
|
|
|
|
coinDrop.Init(finalCoinAmount);
|
|
|
|
onCoinDrop.Raise(finalCoinAmount);
|
|
|
|
for (int i = 0; i < guaranteedItemDrop.Count; i++)
|
|
{
|
|
instantiatedDrop = Instantiate(interactableDropPrefab, spawnPosition, this.transform.rotation);
|
|
itemDrop = instantiatedDrop.GetComponent<EquippableItemDrop>();
|
|
itemDrop.itemDrop = guaranteedItemDrop[i];
|
|
}
|
|
|
|
if (!lootDrop) return;
|
|
if (extraDrops.Count <= 0) return;
|
|
|
|
spawnPosition = this.transform.position;
|
|
spawnPosition.y = 0f;
|
|
instantiatedDrop = Instantiate(interactableDropPrefab, spawnPosition, this.transform.rotation);
|
|
itemDrop = instantiatedDrop.GetComponent<EquippableItemDrop>();
|
|
itemDrop.itemDrop = extraDrops[Random.Range(0, extraDrops.Count)];
|
|
|
|
}
|
|
}
|