optimized sphere and blocktype

This commit is contained in:
walterhiggins 2013-01-31 22:51:35 +00:00
parent 2392922c01
commit 63712518dc
3 changed files with 40 additions and 20 deletions

View file

@ -314,7 +314,7 @@ load(__folder + "drone.js");
var bmbg = null;
if (typeof bg != "undefined")
bmbg = this._getBlockIdAndMeta(bg);
var world = this._getWorld();
var lines = message.split("\n");
var lineCount = lines.length;
for (var h = 0;h < lineCount; h++) {
@ -330,12 +330,12 @@ load(__folder + "drone.js");
}
var charWidth = bits.width;
if (typeof bg != "undefined")
this.cuboidX(bmbg[0],bmbg[1],charWidth,7,1);
this.cuboidX(bmbg[0],bmbg[1],world,charWidth,7,1);
for (var j = 0;j < bits.pixels.length;j++){
this.chkpt('btbl');
var x = bits.pixels[j][0];
var y = bits.pixels[j][1];
this.up(6-y).right(x).cuboidX(bmfg[0],bmfg[1]);
this.up(6-y).right(x).cuboidX(bmfg[0],bmfg[1],world);
this.move('btbl');
}
this.right(charWidth-1);

View file

@ -393,9 +393,10 @@ var Drone = Drone || {
};
/*
faster cuboid because blockid and meta must be provided
faster cuboid because blockid, meta and world must be provided
use this method when you need to repeatedly place blocks
*/
Drone.prototype.cuboidX = function(blockId, meta, w, h, d){
Drone.prototype.cuboidX = function(blockId, meta, world, w, h, d){
if (typeof h == "undefined")
h = 1;
@ -405,9 +406,6 @@ var Drone = Drone || {
w = 1;
var that = this;
var dir = this.dir;
var pl = org.bukkit.entity.Player;
var cs = org.bukkit.command.BlockCommandSender;
var world = (self instanceof pl)?self.location.world:(self instanceof cs)?self.block.location.world:null;
var depthFunc = function(){
var block = world.getBlockAt(that.x,that.y,that.z);
@ -424,11 +422,16 @@ var Drone = Drone || {
return this;
};
Drone.prototype._getWorld = function(){
var pl = org.bukkit.entity.Player;
var cs = org.bukkit.command.BlockCommandSender;
var world = (self instanceof pl)?self.location.world:(self instanceof cs)?self.block.location.world:null;
return world;
};
Drone.prototype.cuboid = function(block,w,h,d){
var bm = _getBlockIdAndMeta(block);
return this.cuboidX(bm[0],bm[1],w,h,d);
return this.cuboidX(bm[0],bm[1],this._getWorld(), w,h,d);
};
Drone.prototype.cuboid0 = function(block,w,h,d){
this.chkpt('start_point');
@ -592,9 +595,23 @@ var Drone = Drone || {
// ========================================================================
// Private variables and functions
// ========================================================================
var _cylinderX = function(block,radius,height,drone,fill)
var _cylinderX = function(block,radius,height,drone,fill,exactParams)
{
drone.chkpt('cylinderX');
var world = null;
var blockType = null;
var meta = 0;
if (typeof exactParams == "undefined"){
world = drone._getWorld();
bm = drone._getBlockIdAndMeta(block);
blockType = bm[0];
meta = bm[1];
}else{
world = exactParams.world;
blockType = exactParams.blockType;
meta = exactParams.meta;
}
var x0, y0, gotoxy;
drone.right(radius).fwd(radius).chkpt('center');
switch (drone.dir){
@ -628,11 +645,11 @@ var Drone = Drone || {
if (yo < 0){
drone
.fwd(yo).right(xo)
.box(block,1,height,Math.abs(yo*2)+1)
.cuboidX(blockType,meta,world,1,height,Math.abs(yo*2)+1)
.back(yo).left(xo);
}
}else{
gotoxy(xo,yo).box(block,1,height,1).move('center');
gotoxy(xo,yo).cuboidX(blockType,meta,world,1,height,1).move('center');
}
};
//
@ -675,11 +692,11 @@ var Drone = Drone || {
}
return drone.move('cylinderX');
}
var _cylinder0 = function(block,radius,height){
return _cylinderX(block,radius,height,this,false);
var _cylinder0 = function(block,radius,height,exactParams){
return _cylinderX(block,radius,height,this,false,exactParams);
};
var _cylinder1 = function(block,radius,height){
return _cylinderX(block,radius,height,this,true);
var _cylinder1 = function(block,radius,height,exactParams){
return _cylinderX(block,radius,height,this,true,exactParams);
};
var _getDirFromRotation = function(r){
// 0 = east, 1 = south, 2 = west, 3 = north

View file

@ -5,6 +5,9 @@ Drone.extend('sphere', function(block,radius)
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));
@ -19,7 +22,7 @@ Drone.extend('sphere', function(block,radius)
// mid section
//
this.up(radius - slices[0][1])
.cylinder(block,radius,(slices[0][1]*2)-1)
.cylinder(block,radius,(slices[0][1]*2)-1,{blockType: bm[0],meta: bm[1],world: world})
.down(radius-slices[0][1]);
var yOffset = -1;
@ -31,13 +34,13 @@ Drone.extend('sphere', function(block,radius)
var v = radius + yOffset, h = radius-sr;
// northern hemisphere
this.up(v).fwd(h).right(h)
.cylinder(block,sr,sh)
.cylinder(block,sr,sh,{blockType: bm[0],meta: bm[1],world: world})
.left(h).back(h).down(v);
// southern hemisphere
v = radius - (yOffset+sh+1);
this.up(v).fwd(h).right(h)
.cylinder(block,sr,sh)
.cylinder(block,sr,sh,{blockType: bm[0],meta: bm[1],world: world})
.left(h).back(h). down(v);
}
return this.move('sphere');