Beispiel #1
0
    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);
    }