public static bool CreateDependency(Node from, Node to, TechConfig techConfig, UpgradeDependencyMode mode) { if (from.GetHashCode() == to.GetHashCode()) { return(false); } switch (mode) { case UpgradeDependencyMode.AddAction: return(AddAction(from, to, techConfig)); case UpgradeDependencyMode.CreateTechRequirement: return(AddTechRequirement(from, to, techConfig)); case UpgradeDependencyMode.RemoveAction: return(RemoveAction(from, to, techConfig)); case UpgradeDependencyMode.RemoveTechRequirement: return(RemoveTechRequirement(from, to, techConfig)); default: Debug.LogWarning($"Unhandled dependency mode: {mode}"); return(false); } }
private static bool AddTechRequirement(Node from, Node to, TechConfig techConfig) { switch (from) { case CellNode fromCell: switch (to) { case CellNode _: return(AddRequirementToAction(to.GetAction(techConfig), fromCell.GetCell().Technology)); case UpgradeGroupNode _: Debug.LogWarning("Cannot add tech requirements to upgrade groups. This is handled by the sub upgrade itself."); return(false); case UpgradeSubNode upgradeSubNode: var action = (UpgradeAction)to.GetAction(techConfig); var dependentTech = upgradeSubNode.GetTechnology(); var requiredTech = fromCell.GetCell().Technology; return(AddTechRequirementToUpgrade(action, dependentTech, requiredTech)); default: Debug.LogError($"Unable to add tech requirement to node type {to.GetType().Name}"); return(false); } case UpgradeGroupNode _: Debug.LogWarning($"{nameof(UpgradeGroupNode)} cannot be a tech dependency. Sub upgrades can be dependencies."); return(false); case UpgradeSubNode fromUpgrade: switch (to) { case CellNode _: return(AddRequirementToAction(to.GetAction(techConfig), fromUpgrade.GetTechnology())); case UpgradeGroupNode _: Debug.LogWarning("Cannot add tech requirements to upgrade groups. This is handled by the sub upgrade itself."); return(false); case UpgradeSubNode toUpgrade: var action = (UpgradeAction)to.GetAction(techConfig); var dependentTech = toUpgrade.GetTechnology(); var requiredTech = fromUpgrade.GetTechnology(); return(AddTechRequirementToUpgrade(action, dependentTech, requiredTech)); default: Debug.LogError($"Unable to add tech requirement to node type {to.GetType().Name}"); return(false); } default: Debug.LogWarning($"Add dependency failed. From {from.GetType().Name} to {from.GetType().Name}"); return(false); } }
public override ActionDefinition GetAction(TechConfig techConfig) { foreach (var buildAction in techConfig.buildActions) { if (buildAction.prefab.cellType == cell.cellType) { return(buildAction); } } return(null); }
private static bool RemoveAction(Node from, Node to, TechConfig techConfig) { switch (from) { case CellNode fromCell: switch (to) { case CellNode _: return(RemoveActionFromCell(fromCell.GetCell(), to.GetAction(techConfig))); case UpgradeGroupNode _: return(RemoveActionFromCell(fromCell.GetCell(), to.GetAction(techConfig))); default: Debug.LogWarning($"Unable to remove action of type {to.GetType().Name} from cell."); return(false); } default: Debug.LogWarning($"Remove action failed. Only cell nodes can have actions. Selected node was {from.GetType().Name}"); return(false); } }
public override ActionDefinition GetAction(TechConfig techConfig) => group.GetAction(techConfig);
public TechnologyData(TechConfig config) { this.config = config; upgrades.Add(Technology.None); }
public abstract ActionDefinition GetAction(TechConfig techConfig);
public override ActionDefinition GetAction(TechConfig techConfig) => action;