Exemplo n.º 1
0
    protected virtual void LookForAttachedModules()
    {
        VicisMod.log(getPrefix(), "Looking neigbors");

        List <MassCrateModule> list = VicisMod.checkSurrounding <MassCrateModule>(this, out encounteredNullSegment);

        foreach (MassCrateModule m in list)
        {
            if (manager == null)
            {
                m.manager.Add(this);
            }
            else if (manager != m.manager)
            {
                manager.Merge(m.manager);
            }
            m.AddNeighbor(this);
            AddNeighbor(m);
        }

        VicisMod.log(getPrefix(), "I now have " + neighbors.Count + " neighbors");

        // FIRST!
        if (manager == null)
        {
            VicisMod.log(getPrefix(), "Creating a new manager for myself");
            MassCrateModuleManager newManager = new MassCrateModuleManager();
            newManager.Add(this);
        }
    }
Exemplo n.º 2
0
    public void Merge(MassCrateModuleManager mcmm)
    {
        // First, assign this MCMM as the manager for all modules controlled by the old manager
        foreach (MassCrateModule mcm in mcmm.modules.Keys)
        {
            Add(mcm);
        }

        mcmm.modules.Clear();
    }
Exemplo n.º 3
0
    protected virtual void sendingDrone(float timeJump)
    {
        if (carriedItems.Count == 0 && headTo != null && items.Count < maxItems)
        {
            VicisMod.log(getPrefix(), "Sending drone to pick up " + chosen.GetDisplayString() + " from location " +
                         VicisMod.getPosString(headTo.mnX, headTo.mnY, headTo.mnZ) + ", I'm at " + VicisMod.getPosString(mnX, mnY, mnZ) +
                         ", which is " + MassCrateModuleManager.calcDist(headTo, this) + "m away");

            getTargetCoords();

            VicisMod.log(getPrefix(), "Target coords are " + targetCoords + ", drone is at " + drone.getPos());

            if (targetCoords == Vector3.zero)
            {
                return;
            }
            sendDrone(targetCoords, timeJump);
        }
    }
Exemplo n.º 4
0
    public void Remove(MassCrateModule mcm)
    {
        modules.Remove(mcm);

        if (modules.Count == 0)
        {
            VicisMod.log(LOGGER_PREFIX, "I'm All Alone. Goodbye.");
            return;
        }

        // Nothing elso to do
        if (mcm.neighbors.Count == 0)
        {
            return;
        }

        // Need to figure out if we need to split into two groups...
        VicisMod.log(LOGGER_PREFIX, "Getting ready for floodfill");
        List <List <MassCrateModule> > groups    = new List <List <MassCrateModule> >();
        List <MassCrateModule>         neighbors = mcm.neighbors;

        foreach (MassCrateModule neighbor in neighbors)
        {
            bool cont = false;
            foreach (List <MassCrateModule> group in groups)
            {
                if (group.Contains(neighbor))
                {
                    cont = true;
                    break;
                }
            }
            if (cont)
            {
                continue;
            }
            List <MassCrateModule> floodFillResults = floodFillFun(neighbor);
            groups.Add(floodFillResults);
        }

        // We found only one group, don't need to spin off any more managers!
        if (groups.Count == 1 && groups[0].Count == modules.Count)
        {
            return;
        }
        if (groups.Count == 1)
        {
            VicisMod.log(LOGGER_PREFIX, "Found one group, but it has " + groups[0].Count + " crates and I know of " + modules.Count + " crates. What?");
            return;
        }

        VicisMod.log(LOGGER_PREFIX, "I'm now the lord of " + groups[0].Count + " modules (hopefully after I create the other managers");

        // Ok, now we need to create new managers for the extra groups.
        // First, remove the results from current modules
        for (int i = 1; i < groups.Count; ++i)
        {
            VicisMod.log(LOGGER_PREFIX, "Removing " + groups[i].Count + " from old from modules");
            foreach (MassCrateModule m in groups[i])
            {
                modules.Remove(m);
            }
            MassCrateModuleManager newManager = new MassCrateModuleManager();
            newManager.AddAll(groups[i]);
        }

        VicisMod.log(LOGGER_PREFIX, "I'm now the lord of " + modules.Count + " modules, really!");

        if (modules.Count == 0)
        {
            VicisMod.log(LOGGER_PREFIX, "Somehow, I have no more modules...");
        }
    }