예제 #1
0
    public override IEnumerator Execute(Board board, Lock locker = null)
    {
        if (locker != null)
        {
            locker.SignalStart();
        }
        foreach (GameObject g_ in board.tiles)
        {
            GridTile g = g_.GetComponent <GridTile>();
            if (this.InQuadrant(g.position, board.size))
            {
                g.Animate(new HueSine(), Colors.DOOM, true);
                g.MakeInAccessible();
                if (g.IsInhabited() && g.inhabitant is Agent)
                {
                    ((Agent)g.inhabitant).DoDamage(1);
                }
                // TODO: add accessibility toggle?
            }
        }
        if (locker != null)
        {
            locker.SignalStop();
        }

        yield return(null);
    }
예제 #2
0
    private IEnumerator AnimateWorldCollapse(World world)
    {
        int n = 1;

        collapseLock.SignalStart();

        while (world.IsAnimating())
        {
            yield return(null);
        }

        foreach (GridObject o in world.gridObjects)
        {
            n++;
            o.Animate(new Fader(), Colors.collapseFadeColor, true);
            yield return(new WaitForSeconds(3.0f / (n * n)));
        }

        List <GridTile> tiles = new List <GridTile>();

        foreach (GameObject tile_ in world.board.tiles)
        {
            GridTile tile = tile_.GetComponent <GridTile>();
            tiles.Add(tile);
        }

        foreach (GridTile tile in tiles.OrderBy(i => UnityEngine.Random.Range(0, 100)))
        {
            n++;
            tile.Animate(new Fader(), Colors.collapseFadeColor, true);
            yield return(new WaitForSeconds(3.0f / (n * n)));
        }

        while (world.IsAnimating())
        {
            yield return(null);
        }
        Vector3    worldPos  = world.board.tiles[2, 2].GetComponent <GridTile>().Center();
        Vector2    cameraPos = Camera.main.WorldToScreenPoint(worldPos);
        GameObject savedText = (GameObject)Instantiate(Resources.Load("SavedIntegText_pf"), uiCanvas.transform);

        savedText.transform.position = cameraPos;
        float worldSize = world.scale * 800f;

        savedText.GetComponent <RectTransform>().sizeDelta = new Vector2(worldSize, worldSize);
        savedText.GetComponent <Text>().text = "Saved " + Mathf.Ceil((world.integrity * 100)) + "%";

        yield return(new WaitForSeconds(3));

        Destroy(savedText);

        collapseLock.SignalStop();

        this.DestroyWorld(world);

        if (worlds.Count == 0)
        {
            StartCoroutine(gameController.NewWorld());
        }
    }