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; }
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; }
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); } } }