diff --git a/src/main/javascript/drone/blocks.js b/src/main/javascript/drone/blocks.js new file mode 100644 index 0000000..623ab9b --- /dev/null +++ b/src/main/javascript/drone/blocks.js @@ -0,0 +1,186 @@ +var blocks = { + air: 0, + stone: 1, + grass: 2, + dirt: 3, + cobblestone: 4, + oak: 5, + spruce: '5:1', + birch: '5:2', + jungle: '5:3', + sapling: 6, + bedrock: 7, + water: 8, + water_still: 9, + lava: 10, + lava_still: 11, + sand: 12, + gravel: 13, + gold_ore: 14, + iron_ore: 15, + coal_ore: 16, + wood: 17, + leaves: 18, + sponge: 19, + glass: 20, + lapis_lazuli_ore: 21, + lapis_lazuli_block: 22, + dispenser: 23, + sandstone: 24, + note: 25, + bed: 26, + powered_rail: 27, + detector_rail: 28, + sticky_piston: 29, + cobweb: 30, + grass_tall: 31, + dead_bush: 32, + piston: 33, + piston_extn: 34, + white: 35, // white is white wool + black: '35:15', + wool: { + white: 35, + orange: '35:1', + magenta: '35:2', + lightblue: '35:3', + yellow: '35:4', + lime: '35:5', + pink: '35:6', + gray: '35:7', + lightgray: '35:8', + cyan: '35:9', + purple: '35:10', + blue: '35:11', + brown: '35:12', + green: '35:13', + red: '35:14', + black: '35:15' + }, + dandelion: 37, + flower_yellow: 37, + rose: 38, + flower_red: 38, + mushroom_brown: 39, + mushroom_red: 40, + gold: 41, + iron: 42, + slab: 44, + brick: 45, + redbrick: 45, + tnt: 46, + bookshelf: 47, + moss_stone: 48, + obsidian: 49, + torch: 50, + fire: 51, + monster_spawner: 52, + stairs_wood: 53, + chest: 54, + redstone_wire: 55, + diamond_ore: 56, + diamond: 57, + crafting_table: 58, + wheat_seeds: 59, + farmland: 60, + furnace: 61, + furnace_burning: 62, + sign_post: 63, + door_wood: 64, + ladder: 65, + rail: 66, + stairs_cobblestone: 67, + sign: 68, + lever: 69, + pressure_plate_stone: 70, + door_iron: 71, + pressure_plate_wood: 72, + redstone_ore: 73, + redstone_ore_glowing: 74, + torch_redstone: 75, + torch_redstone_active: 76, + stone_button: 77, + slab_snow: 78, + ice: 79, + snow: 80, + cactus: 81, + clay: 82, + sugar_cane: 83, + jukebox: 84, + fence: 85, + pumpkin: 86, + netherrack: 87, + soulsand: 88, + glowstone: 89, + netherportal: 90, + jackolantern: 91, + cake: 92, + redstone_repeater: 93, + redeston_repeater_active: 94, + chest_locked: 95, + trapdoor: 96, + monster_egg: 97, + stone_brick: 98, + stone_brick_mossy: '98:1', + stone_brick_cracked: '98:2', + stone_brick_chiseled: '98:3', + mushroom_brown_huge: 99, + mushroom_red_huge: 100, + iron_bars: 101, + glass_pane: 102, + melon: 103, + pumpkin_stem: 104, + melon_stem: 105, + vines: 106, + fence_gate: 107, + stairs_brick: 108, + stairs_stone: 109, + mycelium: 110, + lily_pad: 111, + nether: 112, + neter_fence: 113, + stairs_nether: 114, + netherwart: 115, + table_enchantment: 116, + brewing_stand: 117, + cauldron: 118, + endportal: 119, + endportal_frame: 120, + endstone: 121, + dragon_egg: 122, + redstone_lamp: 123, + redstone_lamp_active: 124, + slab_wood: 126, + cocoa: 127, + stairs_sandstone: 128, + emerald_ore: 129, + enderchest: 130, + tripwire_hook: 131, + tripwire: 132, + emerald: 133, + stairs_wood_spruce: 134, + stairs_wood_birch: 135, + stairs_wood_jungle: 136, + command: 137, + beacon: 138, + cobblestone_wall: 139, + flowerpot: 140, + carrots: 141, + potatoes: 142, + button_wood: 143, + mobhead: 144, + anvil: 145, + chest_trapped: 146, + pressure_plate_weighted_light: 147, + pressure_plate_weighted_heavy: 148, + redstone_comparator: 149, + redstone_comparator_active: 150, + daylight_sensor: 151, + redstone: 152, + netherquartzore: 153, + hopper: 154, + quartz: 155, + stairs_quartz: 156, + rail_activator: 157, + dropper: 158 +}; diff --git a/src/main/javascript/drone/sphere.js b/src/main/javascript/drone/sphere.js index ef207d3..2f9a40a 100644 --- a/src/main/javascript/drone/sphere.js +++ b/src/main/javascript/drone/sphere.js @@ -56,3 +56,60 @@ Drone.extend('sphere0', function(block,radius) .sphere(0,radius-1) .back().left().down(); }); +Drone.extend('hemisphere', function(block,radius, northSouth){ + var lastRadius = radius; + var slices = [[radius,0]]; + var diameter = radius*2; + var world = this._getWorld(); + var bm = this._getBlockIdAndMeta(block); + + var r2 = radius*radius; + for (var i = 0; i <= radius;i++){ + var newRadius = Math.round(Math.sqrt(r2 - i*i)); + if (newRadius == lastRadius) + slices[slices.length-1][1]++; + else + slices.push([newRadius,1]); + lastRadius = newRadius; + } + this.chkpt('hsphere'); + // + // mid section + // + if (northSouth == "north"){ + this.cylinder(block,radius,slices[0][1],{blockType: bm[0],meta: bm[1],world: world}); + } else { + this.up(radius - slices[0][1]) + .cylinder(block,radius,slices[0][1],{blockType: bm[0],meta: bm[1],world: world}) + .down(radius - slices[0][1]); + } + + var yOffset = -1; + for (var i = 1; i < slices.length;i++) + { + yOffset += slices[i-1][1]; + var sr = slices[i][0]; + var sh = slices[i][1]; + var v = yOffset, h = radius-sr; + if (northSouth == "north") { + // northern hemisphere + this.up(v).fwd(h).right(h) + .cylinder(block,sr,sh,{blockType: bm[0],meta: bm[1],world: world}) + .left(h).back(h).down(v); + }else{ + // southern hemisphere + v = radius - (yOffset+sh+1); + this.up(v).fwd(h).right(h) + .cylinder(block,sr,sh,{blockType: bm[0],meta: bm[1],world: world}) + .left(h).back(h). down(v); + } + } + return this.move('hsphere'); + +}); +Drone.extend('hemisphere0', function(block,radius,northSouth){ + return this.hemisphere(block,radius,northSouth) + .fwd().right().up(northSouth=="north"?0:1) + .hemisphere(0,radius-1,northSouth) + .back().left().down(northSouth=="north"?0:1); +});