Loading...
Logo
Processing Forum
missyskae's Profile
1 Posts
1 Responses
0 Followers

Activity Trend

Last 30 days
Show:
Private Message
    I have made a sketch which types origami letters. The more often a letter occurs in a string, the more it unfolds. It uses tweets as a source, but once you click, you can type your own text. Now i want to make a cool animation at the start of the sketch saying 'Unfold'. The max steps is 6 and I want al the letters to begin at the first step and end at the last step with intervals of 2 seconds. Can anyone help me? I have uses png files as images for the letters.


    (this is the class)

    class typedLetter{
      String typedChar;
      int count;
      float letterAlpha = 0;
      
      typedLetter(String typedChar){
        this.typedChar = typedChar;
        letter lInst = letters.get(typedChar);
        //letter_shapes = lInst.letter_shapes;
        //println(typedChar);
        this.count = lInst.count;
        lInst.count++;
        lInst.count = constrain(lInst.count,0,max_steps);
      }
      void display(){
        tint(255,letterAlpha);
        
        letterAlpha += fadeSpeed;
        letterAlpha = constrain(letterAlpha,0,255);
        
        letter lInst = letters.get(typedChar);
        PImage origami = lInst.letter_shapes.get(count);
        image(origami,0,0);
        //println("DISPLAY");
      }
    }


    class letter {
      String letter;
      ArrayList<PImage> letter_shapes;
      int count;
      letter(String letter) {
        this.letter = letter;
        letter_shapes = new ArrayList<PImage>();
        for (int i=0; i<=max_steps; i++) {
          String filename = "letter_"+this.letter+"_step_"+(i+offset)+".png";
          //println(filename);
          PImage letter_shape = loadImage(filename);
          letter_shapes.add(letter_shape);
        }
      }


      String toString() {
        return "[LETTER OBJECT] I am the letter " + letter;
      }
    }


    this is the twitter feed


    import twitter4j.*;


    ConfigurationBuilder cb;
    Twitter twitter;
    ArrayList<String> getTweets() {
      Query query = new Query("origami");

      ArrayList<String> tweet_texts = new ArrayList<String>();

      try {
        QueryResult result = twitter.search(query);
        ArrayList tweets = (ArrayList) result.getTweets();
        for (int i = 0; i < tweets.size(); i++) {
          Status t = (Status) tweets.get(i);
          String tweet_msg = t.getText();
          int q_count = 0;
          for (int j=0; j<tweet_msg.length(); j++) {
            if (tweet_msg.charAt(j) == '?') {
              q_count++;
            }
          }
          
          if (q_count < 5) {
            tweet_texts.add(t.getText());
          }
        };
      }
      catch (TwitterException te) {
        //println("Couldn't connect: " + te);
      };

      return tweet_texts;
    }

    void initTwitter() {
      cb = new ConfigurationBuilder();
      cb.setOAuthConsumerKey("uEpelg8CTgvjN4Z99s9iaw");
      cb.setOAuthConsumerSecret("sDR7oeBkNKY9AlBxXq2t6XRm4fbXqzxlZdpCtaHjM");
      cb.setOAuthAccessToken("46233081-oBUW6fXkb03sD1SENtZbSsxmuYK9ykLTFfIQXdhaF");
      cb.setOAuthAccessTokenSecret("2EGcFHucVGSGFc2d2F9ufPbe7tlqyIxdeHe8DqOpk");

      twitter = new TwitterFactory(cb.build()).getInstance();
    }
    void getNewTweet(){
     ArrayList<String> tweets = getTweets();
        /*for (int i=0; i<tweets.size(); i++) {
          String tweet = tweets.get(i);
          println(tweet);
        } */
        String tweet = tweets.get(floor(random(tweets.size())));
        for(int i = 0; i<tweet.length(); i++){
          typeChar(tweet.charAt(i)+"");
        }
        //println(tweet);
    }

    this is the rest

    HashMap<String, letter> letters;
    ArrayList<typedLetter> letterList = new ArrayList<typedLetter>();

    float letterWidth = 90;
    float letterHeight = 90;

    float letterSpaceX = 90;
    float letterSpaceY = 90;

    float Xpos = 85;
    float Ypos = 250;

    float scrollY = 0;
    float fadeSpeed = 3;

    PFont myFont;

    boolean loadingTwitter = true;
    int lastTyped = millis();

    int max_steps = 6;
    int offset = 1;

    void setup() {
      

    myFont = createFont("AbeatbyKai", 46);
     textFont(myFont); 
     
      size(displayWidth, displayHeight, P2D);
      background(128);

      letters = new HashMap<String, letter>();
      for (int i=65; i<=90; i++) {
        String character = char(i) + "";
        letter l = new letter(character);
        letters.put(character, l);
      }
      letter space = new letter(" ");
      letters.put(" ", space);
      /*for (int i=65; i<=90; i++) {
       for(int j =0; j<max_steps; j++){
       typeChar(char(i)+"");
       }
       }*/
      initTwitter();
      getNewTweet();
    }
    void draw() {

      background(255);
      smooth();
      fill(255);

      textAlign(CENTER, BOTTOM);
      pushMatrix();
      translate(Xpos, Ypos);
      rotate(-HALF_PI);
      smooth();
      textFont(myFont);
      textSize(50);
      text("U n f o l d   M e", 0, 0);
      popMatrix();

      if (millis()-lastTyped > 15*500) {
        for (int i =  letterList.size(); i>0; i--) {
          removeChar();
          loadingTwitter = true;
        }
        getNewTweet();
        lastTyped = millis();
        //println("RESET");
        background(0);
      }

      rectMode(CENTER);
      translate(0, scrollY);
      translate(80, 70);

      int letterNumber = 0;
      int maxLetters = floor((width-100)/letterSpaceX);
      
      float letters_per_row = 13;
      float num_rows = floor(letterList.size() / letters_per_row);
      float max_rows = 8;
      
      float offset = 0;
      if (num_rows >= max_rows) {
        offset = -((num_rows-max_rows) * letterSpaceY);
      }
      
      
      for (typedLetter origamiLetter : letterList) {
        pushMatrix();
        int x = letterNumber % maxLetters;
        int y = floor(letterNumber/maxLetters);
        translate(x*letterSpaceX, (y*letterSpaceY) + offset);
        origamiLetter.display(); 
        letterNumber++;
        popMatrix();
      }

      if ((frameCount % 60) < 30) {
        pushMatrix();
        int x = letterNumber % maxLetters;
        int y = floor(letterNumber/maxLetters);
        translate(x*letterSpaceX, (y*letterSpaceY) + offset);
        stroke(10);
        line(x, y, x, letterSpaceY);
        popMatrix();
      }

      /*
      //if (frameCount%70==1) {
       stroke(0);
       //letterNumber++;
       int x = letterNumber % maxLetters;
       int y = floor(letterNumber/maxLetters);
       pushMatrix();
       translate(x*letterSpaceX, y*letterSpaceY);
       line(0, -15, 0, 15);
       popMatrix();
       //}
       */
    }
    void typeChar(String letter) {
      letter = letter.toUpperCase();
      char i = letter.charAt(0);
      if (i>=65 && i<=90) {
        letter = i+"";
      }
      else {
        letter = " ";
      }
      typedLetter origamiLetter = new typedLetter(letter);
      letterList.add(origamiLetter);
    }

    void removeChar() {
      if (letterList.size()>0) {
        typedLetter letterInst = letterList.get(letterList.size()-1);
        String typedChar = letterInst.typedChar;
        letter lInst = letters.get(typedChar);
        lInst.count--;
        lInst.count = constrain(lInst.count, 0, max_steps);
        letterList.remove(letterList.size()-1);
      }
    }

    void keyPressed() {
      if (key == BACKSPACE) {
        removeChar();
      }
      else if (key != CODED) {
        if (loadingTwitter) {
          for (int i =  letterList.size(); i>0; i--) {
            removeChar();
          }
          loadingTwitter=false;
        }
        typeChar(key+"");
        lastTyped = millis();
      }
    }