void setup() { size(400, 400); noCursor(); //Removed Cursor so that the viewer will be able to see most of the fairy } void draw() { //Background background(0); //Black background, setting is a cave with barely any light rectMode(CORNERS); //Set rectangles to be created from dimensions from a pair of corners ellipseMode(CORNERS); //Set ellipses to be created from dimensions from a pair of corners of the ellipse bounding box noStroke(); //No strokes for most shapes frameRate(60); //DRAGON*********************************** //Left Wing //Bottom fill(222+mouseY/10,198+mouseY/10,170+mouseY/10); //Goes from a dark beige to a lighter one with mouse Y value triangle(160,200-(mouseY/30),0,(260-(mouseY/20))-(mouseY/30),0,(300-(mouseY/40))-(mouseY/33)); //Triangle shifts to expand with mouse X value. Overlaps with MIDDLE //Middle fill(202+mouseY/10,178+mouseY/10,150+mouseY/10); //Goes from a dark beige to a lighter one with mouse Y value triangle(160,200-(mouseY/33),0,(240-(mouseY/2))-(mouseY/33),0,(280-(mouseY/10))-(mouseY/33)); //Triangle shifts to expand with mouse X value. Overlaps with TOP //Top fill(182+mouseY/10,158+mouseY/10,130+mouseY/10); //Goes from a dark beige to a lighter one with mouse Y value triangle(160,200-(mouseY/33),0,(220-(mouseY/2))-(mouseY/33),0,(260-(mouseY/5))-(mouseY/33)); //Triangle shifts to expand with mouse X value. Overlaps with ARM //Arm fill(78+mouseY/10,58+mouseY/10,34+mouseY/10); //Goes from a dark brown to a lighter one with mouse Y value quad(140,(160-(mouseY/10))-(mouseY/33),160,200-(mouseY/33),0,(240-(mouseY/2))-(mouseY/33),0,(220-(mouseY/2))-(mouseY/33)); //Two coordinates of the quad shift faster than the other two relative to mouse X position to simulate rotation //Right Wing //Bottom fill(222+mouseY/10,198+mouseY/10,170+mouseY/10); //Goes from a dark beige to a lighter one with mouse Y value triangle(240,200-(mouseY/30),400,(260-(mouseY/20))-(mouseY/30),400,(300-(mouseY/40))-(mouseY/33)); //Triangle shifts to expand with mouse X value. Overlaps with MIDDLE //Middle fill(202+mouseY/10,178+mouseY/10,150+mouseY/10); //Goes from a dark beige to a lighter one with mouse Y value triangle(240,200-(mouseY/33),400,(240-(mouseY/2))-(mouseY/33),400,(280-(mouseY/10))-(mouseY/33)); //Triangle shifts to expand with mouse X value. Overlaps with TOP //Top fill(182+mouseY/10,158+mouseY/10,130+mouseY/10); //Goes from a dark beige to a lighter one with mouse Y value triangle(240,200-(mouseY/33),400,(220-(mouseY/2))-(mouseY/33),400,(260-(mouseY/5))-(mouseY/33)); //Triangle shifts to expand with mouse X value. Overlaps with ARM //Arm fill(78+mouseY/10,58+mouseY/10,34+mouseY/10); //Goes from a dark brown to a lighter one with mouse Y value quad(260,(160-(mouseY/10))-(mouseY/33),400,(220-(mouseY/2))-(mouseY/33),400,(240-(mouseY/2))-(mouseY/33),240,200-(mouseY/33)); //Two coordinates of the quad shift faster than the other two relative to mouse Y position to simulate rotation /* All shape coordinates with multiple pairs of brackets are kep seperate to keep simulated camera movement consistent with other shape changes. In otherwords, although it would reduce the line length to combine (160+(mouseY/20))+(mouseY/20) into 160+(mouseY/10), I keep them seperate since the first one would control how the character itself reacts to the mouse X value while the second reacts to the simulated camera tilt. I kept them seperate in the case that I might have to change one of them later on. */ //Left Leg (the calf of the dragon's leg) fill(39+mouseY/10,20+mouseY/10,0+mouseY/10); //Goes from a dark brown to a lighter one with mouse Y value quad(130,340-(mouseY/33),150,350-(mouseY/33),140,400,130,400); //Quad shifts to change slightly with mouse Y value //left Thigh fill(78+mouseY/10,58+mouseY/10,34+mouseY/10); //Goes from a dark brown to a lighter one with mouse Y value quad(140+(mouseY/40),(250+(mouseY/30))-(mouseY/33),170+(mouseY/40),(300+(mouseY/30))-(mouseY/33),120+(mouseY/40),(370+(mouseY/30))-(mouseY/33),100,(300+(mouseY/30))-(mouseY/33)); //Quad shifts to change slightly (simulated rotation outwards) with mouse Y value. Overlaps LEFT LEG //Right Leg fill(39+mouseY/10,20+mouseY/10,0+mouseY/10); //Goes from a dark brown to a lighter one with mouse Y value quad(270,340-(mouseY/33),250,350-(mouseY/33),260,400,270,400); //Quad shifts to change slightly with mouse Y value //Right Thigh fill(78+mouseY/10,58+mouseY/10,34+mouseY/10); //Goes from a dark brown to a lighter one with mouse Y value quad(260-(mouseY/40),(250+(mouseY/30))-(mouseY/33),230-(mouseY/40),(300+(mouseY/30))-(mouseY/33),280-(mouseY/40),(370+(mouseY/30))-(mouseY/33),300,(300+(mouseY/30))-(mouseY/33)); //Quad shifts to change slightly (simulated rotation outwards) with mouse Y value. Overlaps LEFT LEG //Tail fill(78,58,34); //Goes from a dark brown to a lighter one with mouse X value quad(150,(220-(mouseY/10))-(mouseY/33),250,(220-(mouseY/10))-(mouseY/33),220,400,180,400); //Quad shifts to thin slightly with mouse X value //Body //The body of the Dragon. As mouseY value increases, it translates upwards and thins slightly. Its colour becomes lighter as mouseY increases. fill(108+mouseY/10,98+mouseY/10,64+mouseY/10); quad(200,(30-(mouseY/40))-(mouseY/33),270,(170-(mouseY/40))-(mouseY/33),200,(350-(mouseY/10))-(mouseY/33),130,(170-(mouseY/40))-(mouseY/33)); //Neck //The neck of the dragon. As mouseY increases, each neck segment translates upward, each going up at a different rate. each segment becomes a lighter shade as mouse Y value increases //Neck Top. As mouseY value increases, it translates upwards. Its colour becomes lighter as mouseY increases. Overlaps NECK MID //Moves up at the quickest rate fill(108+mouseY/10,88+mouseY/10,64+mouseY/10); quad(200,(10+(mouseY/20))-(mouseY/33),230,(100+(mouseY/20))-(mouseY/33),200,(180+(mouseY/20))-(mouseY/33),170,(100+(mouseY/20))-(mouseY/33)); //Neck Mid. As mouseY value increases, it translates upwards. Its colour becomes lighter as mouseY increases. Overlaps NECK BOTTOM //Moves up at the second quickest rate fill(78+mouseY/10,58+mouseY/10,34+mouseY/10); quad(200,(30-(mouseY/20))-(mouseY/33),240,(120-(mouseY/20))-(mouseY/33),200,(200-(mouseY/20))-(mouseY/33),160,(120-(mouseY/20))-(mouseY/33)); //Neck Bottom. As mouseY value increases, it translates upwards. Its colour becomes lighter as mouseY increases. Overlaps BODY //Moves up at the slowest rate fill(58+mouseY/10,38+mouseY/10,14+mouseY/10); quad(200,(50-(mouseY/15))-(mouseY/33),240,(140-(mouseY/15))-(mouseY/33),200,(220-(mouseY/15))-(mouseY/33),160,(140-(mouseY/15))-(mouseY/33)); //Horns //As mouse Y increases, the horns are translated upwards. Each horn is made up of an overlapping triangle or quad, each with coordinates that shift to give off the impression of them being viewed at a different angle //As Mouse Y increases, the colour of the horns lighten fill(10+mouseY/10); //Top Left triangle(180+(mouseY/40),((50+(mouseY/13))-(mouseY/7))-(mouseY/33),150-(mouseY/40),((80+(mouseY/40))-(mouseY/7))-(mouseY/33),160+(mouseY/40),((90+(mouseY/40))-(mouseY/7))-(mouseY/33)); quad(170,((70+(mouseY/20))-(mouseY/7))-(mouseY/33),150-(mouseY/40),((80+(mouseY/40))-(mouseY/7))-(mouseY/33),170,((120+(mouseY/40))-(mouseY/7))-(mouseY/33),190,((90+(mouseY/40))-(mouseY/7))-(mouseY/33)); //Bottom Left triangle(120+(mouseY/40),((80+(mouseY/40))-(mouseY/7))-(mouseY/33),130,((110)-(mouseY/7))-(mouseY/33),150+(mouseY/40),((110+(mouseY/40))-(mouseY/7))-(mouseY/33)); quad(140+(mouseY/40),((100+(mouseY/40))-(mouseY/7))-(mouseY/33),130,(110-(mouseY/7))-(mouseY/33),150,(140-(mouseY/7))-(mouseY/33),170+(mouseY/40),(120-(mouseY/7))-(mouseY/33)); //Top Right triangle(220-(mouseY/40),((50+(mouseY/13))-(mouseY/7))-(mouseY/33),240-(mouseY/40),((90+(mouseY/40))-(mouseY/7))-(mouseY/33),250+(mouseY/40),((80+(mouseY/40))-(mouseY/7))-(mouseY/33)); quad(230,((70+(mouseY/20))-(mouseY/7))-(mouseY/33),210,((90+(mouseY/40))-(mouseY/7))-(mouseY/33),230,((120+(mouseY/40))-(mouseY/7))-(mouseY/33),250+(mouseY/40),((80+(mouseY/40))-(mouseY/7))-(mouseY/33)); //Bottom Right triangle(280-(mouseY/40),((80+(mouseY/40))-(mouseY/7))-(mouseY/33),250-(mouseY/40),((110+(mouseY/40))-(mouseY/7))-(mouseY/33),270,(110-(mouseY/7))-(mouseY/33)); quad(260-(mouseY/40),((100+(mouseY/40))-(mouseY/7))-(mouseY/33),270,(110-(mouseY/7))-(mouseY/33),250,(140-(mouseY/7))-(mouseY/33),230-(mouseY/40),(120-(mouseY/7))-(mouseY/33)); //Jaw //As mouse Y increases, the Jaw gets longer and the bottom two points of its shape become closer. This simulates it rotating away from the screen. //As Mouse Y increases, the colour of the jaw lighten fill(39+mouseY/10,20+mouseY/10,0+mouseY/10); quad(200,(130-(mouseY/7))-(mouseY/33),240-(mouseY/80),(190-(mouseY/7))-(mouseY/33),200,(230-(mouseY/7))-(mouseY/33),160+(mouseY/80),(190-(mouseY/7))-(mouseY/33)); quad(180,(210-(mouseY/7))-(mouseY/33),220,(210-(mouseY/7))-(mouseY/33),220-(mouseY/40),((260+(mouseY/40))-(mouseY/7))-(mouseY/33),180+(mouseY/40),((260+(mouseY/40))-(mouseY/7))-(mouseY/33)); triangle(180+(mouseY/40),((260+(mouseY/40))-(mouseY/7))-(mouseY/33),220-(mouseY/40),((260+(mouseY/40))-(mouseY/7))-(mouseY/33),200,(270-(mouseY/7))-(mouseY/33)); triangle(190,(260-(mouseY/7))-(mouseY/33),210,(260-(mouseY/7))-(mouseY/33),200,((280-(mouseY/60))-(mouseY/7))-(mouseY/33)); //Fire /*The fire is composed of two overlapping quads, expanding from a straight line hidden under UPPERHEAD. This makes the flame shoot come out smoothly from the corners of the dragons mouth. Each coordinate between the two quads of each stream of flame is moving through a sin function being inputted with the fram count. To make it look less uniform, I made each matching coordinate move at a different rate and with a different amplitude by moddifying the input and output of each sin function. */ //Right fill(226,147,54); quad(220,180-(mouseY/7),(220+(mouseY/20))+sin(2+frameCount/5),((180)+sin(2+frameCount/5))-(mouseY/7),(220+(mouseY/13))+sin(3+frameCount/5),((190)+sin(3+frameCount/5))-(mouseY/7),220,210-(mouseY/7)); quad((220+(mouseY/20))+sin(2+frameCount/5),(180+sin(2+frameCount/5))-(mouseY/7),(220+(mouseY/10))+sin(3+frameCount/5),((180-(mouseY/20))+sin(3+frameCount/5))-(mouseY/7),(220+(mouseY/13))+sin(2+frameCount/5),(190+sin(2+frameCount/5))-(mouseY/7),220,200-(mouseY/7)); //left fill(226,147,54); quad(180,180-(mouseY/7),(180-(mouseY/20))+sin(3+frameCount/5),((180)+sin(3+frameCount*.2))-(mouseY/7),(180-(mouseY/13))+sin(2+frameCount/5),((190)+sin(2+frameCount/5))-(mouseY/7),180,210-(mouseY/7)); quad((180-(mouseY/20))+sin(frameCount/5),(180+sin(3+frameCount/5))-(mouseY/7),(180-(mouseY/10))+sin(3+frameCount/5),((180-(mouseY/20))+sin(frameCount/5))-(mouseY/7),(180-(mouseY/13))+sin(2+frameCount/5),(190+sin(2+frameCount/5))-(mouseY/7),180,200-(mouseY/7)); //Inside Jaw //As mouse Y increases, the inside of the jaw gets longer and the bottom two points of its shape become closer. This simulates it rotating away from the screen. //As Mouse Y increases, the colour of the inside of the jaw lighten fill(85+mouseY/10,68+mouseY/10,100+mouseY/10); quad(180,(200-(mouseY/7))-(mouseY/33),218,(210-(mouseY/7))-(mouseY/33),217-(mouseY/40),((243+(mouseY/20))-(mouseY/7))-(mouseY/33),183+(mouseY/40),((243+(mouseY/20))-(mouseY/7))-(mouseY/33)); //Eyeplaces //As mouse Y value increases, triangles shift and translate upwards. //As Mouse Y increases, the colour of the eye places lighten fill(182+mouseY/10,158+mouseY/10,130+mouseY/10); quad(150,(140-(mouseY/7))-(mouseY/33),180-(mouseY/40),((210-(mouseY/40))-(mouseY/7))-(mouseY/33),220+(mouseY/40),((210-(mouseY/40))-(mouseY/7))-(mouseY/33),250,(140-(mouseY/7))-(mouseY/33)); //Left triangle(150,(140-(mouseY/7))-(mouseY/33),150,(160-(mouseY/7))-(mouseY/33),170,(180-(mouseY/7))-(mouseY/33)); //Right triangle(250,(140-(mouseY/7))-(mouseY/33),250,(160-(mouseY/7))-(mouseY/33),230,(180-(mouseY/7))-(mouseY/33)); //Darkness // //As Mouse Y increases, the colour of the black becomes more transparent //This is behind the EYES and the UPPERHEAD so that I can make the eyes visible even when the screen is fully black fill(0,400-mouseY); rect(0,0,400,400); //Eyes //As Mouse Y increases, the eyes translate upwards fill(200+mouseY/7,0,0); //Left triangle(155,((140-(mouseY/70))-(mouseY/7))-(mouseY/33),160,((160-(mouseY/70))-(mouseY/7))-(mouseY/33),180,((170-(mouseY/70))-(mouseY/7))-(mouseY/33)); //Right triangle(245,((140-(mouseY/70))-(mouseY/7))-(mouseY/33),240,((160-(mouseY/70))-(mouseY/7))-(mouseY/33),220,((170-(mouseY/70))-(mouseY/7))-(mouseY/33)); //UpperHead //As Mouse Y increases, the head translate upwards, and each rect coordinates shift to make it look as if its rotating toward the screen //fades in to brown from black so that while the screen is black from DARKNESS, it can still be in front of it and maintain the illusion that the eyes are the only things visible in front of the DARKNESS fill(mouseY/5,mouseY/6,mouseY/11); triangle(200,((80+(mouseY/27))-(mouseY/7))-(mouseY/33),180+(mouseY/40),((91+(mouseY/40))-(mouseY/7))-(mouseY/33),220-(mouseY/40),((91+(mouseY/40))-(mouseY/7))-(mouseY/33)); quad(180+(mouseY/40),((90+(mouseY/40))-(mouseY/7))-(mouseY/33),220-(mouseY/40),((90+(mouseY/40))-(mouseY/7))-(mouseY/33),250,(141-(mouseY/7))-(mouseY/33),150,(141-(mouseY/7))-(mouseY/33)); quad(150,(140-(mouseY/7))-(mouseY/33),250,(140-(mouseY/7))-(mouseY/33),230,((171-(mouseY/40))-(mouseY/7))-(mouseY/33),170,((171-(mouseY/40))-(mouseY/7))-(mouseY/33)); quad(170,((170-(mouseY/40))-(mouseY/7))-(mouseY/33),230,((170-(mouseY/40))-(mouseY/7))-(mouseY/33),220+(mouseY/40),((241-(mouseY/20))-(mouseY/7))-(mouseY/33),180-(mouseY/40),((241-(mouseY/20))-(mouseY/7))-(mouseY/33)); triangle(180-(mouseY/40),((240-(mouseY/20))-(mouseY/7))-(mouseY/33),220+(mouseY/40),((240-(mouseY/20))-(mouseY/7))-(mouseY/33),200,((260-(mouseY/18))-(mouseY/7))-(mouseY/33)); //Nostrils //Translates upwards with mouse Y value and outwards from the middle of the screen fill(0); triangle(185-(mouseY/40),((235-(mouseY/15))-(mouseY/7))-(mouseY/33),195-(mouseY/40),((240-(mouseY/15))-(mouseY/7))-(mouseY/33),195-(mouseY/40),((245-(mouseY/15))-(mouseY/7))-(mouseY/33)); triangle(215+(mouseY/40),((235-(mouseY/15))-(mouseY/7))-(mouseY/33),205+(mouseY/40),((240-(mouseY/15))-(mouseY/7))-(mouseY/33),205+(mouseY/40),((245-(mouseY/15))-(mouseY/7))-(mouseY/33)); //KNIGHT*********************************** //Head //Triangles and rect shift with mouse Y value to give illusion that the head slowly looks upwards //HEAD translates upwards as Mouse Y increases fill(175-(mouseY/10)); ellipse(180, 210+(mouseY/10), 220, 250+(mouseY/10)); rect(180, 210+(mouseY/10), 220, 230+(mouseY/10)); fill(200-(mouseY/10)); rect(180, 210+(mouseY/10), 220, (216+(mouseY/80)+(mouseY/10))); triangle(200, (205-(mouseY/80))+(mouseY/10), 180, 211+(mouseY/10), 220, 211+(mouseY/10)); triangle(200, (220+(mouseY/40))+(mouseY/10), 180, (215+(mouseY/80))+(mouseY/10), 220, (215+(mouseY/80))+(mouseY/10)); //Neck //NECK translates upwards as Mouse Y increases stroke(25-(mouseY/16)); strokeWeight(11); line(200, 240+(mouseY/8), 200, 270+(mouseY/10)); line(199, 240+(mouseY/8), 199, 270+(mouseY/10)); noStroke(); //Sword //SWORD translates upwards as Mouse Y increases //SWORD translates outwards from the middle as Mouse Y increases //Handguard fill(170-(mouseY/10)); rect(135-(mouseY/22), 350+(mouseY/80), 175-(mouseY/22), 360+(mouseY/80)); fill(180-(mouseY/10)); rect(135-(mouseY/22), 350+(mouseY/80), 175-(mouseY/22), 357+(mouseY/80)); //Blade fill(200-(mouseY/10)); rect(145-(mouseY/22), 260+(mouseY/80), 165-(mouseY/22), 350+(mouseY/80)); fill(210-(mouseY/10)); quad(155-(mouseY/22), 250+(mouseY/80), 165-(mouseY/22), 260+(mouseY/80), 155-(mouseY/22), 270+(mouseY/80), 145-(mouseY/22), 260+(mouseY/80)); fill(185-(mouseY/10)); quad(165-(mouseY/22), 260+(mouseY/80), 155-(mouseY/22), 270+(mouseY/80), 155-(mouseY/22), 350+(mouseY/80), 165-(mouseY/22), 350+(mouseY/80)); //Handle stroke(30-(mouseY/16)); strokeWeight(5); line(155-(mouseY/22), 360+(mouseY/80), 155-(mouseY/22), 385+(mouseY/80)); noStroke(); //Shine //SHINE shifts upwards Mouse Y increases fill(240-(mouseY/10), 100); quad(145-(mouseY/22), 290+(mouseY/30), 165-(mouseY/22), 280+(mouseY/30), 165-(mouseY/22), 295+(mouseY/40), 145-(mouseY/22), 305+(mouseY/40)); //Shield //As Mouse Y increases the coordinates of SHIELD shift simulating rotation //SHIELD translates upwards as Mouse Y increases //SHIELD translates outwards from the middle as Mouse Y increases fill(70-(mouseY/10)); quad((225+(mouseY/20))+(mouseY/22), (330-(mouseY/40))+(mouseY/80), (265+(mouseY/40))+(mouseY/22), (340+(mouseY/40))+(mouseY/80), (285-(mouseY/10))+(mouseY/22), (410+(mouseY/20))+(mouseY/80), 215+(mouseY/22), (370-(mouseY/20)+(mouseY/80))); //Hands //HANDS shift outwards relative to mouse Y position //ARMS are just thick lines so that I can control the angle with by moving one set of coordinates fill(200-(mouseY/10)); //Left ellipse(145-(mouseY/22), 355+(mouseY/80), 165-(mouseY/22), 375+(mouseY/80)); //Right ellipse(235+(mouseY/22), 355+(mouseY/80), 255+(mouseY/22), 375+(mouseY/80)); //Forearms fill(150-(mouseY/10)); //Left ellipse(140-(mouseY/27), 320+(mouseY/15), 160-(mouseY/27), 370+(mouseY/57)); //Darker Part fill(125-(mouseY/10)); ellipse(140-(mouseY/27), 320+(mouseY/15), 160-(mouseY/27), 340+(mouseY/15)); //Right fill(150-(mouseY/10)); ellipse(240+(mouseY/27), 320+(mouseY/15), 260+(mouseY/27), 370+(mouseY/57)); //Darker Part fill(125-(mouseY/10)); ellipse(240+(mouseY/27), 320+(mouseY/15), 260+(mouseY/27), 340+(mouseY/15)); //Arms stroke(25-(mouseY/16)); strokeWeight(11); //Left line(160, 270+(mouseY/10), 150-(mouseY/26), (330-(mouseY/30))+(mouseY/10)); //Right line(240, 270+(mouseY/10), 250+(mouseY/26), (330-(mouseY/30))+(mouseY/10)); noStroke(); //Knight Neckguard //Shifts relative to mouse Y value simulating angle change //Translates upwards with mouse Y fill(150-(mouseY/10)); triangle(200, (240+(mouseY/40))+(mouseY/10), 170, 270+(mouseY/10), 230, 270+(mouseY/10)); //Knight Torso //Shifts relative to mouse Y value simulating angle change //Translates upwards with mouse Y //Dark fill(150-(mouseY/10)); triangle(200, (365+(mouseY/80))+(mouseY/10), 160, 270+(mouseY/10), 240, 270+(mouseY/10)); //Light fill(175-(mouseY/10)); triangle(200, (250+(mouseY/30))+(mouseY/10), 160, 271+(mouseY/10), 240, 271+(mouseY/10)); triangle(200, (280+(mouseY/30))+(mouseY/10), 160, 270+(mouseY/10), 240, 270+(mouseY/10)); //Legs //LEGS are just thick lines so that I can control the angle with by moving one set of coordinates //Left stroke(25-(mouseY/16)); strokeWeight(11); line(190, 370+(mouseY/10), 180-(mouseY/40), 400+(mouseY/10)); //Right line(210, 370+(mouseY/10), 220+(mouseY/40), 400+(mouseY/10)); noStroke(); //Knight Skirt //Shifts relative to mouse Y value simulating angle change //Translates upwards with mouse Y fill(150-(mouseY/10)); triangle(200, (340+(mouseY/40))+(mouseY/10), 170, (370+(mouseY/133))+(mouseY/10), 230, (370+(mouseY/133))+(mouseY/10)); triangle(200, (380+(mouseY/30))+(mouseY/10), 170, (369+(mouseY/133))+(mouseY/10), 230, (369+(mouseY/133))+(mouseY/10)); //Knight Waist //Shifts relative to mouse Y value simulating angle change //Translates upwards with mouse Y fill(175-(mouseY/10)); triangle(200, (335+(mouseY/45))+(mouseY/10), 190, (340+(mouseY/100))+(mouseY/10), 210, (340+(mouseY/100))+(mouseY/10)); rect(190, (339+(mouseY/100))+(mouseY/10), 210, (351+(mouseY/57))+(mouseY/10)); triangle(200, (350+(mouseY/30))+(mouseY/10), 190, (350+(mouseY/57))+(mouseY/10), 210, (350+(mouseY/57))+(mouseY/10)); //Shoulders //Shifts relative to mouse Y value simulating angle change, the lighter portion of the SHOULDERS do this as well but at a different rate, enhancing the effect //Translates upwards with mouse Y //Left fill(175-(mouseY/10)); ellipse(140, 260+(mouseY/9), 180, (280+(mouseY/100))+(mouseY/9)); //Top Left fill(200-(mouseY/10)); ellipse(150, 260+(mouseY/9), 170, (267+(mouseY/100))+(mouseY/9)); //Right fill(175-(mouseY/10)); ellipse(220, 260+(mouseY/9), 260, (280+(mouseY/100))+(mouseY/9)); //Top Right fill(200-(mouseY/10)); ellipse(230, 260+(mouseY/9), 250, (267+(mouseY/100))+(mouseY/9)); //Fairy //Fairy follows cursor //FAIRY's glow uses pmouse in order to give its GLOW some lag //GLOW is transparent ellipseMode(CENTER); fill(127,210,252); ellipse(mouseX,mouseY,20,20); //Glow 1 fill(127,210,252,125); ellipse(pmouseX,pmouseY, 40 + sin(frameCount * .08) * 5, 40 + sin(frameCount * .08) * 5); //Glow 2 fill(127,210,252,60); ellipse(pmouseX,pmouseY, 60 + cos(frameCount * .08) * 5, 60 + cos(frameCount * .08) * 5); //Wings //wings use sin functions and framCount to flap //Right fill(255); triangle(10+mouseX,-1+mouseY,35+pmouseX,(-11+pmouseY)+2*sin(frameCount/3),25+pmouseX,(2+pmouseY)+2*sin(frameCount/3)); //Left fill(255); triangle(-10+mouseX,-1+mouseY,-35+pmouseX,(-11+pmouseY)+2*sin(frameCount/3),-25+pmouseX,(2+pmouseY)+2*sin(frameCount/3)); }