import processing.opengl.*; import megamu.shapetween.*; Tween ani; int currentPoint; Point2d[] points; String[] blurb; int lineSize = 10; float x = 0; float y = 0; PGraphics img; PFont pixelFont; void setup(){ noSmooth(); size(200,200, JAVA2D); ani = new Tween(this, 1, Tween.SECONDS, Shaper.COSINE); pixelFont = loadFont("Inconsolata-10.vlw"); textFont(pixelFont, lineSize); points = new Point2d[height/lineSize*2]; blurb = new String[height/lineSize]; buildBlurb(); boolean b = false; int j = 0; for (int i=lineSize; i < height + lineSize; i+=lineSize/2) { println("i:"+i+"j:"+j); if (b) { points[j++] = new Point2d(width-lineSize, i-lineSize/2); } else { points[j++] = new Point2d(lineSize, i); } b = !b; } currentPoint = 0; img = createGraphics(width, height, JAVA2D); } void draw(){ //background(20,40,255,250); stroke(255); //text("Oh who gives a flying fuck about", 0, lineSize+2); //text("111111111111111111111111111111123456789111111111", 0, 10); for (int i=0; i < blurb.length; i++) { if (points[currentPoint].y > (i+1) * lineSize) { fill(255,0,0); } else { fill(255); } text(blurb[i], 0, (i+1) * lineSize); } if (ani.isTweening()) { x = lerp(previousPoint().x, points[currentPoint].x, ani.position()); //x = previousPoint().x + ( ani.position() * ani.position() * (points[currentPoint].x - previousPoint().x)); y = previousPoint().y + ( ani.position() * (points[currentPoint].y - previousPoint().y)); } else { ani = new Tween(this, 1, Tween.SECONDS, Shaper.COSINE); currentPoint++; if (currentPoint == points.length) currentPoint = 0; } img.beginDraw(); img.background(0, 0, 0, 55); img.ellipse(x, y-2, 10, 10); img.endDraw(); img.filter(BLUR, 1); image(img, 0, 0); } Point2d previousPoint() { if (currentPoint == 0) { //println("returning:" + (points.length - 1)); return points[points.length - 1]; } else { return points[currentPoint - 1]; } } void buildBlurb() { String paragraph = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin porta erat. Etiam condimentum dui non ligula. In purus ante, vestibulum at, cursus sit amet, congue vitae, leo. Fusce id felis nec libero hendrerit congue. Nulla dignissim enim et sem. Mauris laoreet condimentum urna. Phasellus ante. Vivamus ac lectus. Curabitur eget metus eget magna pretium euismod. Proin mauris. Praesent sit amet mi." + "Vivamus consectetur. Donec eleifend elit at velit. Integer rhoncus, tellus ut tempus adipiscing, est nulla tincidunt libero, at gravida tellus libero eget lectus. Nunc euismod elit vel libero. Aliquam cursus eros ac nulla sagittis varius. Aliquam erat volutpat. Mauris rhoncus diam quis tortor. Morbi interdum felis a tellus. Suspendisse potenti. Nulla facilisi. Nam vulputate pretium urna. Etiam pulvinar nulla vel nulla. Duis et tellus sit amet tortor faucibus hendrerit. Morbi purus. In erat. Sed bibendum. In sagittis porttitor sapien. Duis hendrerit. Nullam euismod." + "Praesent neque. Quisque sodales est ut erat. Fusce erat. Nullam molestie urna fringilla mauris ornare faucibus. Duis venenatis rutrum justo. Donec cursus libero nec sapien. Nunc pellentesque eros. Sed a lorem quis sem congue vestibulum. Aliquam ac leo id elit fermentum consequat. Suspendisse potenti. Etiam tincidunt, sapien sed tempor laoreet, lacus eros condimentum tellus, scelerisque molestie lectus neque quis leo. Duis bibendum auctor magna. In hac habitasse platea dictumst. Vivamus suscipit nulla a neque. Nunc id odio. Donec semper magna ut orci. Nulla at metus." + "Fusce nisi metus, blandit a, eleifend ac, lacinia at, massa. Integer varius feugiat sapien. Nullam bibendum felis at magna. Donec vehicula congue orci. In hac habitasse platea dictumst. Praesent ultrices augue ac sapien. Nulla gravida tristique sapien. In urna justo, interdum aliquam, lobortis eget, consequat id, tortor. Sed vel arcu. Sed ac metus vitae elit luctus consectetur. Nam eget enim. Nulla arcu sapien, euismod ut, ornare in, cursus vitae, orci. Quisque placerat turpis sit amet nulla. Donec tempus. Proin urna est, consequat sed, ullamcorper sit amet, feugiat id, augue. Quisque turpis libero, aliquam convallis, malesuada at, blandit ut, turpis. Proin egestas enim ac tellus. Sed tempus est sollicitudin sapien." + "Donec mollis. Etiam aliquam, tortor tincidunt sodales pretium, est enim sodales arcu, a mattis ligula tellus eget quam. Vivamus vestibulum. Morbi sem sem, ultricies nec, vehicula ac, rhoncus et, augue. Curabitur cursus massa. Donec dapibus commodo metus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi adipiscing elit sed tortor. Nam condimentum neque tempor quam. Morbi id elit. Donec imperdiet. Ut tempus mi a mauris."; int charWidth = height / 10; int j = 0; println(paragraph.length()); int lines = paragraph.length() / (lineSize * 4); println(lines); //for (int i=0; i < paragraph.length()/lineSize*2000; i+=lineSize) { for (int i=0; i < blurb.length; i++) { int startChar = i * lineSize * 4; int endChar = (i+1) * lineSize * 4; blurb[i] = paragraph.substring(startChar, endChar); println(blurb[i]); //j++; } } class Point2d { public int x; public int y; public Point2d(int x, int y){ this.x=x; this.y=y; } }