fabianmoronzirfas
4/4/2013 - 12:45 PM

Written by Vamitul see --> http://forums.adobe.com/message/5206049

Written by Vamitul see --> http://forums.adobe.com/message/5206049

#targetengine matrixscript

function main() {

    function mainLoop() {
        if (started) {
            //select a random frame
            var myFrame = framesArray[rnd(39)];

            //test to reset it?
            if (rnd(10)) {

                // change each character in it
                var lns = myFrame.lines.everyItem().getElements();
                for (var l = 0; l < lns.length; l++) {
                    lns[l].characters[0].contents = myChars[rnd(myChars.length - 1)];
                }
                // add a new line
                myFrame.insertionPoints[0].contents = myChars[rnd(myChars.length - 1)] + '\n';
                myFrame.lines[0].fillColor = frontColors[3];
                if (myFrame.overflows) {
                    resetFrame(myFrame);
                }
            } else {
                resetFrame(myFrame);
            }
        }
    }

    function resetFrame(myFrame) {
        myFrame.contents = '';
        for (var j = 0; j < rnd(42, 3); j++) { //max 42 characaters per frame
            var tmpCont = myFrame.contents;
            myFrame.contents = tmpCont + myChars[rnd(myChars.length - 1)] + '\n';
        }
        myFrame.texts[0].appliedParagraphStyle = baseStyle;
        var highlight = rnd(myFrame.lines.length - 2, 1);
        myFrame.lines[highlight].fillColor = frontColors[1];
        myFrame.lines[highlight + 1].fillColor = frontColors[2];
        myFrame.lines[highlight - 1].fillColor = frontColors[2];

    }

    function rnd(max, start) {
        start = (typeof start === 'undefined') ? 0 : start;
        return Math.floor(Math.random() * (max - start + 1)) + start;
    }

    function checkFont() {
        // add checkings
        return "Trebuchet MS";
    }


    // set up document
    app.scriptPreferences.enableRedraw = true;
    var myDoc = app.documents.add({
        documentPreferences: {
            pageWidth: 200,
            pageHeight: 150,
            facingPages: false
        }
    });
    //background    
    var backFrame = myDoc.pages[0].rectangles.add({
        geometricBounds: [0, 0, 150, 200]
    });
    var backColor = myDoc.colors.add({
        colorValue: [0, 0, 0],
        space: ColorSpace.RGB
    });
    backFrame.fillColor = backColor;
    backFrame.strokeWeight = 0;
    backFrame.locked = true;
    //save black settings and preview back and apply new ones
    var oldBlackPrefs = app.colorSettings.idealizedBlackToScreen;
    app.colorSettings.idealizedBlackToScreen = true;
    myDoc.pasteboardPreferences.previewBackgroundColor = [0, 0, 0];
    //add the colors
    var frontColors = [];
    frontColors.push(myDoc.colors.add({
        colorValue: [102, 255, 51],
        space: ColorSpace.RGB
    }));
    frontColors.push(myDoc.colors.add({
        colorValue: [0, 255, 0],
        space: ColorSpace.RGB
    }));
    frontColors.push(myDoc.colors.add({
        colorValue: [0, 180, 0],
        space: ColorSpace.RGB
    }));
    frontColors.push(myDoc.colors.add({
        colorValue: [0, 100, 0],
        space: ColorSpace.RGB
    }));
    // used characters
    var myChars = '               \xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\u03a3\u03a4\u03a6\u03a9\u03b1\u03b2\u03b4\u03b5\u03bc\u03c0\u03c3\u03c4\u03c6\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x3c\x2c\x3e\x2e\x3f\x2f\x3a\x3b\\\"\\\'\x7b\x5b\x7d\x5d\\\\\x7c\x60\x7e\x30\x31\x32\x33\x34\x35\x36\x37\x39\x30\x2d\x5f\x3d\x2b\x21\x40\x23\x24\x25\x5e\x26\x2a\x28\x29';
    var baseFont = checkFont();
    var baseStyle = myDoc.paragraphStyles.add({
        name: "base",
        appliedFont: baseFont,
        pointSize: 12,
        leading: 10,
        alignToBaseline: true,
        fillColor: frontColors[3],
        fontStyle: "Bold",
        firstLineIndent: 0,
        leftIndent: 0,
        rightIndent: 0,
        spaceBefore: 0,
        spaceAfter: 0
    });
    var baseObjStyle = myDoc.objectStyles.add({
        applyNextParagraphStyle: false,
        enableFill: true,
        enableStroke: true,
        enableParagraphStyle: false,
        enableTextFrameGeneralOptions: false,
        enableTextFrameBaselineOptions: true,
        enableStoryOptions: false,
        enableTextWrapAndOthers: false,
        enableAnchoredObjectOptions: false,
        fillColor: myDoc.swatches[0],
        strokeColor: myDoc.swatches[0],
        strokeWeight: 0,
        baselineFrameGridOptions: {
            useCustomBaselineFrameGrid: true,
            startingOffsetForBaselineFrameGrid: 0,
            baselineFrameGridIncrement: '11pt',
            baselineFrameGridRelativeOption: BaselineFrameGridRelativeOption.TOP_OF_PAGE
        }
    });


    //switch to 'fullscreen'
    app.activeWindow.screenMode = ScreenModeOptions.PRESENTATION_PREVIEW; // switch to fullscreen preview-mode
    app.activeWindow.viewDisplaySetting = ViewDisplaySettings.HIGH_QUALITY; // we want high-quality

    // app.activeWindow.screenMode = ScreenModeOptions.PREVIEW_TO_PAGE; // switch to preview-mode
    // app.activeWindow.zoom(ZoomOptions.FIT_PAGE); // uncomment only if you use the above preview-mode

    // create initial frame grid
    var framesArray = [];
    for (var i = 0; i < 40; i++) {
        var tempGB = [0, (i * 5), 150, (i + 1) * 5];
        framesArray.push(myDoc.pages[0].textFrames.add(undefined, undefined, undefined, {
            geometricBounds: tempGB,
            appliedObjectStyle: baseObjStyle,
            appliedParagraphStyle: baseStyle
        }));
    }

    //inital fill of the frames
    for (var i = 0; i < 40; i++) {
        resetFrame(framesArray[i]);
    }
    // control panel
    var started = true;
    var myPanel = new Window('palette', 'Control', undefined, {
        borderless: true
    });
    myPanel.width = 60;
    myPanel.height = 30;

    myPanel.location = [$.screens[0].right - 100, $.screens[0].bottom - 80];
    myPanel.graphics.backgroundColor = myPanel.graphics.newBrush(myPanel.graphics.BrushType.SOLID_COLOR, [0, 0, 0]);
    myPanel.alignChildren = ['center', 'center'];
    var exitButton = myPanel.add('button', undefined, 'Exit', {
        name: "ok"
    });
    exitButton.onClick = function() {

        //restore black settings
        app.colorSettings.idealizedBlackToScreen = oldBlackPrefs;
        app.scriptPreferences.enableRedraw = false;
        //remove event listener
        myTask.removeEventListener(IdleEvent.ON_IDLE, mainLoop);
        myTask.remove();
        /// close de document 
        myDoc.close(SaveOptions.NO);
        myPanel.close();
        started = false;


    };
    myPanel.show();
    var myTask = app.idleTasks.add({
        name: 'mainTask',
        sleep: 4
    });
    var myTaskEvent = myTask.addEventListener(IdleEvent.ON_IDLE, mainLoop);



}
app.doScript('main()', undefined, undefined, UndoModes.fastEntireScript, '');