kopia lustrzana https://github.com/backface/turtlestitch
add various color options
rodzic
dcfbf63aa2
commit
8066c531fe
|
@ -259,5 +259,72 @@ SymbolMorph.prototype.drawSymbolFile = function (canvas, color) {
|
||||||
ctx.fill();
|
ctx.fill();
|
||||||
|
|
||||||
return canvas;
|
return canvas;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Hue slot morph
|
||||||
|
|
||||||
|
var HueSlotMorph;
|
||||||
|
|
||||||
|
HueSlotMorph.prototype = new ColorSlotMorph();
|
||||||
|
HueSlotMorph.prototype.constructor = HueSlotMorph;
|
||||||
|
HueSlotMorph.uber = ColorSlotMorph.prototype;
|
||||||
|
|
||||||
|
function HueSlotMorph(clr) {
|
||||||
|
this.init(clr);
|
||||||
}
|
}
|
||||||
;
|
|
||||||
|
HueSlotMorph.prototype.init = function (clr) {
|
||||||
|
HueSlotMorph.uber.init.call(this, null, true); // silently
|
||||||
|
this.setColor(clr || new Color(127.5, 0, 0));
|
||||||
|
};
|
||||||
|
|
||||||
|
HueSlotMorph.prototype.getUserColor = function () {
|
||||||
|
var myself = this,
|
||||||
|
world = this.world(),
|
||||||
|
hand = world.hand,
|
||||||
|
posInDocument = getDocumentPositionOf(world.worldCanvas),
|
||||||
|
mouseMoveBak = hand.processMouseMove,
|
||||||
|
mouseDownBak = hand.processMouseDown,
|
||||||
|
mouseUpBak = hand.processMouseUp,
|
||||||
|
pal = new HueWheelMorph(null, new Point(
|
||||||
|
this.fontSize * 12,
|
||||||
|
this.fontSize * 12
|
||||||
|
));
|
||||||
|
world.add(pal);
|
||||||
|
pal.setPosition(this.bottomLeft().add(new Point(0, this.edge)));
|
||||||
|
pal.addShadow(new Point(2, 2), 80);
|
||||||
|
|
||||||
|
hand.processMouseMove = function (event) {
|
||||||
|
hand.setPosition(new Point(
|
||||||
|
event.pageX - posInDocument.x,
|
||||||
|
event.pageY - posInDocument.y
|
||||||
|
));
|
||||||
|
myself.setColor(world.getGlobalPixelColor(hand.position()));
|
||||||
|
};
|
||||||
|
|
||||||
|
hand.processMouseDown = nop;
|
||||||
|
|
||||||
|
hand.processMouseUp = function () {
|
||||||
|
pal.destroy();
|
||||||
|
hand.processMouseMove = mouseMoveBak;
|
||||||
|
hand.processMouseDown = mouseDownBak;
|
||||||
|
hand.processMouseUp = mouseUpBak;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// labelPart() proxy
|
||||||
|
SyntaxElementMorph.prototype.originalLabelPart = SyntaxElementMorph.prototype.labelPart;
|
||||||
|
SyntaxElementMorph.prototype.labelPart = function (spec) {
|
||||||
|
var part;
|
||||||
|
switch (spec) {
|
||||||
|
case '%huewheel':
|
||||||
|
part = new HueSlotMorph();
|
||||||
|
part.isStatic = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
part = this.originalLabelPart(spec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return part;
|
||||||
|
};
|
||||||
|
|
|
@ -674,8 +674,7 @@ IDE_Morph.prototype.aboutTurtleStitch = function () {
|
||||||
function () {
|
function () {
|
||||||
window.open('http://www.turtlestitch.com', 'TurtleStitchWebsite');
|
window.open('http://www.turtlestitch.com', 'TurtleStitchWebsite');
|
||||||
},
|
},
|
||||||
'TurtleStitch! website',
|
'TurtleStitch Web Site',
|
||||||
|
|
||||||
);
|
);
|
||||||
dlg.fixLayout();
|
dlg.fixLayout();
|
||||||
};
|
};
|
||||||
|
@ -1812,7 +1811,7 @@ IDE_Morph.prototype.snapMenu = function () {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
menu.addItem(
|
menu.addItem(
|
||||||
'TurtleStitch! website',
|
'TurtleStitch Web Site',
|
||||||
function () {
|
function () {
|
||||||
window.open('http://www.turtlestitch.com', 'TurtleStitchWebsite');
|
window.open('http://www.turtlestitch.com', 'TurtleStitchWebsite');
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,3 +29,225 @@ Morph.fromImageURL = function(url) {
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ColorPaletteMorph ///////////////////////////////////////////////////
|
||||||
|
|
||||||
|
var ColorPaletteMorph;
|
||||||
|
|
||||||
|
// ColorPaletteMorph inherits from Morph:
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype = new Morph();
|
||||||
|
ColorPaletteMorph.prototype.constructor = ColorPaletteMorph;
|
||||||
|
ColorPaletteMorph.uber = Morph.prototype;
|
||||||
|
|
||||||
|
// ColorPaletteMorph instance creation:
|
||||||
|
|
||||||
|
function ColorPaletteMorph(target, sizePoint) {
|
||||||
|
this.init(
|
||||||
|
target || null,
|
||||||
|
sizePoint || new Point(80, 50)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype.init = function (target, size) {
|
||||||
|
ColorPaletteMorph.uber.init.call(this);
|
||||||
|
this.target = target;
|
||||||
|
this.targetSetter = 'color';
|
||||||
|
this.silentSetExtent(size);
|
||||||
|
this.choice = null;
|
||||||
|
this.drawNew();
|
||||||
|
};
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype.drawNew = function () {
|
||||||
|
var context, ext, x, y, h, l, colors;
|
||||||
|
|
||||||
|
ext = this.extent();
|
||||||
|
this.image = newCanvas(this.extent());
|
||||||
|
context = this.image.getContext('2d');
|
||||||
|
this.choice = new Color();
|
||||||
|
colors = ['rgb(0, 0,0)', //black
|
||||||
|
'rgb(128, 128, 128)', //gray
|
||||||
|
'rgb(192, 192, 192)', //silver
|
||||||
|
'rgb(255, 255, 255)', //white
|
||||||
|
'rgb(139, 69, 19)', //saddlebrown
|
||||||
|
'rgb(128, 0, 0)', //maroon
|
||||||
|
'rgb(255, 0, 0)', //red
|
||||||
|
'rgb(255, 192, 203)', //pink
|
||||||
|
'rgb(255, 165, 0)', //orange
|
||||||
|
'rgb(210, 105, 30)', //chocolate
|
||||||
|
'rgb(255, 255, 0)', //yellow
|
||||||
|
'rgb(128, 128, 0)', //olive
|
||||||
|
'rgb(0, 255, 0)', //lime
|
||||||
|
'rgb(0, 128, 0)', //green
|
||||||
|
'rgb(0, 255, 255)', //aqua
|
||||||
|
'rgb(0, 128, 128)', //teal
|
||||||
|
'rgb(0, 0, 255)', //blue
|
||||||
|
'rgb(0, 0, 128)', //navy
|
||||||
|
'rgb(128, 0, 128)', //purple
|
||||||
|
'rgb(255, 0, 255)' //magenta
|
||||||
|
];
|
||||||
|
// HSL palette (with saturation = 100%)
|
||||||
|
for (x = 0; x <= ext.x; x++) {
|
||||||
|
h = 360 * x / ext.x;
|
||||||
|
for (y = 0; y <= ext.y - 30; y++) {
|
||||||
|
l = 100 - (y / (ext.y - 30) * 100);
|
||||||
|
context.fillStyle = 'hsl(' + h + ',100%,' + l + '%)';
|
||||||
|
context.fillRect(x, y, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Gray scale
|
||||||
|
for (x = 0; x <= ext.x; x++) {
|
||||||
|
l = 100 - (x/ ext.x * 100);
|
||||||
|
context.fillStyle = 'hsl(0, 0%, ' + l + '%)';
|
||||||
|
context.fillRect(x, ext.y - 30, 1, 10);
|
||||||
|
}
|
||||||
|
// 20 colors palette (two rows)
|
||||||
|
for (x = 0; x < 20; x++) {
|
||||||
|
context.fillStyle = colors[x];
|
||||||
|
if (x % 2 == 0) {
|
||||||
|
context.fillRect((x / 2) * ext.x / 10, ext.y - 20, ext.x / 10, 10);
|
||||||
|
} else {
|
||||||
|
context.fillRect((Math.round(x / 2) - 1) * ext.x / 10, ext.y - 10, ext.x / 10, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype.mouseMove = function (pos) {
|
||||||
|
this.choice = this.getPixelColor(pos);
|
||||||
|
this.updateTarget();
|
||||||
|
};
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype.mouseDownLeft = function (pos) {
|
||||||
|
this.choice = this.getPixelColor(pos);
|
||||||
|
this.updateTarget();
|
||||||
|
};
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype.updateTarget = function () {
|
||||||
|
if (this.target instanceof Morph && this.choice !== null) {
|
||||||
|
if (this.target[this.targetSetter] instanceof Function) {
|
||||||
|
this.target[this.targetSetter](this.choice);
|
||||||
|
} else {
|
||||||
|
this.target[this.targetSetter] = this.choice;
|
||||||
|
this.target.drawNew();
|
||||||
|
this.target.changed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// ColorPaletteMorph menu:
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype.developersMenu = function () {
|
||||||
|
var menu = ColorPaletteMorph.uber.developersMenu.call(this);
|
||||||
|
menu.addLine();
|
||||||
|
menu.addItem(
|
||||||
|
'set target',
|
||||||
|
"setTarget",
|
||||||
|
'choose another morph\nwhose color property\n will be' +
|
||||||
|
' controlled by this one'
|
||||||
|
);
|
||||||
|
return menu;
|
||||||
|
};
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype.setTarget = function () {
|
||||||
|
var choices = this.overlappedMorphs(),
|
||||||
|
menu = new MenuMorph(this, 'choose target:'),
|
||||||
|
myself = this;
|
||||||
|
|
||||||
|
choices.push(this.world());
|
||||||
|
choices.forEach(function (each) {
|
||||||
|
menu.addItem(each.toString().slice(0, 50), function () {
|
||||||
|
myself.target = each;
|
||||||
|
myself.setTargetSetter();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (choices.length === 1) {
|
||||||
|
this.target = choices[0];
|
||||||
|
this.setTargetSetter();
|
||||||
|
} else if (choices.length > 0) {
|
||||||
|
menu.popUpAtHand(this.world());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ColorPaletteMorph.prototype.setTargetSetter = function () {
|
||||||
|
var choices = this.target.colorSetters(),
|
||||||
|
menu = new MenuMorph(this, 'choose target property:'),
|
||||||
|
myself = this;
|
||||||
|
|
||||||
|
choices.forEach(function (each) {
|
||||||
|
menu.addItem(each, function () {
|
||||||
|
myself.targetSetter = each;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (choices.length === 1) {
|
||||||
|
this.targetSetter = choices[0];
|
||||||
|
} else if (choices.length > 0) {
|
||||||
|
menu.popUpAtHand(this.world());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Hue Wheel
|
||||||
|
|
||||||
|
var HueWheelMorph;
|
||||||
|
|
||||||
|
// ColorPaletteMorph inherits from Morph:
|
||||||
|
|
||||||
|
HueWheelMorph.prototype = new ColorPaletteMorph();
|
||||||
|
HueWheelMorph.prototype.constructor = HueWheelMorph;
|
||||||
|
HueWheelMorph.uber = ColorPaletteMorph.prototype;
|
||||||
|
|
||||||
|
// ColorPaletteMorph instance creation:
|
||||||
|
|
||||||
|
function HueWheelMorph(target, sizePoint) {
|
||||||
|
this.init(
|
||||||
|
target || null,
|
||||||
|
sizePoint || new Point(80, 50)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
HueWheelMorph.prototype.drawNew = function () {
|
||||||
|
var context, ext, x, y, radius;
|
||||||
|
|
||||||
|
ext = this.extent();
|
||||||
|
this.image = newCanvas(this.extent());
|
||||||
|
context = this.image.getContext('2d');
|
||||||
|
this.choice = new Color();
|
||||||
|
x = this.image.width / 2 + 2;
|
||||||
|
y = this.image.height / 2;
|
||||||
|
radius = this.image.width / 2 - 22;
|
||||||
|
|
||||||
|
context.font = '9px Arial';
|
||||||
|
context.fillStyle = 'rgb(200,200,200)';
|
||||||
|
context.fillRect(0, 0, this.image.width, this.image.height);
|
||||||
|
context.strokeRect(0, 0, this.image.width, this.image.height);
|
||||||
|
|
||||||
|
context.textAlign = 'center';
|
||||||
|
context.textBaseline = 'middle';
|
||||||
|
|
||||||
|
for (var angle = 360; angle > 0; angle --) {
|
||||||
|
var startAngle = (angle - 1) * Math.PI/180;
|
||||||
|
var endAngle = (angle + 1) * Math.PI/180;
|
||||||
|
context.beginPath();
|
||||||
|
context.moveTo(x, y);
|
||||||
|
context.arc(x, y, radius, startAngle, endAngle, false);
|
||||||
|
context.closePath();
|
||||||
|
context.fillStyle = 'hsl(' + angle + ', 100%, 50%)';
|
||||||
|
context.fill();
|
||||||
|
|
||||||
|
if (angle % 30 == 0) {
|
||||||
|
var tx = x + (radius + 12) * Math.cos(radians(angle)),
|
||||||
|
ty = y + (radius + 12) * Math.sin(radians(angle));
|
||||||
|
|
||||||
|
context.fillStyle = 'rgb(10,10,10)';
|
||||||
|
|
||||||
|
if (angle % 90 == 0) {
|
||||||
|
context.fillText(angle % 360 + '°', tx, ty);
|
||||||
|
} else {
|
||||||
|
context.beginPath()
|
||||||
|
context.moveTo(tx, ty);
|
||||||
|
context.lineTo(tx + 5 * Math.cos(radians(angle)), ty + 5 * Math.sin(radians(angle)));
|
||||||
|
context.stroke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
@ -1,7 +1,32 @@
|
||||||
/* Sprite */
|
/* Sprite */
|
||||||
// modified SpriteMorph turtlestitch functions
|
// modified SpriteMorph turtlestitch functions
|
||||||
|
|
||||||
|
/*
|
||||||
|
SpriteMorph.prototype.categories =
|
||||||
|
[
|
||||||
|
'motion',
|
||||||
|
'control',
|
||||||
|
'sensing',
|
||||||
|
'operators',
|
||||||
|
'pen',
|
||||||
|
'variables',
|
||||||
|
'colors',
|
||||||
|
'my blocks'
|
||||||
|
];
|
||||||
|
|
||||||
|
SpriteMorph.prototype.blockColor = {
|
||||||
|
motion : new Color(74, 108, 212),
|
||||||
|
pen : new Color(143, 86, 227),
|
||||||
|
colors : new Color(32, 128, 54),
|
||||||
|
control : new Color(230, 168, 34),
|
||||||
|
sensing : new Color(4, 148, 220),
|
||||||
|
operators : new Color(98, 194, 19),
|
||||||
|
variables : new Color(243, 118, 29),
|
||||||
|
lists : new Color(217, 77, 17),
|
||||||
|
other : new Color(150, 150, 150),
|
||||||
|
'my blocks': new Color(150, 150, 150),
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
SpriteMorph.prototype.origInit = SpriteMorph.prototype.init;
|
SpriteMorph.prototype.origInit = SpriteMorph.prototype.init;
|
||||||
SpriteMorph.prototype.init = function(globals) {
|
SpriteMorph.prototype.init = function(globals) {
|
||||||
|
@ -11,6 +36,7 @@ SpriteMorph.prototype.init = function(globals) {
|
||||||
this.turtle = null;
|
this.turtle = null;
|
||||||
this.isDown = true;
|
this.isDown = true;
|
||||||
this.cache = new Cache;
|
this.cache = new Cache;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
SpriteMorph.prototype.addStitch = function(x1, y1, x2, y2) {
|
SpriteMorph.prototype.addStitch = function(x1, y1, x2, y2) {
|
||||||
|
@ -529,6 +555,77 @@ SpriteMorph.prototype.setHeading = function (degrees) {
|
||||||
stage.rotateTurtle(this.heading);
|
stage.rotateTurtle(this.heading);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
SpriteMorph.prototype.setColorRGB = function (r,g,b) {
|
||||||
|
var a = this.color.a;
|
||||||
|
r = Math.max(Math.min(r, 255), 0);
|
||||||
|
b = Math.max(Math.min(b, 255), 0);
|
||||||
|
g = Math.max(Math.min(g, 255), 0);
|
||||||
|
this.setColor(new Color(r, g, b, a));
|
||||||
|
};
|
||||||
|
|
||||||
|
SpriteMorph.prototype.pickHue = function (value) {
|
||||||
|
this.setColor(value);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
SpriteMorph.prototype.setAlpha = function (a) {
|
||||||
|
this.color = aColor.copy();
|
||||||
|
this.color.a = a;
|
||||||
|
this.setColor(this.color);
|
||||||
|
};
|
||||||
|
|
||||||
|
SpriteMorph.prototype.setColorHex = function (hex) {
|
||||||
|
var a = this.color.a;
|
||||||
|
// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
|
||||||
|
var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
|
||||||
|
|
||||||
|
hex = hex.replace(shorthandRegex, function(m, r, g, b) {
|
||||||
|
return r + r + g + g + b + b;
|
||||||
|
});
|
||||||
|
|
||||||
|
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
||||||
|
if (result) {
|
||||||
|
r = parseInt(result[1], 16);
|
||||||
|
g = parseInt(result[2], 16);
|
||||||
|
b = parseInt(result[3], 16);
|
||||||
|
this.setColor(new Color(r, g, b, a));
|
||||||
|
} else {
|
||||||
|
// silently ignore
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
SpriteMorph.prototype.setColorHSV = function (h, s, v) {
|
||||||
|
var col = new Color();
|
||||||
|
h = Math.max(Math.min(h, 1), 0);
|
||||||
|
s = Math.max(Math.min(s, 1), 0);
|
||||||
|
v = Math.max(Math.min(v, 1), 0);
|
||||||
|
col.set_hsv(h, s, v);
|
||||||
|
col.a = this.color.a;
|
||||||
|
this.setColor(col);
|
||||||
|
}
|
||||||
|
|
||||||
|
SpriteMorph.prototype.getColorRGB = function (){
|
||||||
|
return new List([this.color.r, this.color.g, this.color.b]);
|
||||||
|
}
|
||||||
|
|
||||||
|
SpriteMorph.prototype.getColorHex = function (){
|
||||||
|
return new String("#" + ((1 << 24) + (Math.round(this.color.r) << 16) + (Math.round(this.color.g) << 8)
|
||||||
|
+ Math.round(this.color.b)).toString(16).slice(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
SpriteMorph.prototype.getColorHSV = function (){
|
||||||
|
return new List(this.color.hsv());
|
||||||
|
}
|
||||||
|
|
||||||
|
SpriteMorph.prototype.isPenDown = function (){
|
||||||
|
return this.isDown;
|
||||||
|
}
|
||||||
|
|
||||||
|
SpriteMorph.prototype.getPenSize = function (){
|
||||||
|
return this.penSize();
|
||||||
|
}
|
||||||
|
|
||||||
SpriteMorph.prototype.setColor = function (aColor) {
|
SpriteMorph.prototype.setColor = function (aColor) {
|
||||||
var stage = this.parentThatIsA(StageMorph);
|
var stage = this.parentThatIsA(StageMorph);
|
||||||
if (!this.color.eq(aColor)) {
|
if (!this.color.eq(aColor)) {
|
||||||
|
@ -536,9 +633,6 @@ SpriteMorph.prototype.setColor = function (aColor) {
|
||||||
}
|
}
|
||||||
stage.setColor(aColor);
|
stage.setColor(aColor);
|
||||||
stage.turtleShepherd.addColorChange(aColor);
|
stage.turtleShepherd.addColorChange(aColor);
|
||||||
|
|
||||||
|
|
||||||
// TO DO: set color in turtleShepherd
|
|
||||||
};
|
};
|
||||||
|
|
||||||
SpriteMorph.prototype.origSetHue = SpriteMorph.prototype.setHue;
|
SpriteMorph.prototype.origSetHue = SpriteMorph.prototype.setHue;
|
||||||
|
@ -1017,12 +1111,10 @@ StageMorph.prototype.initTurtle = function() {
|
||||||
}, null, null, null, false );
|
}, null, null, null, false );
|
||||||
};
|
};
|
||||||
mtlloader.load( 'stitchcode/assets/turtle.mtl', onLoadMtl );
|
mtlloader.load( 'stitchcode/assets/turtle.mtl', onLoadMtl );
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.drawingColor = new Color(0,0,0);
|
this.drawingColor = new Color(0,0,0);
|
||||||
this.penSize = 0.8;
|
this.penSize = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
StageMorph.prototype.moveTurtle = function(x, y) {
|
StageMorph.prototype.moveTurtle = function(x, y) {
|
||||||
|
@ -1253,7 +1345,6 @@ SpriteMorph.prototype.initBlocks = function () {
|
||||||
var myself = this;
|
var myself = this;
|
||||||
this.originalInitBlocks();
|
this.originalInitBlocks();
|
||||||
|
|
||||||
// control
|
|
||||||
this.blocks.resetAll =
|
this.blocks.resetAll =
|
||||||
{
|
{
|
||||||
only: SpriteMorph,
|
only: SpriteMorph,
|
||||||
|
@ -1261,8 +1352,6 @@ SpriteMorph.prototype.initBlocks = function () {
|
||||||
spec: 'reset',
|
spec: 'reset',
|
||||||
category: 'control'
|
category: 'control'
|
||||||
};
|
};
|
||||||
|
|
||||||
// control
|
|
||||||
this.blocks.forwardBy =
|
this.blocks.forwardBy =
|
||||||
{
|
{
|
||||||
only: SpriteMorph,
|
only: SpriteMorph,
|
||||||
|
@ -1272,7 +1361,6 @@ SpriteMorph.prototype.initBlocks = function () {
|
||||||
defaults: [100,10]
|
defaults: [100,10]
|
||||||
};
|
};
|
||||||
|
|
||||||
// control
|
|
||||||
this.blocks.forwardByNr =
|
this.blocks.forwardByNr =
|
||||||
{
|
{
|
||||||
only: SpriteMorph,
|
only: SpriteMorph,
|
||||||
|
@ -1281,8 +1369,6 @@ SpriteMorph.prototype.initBlocks = function () {
|
||||||
spec: 'move %n steps in %n',
|
spec: 'move %n steps in %n',
|
||||||
defaults: [100,10]
|
defaults: [100,10]
|
||||||
};
|
};
|
||||||
|
|
||||||
// control
|
|
||||||
this.blocks.gotoXYBy =
|
this.blocks.gotoXYBy =
|
||||||
{
|
{
|
||||||
only: SpriteMorph,
|
only: SpriteMorph,
|
||||||
|
@ -1291,8 +1377,6 @@ SpriteMorph.prototype.initBlocks = function () {
|
||||||
spec: 'go to x: %n y: %n by %n',
|
spec: 'go to x: %n y: %n by %n',
|
||||||
defaults: [0, 0, 10]
|
defaults: [0, 0, 10]
|
||||||
};
|
};
|
||||||
|
|
||||||
// control
|
|
||||||
this.blocks.gotoXYIn =
|
this.blocks.gotoXYIn =
|
||||||
{
|
{
|
||||||
only: SpriteMorph,
|
only: SpriteMorph,
|
||||||
|
@ -1301,9 +1385,6 @@ SpriteMorph.prototype.initBlocks = function () {
|
||||||
spec: 'go to x: %n y: %n in %n',
|
spec: 'go to x: %n y: %n in %n',
|
||||||
defaults: [0, 0, 10]
|
defaults: [0, 0, 10]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// control
|
|
||||||
this.blocks.pointTowards =
|
this.blocks.pointTowards =
|
||||||
{
|
{
|
||||||
only: SpriteMorph,
|
only: SpriteMorph,
|
||||||
|
@ -1312,8 +1393,6 @@ SpriteMorph.prototype.initBlocks = function () {
|
||||||
spec: 'point towards x: %n y: %n',
|
spec: 'point towards x: %n y: %n',
|
||||||
defaults: [0, 0]
|
defaults: [0, 0]
|
||||||
};
|
};
|
||||||
|
|
||||||
// control
|
|
||||||
this.blocks.drawText =
|
this.blocks.drawText =
|
||||||
{
|
{
|
||||||
only: SpriteMorph,
|
only: SpriteMorph,
|
||||||
|
@ -1322,6 +1401,116 @@ SpriteMorph.prototype.initBlocks = function () {
|
||||||
spec: 'draw text: %s scale: %n font: %n',
|
spec: 'draw text: %s scale: %n font: %n',
|
||||||
defaults: ["hello", 2, 0]
|
defaults: ["hello", 2, 0]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// pen blocks
|
||||||
|
this.blocks.isPenDown =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'reporter',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'is pen down',
|
||||||
|
};
|
||||||
|
|
||||||
|
// pen blocks
|
||||||
|
this.blocks.getPenSize =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'reporter',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'pen size',
|
||||||
|
};
|
||||||
|
|
||||||
|
this.blocks.setColorRGB =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'command',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'set color to RGB: %n %n %n',
|
||||||
|
defaults: [0, 255, 0]
|
||||||
|
};
|
||||||
|
|
||||||
|
this.blocks.setColorHex =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'command',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'set color to hex value: %s',
|
||||||
|
defaults: ['#ff0000']
|
||||||
|
};
|
||||||
|
|
||||||
|
this.blocks.setColorHSV =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'command',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'set color to HSV: %n %n %n',
|
||||||
|
defaults: [0.3, 0.7, 0.6]
|
||||||
|
};
|
||||||
|
|
||||||
|
this.blocks.setAlpha =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'command',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'set opacity to %s',
|
||||||
|
defaults: [255]
|
||||||
|
};
|
||||||
|
|
||||||
|
this.blocks.getColorRGB =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'reporter',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'RGB color',
|
||||||
|
};
|
||||||
|
|
||||||
|
this.blocks.getColorHSV =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'reporter',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'HSV color',
|
||||||
|
};
|
||||||
|
|
||||||
|
this.blocks.getColorHex =
|
||||||
|
{
|
||||||
|
only: SpriteMorph,
|
||||||
|
type: 'reporter',
|
||||||
|
category: 'pen',
|
||||||
|
spec: 'hex color',
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// colors
|
||||||
|
this.blocks.pickHue =
|
||||||
|
{
|
||||||
|
type: 'command',
|
||||||
|
spec: 'set pen hue to %huewheel',
|
||||||
|
category: 'pen'
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
this.blocks.setHSLA =
|
||||||
|
{
|
||||||
|
type: 'command',
|
||||||
|
spec: 'set %hsla to %n',
|
||||||
|
category: 'colors',
|
||||||
|
defaults: ['hue', 50]
|
||||||
|
};
|
||||||
|
this.blocks.changeHSLA =
|
||||||
|
{
|
||||||
|
type: 'command',
|
||||||
|
spec: 'change %hsla by %n',
|
||||||
|
category: 'colors',
|
||||||
|
defaults: ['hue', 10]
|
||||||
|
};
|
||||||
|
this.blocks.getHSLA =
|
||||||
|
{
|
||||||
|
type: 'reporter',
|
||||||
|
spec: 'color %hsla',
|
||||||
|
category: 'colors'
|
||||||
|
};
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
SpriteMorph.prototype.initBlocks();
|
SpriteMorph.prototype.initBlocks();
|
||||||
|
@ -1530,16 +1719,33 @@ SpriteMorph.prototype.blockTemplates = function (category) {
|
||||||
blocks.push('-');
|
blocks.push('-');
|
||||||
blocks.push(block('down'));
|
blocks.push(block('down'));
|
||||||
blocks.push(block('up'));
|
blocks.push(block('up'));
|
||||||
blocks.push('-');
|
blocks.push(block('isPenDown'));
|
||||||
blocks.push(block('setColor'));
|
|
||||||
blocks.push(block('changeHue'));
|
|
||||||
blocks.push(block('setHue'));
|
|
||||||
blocks.push('-');
|
|
||||||
blocks.push(block('changeBrightness'));
|
|
||||||
blocks.push(block('setBrightness'));
|
|
||||||
blocks.push('-');
|
blocks.push('-');
|
||||||
blocks.push(block('changeSize'));
|
blocks.push(block('changeSize'));
|
||||||
blocks.push(block('setSize'));
|
blocks.push(block('setSize'));
|
||||||
|
blocks.push(block('getPenSize'));
|
||||||
|
blocks.push('-');
|
||||||
|
blocks.push(block('setColor'));
|
||||||
|
blocks.push(block('setColorRGB'));
|
||||||
|
blocks.push(block('setColorHSV'));
|
||||||
|
blocks.push(block('setColorHex'));
|
||||||
|
blocks.push(block('getColorRGB'));
|
||||||
|
blocks.push(block('getColorHSV'));
|
||||||
|
blocks.push(block('getColorHex'));
|
||||||
|
blocks.push('-');
|
||||||
|
blocks.push(block('pickHue'));
|
||||||
|
blocks.push(block('changeHue'));
|
||||||
|
blocks.push(block('setHue'));
|
||||||
|
blocks.push('-');
|
||||||
|
|
||||||
|
/*
|
||||||
|
} else if (cat === 'colors') {
|
||||||
|
blocks.push(block('pickHue'));
|
||||||
|
blocks.push('-');
|
||||||
|
blocks.push(block('setHSLA'));
|
||||||
|
blocks.push(block('changeHSLA'));
|
||||||
|
blocks.push(block('getHSLA'));
|
||||||
|
*/
|
||||||
} else if (cat === 'control') {
|
} else if (cat === 'control') {
|
||||||
|
|
||||||
blocks.push(block('resetAll'));
|
blocks.push(block('resetAll'));
|
||||||
|
|
Ładowanie…
Reference in New Issue