/// <summary> /// Applies the researched tech to the faction. Can be used when tech is gifted, stolen, researched... /// Increases the specific TechSD by one level for the given faction. /// </summary> /// <param name="factionAbilities"></param> /// <param name="factionTechs"></param> /// <param name="research"></param> public static void ApplyTech(FactionTechDB factionTechs, TechSD research) { if (factionTechs.ResearchedTechs.ContainsKey(research.ID)) { factionTechs.ResearchedTechs[research.ID] += 1; } else { factionTechs.ResearchedTechs.Add(research.ID, 0); } if (factionTechs.LevelforTech(research) >= research.MaxLevel) { factionTechs.ResearchableTechs.Remove(research); } else if (!factionTechs.ResearchableTechs.ContainsKey(research)) { factionTechs.ResearchableTechs.Add(research, 0); } if (factionTechs.UnavailableTechs[research] >= research.MaxLevel) { factionTechs.UnavailableTechs.Remove(research); //if we've reached the max value for this tech remove it from the unavailbile list } else //else if we've not reached max value, increase the level. { factionTechs.UnavailableTechs[research] += 1; } //check if it's opened up other reasearch. //MakeResearchable(factionTechs); }
public static Expression DataExpression(FactionTechDB factionTechs, TechSD tech) { string stringExpression = tech.DataFormula; Expression expression = new Expression(stringExpression); expression.Parameters.Add("Level", (double)factionTechs.LevelforTech(tech)); return(expression); }
public static int CostFormula(FactionTechDB factionTechs, TechSD tech) { string stringExpression = tech.CostFormula; Expression expression = new Expression(stringExpression); expression.Parameters.Add("Level", factionTechs.LevelforTech(tech)); int result = (int)expression.Evaluate(); return(result); }
public static double DataFormula(FactionTechDB factionTechs, TechSD tech) { string stringExpression = tech.DataFormula; Expression expression = new Expression(stringExpression); expression.Parameters.Add("Level", (double)factionTechs.LevelforTech(tech)); object result = expression.Evaluate(); if (result is int) { return((double)(int)result); } return((double)result); }