arcade/fightstick/body3D.go

76 lines
2.4 KiB
Go

package main
import (
"log"
"github.com/deadsy/sdfx/sdf"
v2 "github.com/deadsy/sdfx/vec/v2"
v3 "github.com/deadsy/sdfx/vec/v3"
)
const (
TOP_HEIGHT = 3.0
WALLS_HEIGHT = 45.0
BOTTOM_HEIGHT = 3.0
)
// wallFrontRight is the front right wall. This houses the neutrik connector.
// TODO: Test that measurement because this shit will be infuriating if i print it wrong
func wallFrontRight() sdf.SDF3 {
corner2D := wallCorner()
corner := sdf.Extrude3D(corner2D, WALLS_HEIGHT)
neutrik2D, err := sdf.Circle2D(BUTTON24_DIAMETER / 2)
if err != nil {
log.Printf("error: %v\n", err)
}
m3Screw, err := sdf.Circle2D(3 / 2)
if err != nil {
log.Printf("error: %v\n", err)
}
neutrik2D = sdf.Union2D(neutrik2D, sdf.Transform2D(m3Screw, sdf.Translate2d(v2.Vec{X: -19 / 2, Y: 24 / 2})))
neutrik2D = sdf.Union2D(neutrik2D, sdf.Transform2D(m3Screw, sdf.Translate2d(v2.Vec{X: 19 / 2, Y: -24 / 2})))
neutrik := sdf.Extrude3D(neutrik2D, WALL_THICKNESS)
neutrik = sdf.Transform3D(neutrik, sdf.RotateY(sdf.DtoR(90)))
neutrik = sdf.Transform3D(neutrik, sdf.Translate3d(v3.Vec{X: BODY_SIZE_X/3 + (WALL_THICKNESS / 2), Y: BODY_SIZE_Y / 3, Z: 0}))
corner = sdf.Difference3D(corner, neutrik)
corner = sdf.Transform3D(corner, sdf.MirrorYZ())
corner = sdf.Transform3D(corner, sdf.Rotate3d(v3.Vec{X: 0, Y: 0, Z: 1}, sdf.DtoR(270)))
return corner
}
//wallFrontLeft is the front left wall. This houses 4 24mm buttons.
func wallFrontLeft() sdf.SDF3 {
corner2D := wallCorner()
corner2D = sdf.Transform2D(corner2D, sdf.Rotate2d(sdf.DtoR(270)))
corner := sdf.Extrude3D(corner2D, WALLS_HEIGHT)
functionButtons := sdf.Extrude3D(functionRow(), WALL_THICKNESS)
functionButtons = sdf.Transform3D(functionButtons, sdf.RotateX(sdf.DtoR(90)))
functionButtons = sdf.Transform3D(functionButtons, sdf.Translate3d(v3.Vec{X: BODY_SIZE_X/4.5 + (WALL_THICKNESS / 2), Y: -BODY_SIZE_Y / 2, Z: 0}))
corner = sdf.Difference3D(corner, functionButtons)
corner = sdf.Transform3D(corner, sdf.Rotate3d(v3.Vec{X: 0, Y: 0, Z: 1}, sdf.DtoR(180)))
return corner
}
//wallBackRight is the back right wall.
//TODO: ROTATE
func wallBackRight() sdf.SDF3 {
corner := wallCorner()
corner = sdf.Transform2D(corner, sdf.Rotate2d(sdf.DtoR(90)))
return sdf.Extrude3D(corner, WALLS_HEIGHT)
}
//wallBackLeft is the back left wall.
//TODO: ROTATE
func wallBackLeft() sdf.SDF3 {
corner := wallCorner()
corner = sdf.Transform2D(corner, sdf.Rotate2d(sdf.DtoR(180)))
return sdf.Extrude3D(corner, WALLS_HEIGHT)
}