Browse Source

Refactor Build Cost; remove costs from inv

master
laurids 2 years ago
parent
commit
9644d701bc
9 changed files with 107 additions and 34 deletions
  1. +4
    -2
      Assets/GWConquest/Scripts/District.cs
  2. +40
    -4
      Assets/GWConquest/Scripts/DistrictFactory.cs
  3. +4
    -4
      Assets/GWConquest/Scripts/DistrictUpgrade.cs
  4. +4
    -0
      Assets/GWConquest/Scripts/Planet.cs
  5. +2
    -1
      Assets/GWConquest/Scripts/ServerCallbacks.cs
  6. +0
    -2
      Assets/GWConquest/Scripts/UI/PlanetIndicatorUI.cs
  7. +4
    -4
      Assets/GWConquest/Scripts/UI/ProductionMenu.cs
  8. +5
    -5
      Assets/GWConquest/Scripts/UI/ProductionMenuIcon.cs
  9. +44
    -12
      Assets/GWConquest/Scripts/UnitClass.cs

+ 4
- 2
Assets/GWConquest/Scripts/District.cs View File

@ -291,8 +291,10 @@ namespace GWConquest
public bool CanBuild(IBuildable buildable)
{
var cost = buildable.BuildCost;
return ControllingPlayer.Credits >= cost.CreditCost && Inventory.HasItem("Recruits", cost.RecruitCost)
&& Inventory.HasItem("Supplies", cost.AmmoCost) && Inventory.HasItem("Fuel", cost.FuelCost);
var accesibleItems = Planet.IsPlanetContested ? Inventory : Planet.PlanetInventory;
var player = ControllingPlayer;
return player != null && cost.AvailableIn(accesibleItems, player);
}
}


+ 40
- 4
Assets/GWConquest/Scripts/DistrictFactory.cs View File

@ -120,16 +120,52 @@ namespace GWConquest
}
public void AddProductionQueueEntry(string uc, Player player, bool isUpgrade)
public void AddProductionQueueEntry(IBuildable buildable, Player player)
{
if(!DebugUI.FreeBuild)
{
if(!District.CanBuild(buildable))
{
BoltLog.Error($"Could not build {buildable} in district {gameObject.name}");
return;
}
bool contested = District.Planet.IsPlanetContested;
var districtInv = District.Inventory;
var planetInv = District.Planet.PlanetInventory;
foreach(var cost in buildable.BuildCost.Costs)
{
if(cost.Item == "Credits")
{
player.Credits -= cost.Amount;
}
else {
if(districtInv.HasItem(cost.Item, cost.Amount))
{
districtInv.RemoveItem(cost.Item, cost.Amount);
}
else if(!contested && planetInv.HasItem(cost.Item, cost.Amount))
{
planetInv.RemoveItem(cost.Item, cost.Amount);
}
else {
BoltLog.Error("Error while building {0}: Item {1} x {2} not found in inventories", buildable, cost.Item, cost.Amount);
}
}
}
}
int length = ProductionQueueLength;
if(length < MaxQueueLength)
{
BoltLog.Info("Adding unit {0} to production queue on district {1}", uc, gameObject.name);
State.ProductionQueue[length].UnitClass = uc;
BoltLog.Info("Adding unit {0} to production queue on district {1}", buildable, gameObject.name);
State.ProductionQueue[length].UnitClass = buildable.ShortName;
State.ProductionQueue[length].TimeProduced = 0f;
State.ProductionQueue[length].Player = player.entity;
State.ProductionQueue[length].IsUpgrade = isUpgrade;
State.ProductionQueue[length].IsUpgrade = buildable is DistrictUpgrade;
}
}


+ 4
- 4
Assets/GWConquest/Scripts/DistrictUpgrade.cs View File

@ -64,9 +64,9 @@ namespace GWConquest
}
upgrade.AllowedDistrictTypes = typeList.ToArray();
upgrade.BuildCost = new BuildCost() {
CreditCost = data.GetInt("Credit Cost")
};
upgrade.BuildCost = new BuildCost();
upgrade.BuildCost.AddCost("Credits", data.GetInt("Credit Cost"));
upgrade.BuildTime = data.GetFloat("Build Time");
upgrade.Description = data.GetString("Description");
@ -117,7 +117,7 @@ namespace GWConquest
}
public string ShortName;
public string ShortName {get; private set;}
public string FullName {get; private set;}
public Sprite Sprite {get; private set;}
public DistrictType[] AllowedDistrictTypes;


+ 4
- 0
Assets/GWConquest/Scripts/Planet.cs View File

@ -107,6 +107,8 @@ namespace GWConquest
public PathfindingGraph<Zone> pathfindingGraph;
public IInventory PlanetInventory;
public static PathfindingGraph<Zone> PlanetPathfindingGraph;
public Zone GetMainZone(ZoneType type)
@ -187,6 +189,8 @@ namespace GWConquest
PlanetPlacement.Instance.SpawnAsteroids(this);
}
PlanetInventory = new CombinedInventory(() => GetComponentsInChildren<District>().Select(d => d.Inventory));
}


+ 2
- 1
Assets/GWConquest/Scripts/ServerCallbacks.cs View File

@ -110,7 +110,8 @@ namespace GWConquest
public override void OnEvent(AddProductionEvent evnt)
{
DistrictFactory factory = evnt.Factory.GetComponent<DistrictFactory>();
factory.AddProductionQueueEntry(evnt.UnitClass, evnt.Player.GetComponent<Player>(), evnt.IsUpgrade);
IBuildable buildable = evnt.IsUpgrade ? DistrictUpgrade.FromName(evnt.UnitClass) : UnitClass.FromName(evnt.UnitClass);
factory.AddProductionQueueEntry(buildable, evnt.Player.GetComponent<Player>());
}
public override void OnEvent(MoveUnitToFlankEvent evnt)


+ 0
- 2
Assets/GWConquest/Scripts/UI/PlanetIndicatorUI.cs View File

@ -38,8 +38,6 @@ namespace GWConquest
[System.NonSerialized]
private Planet Planet;
private bool IndicatorShown = true;
public void SetPlanet(Planet planet)
{
Planet = planet;


+ 4
- 4
Assets/GWConquest/Scripts/UI/ProductionMenu.cs View File

@ -94,10 +94,10 @@ namespace GWConquest
int iconIndex = 0;
var buildCost = selectedUnitClass.BuildCost;
AddCostIcon(buildCost.FuelCost, "Fuel", ref iconIndex);
AddCostIcon(buildCost.AmmoCost, "Supplies", ref iconIndex);
AddCostIcon(buildCost.RecruitCost, "Recruits", ref iconIndex);
AddCostIcon(buildCost.CreditCost, "Credits", ref iconIndex);
foreach(var cost in buildCost.Costs)
{
AddCostIcon(cost.Amount, cost.Item, ref iconIndex);
}
}
private void AddCostIcon(int cost, string itemName, ref int index)


+ 5
- 5
Assets/GWConquest/Scripts/UI/ProductionMenuIcon.cs View File

@ -27,10 +27,10 @@ namespace GWConquest
if(unitClass.BuildCost != null)
{
SpawnCostIcon("Credits", unitClass.BuildCost.CreditCost);
SpawnCostIcon("Recruits", unitClass.BuildCost.RecruitCost);
SpawnCostIcon("Supplies", unitClass.BuildCost.AmmoCost);
SpawnCostIcon("Fuel", unitClass.BuildCost.FuelCost);
foreach(var cost in unitClass.BuildCost.Costs)
{
SpawnCostIcon(cost.Item, cost.Amount);
}
GWLayout.UpdateLayout(Costs);
}
@ -71,7 +71,7 @@ namespace GWConquest
}
}
void Update()
void FixedUpdate()
{
var district = Menu.factory.District;
if(Buildable.BuildCost != null)


+ 44
- 12
Assets/GWConquest/Scripts/UnitClass.cs View File

@ -89,13 +89,11 @@ namespace GWConquest
unitClass.EquipmentSlots = data.GetInt("Equipment Slots");
unitClass.InventorySlots = data.GetInt("Inventory Slots");
unitClass.BuildCost = new BuildCost
{
CreditCost = data.GetInt("Credit Cost"),
RecruitCost = data.GetInt("Recruit Cost"),
AmmoCost = data.GetInt("Supplies Cost"),
FuelCost = data.GetInt("Fuel Cost")
};
unitClass.BuildCost = new BuildCost();
unitClass.BuildCost.AddCost("Credits", data.GetInt("Credit Cost"));
unitClass.BuildCost.AddCost("Recruits", data.GetInt("Recruit Cost"));
unitClass.BuildCost.AddCost("Supplies", data.GetInt("Supplies Cost"));
unitClass.BuildCost.AddCost("Fuel", data.GetInt("Fuel Cost"));
unitClass.BuildTime = data.GetFloat("Build Time");
@ -295,7 +293,7 @@ namespace GWConquest
}
public string FullName {get; private set;}
public string ShortName;
public string ShortName {get; private set;}
public Sprite Sprite
{
get; private set;
@ -381,13 +379,46 @@ namespace GWConquest
public float Accuracy;
}
[System.Serializable]
public struct BuildCostEntry
{
public string Item;
public int Amount;
}
[System.Serializable]
public class BuildCost
{
public int CreditCost;
public int RecruitCost;
public int AmmoCost;
public int FuelCost;
public List<BuildCostEntry> Costs = new List<BuildCostEntry>();
public void AddCost(string item, int amount)
{
if(amount > 0)
{
Costs.Add(new BuildCostEntry() {Item = item, Amount = amount});
}
}
public bool AvailableIn(IInventory inventory, Player player)
{
foreach(var cost in Costs)
{
if(cost.Item == "Credits")
{
if(player.Credits < cost.Amount)
{
return false;
}
}
else {
if(!inventory.HasItem(cost.Item, cost.Amount))
{
return false;
}
}
}
return true;
}
}
public interface IBuildable
@ -395,6 +426,7 @@ namespace GWConquest
BuildCost BuildCost {get;}
float BuildTime {get;}
Sprite Sprite {get;}
string ShortName {get;}
string FullName {get;}
string Description {get;}
}


Loading…
Cancel
Save