public void Load(int levelNo, bool returning, int portalNo) { priorLevel = room; room = levelNo; GameObject go = null; Clear(); LevelDefinition data = game.levelManager.Load(levelNo); Portal arrivalPortal = null; foreach (Item item in data.items) { switch (item.type) { case ItemType.Portal: go = Create(portalPrefab); Portal portal = go.GetComponent <Portal>(); portal.Init(game, item); if (returning) // returning to sending portal { // TODO This won't work when returning from an augmented portal if (item.portalType == PortalType.Open && item.number == portalNo) { arrivalPortal = portal; } } else // arriving at return portal { if (item.portalType == PortalType.Return) { arrivalPortal = portal; } } break; case ItemType.Hammer: go = Create(hammerPrefab); go.GetComponent <Hammer>().Init(game, item); break; case ItemType.Orb: go = Create(orbPrefab); Orb orb = go.GetComponent <Orb>(); orb.Init(game, item); break; case ItemType.Tool: go = Create(toolPrefab); Tool tool = go.GetComponent <Tool>(); tool.Init(game, item); break; case ItemType.Victory: // TODO Debug.Log("Victory!"); break; case ItemType.None: continue; default: throw new UnityException("Not implemented:" + item.type); } // Set parent and position if (go != null) { go.transform.parent = transform; go.transform.localPosition = new Vector3(item.point.x, item.point.y, 0); } } arrivalPortal.ThrowIfNull("Arrival portal not set in room " + room); game.player.ArriveAt(arrivalPortal); }