An example of this notation from the ForestFire.txt example supplied with the executable:
;Fire(I would get a screenshot, but none of the Spore prototypes run on the laptop I'm currently using. Given that this is my gaming laptop, I'm a little worried for the final release).
WIDTH = 150
HEIGHT = 150
PAUSE = 0
%%
INIT = {0,0,64}
FIRE1 = {96,32,0}
FIRE2 = {128,48,0}
FIRE3 = {192,64,0}
FIRE4 = {255,96,0}
YOUNG= {0,128,0}
OLD= {0,100,0}
ASH= {48,48,48}
%%
DISCRETE FOREST
%%
;Fire spreads
FOREST:OLD + 1FIRE2+ -> FIRE1*0.1
FOREST:OLD + 1FIRE3+ -> FIRE2*0.1
FOREST:OLD + 1FIRE4+ -> FIRE3*0.1
FOREST:YOUNG + 1FIRE2+ -> FIRE1*0.01
FOREST:YOUNG + 1FIRE3+ -> FIRE2*0.01
FOREST:YOUNG + 1FIRE4+ -> FIRE3*0.01
;Fire rages
FOREST:FIRE1 -> FIRE2*0.1
FOREST:FIRE2 -> FIRE3*0.1
FOREST:FIRE3 -> FIRE4*0.1
;Fire dies
FOREST:FIRE4 -> ASH*0.1
;Initial random forest
FOREST:INIT -> OLD*0.1
FOREST:INIT -> YOUNG*0.1
FOREST:INIT -> ASH*0.1
;Age
FOREST:YOUNG -> OLD *0.01
;Renew
FOREST:ASH -> YOUNG * 0.001
;spark forest fire
FOREST:OLD + 5OLD+ -> FIRE1 *0.00001
I'm working on a Javascript based cellular automaton tool at the moment, which doesn't quite have the flexibility of this framework. It is inspired by the Five Cellular Automata algorithms, although in the very early days of the implementation. You can have a play with the script here. At the moment it just generates a random 30x30 grid, each location of which has 50% chance of containing a cell, then plays the Game of Life.
You'll see the animation stutter frequently: I presume for garbage collection. I'm not sure the cleanest approach for animation in JavaScript. The recommended approach is to use setTimeout or setInterval which creates a callback into the JavaScript code. But this seems to requires that I make the referenced object global as I don't seem to be able to pass it through the callback. Suggestions are welcome.
Hi!
ReplyDeleteFirst post in your blog ^^
The easyest way of using timeouts + object parameters in javascript without making them global is making the whole thing object oriented. For example, let's say you want to call myObject.showMessage (wich uses the object member 'myObject.message')
// the only global object
var myObject = {
message: 'I like burritos',
showMessage: function() {
alert(this.message);
},
showDelayedMessage: function() {
this.timeoutId = setTimeout(
this.showMessage, 5000);
}
};
However calling myObject.showDelayed message will not work because of an ugly context problem ("this" is considered to be the "window" object instead of "myobject"). A fix is using this other function instead:
var myObject = {
message: 'I like burritos',
showMessage: function() {
alert(this.message);
},
showDelayedMessage: function() {
var self = this;
this.timeoutId = setTimeout(
function () {
self.showMessage();
},
5000);
}
};
I hope this helps.
Thanks - makes sense.
ReplyDelete