├── .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 | 
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 | 
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
--------------------------------------------------------------------------------