GateSpace.Gate GetRandomGate() { Pool <GateSpace.Gate> pool = Utility.GetRandomElementFromQueue <Pool <GateSpace.Gate> >(_gatePools); //shuffle queues so we wom't get same pattern of spawning GateSpace.Gate myGate = pool.Allocate(); void handler(object sender, EventArgs e) { pool.Release(myGate); myGate.Death -= handler; } myGate.Death += handler; _gatePools.Enqueue(pool); return(myGate); }
void InstantiateMainRoadElement() { Road road = _roadPool.Allocate(); void handler(object sender, EventArgs e) { _roadPool.Release(road); road.Death -= handler; SpawnRoad(); } road.Death += handler; road.transform.position = _nextBlockPosition; GateSpace.Gate gate = GetRandomGate(); //we allow road to pick its gate on it's own road.Init(gate); }