public void QueueCalculation(UpgradeAction.UpgradeDetails upgrade, Action onCompleteCallback) { if (upgrade.tech == Technology.None) { return; } SetupAndCalculateGamePlan(null, upgrade, onCompleteCallback); }
public void Setup(UpgradeGroupNode group, UpgradeAction.UpgradeDetails upgrade, int index) { this.group = group; this.upgrade = upgrade; this.index = index; hash = GenerateHash(upgrade); Element = GetElement(); }
public void QueueCalculation(HexCell cell, Action onCompleteCallback) { if (cell == null) { return; } var nullUpgradeDetails = new UpgradeAction.UpgradeDetails(); SetupAndCalculateGamePlan(cell, nullUpgradeDetails, onCompleteCallback); }
public void ShowNodeDetails(UpgradeAction.UpgradeDetails upgradeDetails) { if (this.upgradeDetails.tech == upgradeDetails.tech) { return; } this.upgradeDetails = upgradeDetails; cell = null; upgrade = null; UpdateContents(); }
public TurnCalculatorNode(TurnCalculatorNode originalNode, UpgradeAction.UpgradeDetails upgrade, int numTurnsToAfford, Currency targetCost) { PlayerData = originalNode.PlayerData.Clone(); Buildings = originalNode.Buildings; ApplyCurrencyModifications(numTurnsToAfford, upgrade.cost); PlayerData.TechnologyData.AddTechnology(upgrade.tech); PreviousNode = originalNode; Action = "Upgrade " + upgrade.title; CalculateNodeCosts(targetCost); }
public UpgradeSubNode GetSubNode(UpgradeAction.UpgradeDetails upgradeDetails) { var subUpgradeHash = UpgradeSubNode.GenerateHash(upgradeDetails); var subNode = subNodes.FirstOrDefault(n => n.GetHash() == subUpgradeHash); if (subNode == null) { var index = action.upgradeDetails.ToList().FindIndex(u => u.tech == upgradeDetails.tech); subNode = new UpgradeSubNode(this, upgradeDetails, index); subNodes.Add(subNode); } return(subNode); }
private void UpdateActionCost(UpgradeAction action, UpgradeAction.UpgradeDetails upgrade, Currency cost) { for (int i = 0; i < action.upgradeDetails.Length; i++) { if (action.upgradeDetails[i].tech == upgrade.tech && action.upgradeDetails[i].title == upgrade.title) { editor.RecordUndo(action, "Upgrade action cost"); upgrade.cost = cost; var allDetails = action.upgradeDetails; allDetails[i] = upgrade; action.upgradeDetails = allDetails; EditorUtility.SetDirty(action); UpdateActions(); } } }
public bool CanAddTech(UpgradeAction.UpgradeDetails details, PlayerData data) { if (data == null || details.tech == Technology.None) { return(false); } if (data.TechnologyData.HasTechnology(details.tech)) { return(false); } if (!data.TechnologyData.HasTechnologies(details.requiredTech)) { return(false); } return(data.CurrencyData.CanAfford(details.cost)); }
private void SetupAndCalculateGamePlan(HexCell cell, UpgradeAction.UpgradeDetails upgrade, Action onCompleteCallback) { targetCell = cell; targetUpgrade = upgrade; var homeCell = (BuildingCell)cells.GetPrefab(Cells.CellTypes.Home); var playerData = CreatePlayerData(homeCell); var buildings = new List <BuildingCell> { homeCell }; if (targetCell != null) { if (targetCell is BuildingCell buildingCell && buildings.Contains(buildingCell)) { return; } if (playerData.TechnologyData.HasTechnology(targetCell.Technology)) { return; } } else if (targetUpgrade.tech != Technology.None) { if (playerData.TechnologyData.HasTechnology(targetUpgrade.tech)) { return; } } else { return; } openSet.Clear(); closedSet.Clear(); openSet.Add(new TurnCalculatorNode(playerData, buildings)); gamePlan = CalculateGamePlan(); onCompleteCallback?.Invoke(); }
public void Show(VisualElement container, UpgradeAction.UpgradeDetails upgrade, Action updateContentsCallback) { var header = new Label(upgrade.title); header.AddToClassList("object-header"); container.Add(header); container.Add(new Label($"Cost: {upgrade.cost.supplies} supplies, {upgrade.cost.production} production")); gamePlan.ShowGamePlan(container); var btn = new Button { text = "Turns" }; btn.AddToClassList("calc-button"); btn.clicked += () => gamePlan.CalculateGamePlan(upgrade, updateContentsCallback); container.Add(btn); }
public void CalculateGamePlan(UpgradeAction.UpgradeDetails upgradeDetails, Action onGamePlanCalculatedCallback) { turnCalculator.QueueCalculation(upgradeDetails, onGamePlanCalculatedCallback); }
public static int GenerateHash(UpgradeAction.UpgradeDetails upgrade) => Hash128.Compute("SubUpgrade" + upgrade.title).GetHashCode();
public UpgradeSubNode(UpgradeGroupNode group, UpgradeAction.UpgradeDetails upgrade, int index) { MoveDisabled = false; Setup(group, upgrade, index); }
private void ProcessUpgradeAction(UpgradeAction.UpgradeDetails upgrade) { ProcessCost(upgrade.cost); playerData.TechnologyData.AddTechnology(upgrade.tech); UpdateActions(); }