├── .gitignore ├── Examples ├── createSketch.sh ├── index.html ├── realSketch.go ├── sketch.js └── sketch.js.map ├── LICENSE ├── PGoJs.png ├── Processing ├── colorPkg.go ├── eventsPkg.go ├── pGoJs.go ├── shapesPkg.go └── varHeader.go ├── README.md ├── createSketch.sh ├── pGoJs.go └── pGoJsExample.gif /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files, Static and Dynamic libs (Shared Objects) 2 | *.o 3 | *.a 4 | *.so 5 | 6 | # Folders 7 | _obj 8 | _test 9 | 10 | # Architecture specific extensions/prefixes 11 | *.[568vq] 12 | [568vq].out 13 | 14 | *.cgo1.go 15 | *.cgo2.c 16 | _cgo_defun.c 17 | _cgo_gotypes.go 18 | _cgo_export.* 19 | 20 | _testmain.go 21 | 22 | *.exe 23 | *.test 24 | *.prof 25 | -------------------------------------------------------------------------------- /Examples/createSketch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export GOPATH=$HOME/goLibraries #The path of your GOPATH 4 | 5 | $GOPATH/bin/gopherjs build realSketch.go -o sketch.js 6 | -------------------------------------------------------------------------------- /Examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PGoJs 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Examples/realSketch.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | //p "github.com/bregydoc/PGoJs/Processing" 5 | p "../Processing" 6 | ) 7 | 8 | type Ball struct { 9 | diameter float64 10 | position *p.PVector 11 | velocity *p.PVector 12 | } 13 | 14 | func newBall(x, y float64, diameter float64) *Ball{ 15 | return &Ball{diameter: diameter, position:p.CreateVector(x,y), velocity:p.Random2D().Mult(10)} 16 | } 17 | 18 | func (ball *Ball) updateLogic() { 19 | if ((ball.position.X + ball.diameter/2) > float64(p.Width)) || ((ball.position.X - ball.diameter/2) < 0){ 20 | ball.velocity = p.CreateVector(ball.velocity.X * -1, ball.velocity.Y) 21 | } 22 | if ((ball.position.Y + ball.diameter/2) > float64(p.Height)) || ((ball.position.Y - ball.diameter/2) < 0){ 23 | ball.velocity = p.CreateVector(ball.velocity.X, ball.velocity.Y* -1) 24 | } 25 | 26 | ball.position.Add(ball.velocity) 27 | 28 | } 29 | 30 | func (ball *Ball) drawBall() { 31 | p.NoStroke() 32 | p.Fill("rgba(139,195,74 ,1)") 33 | p.Ellipse(ball.position.X, ball.position.Y, ball.diameter, ball.diameter) 34 | } 35 | 36 | 37 | var balls []*Ball 38 | 39 | func setup() { 40 | p.CreateCanvas(600, 600) 41 | p.Background(230) 42 | balls = append(balls, newBall(200, 200, 50)) 43 | 44 | } 45 | 46 | func draw() { 47 | p.Background(230) 48 | for _, ball := range balls { 49 | ball.updateLogic() 50 | ball.drawBall() 51 | } 52 | } 53 | 54 | func mousePressed() { 55 | balls = append(balls, newBall(float64(p.MouseX), float64(p.MouseY), 50)) 56 | } 57 | 58 | func main() { 59 | p.Setup = setup 60 | p.Draw = draw 61 | p.MousePressed = mousePressed 62 | 63 | p.LaunchApp() 64 | } 65 | 66 | 67 | -------------------------------------------------------------------------------- /Examples/sketch.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"sketch.js","sources":["/github.com/gopherjs/gopherjs/js/js.go","runtime.go","/runtime/error.go","/errors/errors.go","math.go","/math/pow10.go","/unicode/utf8/utf8.go","/strconv/itoa.go","/strconv/quote.go","atomic.go","pool.go","sync.go","/sync/mutex.go","/sync/pool.go","/sync/runtime.go","/sync/rwmutex.go","reflect.go","/reflect/type.go","/reflect/value.go","colorPkg.go","eventsPkg.go","pGoJs.go","shapesPkg.go","realSketch.go"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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AAEG;;;AACH;;;A;AAEC;AACA;A;AAED;AANkB;A;AAQnB;A;AAGC;AACA;A;A;AAGA;AACA;A;AAED;AACA;A;AAEA;A;AAEC;AACA;A;AAEG;;;AACH;A;AAEC;AACA;A;AAED;AANkB;A;AAQnB;A;AAEC;AACA;A;AAED;A;AAEA;A;A;AAGC;AACA;A;AAED;A;AAEA;AACA;A;A;AAED;AACA;A;;;;AASA;A;AAEC;A;AAED;A;AAEC;A;AAED;A;A;AAIE;A;AAED;A;A;AAGA;A;A;AAGA;A;A;A;A;AAOC;A;AAEA;;;A;AAEC;A;A;A;AAKC;AACJ;AACA;;AACC;;;;;A;AAEC;A;AAED;A;AAEC;A;AAEA;AACA;A;A;AAIA;A;A;AAGF;A;;;;AAKI;;;A;AAEF;A;AAFsB;A;AAKxB;A;;;;A;A;A;A;A;A;;;;;;;;;;A;;;;A;;;;A;;;;A;;;;A;;;;;;;;;;;;;;;A;AC/WC;AACA;A;AAED;A;;;;AA4CA;AACA;AACA;A;;;;;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnFK;AACL;;A;AACC;;A;AACC;;;A;AAED;;A;AAED;AACA;AACA;;A;;;;;AAGK;A;AAEJ;A;AAED;A;;;;A;;;;ACvBA;;A;AACC;AACA;AACA;;A;A;A;;;;;;;A;AAQD;A;AAEC;;A;AAGD;AACA;AACA;A;AAEC;A;A;A;;;;;;A;;;AASD;A;;;;ACOK;A;A;AAIH;A;AAED;;A;AAGD;AACA;AACA;AACC;AACA;AACA;;A;A;A;AAOG;A;AAED;AACA;AACA;A;AAED;A;A;A;AAMC;A;AAED;A;AAED;;A;A;AAEE;A;AAED;AACA;AACA;A;A;A;AAKD;A;A;;;;;;;;AAUI;A;AAGJ;A;AAID;A;AAEC;A;AAGD;AACA;A;AAIE;;A;AAGD;AACA;;A;AACC;AACA;;A;AAED;A;A;;;;;;;ACsED;;;;;;AACC;AACI;;;AACH;AACA;AACA;;;;;AACC;A;;AAED;AANiC;A;AAQlC;AACA;A;;AAED;A;;;AASA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A;AAEA;A;AAEA;A;AAEA;A;AAVA;A;A;;;;;AA8C8B;AAAL;AAArB;AACL;AACA;AACA;AACA;AACA;;AACI;A;AAEH;A;AAEA;A;A;AAGA;AACA;;A;AAED;AACA;;AACI;A;AAEH;A;AAEA;A;AAED;A;;;;;;;AAKK;AACL;AACO;A;A;AAIN;A;AAEA;A;AAEA;A;AAEA;A;AAEA;A;AAEA;A;AAZA;A;A;;;;AAkBI;AACL;AACA;AACA;A;;;;AAKK;AACL;AACA;AACA;A;;;;;AAwHK;AACE;A;A;AAEN;;A;AAEA;;A;AAID;;;A;;;;;;;;AAQK;AACL;AACA;A;;;;;;A;;;;;;AAQsB;AAAjB;AACL;AACA;AACA;;;A;;;;;AAIK;AACL;A;AAEC;A;A;AAIA;A;AAKD;A;AAGC;A;AAEC;A;AAED;AACA;A;AAGD;A;AAEC;A;AAED;AACA;A;;;;AAKK;AACL;AACA;A;A;AAGC;A;AAEA;A;AAEA;A;AAEA;A;AAEA;A;AAEA;A;AAED;A;;;;AAMK;A;AAGJ;A;A;AAGA;A;AAED;A;;;;;A;AAmYC;A;AAED;AACA;AACA;;;;A;;;;;;AAaK;AACL;;A;AACC;;A;AAID;;;A;AAGC;AACA;AACA;AACA;;A;A;AAIC;A;AAED;;AACA;;;A;AACC;A;;AAEA;A;AAED;;A;A;AAID;A;;;;;;;;AAMK;AACL;;A;AACC;;A;AAED;;;AACA;;A;AACC;;A;AAED;;;A;;;;;;A;AAOA;;;;;;;A;A;A;AAGE;;A;AAEA;;A;AAEA;;A;A;A;A;A;AAMA;;A;AAEA;;A;AAEA;;A;A;A;A;A;AAMA;;A;AAEA;;A;AAEA;;A;A;A;A;A;AAMA;;A;A;A;AAID;;;;;A;A;;A;AAGE;;A;AAEA;;A;A;A;A;A;AAKF;;;;;A;A;;A;AAGE;;A;AAEA;;A;A;A;A;A;A;AAOF;;A;AAID;;;;;;;;;A;AAGC;;A;A;A;AAKC;;A;AAED;;A;AAGD;;A;;;;;AAwBA;;AACA;A;A;AAGC;A;AAEA;A;AAED;;A;;;;;AAMA;;AACA;A;A;AAGC;A;AAEA;A;AAED;;A;;;;;AAIA;;;AACA;AACA;AACA;;A;;;;;AAIA;;;AACA;AAC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"} 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Bregy Malpartida Ramos 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PGoJs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bregydoc/PGoJs/853b2b0c587276873e911219e68e49ced297331b/PGoJs.png -------------------------------------------------------------------------------- /Processing/colorPkg.go: -------------------------------------------------------------------------------- 1 | package processing 2 | 3 | import "github.com/gopherjs/gopherjs/js" 4 | 5 | //////////////////////////////////////////////////////////// 6 | // COLOR 7 | 8 | //Creating and reading: 9 | 10 | func Color(params ...interface{}) *js.Object { 11 | switch len(params) { 12 | case 1: 13 | return pG.Call("color", params[0]) 14 | case 2: 15 | return pG.Call("color", params[0], params[1]) 16 | case 3: 17 | return pG.Call("color", params[0], params[1], params[2]) 18 | case 4: 19 | return pG.Call("color", params[0], params[1], params[2], params[3]) 20 | default: 21 | println("Error in Color function (1)") 22 | return nil 23 | } 24 | } 25 | 26 | func Alpha(color *js.Object) int { 27 | return pG.Call("alpha", color).Int() 28 | } 29 | 30 | func Blue(color *js.Object) int { 31 | return pG.Call("blue", color).Int() 32 | } 33 | 34 | func Brightness(color *js.Object) int { 35 | return pG.Call("brightness", color).Int() 36 | } 37 | 38 | func Green(color *js.Object) int { 39 | return pG.Call("green", color).Int() 40 | } 41 | 42 | func Hue(color *js.Object) int { 43 | return pG.Call("hue", color).Int() 44 | } 45 | 46 | func LerpColor(from interface{}, to interface{}, amt float64) *js.Object { 47 | return pG.Call("lerpColor", from, to, amt) 48 | } 49 | 50 | func Lightness(color *js.Object) int { 51 | return pG.Call("lightness", color).Int() 52 | } 53 | 54 | func Red(color *js.Object) int { 55 | return pG.Call("red", color).Int() 56 | } 57 | 58 | func Saturation(color *js.Object) int { 59 | return pG.Call("saturation", color).Int() 60 | 61 | } 62 | 63 | //Setting: 64 | 65 | func Background(values ...interface{}) { 66 | 67 | switch len(values) { 68 | case 1: 69 | pG.Call("background", values[0]) 70 | break 71 | 72 | case 2: 73 | 74 | pG.Call("background", values[0].(int), values[1].(int)) 75 | break 76 | 77 | case 3: 78 | pG.Call("background", values[0].(int), values[1].(int), values[2].(int)) 79 | break 80 | 81 | default: 82 | println("Error in background function (2)...") 83 | return 84 | } 85 | } 86 | 87 | func Clear() { 88 | pG.Call("clear") 89 | } 90 | 91 | func ColorMode(mode string, maxValues ...int) { 92 | switch len(maxValues) { 93 | case 0: 94 | pG.Call("colorMode", mode) 95 | break 96 | case 1: 97 | pG.Call("colorMode", mode, maxValues[0]) 98 | break 99 | case 2: 100 | pG.Call("colorMode", mode, maxValues[0], maxValues[1]) 101 | break 102 | case 3: 103 | pG.Call("colorMode", mode, maxValues[0], maxValues[1], maxValues[2]) 104 | break 105 | case 4: 106 | pG.Call("colorMode", mode, maxValues[0], maxValues[1], maxValues[2], maxValues[3]) 107 | break 108 | default: 109 | println("Error in colorMode (1)") 110 | return 111 | } 112 | 113 | } 114 | 115 | func Fill(firstValue interface{}, extraValues ...float64) { 116 | switch len(extraValues) { 117 | case 0: 118 | /* Darwin! 119 | typeOfFirstValue := reflect.TypeOf(firstValue).Name() 120 | if typeOfFirstValue == reflect.Int.String() || typeOfFirstValue == reflect.Float64.String(){ 121 | pG.Call("fill", firstValue.(float64)) 122 | } 123 | */ 124 | pG.Call("fill", firstValue) 125 | break 126 | case 1: 127 | pG.Call("fill", firstValue, extraValues[0]) 128 | break 129 | case 2: 130 | pG.Call("fill", firstValue, extraValues[0], extraValues[1]) 131 | break 132 | case 3: 133 | pG.Call("fill", firstValue, extraValues[0], extraValues[1], extraValues[2]) 134 | break 135 | } 136 | } 137 | 138 | func NoFill() { 139 | pG.Call("noFill") 140 | 141 | } 142 | 143 | func NoStroke() { 144 | pG.Call("noStroke") 145 | 146 | } 147 | 148 | func Stroke(firstValue interface{}, extraValues ...int) { 149 | switch len(extraValues) { 150 | case 0: 151 | pG.Call("stroke", firstValue) 152 | break 153 | case 1: 154 | pG.Call("stroke", firstValue, extraValues[0]) 155 | break 156 | case 2: 157 | pG.Call("stroke", firstValue, extraValues[0], extraValues[1]) 158 | break 159 | case 3: 160 | pG.Call("stroke", firstValue, extraValues[0], extraValues[1], extraValues[2]) 161 | break 162 | } 163 | } 164 | 165 | func StrokeWeight(weight int) { 166 | pG.Call("strokeWeight", weight) 167 | } -------------------------------------------------------------------------------- /Processing/eventsPkg.go: -------------------------------------------------------------------------------- 1 | package processing 2 | 3 | //////////////////////////////////////////////////////////// 4 | // EVENTS 5 | 6 | // MOUSE: 7 | var MouseMoved func() 8 | var MouseDragged func() 9 | var MousePressed func() 10 | var MouseReleased func() 11 | var MouseClicked func() 12 | var MouseWheel func(event Event) 13 | 14 | type Event struct { 15 | data map[string]interface{} 16 | } 17 | 18 | func (event *Event) Delta() float64 { //Delta is a method in Go 19 | return event.data["delta"].(float64) 20 | } -------------------------------------------------------------------------------- /Processing/pGoJs.go: -------------------------------------------------------------------------------- 1 | /* 2 | Port from p5Js to golang using gopherJs 3 | In this version, the framework implement native types from p5Js (using gopherJs.Object struct), 4 | in the future, I will create types and structures entirely write in golang for improve the performance 5 | 6 | WORK IN PROGRESS (10% completed) 7 | 8 | Author: Bregy Malpartida Ramos 9 | Date: 03/01/2017 10 | 11 | */ 12 | 13 | package processing 14 | 15 | import ( 16 | "github.com/gopherjs/gopherjs/js" 17 | "reflect" 18 | ) 19 | 20 | func CreateCanvas(width, height int) { 21 | pG.Call("createCanvas", width, height) 22 | } 23 | 24 | 25 | //////////////////////////////////////////////////////////// 26 | 27 | ///////////////////// VECTOR CLASS ////////////////////////// 28 | 29 | type PVector struct { 30 | data *js.Object 31 | X float64 32 | Y float64 33 | Z float64 34 | } 35 | 36 | func CreateVector(cord ...float64) *PVector { 37 | var r *js.Object 38 | 39 | switch len(cord) { 40 | case 0: 41 | r = pG.Call("createVector") 42 | break 43 | case 1: 44 | r = pG.Call("createVector", cord[0]) 45 | break 46 | case 2: 47 | r = pG.Call("createVector", cord[0], cord[1]) 48 | break 49 | case 3: 50 | r = pG.Call("createVector", cord[0], cord[1], cord[2]) 51 | break 52 | default: 53 | r = nil 54 | println("Error in createVector function (1)") 55 | break 56 | } 57 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 58 | } 59 | 60 | func (v *PVector) Add(x interface{}, other ...interface{}) *PVector { 61 | var r *js.Object 62 | 63 | switch len(other) { 64 | case 0: 65 | if reflect.TypeOf(x).Kind() == reflect.Float64 || reflect.TypeOf(x).Kind() == reflect.Int { 66 | if reflect.TypeOf(x).Kind() == reflect.Float64 { 67 | r = v.data.Call("add", x.(float64)) 68 | } else if reflect.TypeOf(x).Kind() == reflect.Int { 69 | r = v.data.Call("add", x.(int)) 70 | } 71 | } else { 72 | r = v.data.Call("add", x.(*PVector).data) 73 | } 74 | break 75 | case 1: 76 | r = v.data.Call("add", x.(float64), other[0].(float64)) 77 | break 78 | 79 | case 2: 80 | r = v.data.Call("add", x.(float64), other[0].(float64), other[1].(float64)) 81 | break 82 | default: 83 | r = nil 84 | println("Error in add vector method (1)") 85 | break 86 | } 87 | v.X = r.Get("x").Float() 88 | v.Y = r.Get("y").Float() 89 | v.Z = r.Get("z").Float() 90 | 91 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 92 | 93 | } 94 | 95 | func (v *PVector) ToString() string { 96 | r := v.data.Call("toString") 97 | return r.String() 98 | } 99 | 100 | func (v *PVector) Set(cord ...float64) *PVector { 101 | var r *js.Object 102 | 103 | switch len(cord) { 104 | case 1: 105 | r = v.data.Call("set", cord[0]) 106 | break 107 | case 2: 108 | r = v.data.Call("set", cord[0], cord[1]) 109 | break 110 | case 3: 111 | r = v.data.Call("set", cord[0], cord[1], cord[2]) 112 | break 113 | default: 114 | r = nil 115 | println("Error in set (PVector) function (1)") 116 | break 117 | } 118 | 119 | v.X = r.Get("x").Float() 120 | v.Y = r.Get("y").Float() 121 | v.Z = r.Get("z").Float() 122 | 123 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 124 | } 125 | 126 | func (v *PVector) Copy() *PVector { 127 | r := v.data.Call("copy") 128 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 129 | } 130 | 131 | func (v *PVector) Sub(x interface{}, other ...interface{}) *PVector { 132 | var r *js.Object 133 | 134 | switch len(other) { 135 | case 0: 136 | if reflect.TypeOf(x).Kind() == reflect.Float64 || reflect.TypeOf(x).Kind() == reflect.Int { 137 | if reflect.TypeOf(x).Kind() == reflect.Float64 { 138 | r = v.data.Call("sub", x.(float64)) 139 | } else if reflect.TypeOf(x).Kind() == reflect.Int { 140 | r = v.data.Call("sub", x.(int)) 141 | } 142 | } else { 143 | r = v.data.Call("sub", x.(*PVector).data) 144 | } 145 | break 146 | case 1: 147 | r = v.data.Call("sub", x.(float64), other[0].(float64)) 148 | break 149 | 150 | case 2: 151 | r = v.data.Call("sub", x.(float64), other[0].(float64), other[1].(float64)) 152 | break 153 | default: 154 | r = nil 155 | println("Error in sub vector method (1)") 156 | break 157 | } 158 | v.X = r.Get("x").Float() 159 | v.Y = r.Get("y").Float() 160 | v.Z = r.Get("z").Float() 161 | 162 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 163 | 164 | } 165 | 166 | func (v *PVector) Mult(val float64) *PVector { 167 | r := v.data.Call("mult", val) 168 | v.X = r.Get("x").Float() 169 | v.Y = r.Get("y").Float() 170 | v.Z = r.Get("z").Float() 171 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 172 | 173 | } 174 | 175 | func (v *PVector) Div(val float64) *PVector { 176 | r := v.data.Call("div", val) 177 | v.X = r.Get("x").Float() 178 | v.Y = r.Get("y").Float() 179 | v.Z = r.Get("z").Float() 180 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 181 | 182 | } 183 | 184 | func (v *PVector) Mag() float64 { 185 | r := v.data.Call("mag") 186 | return r.Float() 187 | } 188 | 189 | func (v *PVector) MagSq() float64 { 190 | r := v.data.Call("magSq") 191 | return r.Float() 192 | } 193 | 194 | func (v *PVector) Dot(v2 *PVector) float64 { 195 | r := v.data.Call("dot", v2.data) 196 | return r.Float() 197 | } 198 | 199 | func (v *PVector) Cross(v2 *PVector) *PVector { 200 | r := v.data.Call("cross", v2.data) 201 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 202 | } 203 | 204 | func (v *PVector) Dist(v2 *PVector) float64 { 205 | r := v.data.Call("dist", v2.data) 206 | return r.Float() 207 | } 208 | 209 | func (v *PVector) Normalize() *PVector { 210 | r := v.data.Call("normalize") 211 | v.X = r.Get("x").Float() 212 | v.Y = r.Get("y").Float() 213 | v.Z = r.Get("z").Float() 214 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 215 | } 216 | 217 | /* 218 | Missing some important methods. From Limit, please view the p5js reference 219 | */ 220 | 221 | func Random2D() *PVector { 222 | r := js.Global.Get("p5").Get("Vector").Call("random2D") 223 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 224 | } 225 | 226 | func Random3D() *PVector { 227 | r := js.Global.Get("p5").Get("Vector").Call("random3D") 228 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 229 | } 230 | 231 | ///////////////////////////////////////////////////////////// 232 | 233 | func LaunchApp() { 234 | 235 | var sketch = func(p *js.Object) { 236 | pG = p 237 | 238 | ////////////////// CONSTANTS /////////////// 239 | HALF_PI = pG.Get("HALF_PI").Float() 240 | PI = pG.Get("PI").Float() 241 | QUARTER_PI = pG.Get("QUARTER_PI").Float() 242 | TAU = pG.Get("TAU").Float() 243 | TWO_PI = pG.Get("TWO_PI").Float() 244 | 245 | OPEN = pG.Get("OPEN").String() 246 | CHORD = pG.Get("CHORD").String() 247 | PIE = pG.Get("PIE").String() 248 | 249 | RGB = pG.Get("RGB").String() 250 | HSB = pG.Get("HSB").String() 251 | 252 | LEFT = pG.Get("LEFT").String() 253 | CENTER = pG.Get("CENTER").String() 254 | RIGHT = pG.Get("RIGHT").String() 255 | /////////////////////////////////////////// 256 | 257 | p.Set("setup", func() { 258 | Setup() 259 | //p.Call("createCanvas", 640, 480) 260 | }) 261 | 262 | p.Set("draw", func() { 263 | ////////// VARIABLES /////////// 264 | MouseX = p.Get("mouseX").Int() 265 | MouseY = p.Get("mouseY").Int() 266 | PmouseX = p.Get("pmouseX").Int() 267 | PmouseY = p.Get("pmouseY").Int() 268 | WinMouseX = p.Get("winMouseX").Int() 269 | WinMouseY = p.Get("winMouseY").Int() 270 | PwinMouseX = p.Get("pwinMouseX").Int() 271 | PwinMouseY = p.Get("pwinMouseY").Int() 272 | MouseButton = p.Get("mouseButton").String() 273 | MouseIsPressed = p.Get("mouseIsPressed").Bool() 274 | 275 | Width = p.Get("width").Int() 276 | Height = p.Get("height").Int() 277 | 278 | //////////////////////////////// 279 | 280 | Draw() 281 | 282 | //p.Call("background", 0) 283 | }) 284 | 285 | p.Set("mouseMoved", func() { 286 | if MouseMoved != nil { 287 | MouseMoved() 288 | } 289 | 290 | }) 291 | 292 | p.Set("mouseDragged", func() { 293 | if MouseDragged != nil { 294 | MouseDragged() 295 | } 296 | 297 | }) 298 | 299 | p.Set("mousePressed", func() { 300 | if MousePressed != nil { 301 | MousePressed() 302 | } 303 | }) 304 | 305 | p.Set("mouseReleased", func() { 306 | if MouseReleased != nil { 307 | MouseReleased() 308 | } 309 | }) 310 | 311 | p.Set("mouseClicked", func() { 312 | if MouseClicked != nil { 313 | MouseClicked() 314 | } 315 | }) 316 | p.Set("mouseWheel", func(event interface{}) { 317 | if MouseWheel != nil { 318 | MouseWheel(Event{data: event.(map[string]interface{})}) 319 | } 320 | }) 321 | 322 | } 323 | 324 | js.Global.Get("p5").New(sketch) 325 | 326 | } 327 | -------------------------------------------------------------------------------- /Processing/shapesPkg.go: -------------------------------------------------------------------------------- 1 | package processing 2 | 3 | //////////////////////////////////////////////////////////// 4 | // SHAPES 5 | 6 | // 2D PRIMITIVES: 7 | func Arc(a, b, c, d, start, stop interface{}, mode string) { 8 | pG.Call("arc", a, b, c, d, start, stop, mode) 9 | } 10 | 11 | func Ellipse(x, y, w interface{}, h ...interface{}) { 12 | switch len(h) { 13 | case 0: 14 | pG.Call("ellipse", x, y, w) 15 | break 16 | case 1: 17 | pG.Call("ellipse", x, y, w, h[0]) 18 | break 19 | default: 20 | println("Error in ellipse funciton (1)") 21 | return 22 | } 23 | } 24 | 25 | func Line(x1, y1, x2, y2 interface{}) { 26 | pG.Call("line", x1, y1, x2, y2) 27 | } 28 | 29 | func Point(x, y interface{}) { 30 | pG.Call("point", x, y) 31 | } 32 | 33 | func Quad(x1, y1, x2, y2, x3, y3, x4, y4 interface{}) { 34 | pG.Call("quad", x1, y1, x2, y2, x3, y3, x4, y4) 35 | } 36 | 37 | func Rect(x, y, w, h interface{}, extraParameters ...interface{}) { 38 | switch len(extraParameters) { 39 | case 0: 40 | pG.Call("rect", x, y, w, h) 41 | break 42 | case 1: 43 | pG.Call("rect", x, y, w, h, extraParameters[0]) 44 | break 45 | case 2: 46 | pG.Call("rect", x, y, w, h, extraParameters[0], extraParameters[1]) 47 | break 48 | case 3: 49 | pG.Call("rect", x, y, w, h, extraParameters[0], extraParameters[1], extraParameters[2]) 50 | break 51 | case 4: 52 | pG.Call("rect", x, y, w, h, extraParameters[0], extraParameters[1], extraParameters[2], extraParameters[3]) 53 | break 54 | 55 | default: 56 | println("Error in Rect funciton (1)") 57 | return 58 | } 59 | } 60 | 61 | func Triangle(x1, y1, x2, y2, x3, y3 interface{}) { 62 | pG.Call("triangle", x1, y1, x2, y2, x3, y3) 63 | } 64 | -------------------------------------------------------------------------------- /Processing/varHeader.go: -------------------------------------------------------------------------------- 1 | //constAndVarHeader.go 2 | package processing 3 | 4 | import "github.com/gopherjs/gopherjs/js" 5 | 6 | var pG *js.Object 7 | var Setup func() 8 | var Draw func() 9 | 10 | // Constants in p5Js: (In go are only variables) 11 | var HALF_PI float64 12 | var PI float64 13 | var QUARTER_PI float64 14 | var TAU float64 15 | var TWO_PI float64 16 | 17 | //Modes for any functions: 18 | var OPEN string //Is a String 19 | var CHORD string 20 | var PIE string 21 | 22 | var RGB string 23 | var HSB string 24 | 25 | var LEFT string 26 | var RIGHT string 27 | var CENTER string 28 | 29 | // Cast of different variables 30 | var MouseX int 31 | var MouseY int 32 | var PmouseX int 33 | var PmouseY int 34 | var WinMouseX int 35 | var WinMouseY int 36 | var PwinMouseX int 37 | var PwinMouseY int 38 | var MouseButton string 39 | var MouseIsPressed bool 40 | 41 | var Width int 42 | var Height int 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PGoJs 2 | 3 | 4 | > Processing with Go, using p5Js as core 5 | 6 | PGoJs is a binding/port from p5Js using gopherJs, the idea is create sketchs in web using Golang but easy and fast like processing framework. 7 | 8 | ## Install 9 | Get with: 10 | 11 | ``` 12 | go get -u -v github.com/bregydoc/PGoJs 13 | ``` 14 | 15 | 16 | ## How to use 17 | 18 | PGoJs need to [gopherJs](https://github.com/gopherjs/gopherjs) builder for work, you make sure you have it. 19 | 20 | #### Create a index.html file 21 | You need a HTML file where you will embedded the js generated by PGo Js using gopherjs, your html index file has look like this: 22 | ```html 23 | 24 | 25 | 26 | 27 | PGoJs 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | ``` 36 | 37 | #### Write your sketch in Go 38 | You need import the PGoJs library, I recommended use this with different namespace (like "p") 39 | ```go 40 | package main 41 | 42 | import ( 43 | p "github.com/bregydoc/PGoJs/Processing" 44 | ) 45 | 46 | func setup() { 47 | p.CreateCanvas(600, 600) 48 | p.Background(230) 49 | } 50 | 51 | func draw() { 52 | p.StrokeWeight(4) 53 | if !p.MouseIsPressed { 54 | p.NoStroke() 55 | } else { 56 | p.Stroke("rgba(139,195,74 ,1)") 57 | } 58 | p.Line(p.PmouseX, p.PmouseY, p.MouseX, p.MouseY) 59 | } 60 | 61 | func main() { 62 | p.Setup = setup 63 | p.Draw = draw 64 | 65 | p.LaunchApp() 66 | } 67 | ``` 68 | 69 | ### Build your .go file to .js file using gopherJs 70 | First, make sure you have [gopherJs](https://github.com/gopherjs/gopherjs), if you don't have, install with: 71 | ``` 72 | go get -u github.com/gopherjs/gopherjs 73 | ``` 74 | For build the sketch.js file only execute this line: 75 | ``` 76 | gopherjs build nameOfSketch.go -o sketch.js 77 | ``` 78 | Or: 79 | ```bash 80 | export GOPATH=$HOME/goWork #The path of your GOPATH 81 | $GOPATH/bin/gopherjs build nameOfSketch.go -o sketch.js 82 | ``` 83 | I usually create an .sh file with these parameters, and build in only one step. 84 | 85 | ### The last step is open your HTML File with your web navigator 86 | ![Sketch writing in golang](/PGoJs.png) 87 | 88 | 89 | ## Extra example 90 | Go idiomatic? 91 | ```go 92 | package main 93 | 94 | import ( 95 | p "github.com/bregydoc/PGoJs/Processing" 96 | ) 97 | 98 | type Ball struct { 99 | diameter float64 100 | position *p.PVector 101 | velocity *p.PVector 102 | } 103 | 104 | func newBall(x, y float64, diameter float64) *Ball{ 105 | return &Ball{diameter: diameter, position:p.CreateVector(x,y), velocity:p.Random2D().Mult(10)} 106 | } 107 | 108 | func (ball *Ball) updateLogic() { 109 | if ((ball.position.X + ball.diameter/2) > float64(p.Width)) || ((ball.position.X - ball.diameter/2) < 0){ 110 | ball.velocity = p.CreateVector(ball.velocity.X * -1, ball.velocity.Y) 111 | } 112 | if ((ball.position.Y + ball.diameter/2) > float64(p.Height)) || ((ball.position.Y - ball.diameter/2) < 0){ 113 | ball.velocity = p.CreateVector(ball.velocity.X, ball.velocity.Y* -1) 114 | } 115 | 116 | ball.position.Add(ball.velocity) 117 | 118 | } 119 | 120 | func (ball *Ball) drawBall() { 121 | p.NoStroke() 122 | p.Fill("rgba(139,195,74 ,1)") 123 | p.Ellipse(ball.position.X, ball.position.Y, ball.diameter, ball.diameter) 124 | } 125 | 126 | 127 | var balls []*Ball 128 | 129 | func setup() { 130 | p.CreateCanvas(600, 600) 131 | p.Background(230) 132 | balls = append(balls, newBall(200, 200, 50)) 133 | 134 | } 135 | 136 | func draw() { 137 | p.Background(230) 138 | for _, ball := range balls { 139 | ball.updateLogic() 140 | ball.drawBall() 141 | } 142 | } 143 | 144 | //Create mousePressed function and linked with p.MousePressed 145 | func mousePressed() { 146 | balls = append(balls, newBall(200, 200, 50)) 147 | } 148 | 149 | 150 | 151 | func main() { 152 | p.Setup = setup 153 | p.Draw = draw 154 | p.MousePressed = mousePressed 155 | 156 | p.LaunchApp() 157 | } 158 | ``` 159 | 160 | ![Balls in gif](/pGoJsExample.gif) 161 | -------------------------------------------------------------------------------- /createSketch.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | export GOPATH=$HOME/goLibraries #The path of your GOPATH 4 | 5 | #$GOPATH/bin/gopherjs build $GOPATH/src/github.com/bregydoc/PGoJs/Examples/realSketch.go -o ./Examples/sketch.js 6 | $GOPATH/bin/gopherjs build ./Examples/realSketch.go -o ./Examples/sketch.js 7 | -------------------------------------------------------------------------------- /pGoJs.go: -------------------------------------------------------------------------------- 1 | /* 2 | Port from p5Js to golang using gopherJs 3 | In this version, the framework implement native types from p5Js (using gopherJs.Object struct), 4 | in the future, I will create types and structures entirely write in golang for improve the performance 5 | 6 | WORK IN PROGRESS (10% completed) 7 | 8 | Author: Bregy Malpartida Ramos 9 | Date: 03/01/2017 10 | 11 | */ 12 | 13 | package processing 14 | 15 | import ( 16 | "github.com/gopherjs/gopherjs/js" 17 | "reflect" 18 | ) 19 | 20 | var pG *js.Object 21 | var Setup func() 22 | var Draw func() 23 | 24 | // Constants in p5Js: (In go are only variables) 25 | var HALF_PI float64 26 | var PI float64 27 | var QUARTER_PI float64 28 | var TAU float64 29 | var TWO_PI float64 30 | 31 | //Modes for any functions: 32 | var OPEN string //Is a String 33 | var CHORD string 34 | var PIE string 35 | 36 | var RGB string 37 | var HSB string 38 | 39 | var LEFT string 40 | var RIGHT string 41 | var CENTER string 42 | 43 | // Cast of different variables 44 | var MouseX int 45 | var MouseY int 46 | var PmouseX int 47 | var PmouseY int 48 | var WinMouseX int 49 | var WinMouseY int 50 | var PwinMouseX int 51 | var PwinMouseY int 52 | var MouseButton string 53 | var MouseIsPressed bool 54 | 55 | var Width int 56 | var Height int 57 | 58 | func CreateCanvas(width, height int) { 59 | pG.Call("createCanvas", width, height) 60 | } 61 | 62 | //////////////////////////////////////////////////////////// 63 | // COLOR 64 | 65 | //Creating and reading: 66 | 67 | func Color(params ...interface{}) *js.Object { 68 | switch len(params) { 69 | case 1: 70 | return pG.Call("color", params[0]) 71 | case 2: 72 | return pG.Call("color", params[0], params[1]) 73 | case 3: 74 | return pG.Call("color", params[0], params[1], params[2]) 75 | case 4: 76 | return pG.Call("color", params[0], params[1], params[2], params[3]) 77 | default: 78 | println("Error in Color function (1)") 79 | return nil 80 | } 81 | } 82 | 83 | func Alpha(color *js.Object) int { 84 | return pG.Call("alpha", color).Int() 85 | } 86 | 87 | func Blue(color *js.Object) int { 88 | return pG.Call("blue", color).Int() 89 | } 90 | 91 | func Brightness(color *js.Object) int { 92 | return pG.Call("brightness", color).Int() 93 | } 94 | 95 | func Green(color *js.Object) int { 96 | return pG.Call("green", color).Int() 97 | } 98 | 99 | func Hue(color *js.Object) int { 100 | return pG.Call("hue", color).Int() 101 | } 102 | 103 | func LerpColor(from interface{}, to interface{}, amt float64) *js.Object { 104 | return pG.Call("lerpColor", from, to, amt) 105 | } 106 | 107 | func Lightness(color *js.Object) int { 108 | return pG.Call("lightness", color).Int() 109 | } 110 | 111 | func Red(color *js.Object) int { 112 | return pG.Call("red", color).Int() 113 | } 114 | 115 | func Saturation(color *js.Object) int { 116 | return pG.Call("saturation", color).Int() 117 | 118 | } 119 | 120 | //Setting: 121 | 122 | func Background(values ...interface{}) { 123 | 124 | switch len(values) { 125 | case 1: 126 | pG.Call("background", values[0]) 127 | break 128 | 129 | case 2: 130 | 131 | pG.Call("background", values[0].(int), values[1].(int)) 132 | break 133 | 134 | case 3: 135 | pG.Call("background", values[0].(int), values[1].(int), values[2].(int)) 136 | break 137 | 138 | default: 139 | println("Error in background function (2)...") 140 | return 141 | } 142 | } 143 | 144 | func Clear() { 145 | pG.Call("clear") 146 | } 147 | 148 | func ColorMode(mode string, maxValues ...int) { 149 | switch len(maxValues) { 150 | case 0: 151 | pG.Call("colorMode", mode) 152 | break 153 | case 1: 154 | pG.Call("colorMode", mode, maxValues[0]) 155 | break 156 | case 2: 157 | pG.Call("colorMode", mode, maxValues[0], maxValues[1]) 158 | break 159 | case 3: 160 | pG.Call("colorMode", mode, maxValues[0], maxValues[1], maxValues[2]) 161 | break 162 | case 4: 163 | pG.Call("colorMode", mode, maxValues[0], maxValues[1], maxValues[2], maxValues[3]) 164 | break 165 | default: 166 | println("Error in colorMode (1)") 167 | return 168 | } 169 | 170 | } 171 | 172 | func Fill(firstValue interface{}, extraValues ...float64) { 173 | switch len(extraValues) { 174 | case 0: 175 | /* Darwin! 176 | typeOfFirstValue := reflect.TypeOf(firstValue).Name() 177 | if typeOfFirstValue == reflect.Int.String() || typeOfFirstValue == reflect.Float64.String(){ 178 | pG.Call("fill", firstValue.(float64)) 179 | } 180 | */ 181 | pG.Call("fill", firstValue) 182 | break 183 | case 1: 184 | pG.Call("fill", firstValue, extraValues[0]) 185 | break 186 | case 2: 187 | pG.Call("fill", firstValue, extraValues[0], extraValues[1]) 188 | break 189 | case 3: 190 | pG.Call("fill", firstValue, extraValues[0], extraValues[1], extraValues[2]) 191 | break 192 | } 193 | } 194 | 195 | func NoFill() { 196 | pG.Call("noFill") 197 | 198 | } 199 | 200 | func NoStroke() { 201 | pG.Call("noStroke") 202 | 203 | } 204 | 205 | func Stroke(firstValue interface{}, extraValues ...int) { 206 | switch len(extraValues) { 207 | case 0: 208 | pG.Call("stroke", firstValue) 209 | break 210 | case 1: 211 | pG.Call("stroke", firstValue, extraValues[0]) 212 | break 213 | case 2: 214 | pG.Call("stroke", firstValue, extraValues[0], extraValues[1]) 215 | break 216 | case 3: 217 | pG.Call("stroke", firstValue, extraValues[0], extraValues[1], extraValues[2]) 218 | break 219 | } 220 | } 221 | 222 | func StrokeWeight(weight int) { 223 | pG.Call("strokeWeight", weight) 224 | } 225 | 226 | //////////////////////////////////////////////////////////// 227 | // SHAPES 228 | 229 | // 2D PRIMITIVES: 230 | func Arc(a, b, c, d, start, stop interface{}, mode string) { 231 | pG.Call("arc", a, b, c, d, start, stop, mode) 232 | } 233 | 234 | func Ellipse(x, y, w interface{}, h ...interface{}) { 235 | switch len(h) { 236 | case 0: 237 | pG.Call("ellipse", x, y, w) 238 | break 239 | case 1: 240 | pG.Call("ellipse", x, y, w, h[0]) 241 | break 242 | default: 243 | println("Error in ellipse funciton (1)") 244 | return 245 | } 246 | } 247 | 248 | func Line(x1, y1, x2, y2 interface{}) { 249 | pG.Call("line", x1, y1, x2, y2) 250 | } 251 | 252 | func Point(x, y interface{}) { 253 | pG.Call("point", x, y) 254 | } 255 | 256 | func Quad(x1, y1, x2, y2, x3, y3, x4, y4 interface{}) { 257 | pG.Call("quad", x1, y1, x2, y2, x3, y3, x4, y4) 258 | } 259 | 260 | func Rect(x, y, w, h interface{}, extraParameters ...interface{}) { 261 | switch len(extraParameters) { 262 | case 0: 263 | pG.Call("rect", x, y, w, h) 264 | break 265 | case 1: 266 | pG.Call("rect", x, y, w, h, extraParameters[0]) 267 | break 268 | case 2: 269 | pG.Call("rect", x, y, w, h, extraParameters[0], extraParameters[1]) 270 | break 271 | case 3: 272 | pG.Call("rect", x, y, w, h, extraParameters[0], extraParameters[1], extraParameters[2]) 273 | break 274 | case 4: 275 | pG.Call("rect", x, y, w, h, extraParameters[0], extraParameters[1], extraParameters[2], extraParameters[3]) 276 | break 277 | 278 | default: 279 | println("Error in Rect funciton (1)") 280 | return 281 | } 282 | } 283 | 284 | func Triangle(x1, y1, x2, y2, x3, y3 interface{}) { 285 | pG.Call("triangle", x1, y1, x2, y2, x3, y3) 286 | } 287 | 288 | //////////////////////////////////////////////////////////// 289 | // EVENTS 290 | 291 | var MouseMoved func() 292 | var MouseDragged func() 293 | var MousePressed func() 294 | var MouseReleased func() 295 | var MouseClicked func() 296 | var MouseWheel func(event Event) 297 | 298 | type Event struct { 299 | data map[string]interface{} 300 | } 301 | 302 | func (event *Event) Delta() float64 { //Delta is a method in Go 303 | return event.data["delta"].(float64) 304 | } 305 | 306 | //////////////////////////////////////////////////////////// 307 | 308 | ///////////////////// VECTOR CLASS ////////////////////////// 309 | 310 | type PVector struct { 311 | data *js.Object 312 | X float64 313 | Y float64 314 | Z float64 315 | } 316 | 317 | func CreateVector(cord ...float64) *PVector { 318 | var r *js.Object 319 | 320 | switch len(cord) { 321 | case 0: 322 | r = pG.Call("createVector") 323 | break 324 | case 1: 325 | r = pG.Call("createVector", cord[0]) 326 | break 327 | case 2: 328 | r = pG.Call("createVector", cord[0], cord[1]) 329 | break 330 | case 3: 331 | r = pG.Call("createVector", cord[0], cord[1], cord[2]) 332 | break 333 | default: 334 | r = nil 335 | println("Error in createVector function (1)") 336 | break 337 | } 338 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 339 | } 340 | 341 | func (v *PVector) Add(x interface{}, other ...interface{}) *PVector { 342 | var r *js.Object 343 | 344 | switch len(other) { 345 | case 0: 346 | if reflect.TypeOf(x).Kind() == reflect.Float64 || reflect.TypeOf(x).Kind() == reflect.Int { 347 | if reflect.TypeOf(x).Kind() == reflect.Float64 { 348 | r = v.data.Call("add", x.(float64)) 349 | } else if reflect.TypeOf(x).Kind() == reflect.Int { 350 | r = v.data.Call("add", x.(int)) 351 | } 352 | } else { 353 | r = v.data.Call("add", x.(*PVector).data) 354 | } 355 | break 356 | case 1: 357 | r = v.data.Call("add", x.(float64), other[0].(float64)) 358 | break 359 | 360 | case 2: 361 | r = v.data.Call("add", x.(float64), other[0].(float64), other[1].(float64)) 362 | break 363 | default: 364 | r = nil 365 | println("Error in add vector method (1)") 366 | break 367 | } 368 | v.X = r.Get("x").Float() 369 | v.Y = r.Get("y").Float() 370 | v.Z = r.Get("z").Float() 371 | 372 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 373 | 374 | } 375 | 376 | func (v *PVector) ToString() string { 377 | r := v.data.Call("toString") 378 | return r.String() 379 | } 380 | 381 | func (v *PVector) Set(cord ...float64) *PVector { 382 | var r *js.Object 383 | 384 | switch len(cord) { 385 | case 1: 386 | r = v.data.Call("set", cord[0]) 387 | break 388 | case 2: 389 | r = v.data.Call("set", cord[0], cord[1]) 390 | break 391 | case 3: 392 | r = v.data.Call("set", cord[0], cord[1], cord[2]) 393 | break 394 | default: 395 | r = nil 396 | println("Error in set (PVector) function (1)") 397 | break 398 | } 399 | 400 | v.X = r.Get("x").Float() 401 | v.Y = r.Get("y").Float() 402 | v.Z = r.Get("z").Float() 403 | 404 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 405 | } 406 | 407 | func (v *PVector) Copy() *PVector { 408 | r := v.data.Call("copy") 409 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 410 | } 411 | 412 | func (v *PVector) Sub(x interface{}, other ...interface{}) *PVector { 413 | var r *js.Object 414 | 415 | switch len(other) { 416 | case 0: 417 | if reflect.TypeOf(x).Kind() == reflect.Float64 || reflect.TypeOf(x).Kind() == reflect.Int { 418 | if reflect.TypeOf(x).Kind() == reflect.Float64 { 419 | r = v.data.Call("sub", x.(float64)) 420 | } else if reflect.TypeOf(x).Kind() == reflect.Int { 421 | r = v.data.Call("sub", x.(int)) 422 | } 423 | } else { 424 | r = v.data.Call("sub", x.(*PVector).data) 425 | } 426 | break 427 | case 1: 428 | r = v.data.Call("sub", x.(float64), other[0].(float64)) 429 | break 430 | 431 | case 2: 432 | r = v.data.Call("sub", x.(float64), other[0].(float64), other[1].(float64)) 433 | break 434 | default: 435 | r = nil 436 | println("Error in sub vector method (1)") 437 | break 438 | } 439 | v.X = r.Get("x").Float() 440 | v.Y = r.Get("y").Float() 441 | v.Z = r.Get("z").Float() 442 | 443 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 444 | 445 | } 446 | 447 | func (v *PVector) Mult(val float64) *PVector { 448 | r := v.data.Call("mult", val) 449 | v.X = r.Get("x").Float() 450 | v.Y = r.Get("y").Float() 451 | v.Z = r.Get("z").Float() 452 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 453 | 454 | } 455 | 456 | func (v *PVector) Div(val float64) *PVector { 457 | r := v.data.Call("div", val) 458 | v.X = r.Get("x").Float() 459 | v.Y = r.Get("y").Float() 460 | v.Z = r.Get("z").Float() 461 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 462 | 463 | } 464 | 465 | func (v *PVector) Mag() float64 { 466 | r := v.data.Call("mag") 467 | return r.Float() 468 | } 469 | 470 | func (v *PVector) MagSq() float64 { 471 | r := v.data.Call("magSq") 472 | return r.Float() 473 | } 474 | 475 | func (v *PVector) Dot(v2 *PVector) float64 { 476 | r := v.data.Call("dot", v2.data) 477 | return r.Float() 478 | } 479 | 480 | func (v *PVector) Cross(v2 *PVector) *PVector { 481 | r := v.data.Call("cross", v2.data) 482 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 483 | } 484 | 485 | func (v *PVector) Dist(v2 *PVector) float64 { 486 | r := v.data.Call("dist", v2.data) 487 | return r.Float() 488 | } 489 | 490 | func (v *PVector) Normalize() *PVector { 491 | r := v.data.Call("normalize") 492 | v.X = r.Get("x").Float() 493 | v.Y = r.Get("y").Float() 494 | v.Z = r.Get("z").Float() 495 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 496 | } 497 | 498 | /* 499 | Missing some important methods. From Limit, view the p5js reference 500 | */ 501 | 502 | func Random2D() *PVector { 503 | r := js.Global.Get("p5").Get("Vector").Call("random2D") 504 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 505 | } 506 | 507 | func Random3D() *PVector { 508 | r := js.Global.Get("p5").Get("Vector").Call("random3D") 509 | return &PVector{data: r, X: r.Get("x").Float(), Y: r.Get("y").Float(), Z: r.Get("z").Float()} 510 | } 511 | 512 | ///////////////////////////////////////////////////////////// 513 | 514 | func LaunchApp() { 515 | 516 | var sketch = func(p *js.Object) { 517 | pG = p 518 | 519 | ////////////////// CONSTANTS /////////////// 520 | HALF_PI = pG.Get("HALF_PI").Float() 521 | PI = pG.Get("PI").Float() 522 | QUARTER_PI = pG.Get("QUARTER_PI").Float() 523 | TAU = pG.Get("TAU").Float() 524 | TWO_PI = pG.Get("TWO_PI").Float() 525 | 526 | OPEN = pG.Get("OPEN").String() 527 | CHORD = pG.Get("CHORD").String() 528 | PIE = pG.Get("PIE").String() 529 | 530 | RGB = pG.Get("RGB").String() 531 | HSB = pG.Get("HSB").String() 532 | 533 | LEFT = pG.Get("LEFT").String() 534 | CENTER = pG.Get("CENTER").String() 535 | RIGHT = pG.Get("RIGHT").String() 536 | /////////////////////////////////////////// 537 | 538 | p.Set("setup", func() { 539 | Setup() 540 | //p.Call("createCanvas", 640, 480) 541 | }) 542 | 543 | p.Set("draw", func() { 544 | ////////// VARIABLES /////////// 545 | MouseX = p.Get("mouseX").Int() 546 | MouseY = p.Get("mouseY").Int() 547 | PmouseX = p.Get("pmouseX").Int() 548 | PmouseY = p.Get("pmouseY").Int() 549 | WinMouseX = p.Get("winMouseX").Int() 550 | WinMouseY = p.Get("winMouseY").Int() 551 | PwinMouseX = p.Get("pwinMouseX").Int() 552 | PwinMouseY = p.Get("pwinMouseY").Int() 553 | MouseButton = p.Get("mouseButton").String() 554 | MouseIsPressed = p.Get("mouseIsPressed").Bool() 555 | 556 | Width = p.Get("width").Int() 557 | Height = p.Get("height").Int() 558 | 559 | //////////////////////////////// 560 | 561 | Draw() 562 | 563 | //p.Call("background", 0) 564 | }) 565 | 566 | p.Set("mouseMoved", func() { 567 | if MouseMoved != nil { 568 | MouseMoved() 569 | } 570 | 571 | }) 572 | 573 | p.Set("mouseDragged", func() { 574 | if MouseDragged != nil { 575 | MouseDragged() 576 | } 577 | 578 | }) 579 | 580 | p.Set("mousePressed", func() { 581 | if MousePressed != nil { 582 | MousePressed() 583 | } 584 | }) 585 | 586 | p.Set("mouseReleased", func() { 587 | if MouseReleased != nil { 588 | MouseReleased() 589 | } 590 | }) 591 | 592 | p.Set("mouseClicked", func() { 593 | if MouseClicked != nil { 594 | MouseClicked() 595 | } 596 | }) 597 | p.Set("mouseWheel", func(event interface{}) { 598 | if MouseWheel != nil { 599 | MouseWheel(Event{data: event.(map[string]interface{})}) 600 | } 601 | }) 602 | 603 | } 604 | 605 | js.Global.Get("p5").New(sketch) 606 | 607 | } 608 | -------------------------------------------------------------------------------- /pGoJsExample.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bregydoc/PGoJs/853b2b0c587276873e911219e68e49ced297331b/pGoJsExample.gif --------------------------------------------------------------------------------