예제 #1
0
    public void CreateSlot(string slotName)
    {
        string name = slotName;


        PetriSlot s = new PetriSlot(slotsList.ToArray().Length, name);

        slotsList.Add(s);


        int id = slotsList.ToArray().Length - 1;
    }
예제 #2
0
    public void CreateConnectionTS(int slot, int transition, int w = 1)
    {
        int            slotID  = slot;
        int            transID = transition;
        int            weight  = w;
        ConnectionType type    = ConnectionType.Normal;

        PetriConnection c = new PetriConnection(connectionsList.ToArray().Length, slotID, transID, true, weight, type);

        transitionsList[transID].outputs.Add(c);
        slotsList[slotID].inputs.Add(c);
        connectionsList.Add(c);

        PetriTransition trans = transitionsList[transID];
        PetriSlot       pslot = slotsList[slotID];
        string          l     = "Created a connection from the transition [" + trans.name + "(" + trans.id + ")" + "] to the slot [" + pslot.name + "(" + pslot.id + ")]" + "Id: " + c.id;
    }
예제 #3
0
    public void RunPetri()
    {
        foreach (PetriTransition transition in transitionsArray) // For each transition that there is
        {
            bool enabled = true;
            foreach (PetriConnection inputConnection in transition.inputs) // Check for input connections
            {
                PetriSlot slot = slotsArray[inputConnection.s];
                if ((slot.tokens < inputConnection.weight && inputConnection.type != ConnectionType.Inhibitor) || (slot.tokens > 0 && inputConnection.type == ConnectionType.Inhibitor))
                {
                    enabled = false; // If conditions are satisfied, enable the transition
                    break;
                }
            }

            if (enabled)                                                       // If the transition's enabled
            {
                foreach (PetriConnection inputConnection in transition.inputs) // Get each input
                {
                    PetriSlot slot = slotsArray[inputConnection.s];            // Reach for their slot
                    if (inputConnection.type != ConnectionType.Inhibitor)
                    {
                        RemoveTokensFromSlot(inputConnection.s, inputConnection.weight); // In case it's a normal or reset connection, remove some tokens from the slot
                    }
                    else if (inputConnection.type == ConnectionType.Reset)
                    {
                        RemoveTokensFromSlot(inputConnection.s, slotsArray[inputConnection.s].tokens); // If it's a reset connection, remove all tokens
                    }
                }

                foreach (PetriConnection outputConnection in transition.outputs)  // Get each output
                {
                    PetriSlot slot = slotsArray[outputConnection.s];              // Reach for their slot
                    AddTokensToSlot(outputConnection.s, outputConnection.weight); // Give tokens to it
                }

                transition.ActivateCallBack();
            }
            if (debugging)
            {
                Debug.Log(transition.name + " enabled: " + enabled);
            }
        }
    }