private SimulationDefinition CreateDefinition() { SimulationDefinition definition = new SimulationDefinition(); SimResource resourceWater = new SimResource(); resourceWater.id = "Water"; SimResource resourceGrass = new SimResource(); resourceGrass.id = "Grass"; definition.resourceTypes.Add(resourceWater.id, resourceWater); definition.resourceTypes.Add(resourceGrass.id, resourceGrass); //Add 2 of water every 10 ticks SimRuleValueMap valueMapWater = new SimRuleValueMap(); valueMapWater.mapId = "Water"; SimRuleCommandAdd commandAddWater = new SimRuleCommandAdd(); commandAddWater.amount = 2; commandAddWater.target = valueMapWater; SimRuleMap ruleMapAddWater = new SimRuleMap(); ruleMapAddWater.id = "AddWater"; ruleMapAddWater.rate = 10; ruleMapAddWater.randomTiles = true; ruleMapAddWater.randomTilesPercent = 25; ruleMapAddWater.commands = new SimRuleCommand[] { commandAddWater }; //Water Map SimMapType mapTypeWater = new SimMapType(); mapTypeWater.id = "Water"; mapTypeWater.color = 0x0000FF; mapTypeWater.capacity = 100; mapTypeWater.rules = new SimRuleMap[] { ruleMapAddWater }; definition.mapTypes.Add(mapTypeWater.id, mapTypeWater); //Add grass every 7 ticks if there is 10 of water available SimRuleValueMap valueMapGrass = new SimRuleValueMap(); valueMapGrass.mapId = "Grass"; SimRuleCommandRemove commandRemoveWater = new SimRuleCommandRemove(); commandRemoveWater.amount = 10; commandRemoveWater.target = valueMapWater; SimRuleCommandAdd commandAddGrass = new SimRuleCommandAdd(); commandAddGrass.amount = 1; commandAddGrass.target = valueMapGrass; SimRuleMap ruleMapCreateGrass = new SimRuleMap(); ruleMapCreateGrass.id = "CreateGrass"; ruleMapCreateGrass.rate = 7; ruleMapCreateGrass.commands = new SimRuleCommand[] { commandRemoveWater, commandAddGrass }; //Grass Map SimMapType mapTypeGrass = new SimMapType(); mapTypeGrass.id = "Grass"; mapTypeGrass.color = 0x00FF00; mapTypeGrass.capacity = 10; mapTypeGrass.rules = new SimRuleMap[] { ruleMapCreateGrass }; definition.mapTypes.Add(mapTypeGrass.id, mapTypeGrass); return(definition); }
private SimRuleCommand ParseCommand(string line) { string[] lineSplit = SplitLine(line); int lineSplitOffset = 0; SimRuleCommand command = null; //Find target SimRuleValue target = null; switch (lineSplit[lineSplitOffset]) { case "local": target = new SimRuleValueLocal(); ((SimRuleValueLocal)target).resource = definition.GetResource(lineSplit[1]); lineSplitOffset += 2; break; case "global": target = new SimRuleValueGlobal(); ((SimRuleValueGlobal)target).resource = definition.GetResource(lineSplit[1]); lineSplitOffset += 2; break; case "map": target = new SimRuleValueMap(); ((SimRuleValueMap)target).mapId = lineSplit[1]; lineSplitOffset += 2; break; case "agent": command = new SimRuleCommandAgent(); ((SimRuleCommandAgent)command).agentType = definition.GetAgentType(lineSplit[1]); lineSplitOffset += 2; while (lineSplitOffset < lineSplit.Length) { switch (lineSplit[lineSplitOffset++]) { case "to": ((SimRuleCommandAgent)command).searchTarget = lineSplit[lineSplitOffset++]; break; case "add": ((SimRuleCommandAgent)command).resources = ParseResourcesArray(lineSplit, ref lineSplitOffset); break; default: ThrowInvalidLine("ParseCommand() - Invalid agent parameter"); break; } } break; } if (target != null) { switch (lineSplit[lineSplitOffset]) { case "add": command = new SimRuleCommandAdd(); ((SimRuleCommandAdd)command).target = target; ((SimRuleCommandAdd)command).amount = ParseInt(lineSplit[lineSplitOffset + 1]); break; case "remove": command = new SimRuleCommandRemove(); ((SimRuleCommandRemove)command).target = target; ((SimRuleCommandRemove)command).amount = ParseInt(lineSplit[lineSplitOffset + 1]); break; case "greater": command = new SimRuleCommandTest(); ((SimRuleCommandTest)command).target = target; ((SimRuleCommandTest)command).comparison = SimRuleCommandTest.Comparison.Greater; ((SimRuleCommandTest)command).amount = ParseInt(lineSplit[lineSplitOffset + 1]); break; case "less": command = new SimRuleCommandTest(); ((SimRuleCommandTest)command).target = target; ((SimRuleCommandTest)command).comparison = SimRuleCommandTest.Comparison.Less; ((SimRuleCommandTest)command).amount = ParseInt(lineSplit[lineSplitOffset + 1]); break; case "equals": command = new SimRuleCommandTest(); ((SimRuleCommandTest)command).target = target; ((SimRuleCommandTest)command).comparison = SimRuleCommandTest.Comparison.Equals; ((SimRuleCommandTest)command).amount = ParseInt(lineSplit[lineSplitOffset + 1]); break; } } return(command); }