public void DoUpdate()
    {
        if (!isShown)
        {
            return;
        }
        List <MirrorChange> changes = parent.GetChanges();

        for (int i = 0; i < changes.Count; i++)
        {
            switch (changes[i].t)
            {
            case MirrorChange.changeType.shift: {
                MirrorChangeShift change = changes[i] as MirrorChangeShift;
                ShiftRow(change.y, change.shiftDir, true);
            } break;

            case MirrorChange.changeType.launch: {
                MirrorChangeLaunch change = changes[i] as MirrorChangeLaunch;
                LaunchTiles(change.length, change.topY, change.colNum, true);
            } break;

            case MirrorChange.changeType.wipe: {
                MirrorChangeWipeRow change = changes[i] as MirrorChangeWipeRow;
                for (int x = 0; x < width; x++)
                {
                    DestroyBlock(x, change.y);
                }
            } break;

            case MirrorChange.changeType.shield: {
                MirrorChangeShield change = changes[i] as MirrorChangeShield;
                if (change.kill)
                {
                    tiles[GetListPosFromXY(change.x, height - 1)].Kill();
                }
                else
                {
                    SetShieldGraphic(change.x, change.frame);
                }
            } break;

            default: {
                MirrorChangeRemoveTile change = changes[i] as MirrorChangeRemoveTile;
                DestroyBlock(change.x, change.y);
            } break;
            }
        }
    }