+// arcade controller thing
+// Copyright (c) 2017 Clinton Ebadi <clinton@unknownlamer.org>
+// GPLv3 or (at your option) any later version
+// .. insert license text here ...
+
+use <obiscad/bcube.scad>
+
+$button_d = 28;
+
+module button (bezel = $button_d+4) {
+ circle (d=$button_d);
+ %circle(d=bezel);
+}
+
+js_width = 40;
+js_height = 85;
+
+module joystick () {
+ bolt_d = 8;
+ center_hole_d = 24;
+
+
+ for (x = [0, js_width], y = [0, js_height]) {
+ translate ([x, y, 0]) circle (d=bolt_d); // need slot instead
+ }
+ translate ([js_width/2, js_height/2, 0]) circle (d=center_hole_d);
+
+ %square ([js_width, js_height]); // not right...
+}
+
+panel_w = 250;
+panel_h = 120;
+
+module box_base (x_offset=0, y_offset=0, c=2) { // shitty name
+ offset (detal = c, chamfer=true) square ([panel_w+c+x_offset, panel_h+c+y_offset]);
+
+}
+
+box_h = 80;
+box_wall = 2;
+base_h = 5;
+// bcube parameters, clean up
+cr = 2;
+cres = 4;
+
+module betterbox_walls () {
+ difference() {
+
+ bcube([panel_w, panel_h, box_h-base_h], cr, cres);
+ bcube([panel_w-box_wall, panel_h-box_wall, box_h], cr, cres);
+ }
+}
+
+module betterbox_base () {
+ bcube([panel_w, panel_h, base_h], cr, cres);
+}
+
+
+module betterbox () {
+ betterbox_base ();
+ translate ([0, 0, (box_h)/2]) betterbox_walls ();
+}
+
+betterbox ();
+
+module box () {
+
+ linear_extrude (base_h) {
+ box_base ();
+ }
+ translate ([0, 0, base_h]) linear_extrude (box_h) {
+ difference () {
+ box_base ();
+ translate ([box_wall/2, box_wall/2, 0])
+ box_base (x_offset=-box_wall, y_offset=-box_wall);
+
+ }
+ }
+}
+
+//box ();
+
+
+
+module panel () {
+ difference () {
+ box_base ();
+ translate ([15, panel_h/2-js_height/2, 0]) panel_layout ();
+ }
+}
+
+//linear_extrude (6) panel ();
+
+
+
+// panel layout
+
+// http://smg.photobucket.com/user/ttooddddyy/media/neogeoMVS-4-25ver3-cpLayout.jpg.html
+
+module panel_layout () {
+ joystick ();
+
+ // p1, coin
+ %translate ([140-$button_d, $button_d+65, 0]) {
+ button ();
+ translate ([$button_d+10, 0, 0]) button ();
+ }
+
+ // a, b, c, d
+ translate ([js_width/2+$button_d/2+63.5, js_height/2, 0]) {
+ button ();
+ for (i = [ 1 : 3 ]) {
+ translate ([i*($button_d+10)-5, 30, 0]) button ();
+ }
+ }
+}
+
+//panel_layout ();