@qooxdoo/framework
Version:
The JS Framework for Coders
157 lines (124 loc) • 4.46 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007 Derrell Lipman
2004-2010 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Derrell Lipman (derrell)
* Tristan Koch (tristankoch)
************************************************************************ */
/* ************************************************************************
************************************************************************ */
/**
*
* @asset(qxl/demobrowser/demo/ui/FsmMiceMaze.png)
* @asset(qxl/demobrowser/demo/ui/mouse-north.gif)
* @asset(qxl/demobrowser/demo/ui/mouse-east.gif)
* @asset(qxl/demobrowser/demo/ui/mouse-south.gif)
* @asset(qxl/demobrowser/demo/ui/mouse-west.gif)
*/
qx.Class.define("qxl.demobrowser.demo.ui.FiniteStateMachine",
{
extend : qx.application.Standalone,
construct : function()
{
this.base(arguments);
},
members :
{
/**
* TODOC
*/
main : function()
{
this.base(arguments);
// Enable logging in debug variant
if ((qx.core.Environment.get("qx.debug")))
{
// support native logging capabilities, e.g. Firebug for Firefox
qx.log.appender.Native;
// support additional cross-browser console. Press F7 to toggle visibility
qx.log.appender.Console;
}
var description =
"This is a simple example of using a finite state machine, in " +
"which virtual mice solve a maze. " +
"<p>" +
"Each mouse is quite dumb, having in " +
"its arsenal of knowledge only these characteristics: it knows " +
"only how to travel in a single direction (the direction in " +
"which it was instantiated); when it " +
"arrives at a new cell, it looks left and right and creates a " +
"clone of itself to go each available direction; upon hitting a " +
"wall, it dies." +
"<p>" +
"The initial mouse is a bit special, in that it looks for " +
"the possibility to clone a mouse to travel in the direction " +
"behind it, as well as to its left and right." +
"<p>" +
"Each mouse is driven by (and in fact, in this example, is a " +
"subclass of) a finite state machine. The FSM has five states: " +
"FadingIn, CellArrival (look for cloning opportunities), Moving, " +
"FadingOut, and Zombie (about to dispose)." +
"<p>" +
"<u>The finite state diagram is below the maze.</u>";
var scroll = new qx.ui.container.Scroll();
this.getRoot().add(scroll, {edge: 0});
var container = new qx.ui.container.Composite(new qx.ui.layout.Canvas());
scroll.add(container);
var o;
// Ensure that the FSM diagram gets copied during build (and cached)
o = new qx.ui.basic.Image("demobrowser/demo/ui/FsmMiceMaze.png");
o = null; // image no longer needed
o = new qx.ui.basic.Label(description);
o.set(
{
width : 700,
rich : true,
wrap : true
});
container.add(o, {left: 50});
var maze = new qxl.demobrowser.demo.util.FSMMaze(10, 10, 50, 240);
container.add(maze, {left: 50, top: 240});
o = new qx.ui.basic.Image("demobrowser/demo/ui/FsmMiceMaze.png", 800);
container.add(o, {left: 50, top: 800});
// Determine (randomly) the facing direction of the initial mouse
var facing;
var random = Math.floor(Math.random() * 4);
switch(random)
{
case 0:
facing = qxl.demobrowser.demo.util.FSMMaze.Direction.NORTH;
break;
case 1:
facing = qxl.demobrowser.demo.util.FSMMaze.Direction.EAST;
break;
case 2:
facing = qxl.demobrowser.demo.util.FSMMaze.Direction.SOUTH;
break;
case 3:
facing = qxl.demobrowser.demo.util.FSMMaze.Direction.WEST;
break;
}
// Create the initial mouse
new qxl.demobrowser.demo.util.FSMMouse(null, maze, facing, container);
},
/**
* TODOC
*/
close : function()
{
this.base(arguments);
},
/**
* TODOC
*/
terminate : function() {
this.base(arguments);
}
}
});