Turbulenz SDK 0.18.0 is an update for both the Turbulenz Engine Installer and SDK components.
Please see the Change List for details on API changes.
Note
The Turbulenz Engine Installer is now included with the SDK. If you intended to develop using this SDK, you will need to install the engine located here: *SDKINSTALLDIR*/engines/0.18.0/. This Turbulenz Engine is a pre-release for developers and is only intended for development with the SDK. If you want to access games on http://www.turbulenz.com, make sure you check http://www.turbulenz.com/download to ensure you have the latest compatible version. In the future, engine version management will be taken care of automatically.
Windows XP/Vista/7
The Turbulenz SDK for Windows is available from GitHub as a downloadable installer. This contains the tools, samples and engine components required to develop Turbulenz applications.
The following software should be installed before installing the Turbulenz SDK:
Essential
- Python 2.6.5 - http://www.python.org/download/releases/2.6.5/
Recommended
- Microsoft Visual Studio 2008 - Used to compile speed-ups for python environment if available on platform.
- PDF reader - Required to read documentation in PDF format
Note
Performance of any Python modules could potentially be slower if speed-ups cannot be compiled. It is recommended that you install Visual Studio before installing the Turbulenz SDK, so that the speed-ups can be configured in the environment. If you are using a 64bit version of Python you must have installed a 64bit version of the Visual Studio compilers.
Mac OS X 10.5/10.6/10.7 (BETA)
The Turbulenz SDK for Mac OS X is now available to developers in beta. The SDK installer is a self-extracting shell script. After installing the essential software, open a terminal in the same directory as the SDK installer and type:
- chmod a+x TurbulenzSDK-X.X.X.run
- ./TurbulenzSDK-X.X.X.run
- Follow the instructions
The following software should be installed before installing the Turbulenz SDK:
Essential
- Python 2.6.5 - http://www.python.org/download/releases/2.6.5/
- Xcode 3.2.6 (Or greater) - This MUST be installed before running the script so that Python can compile certain modules.
Recommended
- Cg Toolkit - http://developer.nvidia.com/cg-toolkit - Required to compile shaders using the cgfx2json tool.
As technology and tools are updated, so too will the recommendation for development environment. Turbulenz aim to recommend versions of various third party tools and services that are the most stable, reliable and representative of the final product for development of your projects.
The web browser is the focus point for development. Games developed using Turbulenz are run, debugged and profiled from the web browser. Although performance of the browsers in release mode is relatively consistent. The choice for development mode, depends on the performance of the browser and the tools available for it. Most JavaScript debuggers are either integrated into the browser or add-ons. These debuggers allow developers to pause execution, step through code, inspect variables and execute functions via the console. Turbulenz recommends for debugging in development mode:
Firefox 3.6.X with Firebug 1.7.3
Platforms: Windows XP/Vista/7 & Mac 10.5/10.6/10.7
Ensuring accurate JavaScript code is written before runtime is an important step when developing with JavaScript. There are a number of tools that are designed to inspect JavaScript usage and check syntax. Turbulenz recommends for code verification:
JSLint
Note
JSLint can be run on JavaScript code in a many ways: directly from the site, from the command line using Node.js etc. It has also been integrated into a number of IDEs and editors, for example KJSLint extension for Komodo Edit (http://community.activestate.com/xpi/kjslint-jslint-komodo)
For JavaScript code optimization, a minimization tool is required that combines speed with accurate optimization. Choosing an appropriate minimizer improves the workflow of developing and ensures that the code will run as expected on the Turbulenz JavaScript engine. Turbulenz recommends for minimization:
UglifyJS
Note
Requires Node.js - http://nodejs.org/#download to be run from the command line.
To edit JavaScript code for Turbulenz applications, there are very few restrictions. The choice of editor should meet your development needs and include the features you require. Turbulenz recommend using an editor with a minimum of JavaScript syntax highlighting, code verification options and external command execution. If you are looking for a basic editor to try, Turbulenz recommend:
Komodo Edit
There are significant changes and additions to the input API which increase the number of events which can be detected and allow for a less intrusive user experience. Most significantly, capturing and hiding the mouse is no longer the default behavior for the TurbulenzEngine and it is now possible for users to play games with their cursor visible and unrestricted.
Some important additions and changes are listed below - for full details on the new events, methods and behavior please see the InputDevice docs.
New callbacks have been added for focus, blur, mouse enter, mouse leave and mouse unlock events.
It is now possible to receive input events without locking and hiding the mouse; a game can now choose when (and if) to lock and or hide the cursor using the lockMouse and unlockMouse methods. It is intended that games do no lock the mouse unless necessary e.g. for a first-person camera view. To mimic the previous input behavior a game should simply call lockMouse when focused:
function onFocus()
{
inputDevice.lockMouse();
}
inputDevice.onfocus = onFocus;
The mouse will be unlocked automatically when the user pressed the Escape key as before.
Mouse scroll events are now sent through the onmousewheel callback rather than as the third argument of onmousemove as before.
There are now two callbacks associated with mouse move events: onmousemove and onmouseover. onmousemove is sent when the mouse is locked and contains deltas for its arguments. onmouseover is called when the mouse is unlocked and provides the position of the mouse when the move event was sent.
It is now possible to hide and show the cursor using the hideMouse and showMouse methods. E.g. to implement a custom cursor one would simply do the following:
function onMouseOver(x, y)
{
customCursorPosition.x = x;
customCursorPosition.y = y;
}
function onMouseEnter()
{
hideMouse();
}
inputDevice.onmouseover = onMouseOver;
inputDevice.onmouseenter = onMouseEnter;
The mouse will be automatically shown when a mouse leave event is fired.
Gamepad d-pad events are now sent by onpaddown and onpadup rather than onpadmove as before.
We now use the recommended deadzones for the XBox 360 gamepad.
Added a RequestHandler class to jslib. This class handles some connection errors and will repeat failed requests. To find out more see the RequestHandler documentation.
Access to the native engine JavaScript profiler using TurbulenzEngine.enableProfiling().
The managers load functions now have onload parameters. See SoundManager.load, FontManager.load, TextureManager.load and TextureManager.loadArchive.
ShaderManager.create, SoundManager.create, TextureManager.create, FontManager.create, ResourceLoader.load, ResourceLoader.resolve, UserDataManager.create, the TurbulenzServices create functions, and SceneLoader.load all now take an extra RequestHandler argument. You should create one shared RequestHandler object for all of these functions:
var requestHandler = RequestHandler.create({
onRequestTimeout: function onRequestTimeoutFn()
{
console.log('Connection lost or service busy');
},
onReconnected: function onReconnectedFn()
{
console.log('Reconnected');
}
});
var shaderManager = ShaderManager.create(graphicsDevice, requestHandler, defaultShader, errorCallback);
var textureManager = TextureManager.create(graphicsDevice, requestHandler, defaultTexture, errorCallback);
var fontManager = FontManager.create(graphicsDevice, requestHandler);
var loadParams = {
append : true,
nodesNamePrefix : "level1",
shapesNamePrefix : "level1",
requestHandler : requestHandler,
onload : levelLoadedFn
};
resourceLoader.load(assetPath, loadParams);
var params = {
data : jsonData,
append : true,
nodesNamePrefix : "level1",
shapesNamePrefix : "level1",
requestHandler : requestHandler,
onload : levelLoadedFn
};
resourceLoader.resolve(params);
sceneLoader.load({
scene : scene,
assetPath : "models/duck.dae",
graphicsDevice : graphicsDevice,
textureManager : textureManager,
effectManager : effectManager,
shaderManager : shaderManager,
requestHandler : requestHandler,
append : false,
dynamic : true
});
var sessionReady = function sessionReadyFn(gameSession)
{
TurbulenzServices.createMappingTable(requestHandler,
gameSession,
mappingTableReceived);
var userDataManager = UserDataManager.create(requestHandler, gameSession);
var badgeManager = TurbulenzServices.createBadgeManager(requestHandler, gameSession);
var userProfile = TurbulenzServices.createUserProfile(requestHandler,
profileReceivedFn);
var leaderboardManager = TurbulenzServices.createLeaderboardManager(requestHandler,
gameSession,
leaderboardsReceivedFn);
};
var gameSession = TurbulenzServices.createGameSession(requestHandler, sessionReady);
Note
The InputManager has been temporarily removed from this SDK following changes to the input API. An updated version will be available in a future SDK. In the meantime please continue to use the existing inputDevice API.
If you are having difficulties with the Turbulenz Engine & SDK, the following support resources are available for developers:
Erratic behaviour has been observed in Safari 5.0 on Mac OS X, relating to input and development mode applications. Turbulenz recommend using Safari 5.1 if any of this behaviour is observed.
The SVG samples doesn’t work on Internet Explorer 8 in any mode. This is related to IE8 not parsing the SVG file correctly.
Calling hasOwnProperty on a native JavaScript object throws an error.
Under Mac OS X, switching to full-screen browsing under Firefox 3.6 while the engine is running can result in rendering being halted.
The nVidia drivers (version 8.17.12.7061 - 8.17.12.7533) bug causes multiple render targets to render the output for the first target to all target textures. The current work around for shaders generated with cgfx2json is to reorder any writes to gl_FragData so they are in order. nVidia have now fixed this bug through windows update or the latest driver download on their website. If an update is not possible follow the steps in this example.
WebGL performance in Firefox 4/5/6/7/8 is limited by the browser’s current implementation. Consider using Chrome to get a better representation of WebGL performance.
WebGL is currently unsupported by Firefox on Mac OS 10.5.
The MathDevice ignores JavaScript arrays as destination parameters and acts as if no destination has been given.
The engine requires a CPU that supports SSE2.
For shader support the engine requires a GPU that supports GLSL (OpenGL Shading Language).
The SDK HTML help search feature does not work on Chrome. See http://code.google.com/p/chromium/issues/detail?id=47416.
Running Turbulenz tools at the same time as the Local Server can sometimes result in access errors in “simplejson_speedupds.pyd”. Please close the Local Server before running any Turbulenz tools.
When running intensive JavaScript applications, such as the multiple animations sample may lockup the user interface. You may have to manually terminate the process to regain control. Make sure the browser you are using can handle JavaScript running at full load and scale up slowly. Turbulenz recommends Firefox 3.6.
Some browsers don’t support delete on native engine object properties, e.g. delete techniqueParameters.diffuse does not work, use techniqueParameters.diffuse = undefined instead.
Sound stuttering can be heard when the browser is using 100% of CPU.
In some cases, refreshing a web page when a Turbulenz application is requesting data can leave the browser in an inconsistent state. Please avoid refreshing when the application is still loading.
In some cases on Windows 7, the SDK installer is unable to automatically open the Windows Firewall for the Local Server on a local network if UAC is enabled. To allow the Local Server to be accessed over a local network, please manually update the Windows Firewall rule.
When using the Input Device, certain browsers can take a little longer to release the mouse pointer when pressing ESC. Try holding ESC for a longer period of time, or alternatively use alt-tab to navigate to a different window (windows only) or end the process if the browser stops responding.
The mouse wheel does not send scroll events in Safari 5.0 on Mac OS 10.5.
The middle mouse button does not send click events in Firefox on Mac OS 10.6 and 10.5, and in Safari 5.0 on Mac OS 10.5.
Switching window or tab on Safari 5.0 and Firefox on 10.5 does not send a blur or mouselocklost event.
The browser is not in focus when exiting fullscreen in Safari 5.0 & Firefox on Mac OS 10.5.
Mouse move events are not send when using Synergy.
On Windows if you have a version of python earlier than 2.6.5 and do not have Visual Studio installed the SDK may fail to correctly install all the components.