This repository has been archived on 2021-07-14. You can view files and clone it, but cannot push or open issues or pull requests.
scriptcraft/src/main/js/plugins/drone/contrib/logo.js

241 lines
5 KiB
JavaScript

'use strict';
/*global require*/
var Drone = require('drone'),
blocks = require('blocks');
//
// Constructs the JS logo
// https://raw.github.com/voodootikigod/logo.js/master/js.png
//
// fg
// the material that the letters JS will be made of
// bg
// the material that the square will be made of
//
function logojs(fg, bg) {
// foreground defaults to gray wool
if (typeof fg == "undefined")
fg = blocks.wool.gray;
// background defaults to gold blocks
if (typeof bg == "undefined")
bg = blocks.gold;
// Draw the sqaure
this
.chkpt('logojs-start')
.up()
.box(bg, 100, 100, 1);
// Draw the J, starting with the hook
this
.right(30)
.up(13)
.box(fg)
.right()
.down()
.box(fg, 1, 3, 1)
.right()
.down()
.box(fg, 1, 5, 1)
.right()
.down()
.box(fg, 1, 7, 1)
.right()
.box(fg, 1, 8, 1)
.right()
.down()
.box(fg, 1, 10, 1)
.right()
.box(fg, 1, 9, 1)
.right()
.box(fg, 1, 8, 1)
.right()
.down()
.box(fg, 2, 8, 1)
.right(2)
.box(fg, 4, 7, 1)
.right(4)
.box(fg, 1, 8, 1)
.right()
.box(fg, 1, 9, 1)
.right()
.up()
.box(fg, 3, 10, 1)
.right(3)
.up()
.box(fg, 2, 9, 1)
.right(2)
.up()
.box(fg, 2, 8, 1)
.right(2)
.up()
.box(fg, 1, 7, 1)
.right()
.up()
.box(fg, 1, 6, 1)
.right()
.up()
.box(fg, 1, 5, 1)
.right()
.up(2)
.box(fg, 1, 3, 1)
.left(9)
.up(3)
.box(fg, 10, 31, 1)
// Draw the S
// It's drawn in three strokes from bottom to top. Look for when
// it switches from .right() to .left() then back again
// move to starting point for S
.right(22).down(6)
// stroke 1
.box(fg)
.right().down()
.box(fg, 1, 3, 1)
.right().down()
.box(fg, 1, 5, 1)
.right().down()
.box(fg, 1, 7, 1)
.right()
.box(fg, 1, 8, 1)
.right().down()
.box(fg, 1, 10, 1)
.right()
.box(fg, 1, 9, 1)
.right()
.box(fg, 1, 8, 1)
.right().down()
.box(fg, 2, 8, 1)
.right(2)
.box(fg, 4, 7, 1)
.right(4)
.box(fg, 2, 8, 1)
.right(2)
.box(fg, 1, 9, 1)
.right().up()
.box(fg, 1, 9, 1)
.right()
.box(fg, 1, 10, 1)
.right()
.box(fg, 1, 22, 1)
.right().up()
.box(fg, 2, 20, 1)
.right().up()
.box(fg, 1, 18, 1)
.right().up()
.box(fg, 1, 17, 1)
.right().up()
.box(fg, 1, 15, 1)
.right().up()
.box(fg, 1, 13, 1)
.right().up(2)
.box(fg, 1, 9, 1)
.right().up(2)
.box(fg, 1, 5, 1)
// stroke 2
.left(8).up(4)
.box(fg, 1, 9, 1)
.left().up()
.box(fg, 1, 9, 1)
.left().up()
.box(fg, 1, 8, 1)
.left(2).up()
.box(fg, 2, 8, 1)
.left(2).up()
.box(fg, 2, 7, 1)
.left(2).up()
.box(fg, 2, 7, 1)
.left()
.box(fg, 1, 8, 1)
.left().up()
.box(fg, 1, 8, 1)
.left()
.box(fg, 1, 9, 1)
.left(2).up()
.box(fg, 2, 19, 1)
.left().up()
.box(fg, 1, 17, 1)
.left()
.box(fg, 1, 16, 1)
.left().up()
.box(fg, 1, 14, 1)
.left().up(2)
.box(fg, 1, 10, 1)
.left().up(2)
.box(fg, 1, 6, 1)
// stroke 3
.right(7).up(6)
.box(fg, 1, 8, 1)
.right().up()
.box(fg, 1, 7, 1)
.right().up()
.box(fg, 2, 7, 1)
.right(2).up()
.box(fg, 4, 6, 1)
.right(4).down()
.box(fg, 2, 7, 1)
.right().down()
.box(fg, 1, 8, 1)
.right()
.box(fg, 1, 7, 1)
.right().down()
.box(fg, 1, 8, 1)
.right().down()
.box(fg, 1, 9, 1)
.right().down()
.box(fg, 1, 9, 1)
.right().up()
.box(fg, 1, 8, 1)
.right().up()
.box(fg, 1, 6, 1)
.right().up()
.box(fg, 1, 5, 1)
.right().up()
.box(fg, 1, 3, 1)
.right().up()
.box(fg);
this.move('logojs-start');
return this;
}
//
// Makes a cube of JS logos!
// This is a wrapper for logojs() so look at its docs
//
// Until the drone can rotate on its Z axis we can't
// use logojs() to create top/bottom sides of cube.
//
function logojscube(fg, bg) {
this.chkpt('jscube-start')
.logojs(fg, bg);
this.move('jscube-start')
.right(100)
.turn(3)
.logojs(fg, bg);
this.move('jscube-start')
.right(100)
.turn(3)
.right(100)
.turn(3)
.logojs(fg, bg);
this.move('jscube-start')
.right(100)
.turn(3)
.right(100)
.turn(3)
.right(100)
.turn(3)
.logojs(fg, bg);
return this;
}
Drone.extend( logojs );
Drone.extend( logojscube );