Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
 public override ActionDefinition GetAction(TechConfig techConfig)
 {
     foreach (var buildAction in techConfig.buildActions)
     {
         if (buildAction.prefab.cellType == cell.cellType)
         {
             return(buildAction);
         }
     }
     return(null);
 }
Example #4
0
        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);
            }
        }
Example #5
0
 public override ActionDefinition GetAction(TechConfig techConfig) => group.GetAction(techConfig);
Example #6
0
 public TechnologyData(TechConfig config)
 {
     this.config = config;
     upgrades.Add(Technology.None);
 }
Example #7
0
 public abstract ActionDefinition GetAction(TechConfig techConfig);
Example #8
0
 public override ActionDefinition GetAction(TechConfig techConfig) => action;