Ejemplo n.º 1
0
    public SimUnit AddUnit(SimUnitType unitType, SimPoint position)
    {
        SimUnit unit = new SimUnit();

        unit.Init(unitType, nextUnitId++, position);

        units.Add(unit);

        boxListener.OnUnitAdded(unit);

        return(unit);
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 4
0
    public SimUnit AddUnit(SimUnitType unitType, SimSegmentPosition position)
    {
        SimPoint newPoint = position.segment.path.SplitSegment(position);

        return(AddUnit(unitType, newPoint));
    }