85 lines
3.0 KiB
C#
85 lines
3.0 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class ResourceManager : MonoBehaviour
|
|
{
|
|
public enum ResourceTypes { Steel, Wood, Water, Population, Food, Faith, Money, Jobs, maxPopulation, faithPerDay, moneyPerDay, woodPerDay, steelPerDay, waterPerDay, foodPerDay, populationPerDay }
|
|
public List<ResourceAmount> resourceAmounts;
|
|
public static ResourceManager Instance { get; private set; }
|
|
|
|
private void Awake()
|
|
{
|
|
if (Instance != null && Instance != this)
|
|
{
|
|
Destroy(this.gameObject);
|
|
}
|
|
else
|
|
{
|
|
Instance = this;
|
|
}
|
|
}
|
|
|
|
public ResourceAmount GetResourceAmount(ResourceTypes resource)
|
|
{
|
|
var found = resourceAmounts.Find(r => r.resourceType == resource);
|
|
if (found == null)
|
|
{
|
|
Debug.LogWarning($"Resource {resource} not found!");
|
|
return new ResourceAmount { resourceType = resource, resourceAmount = 0 };
|
|
}
|
|
return found;
|
|
}
|
|
|
|
public void AddResource(ResourceTypes type, int amount)
|
|
{
|
|
var res = GetResourceAmount(type);
|
|
res.resourceAmount += amount;
|
|
ClampResource(type);
|
|
}
|
|
|
|
// Clamp resource to prevent negative values for certain types
|
|
private void ClampResource(ResourceTypes type)
|
|
{
|
|
// Only clamp for resources that should not go negative
|
|
switch (type)
|
|
{
|
|
case ResourceTypes.Food:
|
|
case ResourceTypes.Money:
|
|
case ResourceTypes.Wood:
|
|
case ResourceTypes.Steel:
|
|
case ResourceTypes.Water:
|
|
case ResourceTypes.Faith:
|
|
case ResourceTypes.Population:
|
|
var res = GetResourceAmount(type);
|
|
if (res.resourceAmount < 0)
|
|
res.resourceAmount = 0;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void SetResource(ResourceTypes type, int amount)
|
|
{
|
|
var res = GetResourceAmount(type);
|
|
res.resourceAmount = amount;
|
|
}
|
|
public void ApplyDailyResourceChanges()
|
|
{
|
|
// For each resource type that has a corresponding per-day value, add it to the main resource
|
|
AddResource(ResourceTypes.Faith, GetResourceAmount(ResourceTypes.faithPerDay).resourceAmount);
|
|
AddResource(ResourceTypes.Money, GetResourceAmount(ResourceTypes.moneyPerDay).resourceAmount);
|
|
AddResource(ResourceTypes.Wood, GetResourceAmount(ResourceTypes.woodPerDay).resourceAmount);
|
|
AddResource(ResourceTypes.Steel, GetResourceAmount(ResourceTypes.steelPerDay).resourceAmount);
|
|
AddResource(ResourceTypes.Water, GetResourceAmount(ResourceTypes.waterPerDay).resourceAmount);
|
|
AddResource(ResourceTypes.Food, GetResourceAmount(ResourceTypes.foodPerDay).resourceAmount);
|
|
AddResource(ResourceTypes.Population, GetResourceAmount(ResourceTypes.populationPerDay).resourceAmount);
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class ResourceAmount
|
|
{
|
|
public ResourceManager.ResourceTypes resourceType;
|
|
public int resourceAmount;
|
|
} |