예제 #1
0
    public IEnumerator RawNextMapRoutine()
    {
        bool swapped = false;

        pc.GetComponent <MapEvent>().SetLocation(new Vector2Int(0, 0));
        activeMap.GetComponent <BattleController>().Clear();

        MapGenerator oldGen = activeMap.GetComponent <MapGenerator>();
        Map          oldMap = activeMap;
        int          level  = oldGen.level;
        MapGenerator newGen = activeMap.gameObject.AddComponent <MapGenerator>();

        newGen.GenerateMesh(oldGen);
        Destroy(oldGen);
        activeMap.GetComponent <LineOfSightEffect>().Erase();

        if (activeMap != oldMap)
        {
            swapped = true;
            pc.GetComponent <CharaEvent>().facing = EightDir.N;
            Destroy(oldGen.gameObject);
            activeMap.AddEvent(pc.GetComponent <MapEvent>());
        }

        MapCamera cam = FindObjectOfType <MapCamera>();

        if (cam.target != pc.GetComponent <MapEvent3D>())
        {
            cam.target = activeMap.GetEventNamed("ZoomTarget").GetComponent <MapEvent3D>();
        }

        activeMap.GetComponent <LineOfSightEffect>().RegenSitemap(activeMap.GetComponent <TacticsTerrainMesh>());

        RogueUI ui = FindObjectOfType <RogueUI>();

        ui.narrator.Clear();
        if (level == 0 && !seenTutorial)
        {
            seenTutorial = true;
            yield return(ui.TutorialRoutine());
        }
        yield return(ui.EditSpellsRoutine());

        Vector2Int loc = activeMap.GetEventNamed("TeleStart").location;
        EightDir   dir = pc.GetComponent <CharaEvent>().facing;

        loc += dir.XY() * -2;
        pc.GetComponent <MapEvent>().SetLocation(loc);
        activeMap.GetComponent <LineOfSightEffect>().RecalculateVisibilityMap();

        if (swapped)
        {
            StartCoroutine(activeMap.GetComponent <BattleController>().BattleRoutine());
        }
    }