From 4c2e14abcdf05cf677cb1b9af31e0eb96d1995d3 Mon Sep 17 00:00:00 2001 From: Octopus Octopus Date: Fri, 10 Jun 2022 21:55:47 -0500 Subject: [PATCH] move functions out of top, minor tweaks --- fightstick/misc.go | 25 +++++++++++++++ fightstick/rows.go | 63 ++++++++++++++++++++++++++++++++++++ fightstick/top.go | 80 ++-------------------------------------------- 3 files changed, 90 insertions(+), 78 deletions(-) create mode 100644 fightstick/misc.go create mode 100644 fightstick/rows.go diff --git a/fightstick/misc.go b/fightstick/misc.go new file mode 100644 index 0000000..7464981 --- /dev/null +++ b/fightstick/misc.go @@ -0,0 +1,25 @@ +package main + +import ( + "log" + + "github.com/deadsy/sdfx/sdf" +) + +func loggedMovement(input sdf.SDF2, displacement sdf.V2, label string) sdf.SDF2 { + output := sdf.Transform2D(input, sdf.Translate2d(displacement)) + log.Printf("Moving %v by X: %v, Y: %v\n", label, displacement.X, displacement.Y) + return output +} + +func splitPlane() map[string]sdf.SDF2 { + planes := make(map[string]sdf.SDF2) + original := topPlane() + x, y := original.BoundingBox().Max.X*2, original.BoundingBox().Max.Y*2 + cutout := sdf.Box2D(sdf.V2{X: x, Y: y}, 0) + cOLeft := sdf.Transform2D(cutout, sdf.Translate2d(sdf.V2{X: x / 2, Y: 0})) + cORight := sdf.Transform2D(cutout, sdf.Translate2d(sdf.V2{X: -x / 2, Y: 0})) + planes["left"] = sdf.Difference2D(original, cOLeft) + planes["right"] = sdf.Difference2D(original, cORight) + return planes +} diff --git a/fightstick/rows.go b/fightstick/rows.go new file mode 100644 index 0000000..11e9865 --- /dev/null +++ b/fightstick/rows.go @@ -0,0 +1,63 @@ +package main + +import "github.com/deadsy/sdfx/sdf" + +const ( + BUTTON30_DIAMETER = 30 + BUTTON24_DIAMETER = 24 + M4_SCREW_DIAMETER = 4 + JOYSTICK_HOLE_DIAMETER = 24 +) + +// referenced from http://www.slagcoin.com/joystick/layout.html + +func buttonRows() sdf.SDF2 { + buttons := make([]sdf.SDF2, 4) + for i := range buttons { + buttons[i], _ = sdf.Circle2D(BUTTON30_DIAMETER / 2) + } + buttons[1] = sdf.Transform2D(buttons[1], sdf.Translate2d(sdf.V2{X: 31.25, Y: 9 + 9})) + buttons[2] = sdf.Transform2D(buttons[2], sdf.Translate2d(sdf.V2{X: 31.25 + 35, Y: 9})) + buttons[3] = sdf.Transform2D(buttons[3], sdf.Translate2d(sdf.V2{X: 31.25 + 35 + 35, Y: 0})) + bottomRow := sdf.Union2D(buttons...) + topRow := bottomRow + topRow = sdf.Transform2D(topRow, sdf.Translate2d(sdf.V2{X: 0, Y: 9 + 9 + 21})) + + buttonRows := sdf.Union2D(topRow, bottomRow) + // this is done to recenter these parts for easier work on the topPlane + //buttonRows = sdf.Transform2D(buttonRows, sdf.Translate2d(sdf.V2{X: -(31.25 + 35 + 35) / 2, Y: -(9 + 9 + 21 + 9 + 9) / 2})) + buttonRows = sdf.Center2D(buttonRows) + + return buttonRows +} + +func functionRow() sdf.SDF2 { + spacing := 30.0 + buttonCount := 4 + buttons := make([]sdf.SDF2, buttonCount) + for i := range buttons { + buttons[i], _ = sdf.Circle2D(BUTTON24_DIAMETER / 2) + buttons[i] = sdf.Transform2D(buttons[i], sdf.Translate2d(sdf.V2{X: spacing * float64(i), Y: 0})) + } + functionRow := sdf.Union2D(buttons...) + //functionRow = sdf.Transform2D(functionRow, sdf.Translate2d(sdf.V2{X: -(spacing * float64(buttonCount) / 2), Y: 0})) + functionRow = sdf.Center2D(functionRow) + return functionRow +} + +// https://support.focusattack.com/hc/en-us/articles/360015744451-Sanwa-JLF-P1-Mounting-Plate-Measurements +// reference for screw hole mounting points + +func joystick(holeSpacing sdf.V2) sdf.SDF2 { + holes := make([]sdf.SDF2, 4) + for i := range holes { + holes[i], _ = sdf.Circle2D(M4_SCREW_DIAMETER / 2) + } + holes[0] = sdf.Transform2D(holes[0], sdf.Translate2d(sdf.V2{X: holeSpacing.X / 2, Y: holeSpacing.Y / 2})) + holes[1] = sdf.Transform2D(holes[1], sdf.Translate2d(sdf.V2{X: -holeSpacing.X / 2, Y: holeSpacing.Y / 2})) + holes[2] = sdf.Transform2D(holes[2], sdf.Translate2d(sdf.V2{X: holeSpacing.X / 2, Y: -holeSpacing.Y / 2})) + holes[3] = sdf.Transform2D(holes[3], sdf.Translate2d(sdf.V2{X: -holeSpacing.X / 2, Y: -holeSpacing.Y / 2})) + joystickHole, _ := sdf.Circle2D(JOYSTICK_HOLE_DIAMETER / 2) + holes = append(holes, joystickHole) + return sdf.Union2D(holes...) +} diff --git a/fightstick/top.go b/fightstick/top.go index 74ab600..50a9813 100644 --- a/fightstick/top.go +++ b/fightstick/top.go @@ -1,14 +1,12 @@ package main import ( - "log" - "github.com/deadsy/sdfx/sdf" ) func topPlane() sdf.SDF2 { top := sdf.Box2D(sdf.V2{X: 330, Y: 200}, 10) - joystick := joystick() + joystick := joystick(sdf.V2{X: 84, Y: 10 + 10 + 20}) // as listed on jlfmeasure.jpg joystick = sdf.Transform2D(joystick, sdf.Rotate2d(sdf.DtoR(90))) joystick = loggedMovement(joystick, sdf.V2{X: -top.BoundingBox().Max.X / 2, Y: top.BoundingBox().Max.Y / 7}, "joystick") top = sdf.Difference2D(top, joystick) @@ -22,79 +20,5 @@ func topPlane() sdf.SDF2 { auxillaryButtons = loggedMovement(auxillaryButtons, sdf.V2{X: -top.BoundingBox().Max.X / 2.4, Y: 4 * (top.BoundingBox().Max.Y / 5)}, "function cluster") top = sdf.Difference2D(top, auxillaryButtons) return top -} - -func splitPlane() map[string]sdf.SDF2 { - planes := make(map[string]sdf.SDF2) - original := topPlane() - x, y := original.BoundingBox().Max.X*2, original.BoundingBox().Max.Y*2 - cutout := sdf.Box2D(sdf.V2{X: x, Y: y}, 0) - cOLeft := sdf.Transform2D(cutout, sdf.Translate2d(sdf.V2{X: x / 2, Y: 0})) - cORight := sdf.Transform2D(cutout, sdf.Translate2d(sdf.V2{X: -x / 2, Y: 0})) - planes["left"] = sdf.Difference2D(original, cOLeft) - planes["right"] = sdf.Difference2D(original, cORight) - return planes -} - -const M4_SCREW_DIAMETER = 4 -const JOYSTICK_TOP_PANEL_HOLE_DIAMETER = 24 - -// https://support.focusattack.com/hc/en-us/articles/360015744451-Sanwa-JLF-P1-Mounting-Plate-Measurements -// reference for screw hole mounting points - -func joystick() sdf.SDF2 { - holes := make([]sdf.SDF2, 4) - for i := range holes { - holes[i], _ = sdf.Circle2D(M4_SCREW_DIAMETER / 2) - } - holes[0] = sdf.Transform2D(holes[0], sdf.Translate2d(sdf.V2{X: 36.5, Y: 20})) - holes[1] = sdf.Transform2D(holes[1], sdf.Translate2d(sdf.V2{X: -36.5, Y: 20})) - holes[2] = sdf.Transform2D(holes[2], sdf.Translate2d(sdf.V2{X: 36.5, Y: -20})) - holes[3] = sdf.Transform2D(holes[3], sdf.Translate2d(sdf.V2{X: -36.5, Y: -20})) - joystickHole, _ := sdf.Circle2D(JOYSTICK_TOP_PANEL_HOLE_DIAMETER / 2) - holes = append(holes, joystickHole) - return sdf.Union2D(holes...) -} - -const BUTTON_ROW_DIAMETER = 30 - -// referenced from http://www.slagcoin.com/joystick/layout.html - -func buttonRows() sdf.SDF2 { - buttons := make([]sdf.SDF2, 4) - for i := range buttons { - buttons[i], _ = sdf.Circle2D(BUTTON_ROW_DIAMETER / 2) - } - buttons[1] = sdf.Transform2D(buttons[1], sdf.Translate2d(sdf.V2{X: 31.25, Y: 9 + 9})) - buttons[2] = sdf.Transform2D(buttons[2], sdf.Translate2d(sdf.V2{X: 31.25 + 35, Y: 9})) - buttons[3] = sdf.Transform2D(buttons[3], sdf.Translate2d(sdf.V2{X: 31.25 + 35 + 35, Y: 0})) - bottomRow := sdf.Union2D(buttons...) - topRow := bottomRow - topRow = sdf.Transform2D(topRow, sdf.Translate2d(sdf.V2{X: 0, Y: 9 + 9 + 21})) - - buttonRows := sdf.Union2D(topRow, bottomRow) - // this is done to recenter these parts for easier work on the topPlane - buttonRows = sdf.Transform2D(buttonRows, sdf.Translate2d(sdf.V2{X: -(31.25 + 35 + 35) / 2, Y: -(9 + 9 + 21 + 9 + 9) / 2})) - return buttonRows -} - -const FUNCTION_ROW_DIAMETER = 24 - -func functionRow() sdf.SDF2 { - spacing := 30.0 - buttonCount := 4 - buttons := make([]sdf.SDF2, buttonCount) - for i := range buttons { - buttons[i], _ = sdf.Circle2D(FUNCTION_ROW_DIAMETER / 2) - buttons[i] = sdf.Transform2D(buttons[i], sdf.Translate2d(sdf.V2{X: spacing * float64(i), Y: 0})) - } - functionRow := sdf.Union2D(buttons...) - functionRow = sdf.Transform2D(functionRow, sdf.Translate2d(sdf.V2{X: -(spacing * float64(buttonCount) / 2), Y: 0})) - return functionRow -} - -func loggedMovement(input sdf.SDF2, displacement sdf.V2, label string) sdf.SDF2 { - output := sdf.Transform2D(input, sdf.Translate2d(displacement)) - log.Printf("Moving %v by X: %v, Y: %v\n", label, displacement.X, displacement.Y) - return output + }