From 9a08094c352975bfc1d2b1135ea666a085582124 Mon Sep 17 00:00:00 2001 From: 61616 <33187059+61616@users.noreply.github.com> Date: Thu, 5 May 2022 10:43:27 -0400 Subject: [PATCH] Added mathpad beta and number interface --- B12NumbersV3/ActionCodeAll.pde | 2 +- B12NumbersV3/B12Base.pde | 3 +- B12NumbersV3/B12NumbersV3.pde | 18 +++++++++-- B12NumbersV3/guiButton.pde | 8 +++-- B12NumbersV3/guiMathPad.pde | 58 +++++++++++++++++++++++++++++++++- 5 files changed, 81 insertions(+), 8 deletions(-) diff --git a/B12NumbersV3/ActionCodeAll.pde b/B12NumbersV3/ActionCodeAll.pde index 2495847..824af29 100644 --- a/B12NumbersV3/ActionCodeAll.pde +++ b/B12NumbersV3/ActionCodeAll.pde @@ -12,7 +12,7 @@ class ClickHandler{ void clean(){ if(mrs.length == 0) return; - for(int i = mrs.length; i >= 0; i--){ + for(int i = mrs.length -1; i >= 0; i--){ if(!mrs[i].live){ mrs[i] = mrs[mrs.length - 1]; mrs = (LiveMethodRelay[])shorten(mrs); diff --git a/B12NumbersV3/B12Base.pde b/B12NumbersV3/B12Base.pde index ae0014e..74a02d3 100644 --- a/B12NumbersV3/B12Base.pde +++ b/B12NumbersV3/B12Base.pde @@ -4,7 +4,7 @@ class B12Digit{ B12Digit(int _value){ if(_value >= 12 || _value < 0){ - throw new IllegalArgumentException("B12Digit only accepts decimal integers 0 through 11"); + throw new IllegalArgumentException("B12Digit only accepts decimal integers 0 through 11 -- " + _value); } value = byte(_value); refPos = new PVector(0,0); @@ -32,6 +32,7 @@ class B12Digit{ translate(refPos.x,refPos.y); strokeWeight(1); noFill(); + stroke(1); ellipseMode(CORNERS); switch(value) { // NUMBERS // diff --git a/B12NumbersV3/B12NumbersV3.pde b/B12NumbersV3/B12NumbersV3.pde index 854cc81..2021acd 100644 --- a/B12NumbersV3/B12NumbersV3.pde +++ b/B12NumbersV3/B12NumbersV3.pde @@ -28,17 +28,25 @@ to be fine with simply swithing out the reference. */ +float scale = 2; +PVector offset; +float sMouseX; +float sMouseY; public static final int DECIMAL = 65; ClickHandler ch; // Mouse event handler Clock clock; //<>// B12Digit p; B12Digit t; +MathPad m; void setup(){ size(400,400); + offset = new PVector(width/2, height/2); ch = new ClickHandler(); + m = new MathPad(ch,new B12Math()); + clock = new Clock(new STime48()); println("waiting"); p = new B12Digit('+'); @@ -47,19 +55,23 @@ void setup(){ void draw(){ background(196); - translate(width/2,height/2); - scale(2); + sMouseX = (mouseX - offset.x)/scale; + sMouseY = (mouseY - offset.y)/scale; + translate(offset.x,offset.y); + scale(scale); point(0,0); + m.display(); clock.display(); //p.display(); t.display(); + //println( + " " + ; } void mouseClicked(){ //clock.setTime(new Time48(16,0,0)); // Every clickable element needs check whether the mouse is over it every frame, and if both clicked and mouseover then do action. - ch.cascade(mouseX,mouseY); + ch.cascade(sMouseX, sMouseY); } void call(String _call){ diff --git a/B12NumbersV3/guiButton.pde b/B12NumbersV3/guiButton.pde index 0f0ac8f..bdd5f5e 100644 --- a/B12NumbersV3/guiButton.pde +++ b/B12NumbersV3/guiButton.pde @@ -6,6 +6,7 @@ class Button{ int mode; // Stores rect draw mode for button color col; // Stores static color color highlight; // Stores mouseover color + MethodRelay function; boolean mouseOver; Button(ClickHandler _ch, PVector _pos, PVector _dim, float _radius){ @@ -28,6 +29,7 @@ class Button{ float getRadius(){return radius;} color getColor(){return col;} color getHighlight(){return highlight;} + MethodRelay getFunction(){return function;} int getMode(){return mode; } // SETTERS // @@ -36,6 +38,7 @@ class Button{ void setColor(color c){col = c; } void setColor(color c, color h){col = c; highlight = h;} void setHighlight(color h){ highlight = h; } + void setFunction(MethodRelay _function){function = _function;} // TODO finish implementation void setMode(int m){ if(m == CORNER || m == CORNERS || m == CENTER || m == RADIUS){ @@ -47,8 +50,9 @@ class Button{ // DISPLAY // void display(){ + noStroke(); rectMode(mode); - new MethodRelay(this,"mouseOver" + str(mode), float.class, float.class).execute(mouseX,mouseY); + new MethodRelay(this, "mouseOver" + str(mode), float.class, float.class).execute(sMouseX,sMouseY); fill(mouseOver ? highlight : col); rect(pos.x,pos.y,dim.x,dim.y,radius); } @@ -65,7 +69,7 @@ class Button{ // The numbers in the method name correspond to the mode ids because the method gets called with a relay void mouseOver0(float x, float y){ // CORNER //println("CORNER"); - if(x < pos.x || x > dim.x + pos.x || y < pos.x || y > dim.y + pos.y) + if(x < pos.x || x > pos.x + dim.x || y < pos.y || y > dim.y + pos.y) { mouseOver = false; return; diff --git a/B12NumbersV3/guiMathPad.pde b/B12NumbersV3/guiMathPad.pde index 6872244..8b86f53 100644 --- a/B12NumbersV3/guiMathPad.pde +++ b/B12NumbersV3/guiMathPad.pde @@ -1,10 +1,24 @@ class MathPad{ B12Math math; + ClickHandler ch; + B12Button[] buttons; + PVector pos; - MathPad(B12Math _math){ + MathPad(ClickHandler _ch, B12Math _math){ math = _math; + ch = _ch; + pos = new PVector(0,0); + buttons = new B12Button[12]; + initialize(); } + void initialize(){ + int count = 11; + for(int i = 0; i < 12; i++){ + buttons[i] = new B12Button(ch, new PVector(25 * int(i%4),25 * floor(i/4)), new PVector(20,20),new B12Digit(i)); + buttons[i].setColor(220,150); + } + } // TODO draw a grid for buttons // TODO draw characters in grid // TODO detect mousepresses on the buttons (maybe a global mouse handler?) @@ -14,5 +28,47 @@ class MathPad{ //math.expression.add(new B12Char('/')); } + void display(){ + pushMatrix(); + translate(pos.x,pos.y); + for(int i = 0; i < 12; i++){ + buttons[i].display(); + } + popMatrix(); + } + } + +class B12Button extends Button{ + B12Digit digit; + + B12Button(ClickHandler _ch, PVector _pos, PVector _dim, float _radius, B12Digit _digit){ + super(_ch,_pos,_dim,_radius); + digit = _digit; + } + B12Button(ClickHandler _ch, PVector _pos, PVector _dim, B12Digit _digit){ + this(_ch, _pos, _dim, 2, _digit); + } + + // GETTERS AND SETTERS // + B12Digit getDigit(){ return digit; } + void setDigit(B12Digit _digit){ digit = _digit; } + + @Override + void display(){ + super.display(); //<>// + //new MethodRelay(this, "mouseOver" + str(mode), float.class, float.class).execute(mouseX,mouseY); + + pushMatrix(); + + translate(pos.x,pos.y); + switch(mode){ + case CORNER: digit.setRefPos(dim.x/2 - 4,dim.y - 2); + } + + digit.display(); + + popMatrix(); + } +}