public SimUnit AddUnit(SimUnitType unitType, SimPoint position) { SimUnit unit = new SimUnit(); unit.Init(unitType, nextUnitId++, position); units.Add(unit); boxListener.OnUnitAdded(unit); return(unit); }
public void Init(SimUnitType unitType, int id, SimPoint position) { this.unitType = unitType; this.id = id; this.position = position; position.units.Add(this); resources.SetCapacities(unitType.caps); resources.AddResources(unitType.resources); context.localResources = resources; context.unit = this; context.box = position.path.box; context.globalResources = context.box.globals; context.mapPositionRadius = unitType.mapRadius; }
private void ParseUnit() { string line = GetNextLine(); string[] lineSplit = SplitLine(line); if (lineSplit.Length == 1) { ThrowInvalidLine("ParseUnit()"); } SimUnitType unitType = new SimUnitType(); unitType.id = lineSplit[1]; unitType.rules = new SimRuleUnit[0]; unitType.resources = new SimResourceBinCollection(); unitType.caps = new SimResourceBinCollection(); unitType.targets = new string[0]; int splitOffset = 2; while (splitOffset < lineSplit.Length) { switch (lineSplit[splitOffset++]) { case "color": unitType.color = ParseUint(lineSplit[splitOffset++]); break; case "mapRadius": unitType.mapRadius = ParseInt(lineSplit[splitOffset++]); break; case "caps": unitType.caps = ParseResourcesArray(lineSplit, ref splitOffset); break; case "resources": unitType.resources = ParseResourcesArray(lineSplit, ref splitOffset); break; case "rules": { string[] rulesIds = ParseStringArray(lineSplit, ref splitOffset); unitType.rules = FindRules <SimRuleUnit>(rulesIds); break; } case "targets": { string[] targets = ParseStringArray(lineSplit, ref splitOffset); unitType.targets = targets; break; } default: ThrowInvalidLine("ParseUnit()"); break; } } definition.unitTypes.Add(unitType.id, unitType); }
public SimUnit AddUnit(SimUnitType unitType, SimSegmentPosition position) { SimPoint newPoint = position.segment.path.SplitSegment(position); return(AddUnit(unitType, newPoint)); }