What's new in WADE 4.1.1 Download this version
- You can now use functions in shaders: if a "main" function is not defined, your shader text is interpreted as the contents of a main glsl function; if a void main function is defined, the shader text is interpreted as a full glsl shader.
- Added wade.getSpritesOnLayer()
- Added Sprite.getOpacity() and Sprite.setOpacity()
- Added Animation.getDirection() and Animation.setDirection()
- The downloadable editor can build projects for Windows, Mac and Linux without an internet connection
- BugFix (B349): Cannot re-import zip files exported by wade
- BugFix (B350): The downloadable editor cannot be closed without using task manager
- BugFix (B351): The effect of Sprite.setDrawModifiers depends on the current draw function of the Sprite
- BugFix (B352): Animation autoresizing doesn't work correctly for sprites with a custom image area
What's new in WADE 4.1 Download this version
- The Path editor shows a list of shortcuts to SceneObjects using that path, with the ability to preview the Path from the Path editor
- Added an onPathEnd event for SceneObjects
- When dragging objects from remote repos, they are added to the scene relative to the current camera position
- When right-clicking code editor tabs, show options to: download, close all, close others
- Added a "firstLine" option for multi-line text sprites, and API functions to get and set it at run-time
- You can duplicate isometric objects. For collidable objects, a suitable tile is found automatically
- You can pass an optional 'checkTerrainBounds' parameter to wade.iso.canAddSceneObject()
- You can pass an optional 'stringify' parameter to wade.physics.serializeJoint()
- Added Joint.serialize() and Joint.clone() functions for physics joints
- Added a "duplicate joint" button to the Joint Editor
- Optimized the inline console (it is faster and only retains the last 100 entries)
- wade.iso.getObjectsInTile can be called with an object with (x, z) field as well as two separate x, z arguments
- Added wade.iso.getHighlightOffsets
- Added IsoTerrainBehavior.drawTileNumbers to display debug graphics showing the coordinates of each tile
- In newer versions of Chrome, automatically re-enable audio after the first user input
- When adding an isometric object to the scene via wade.addSceneObject, the object's grid property is checked to establish isometric coordinates first - when that is not available, isometric coordinates are inferred from world coordinates
- Added wade.getMainLoop() to retrieve a main loop function by name
- Added wade.stopCamera() and wade.isCameraMoving()
- Added wade.setLayerColorBlendMode() and wade.setLayerAlphaBlendMode() for more control over per-layer color blending
- It is now possible to call SceneObject.setSpriteOffset without the offset parameter (this will set the default 0,0,0 offset)
- Added an onScore event to the Match3 behavior
- BugFix (B336): Pressing Ctrl-D when a SceneObjectGroup is selected causes an error in the editor
- BugFix (B337): Pressing Ctrl-D when a Joint is selected causes an error in the editor
- BugFix (B338): Pressing Ctrl-D when the tilemap_terrain is selected creates a clone of the whole tilemap terrain, which is an invalid operation
- BugFix (B339): Deleting an isometric object from the editor shows a "deprecated" warning in the console
- BugFix (B340): wade.getObjectByName() does not include physics joints
- BugFix (B341): Text outline is not aligned correctly on multi-line TextSprites
- BugFix (B342): The GUI in the Misc panel of the Match-3 editor is broken
- BugFix (B343): The code editor does not appear in the Events tab of the Match-3 editor
- BugFix (B344): The default score TextSprites in the Match-3 behavior do not fade out as they should
- BugFix (B345): It isn't possible to manually edit the raw JSON data of SceneObejct prefabs in the editor
- BugFix (B346): The asset loader fails to retry loading assets when a network error occurs
- BugFix (B347): Calling wade.findPath without the "boundaries" parameter may result in a runtime error
- BugFix (B348): SceneObject.getSpriteOffset doesn't work when called with a Sprite name
What's new in WADE 4.0.1 Download this version
- Updated the "Watch a Video Tutorial" section in the main menu
- BugFix (B331): Inline documentation (hovering mouse over keywords) does not show up in downloadable versions of the editor
- BugFix (B332): The documentation downloaded with the wade framework zip does not include the main Wade class
- BugFix (B333): Dragging an IsoCharacter from a prefab without adjusting its position on the map causes calls to setDestination to fail
- BugFix (B334): WebAudio initialization does not work correctly on OsX
- BugFix (B335): Adding behaviors does not work in downloadable versions of the editor
What's new in WADE 4.0 Download this version
- A shiny new User Interface for the editor
- The new Repo Browser lets you browse remote assets that you can drag and drop into your projects
- Added lots of repos with pre-made objects, behaviors, scripts, tilesets, etc.
- New tilemap editor
- You can now open WADE projects from remote URL's
- You can also open remote projects directly in the editor by going to http://clockworkchilli.com/wade?rp=remoteProjectUrl
- New SceneObjectGroup API to perform actions on a set of SceneObjects
- The editor can now be downloaded and used offline (Win, Mac, Linux versions available)
- SceneObjects can have a gridType attribute specifying if they are locked to a grid (currently only the isometric grid is supported)
- As a consequence, isometric objects can now be handled exactly like regular objects
- Added support for prefabs, to instantiate objects multiple times and edit them from one central location
- Isometric terrain tiles and tilemap tiles are now prefabs
- The .its file format is now deprecated and replaced by the more generic .prefab format
- When editing a SceneObject in the editor, you can apply changes to all instances of that object in the scene
- wade.getSceneObjects, wade.getObjectsInArea, wade.getObjectsInScreenArea return a SceneObjectGroup instead of an Array
- SceneObject.getOverlappingObjects returns a SceneObjectGroup instead of an Array
- Added SceneObject.getBoundingBox() to get an axis-aligned bounding box that contains all the sprites of a scene object
- Added Sprite.getScreenBoundingBox() and SceneObject.getScreenBoundingBox() to get screen-space bounding boxes
- The data passed to onMouseDown, onMouseUp, onMouseWheel handlers now includes the state of shift, alt, ctrl and meta keys
- Timeline events now appear in the debugger under the Timeline folder in the wade.app domain (similar to SceneObjects)
- The editor supports editing draw modifiers (opacity, mirror, flip, additive) for TextSprites
- When cloning a SceneObject, the clone is assigned an "instanceOf" property reflecting the name of the source object or prefab
- When calling SceneObject.toGrid(), all objects in the new grid get a "gridCoordinates" property describing where they are in the grid
- Added an "anonymous" crossOrigin attribute by default to all images loaded through wade.loadImage
- When adding a new file to the project, the new file is opened automatically
- Added wade.getObjectByName() to get an object by name regardless of its type (whether it's a Path, SceneObject, SceneObjectGroup, etc)
- The editor now supports arbitrarily large screen sizes (for ultrawide and 4k monitors, etc)
- You can pass an object with x and y fields to Sprite.setSize (or two separate x and y arguments like you used to)
- Similarly, many functions now accept an object with (x, y) fields as well as two separate x and y arguments
- You can pass an optional "sorted" parameter to wade.getSpritesInScreenArea
- Changed the default animation names in IsoActionCharacter to match those used by IsoCharacter
- The bundle that you get when downloading the wade framework zip now comes with a default app.js file
- Added icons for audio files and font files in the editor
- wade.iso.createObject has been deprecated and replaced by wade.iso.addSceneObject
- wade.iso.deleteObject has been deprecated and replaced by wade.iso.removeSceneObject
- Removed wade.iso.spawnObjectNearObject()
- BugFix (B319): The data format of scene objects in saved isometric scenes contains a field called "internal__" that is not supposed to be there
- BugFix (B320): The tilemap position on the screen doesn't match values retrieved via wade.tilemap.getWorldCoordinates()
- BugFix (B321): The "start" parameter passed to wade.playAudioSegment doesn't actually change the starting point of the audio source
- BugFix (B322): Any "end" parameter passed to wade.playAudioSegment causes the sound to stop immediately
- BugFix (B323): Cached TextSprites can sometimes fail to draw on 2d canvas layers
- BugFix (B324): On Internet Explorer 11 only one click is detected by the wade.app, subsequent clicks fail to register
- BugFix (B325): wade.getSpritesInScreenArea() may return incomplete results when multiple layers are involved
- BugFix (B326): When renaming animations, using an existing animation name even temporarily during the renaming process, breaks the animation data
- BugFix (B327): Dragging physics fixtures in the behavior editor to rearrange them causes an error
- BugFix (B328): Games using IsoActionCharacter behaviors cannot be previewed correctly in the editor
- BugFix (B329): Pressing escape while editing code in the match-3 event editor closes the editor
- BugFix (B330): When creating a custom funciton, the description of the previous function is still shown in the function editor
What's new in WADE 3.8.1 Download this version
- BugFix (B315): Renaming a joint that has not been assigned to any object and then deselecting it causes errors in the editor
- BugFix (B316): Calling wade.physics.removeJoint() at run-time does not remove the joint
- BugFix (B317): When using physics joints with rotated objects in the editor, the anchor points change after exporting and re-importing the project
- BugFix (B318): The anchor point location for revolute joints is not what a user would intuitively expect
What's new in WADE 3.8 Download this version
- Added a "wade.tilemap" API module to load, manipulate and export 2D tile maps (no tilemap editor yet, coming soon)
- Added a TilemapCharacter behavior to easily move around top-down tilemaps with pathfinding and direct controls
- Auto-batching of sprites that are using the default draw functions (major rendering speed boost)
- Added wade.enableBatching() to enable or disable the sprite batching per layer (it's enabled by default)
- You can set a blur factor per layer using wade.setBlur
- You can now set breakpoints in the code editors. These are triggered in the Chrome debugger when running the live preview with the Chrome developer tools open.
- The Android APK builder has an option to generate signed (release) packages as well as debug ones. Can use your own keystore or generate a new one
- Added a play button next to the path property (in the SceneObject property editor) to see a live preview of an object's path without having to run the app
- When opening a project, you have the option to import a project zip file
- The behavior editor shows public functions and tooltips for behavior parameters (auto-parsed from user comments in JSDoc format)
- Adding a new property to a behavior's source code in the editor automatically adds the property to objects in the scene with the same behavior
- Shader errors are displayed below the shader code editors as you type
- Rewritten the file importing process in the editor to be less CPU and memory intensive (slower but less likely to crash Chrome with large projects)
- A progress dialog is displayed while importing multiple files and folders
- For layers rendering to off-screen targets, the render target texture has been exposed as "_layerRenderTarget_layerId" and can be used in custom shaders
- For layers using blur, the blur textures has been exposed as "_layerBlur_layerId" and can be used in custom shaders
- The "pixelPerfectMouseEvents" parameter in the Sprite constructor is now a number representing an alpha threshold
- The "Pixel Perfect" flag in the sprite editor has been replaced with an "Alpha Threshold" input field
- You can pass a number into Sprite.usePixelPerfectMouseEvents(), and Sprite.isUsingPixelPerfectMouseEvents() also returns a number rather than a boolean
- Sprite.isUsingPixelPerfectMouseEvents() is now deprecated, you should use Sprite.getAlphaThreshold() instead
- Added wade.vec2.equal to numerically compare vectors
- The data passed to all mouse event handlers now includes a pointerId attribute to identify which pointer (finger) the event refers to in a multi-touch scenario
- The onKeyDown event is only fired when a key is pressed, it is no longer fired multiple times for keys that are kept down
- It is now possible to call wade.getSpritesInScreenArea with no parameters, in which case the full currently visible screen area is considered
- You can now pass a single modifier to Sprite.setDrawModifiers (no need to pass an array)
- Added wade.iso.addTileHeight as a faster alternative to wade.iso.setTileHeight for changing height offsets without recalculating positions
- BugFix (B306): Typing some reserved keywords such as "toString" in code editor windows and hovering the mouse over them displays an error in the editor console
- BugFix (B307): Error messages that occur when compiling pixel shaders show a wrong line number
- BugFix (B308): The 'mirror' and 'flip' draw modifiers do not work with TextSprites
- BugFix (B309): Calling SceneObject.setSpriteOffset with a Sprite name (rather than a Sprite index) doesn't work
- BugFix (B310): Semi-transparent objects appear more transparent on layers drawing to off-screen render targets
- BugFix (B311): Several problems when controlling the opacity of webgl layers, including fadeIn, fadeOut and setOpacity
- BugFix (B312): Cloning an object with behaviors whose functions reference variables through closure does not work as expected
- BugFix (B313): Crash when calling wade.getObjectsInArea specifying the id of a layer that contains no objects
- BugFix (B314): Calling Sprite.setImageFile() followed by Sprite.setImageArea() resets the UV coordinates on the default animation of the Sprite
What's new in WADE 3.7.1 Download this version
- BugFix (B304): Accessing the PhysicsObject behavior of a cloned object immediately after it's been cloned results in an error
- BugFix (B305): Calling Sprite.getOverlappingObjects(..., 'oriented') may cause an error
What's new in WADE 3.7 Download this version
- Full support for physics joints. They can be created and manipulated in code and in the editor.
- Major rendering optimization: contiguous webgl layers now share the same gl context (with independent frame buffers)
- Alt-C and Alt-Shift-C in the editor let you cycle through recent code tabs (both for files and scene object functions)
- Added a new IsoActionCharacter behavior that handles free movement (keyboard or gamepad) for isometric characters
- Scenes referencing missing or invalid assets can now be loaded correctly (error messages are shown for the missing assets)
- Added wade.mergeGlLayers(), wade.areGlLayersMerged() to toggle shared canvas contexts on and off (on by default)
- Added wade.setCameraBounds() to restrict camera movement to a predefined area
- Added wade.findPath (a more general version of wade.iso.findPath that is not limited to the isometric terrain)
- Improved the online documentation and the downloadable documentation (in wade.zip)
- You can cycle through code tooltips that correspond to multiple definitions by pressing the Shift key while the tooltip is visible
- The match-3 editor layout is now organized in separate tabs
- The match-3 behavior supports controller and keyboard input, and provides a customizable selector sprite
- The match-3 behavior supports user-defined event handlers
- The match-3 behavior exposes an interface to interact with the board (swapItems, removeItem, addItem)
- wade.screenCapture() and wade.drawLayerToImage() are now asynchronous and can be passed a callback
- You can set Content-Type headers for ajax requests by passing a contentType parameter to wade.ajax()
- It is now possible to assign multiple loading and error callbacks to the same image via wade.loadImage()
- When loading or importing a scene, 'onAddToScene' events are fired after all objects have been added to the scene
- Improved path debug graphics
- Now you can debug-draw paths on a WebGL layer too
- The editor now works in WebGL mode even when major performance issues are detected
- All scripts and scene object functions now appear under the "wade.app" domain in the Chrome debugger
- File names in the scene resource panels (in scene properties) are now clickable and open the relevant files in the code editor or folder view
- The editor console supports logging multiple arguments like console.log(a, b, c);
- Added a button to clear logs
- Added TextSprite.isCached() to check whether a TextSprite is currently cached and the cached image is up to date
- Logs in the log window can now be selected and copied
- Added a new procedural image "procedural_square_border"
- Added an icon for .txt files in the editor
- Dropped support for canvas 2d double buffering
- BugFix (B287): Layers with quadtrees enabled sometimes fail to draw sprites with the AlwaysDraw flag
- BugFix (B288): Run-time changes to behavior properties of type "object" defined in the scene data persist after reloading the scene
- BugFix (B289): wade.getKeyCode() returns a string rather than a number
- BugFix (B290): Testing for overlaps between objects that are on separate layers with different scale and translate factors can return incorrect results
- BugFix (B291): Using pixel-perfect overlap tests with TextSprites results in a crash
- BugFix (B292): When editing an existing match3 behavior and pressing cancel to undo recent changes, the whole match3 object may be deleted from the scene
- BugFix (B293): Gamepad events aren't triggered on browsers that implement the updated HTML5 controller specs
- BugFix (B294): The hidden object tool doesn't set AddToScene and AutoListen flags correctly
- BugFix (B295): Calling wade.screenCapture and wade.drawLayerToImage with WebGL layers causes memory leaks
- BugFix (B296): Mouse-over tooltips in the code editors can end up outside the visible area of the screen
- BugFix (B297): Mouse-over tooltips in the code editors do not display default parameter values correctly
- BugFix (B298): wade.clearInterval doesn't work
- BugFix (B299): Changes made to some instanceData properties of isometric objects while the game is running persist after reloading the scene
- BugFix (B300): The fadeIn function of TextSprites in webgl mode does not work
- BugFix (B301): The options parameter passed to wade.setLayerRenderMode() has no effect
- BugFix (B302): When the scene data contains a "modules" object, but no data for any module, the scene fails to load
- BugFix (B303): Overwriting images while they are in use in the current scene that is open in the editor causes the editor to crash or display wrong images
What's new in WADE 3.6.1 Download this version
- Added buttons to change the loading order of resources such as scripts, json, etc
- BugFix (B284): When loading the same JSON or text asset multiple times in the same scene, the editor fails to load the scene correctly
- BugFix (B285): The "Add To Scene" button in the SceneObject Property tab does not work as intended
- BugFix (B286): When toggling boolean values in behaviors that have more parameters that can fit on the screen, part of the editor window disappears
What's new in WADE 3.6 Download this version
- Brand new Flow Chart Editor lets you visually script what happens globally in the Scene and individually for each Scene Object
- An initial collection of box types for the flow chart editor provides basic functionality to manipulate 2d and iso objects
- A code block editor lets you make your own box types for the flow chart editor, and edit the behavior of existing ones
- You can now add a post-process shader to each layer via wade.setPostProcessShader()
- Added a shader editor inside the Layer property editors to edit post-process shaders in real-time
- Added a drop-down menu to shader editors so you can select ready-made pixel shaders from a growing collection
- Added an interface to load text files from the editor and store them in the wade.app object
- Added wade.loadText(), wade.preloadText(), wade.setText(), wade.getText() to deal with plain text files (useful for shaders)
- The scene data supports an extra "text" field for text files, that works exactly the same way as the json field
- The SceneObject Functions tab now shows a description of the arguments for each function
- Added a new onCameraMove event
- Added wade.setTimeout(), wade.setInterval(), wade.clearTimeout(), wade.clearInterval(), wade.clearAllTimeoutsAndIntervals()
- Added SceneObject.toGrid() to quickly create a grid of objects of the same type
- Added SceneObject.isOnScreen() and Sprite.isOnScreen()
- The onCameraMoveComplete event is passed the new camera position as an argument
- Sprite.overlapsSprite, SceneObject.overlapsSprite and SceneObject.overlapsObject now have a precision argument that can be 'axis-aligned', 'oriented' or 'pixel'
- The 'precision' argument for Sprite.getOverlappingObjects and SceneObject.getOverlappingObjects can now be set to 'pixel'
- Improved the project tree view and folder view in the editor
- When adding a new file to the project, a new dialog comes up showing some options
- SceneObject.setPath() now has an immediate effect. The previous behavior was that the SceneObject would start following the path on the next step
- You can now move the camera in the editor (right-click and drag) without losing the current selection
- Added wade.iso.setCollisionAtTile() to manually set the colliding object for a specific isometric tile
- Input events for the isometric terrain now receive the raw input event data as well as the isometric event data
- Changed the structure of the data that is passed to the physics onCollision event
- Added wade.vec2.minComponent() and wade.vec2.maxComponent()
- The error message "Some sprites have invalid coordinates" is now followed by more details about which sprites are causing the error
- You can pass optional arguments to SceneObject.clone() to specify a new position for the clone
- The HiddenObject behavior now stops clicks propagating to the background image
- BugFix (B272): The fixture vertices of physics objects that have the autoCalculate flag do not update automatically to reflect the autocalculated box shape
- BugFix (B273): Setting a layer to draw to an off-screen render target causes a crash
- BugFix (B274): Calling Sprite.getPixelShaderUniforms() on a sprite with no pixel shader uniforms causes a crash
- BugFix (B275): The button to remove shader uniforms in the editor appears only for new uniforms, not ones that existed when the scene was loaded
- BugFix (B276): wade.clampBoxToBox does not work correctly when the two boxes are completely non-overlapping
- BugFix (B277): PhysicsObject.applyImpulse() modifies the impulse vector that is passed to it without making a copy first
- BugFix (B278): When using the Hidden Object tool, an ace.editor error appears in the console
- BugFix (B279): Some hotkeys such as Ctrl+S do not work when the main scene editor window has focus
- BugFix (B280): SceneObjects do not receive onCameraMoveComplete events
- BugFix (B281): SceneObjects with behaviors that define a custom clone function (e.g. PhysicsObject) aren't cloned correctly via SceneObject.clone()
- BugFix (B282): Behavior properties of type object aren't cloned correctly via SceneObject.clone()
- BugFix (B283): Scenes that load the same json file multiple times into different targets fail to load correctly
What's new in WADE 3.5.1 Download this version
- Added wade.createTransparentImage()
- You can now remove any item in the match3 editor as long as there are 3 or more items
- BugFix (B269): When using multiple objects with the Match3 Behavior, only the last one works correctly
- BugFix (B270): When creating a new project from the top bar after using the Match3 editor, the new default scene is not loaded automatically
- BugFix (B271): wade.isPlainObject() can incorrectly return false for some plain objects
What's new in WADE 3.5 Download this version
- Brand new Physics Shape editor that lets you assign collision shapes to your PhysicsObjects
- The Phyiscs Shape editor automatically splits concave shapes into convex sub-shapes that can be used by the physics engine
- New Match-3 visual editor for quick development of match-3 games
- Sprites have an option to enable pixel-perfect mouse events (i.e. events that are discarded on fully-transparent pixels)
- A new "Update All" button in the isometric tile editor lets you update all instance of that tile in the map
- The isometric terrain now fires onIsoTerrainMouseMove events
- Sprite.drawToImage() now works in WebGL mode (with custom shaders too)
- Added Sprite.drawToTexture() to draw to a texture in GPU memory, optionally creating a copy in CPU memory as well
- Added SceneObject.drawToImage() to draw all of a SceneObject's sprites into an image
- You can edit sort points but dragging around a marker in the sprite preview window
- The sprite preview window can be resized in the editor
- You can pass either a texture name or a Sprite to wade.iso.setHighlight()
- Added wade.iso.getHiglightObjects()
- An extra parameter can be passed to wade.iso.findPath() to set the maximum length of the path that can be returned
- When loading a scene script that contains syntax errors, the app no longer crashes - it displays an error message in the console instead
- Added Animation.getSpeed() and Animation.setSpeed() to change animation speed at runtime
- In the behavior editor, a property called propertyName is displayed with multiple options if an array called propertyName_options exists
- The behavior editor no longer shows public properties that start with an underscore
- Code for SceneObject functions now appears in the Chrome Source tab (in debugging tools) under _.sceneObjectName
- Added an option for the scene's window mode in the editor, in the scene properties tab
- Renamed the 'stretchToFit' window mode to 'stretch to fit'
- Added wade.iso.clearCollisions()
- Clicking an isometric tile in a tileset automatically switches the isometric edit mode to paint
- Double-clicking a tile template opens the tile editor
- BugFix (B248): In the editor it is impossible to toggle boolean properties of any behaviors except the first behavior of a SceneObject
- BugFix (B249): Most PhysicsObject properties cannot be changed at runtime
- BugFix (B250): Most fixture properties cannot be changed at runtime
- BugFix (B251): Using isometric terrain highlights on a 0x0 terrain causes a crash
- BugFix (B252): When a search result is for a timeline event, the whole timeline event code is added to the search result window
- BugFix (B253): When clicking a search result that should open a code editor tab of a file that is already open, a duplicate tab is opened
- BugFix (B254): The button to automatically set a sprite's size from its source image doesn't work in the isometric tile editor
- BugFix (B255): When creating a new isometric tile, the default procedural_square sprite isn't shown in the tile preview
- BugFix (B256): The onAddToScene function of Isometric objects created in "Paint Multi" mode that have behaviors with onAddToScene is executed in the editor
- BugFix (B257): The name that is automatically assigned to isometric objects created in "Paint Multi" mode doesn't match the name in the tile data
- BugFix (B258): The 'container' window mode doesn't work as expected
- BugFix (B259): When adding multiple sprites to a sorted layer in the same step the sorting may be incorrect
- BugFix (B260): wade.screenCapture() and wade.drawLayerToImage() don't work correctly with WebGL layers
- BugFix (B261): wade.isPlainObject() causes a crash in Internet Explorer 11 and older
- BugFix (B262): Errors in the console when removing all sprites from a SceneObject in the editor
- BugFix (B263): Errors in the console when trying to resize a SceneObject with no sprites through the visual editor
- BugFix (B264): When a call to Sprite.setSceneObject() results in an animation change, onAnimationStart and onAnimationEnd are passed wrong parameters
- BugFix (B265): Trying to use drawModifiers on TextSprites results in a crash
- BugFix (B266): Cannot set paths for SceneObjects that contain TextSprites
- BugFix (B267): Cannot use fadeIn and fadeOut on TextSprites
- BugFix (B268): Custom transforms in Sprite.drawToImage() do not take custom offsets into account
What's new in WADE 3.4 Download this version
- New "search in project" feature lets you search the contents of files and structured scene data
- Clicking a search result takes you to the relevant view
- New timeline editor in the scene properties tab
- You can set a "timeline" parameter in the scene data to schedule code execution
- Added wade.starTimeline(), wade.stopTimeline(),wade.resumeTimeline(), wade.clearTimelines() and wade.getTimelines() to manage timelines
- You can access scene objects through the global _ variable
- You can choose not to use the gobal _ variable by setting the globalUnderscore option to false when calling wade.init()
- Wade is no longer dependent on jQuery, it is now a completely standalone library
- Added wade.ajax() to load data via ajax requests (similar to jQuery.ajax)
- When loading a json file as part of a scene, it's possible to store it automatically inside the wade app object
- The 'json' parameter in the scene data can define where to store the json data inside wade.app
- Better syntax highlighting that recognizes some wade-specific constructs
- Added a button to show or hide invisible sprites in the editor
- You can now add a "parameters" object to the isometric tile object data; any property that it contains is copied to new isometric objects that use that tile data
- Added wade.getClockTime() to get the system clock time (an accurate performance timer is used where available)
- The 'time' parameter in fadeIn() and fadeOut() functions is now optional and defaults to 1 second
- When calling fadeIn() on an invisible sprite, the sprite is automatically set to visible
- After Sprite.fadeOut() completes, the sprite is automatically set to invisible
- You can now use SceneObject.interval() with an optional variance parameter
- Added wade.getProcessedTimelineEvent(), a debug-mode-only function to get the code and time of a timeline event that has already been processed
- wade.setMainLoopCallback() has been deprecated and replaced by wade.setMainLoop()
- Made the left-hand panel more responsive to clicks and doubleclicks
- When typing a file name in most places in the editor, the autocomplete functionality is activated immediately when focusing the input element
- BugFix (B243): The isometric terrain tile preview has stopped working in WADE 3.3.x
- BugFix (B244): Sprites can be cloned with Sprite.clone(), but not with wade.cloneObject(sprite) - "maximum call stack size exceeded" error
- BugFix (B245): When switching to a project that doesn't have a scene file in the root folder, the project fails to load
- BugFix (B246): In the editor, when reordering Sprites inside a SceneObject, sprite offsets are not updated correctly
- BugFix (B247): The uv coordinates of animations of non-isometric objects are not serialized correctly for spritesheets inside other spritesheets
What's new in WADE 3.3.1 Download this version
- You can pass a string as well as a numerical key code to wade.onKeyDown()
- Added wade.isArray() to test if an object is an array
- Updated the code editor (ACE) to the latest version
- BugFix (B239): Multiple problems with canvas fallback on Internet Explorer 10
- BugFix (B240): When editing raw JSON data for SceneObjects, functions are not saved correctly
- BugFix (B241): When editing raw JSON data for SceneObjects and setting an onAddToScene function, the function is executed immediately in the editor
- BugFix (B242): When downloading a cloud build, users are incorrectly asked to confirm that they want to leave the editor
What's new in WADE 3.3 Download this version
- Significant performance improvements for the online editor
- Reduced memory usage for the online editor
- You can edit the raw JSON data of SceneObjects, Sprites, Animations and Paths individually without having to edit the whole scene file
- You can now download single files and folders from the editor with a right-click. Folders are downloaded as zip files
- Error messages are visible inside the IDE, with an indication of which object and function caused the error
- Hovering over a runtime error message in the console (on the function name) shows a code snippet highlighting the error
- You can type commands directly into the preview window and they will be executed in the context of the active preview (arrow keys for history)
- Sprites can be moved up and down a SceneObject's sprite list in the editor
- You can now clone sprites and animations in the editor
- The former "Manage Extensions" dialog is now "Settings and Extensions" and lets you change your hard drive space allocation
- Added an onOverlap event to SceneObjects
- Added wade.warn() and wade.error() functions in addition to wade.log() for more levels of logging
- You can zoom on an object by double-clicking its name in the left-hand panel
- You can zoom in and out with the + and - keys
- Addded wade.getKeyCode() and wade.getKeyName() to convert from keycodes to key names
- When calling SceneObject.setPath() you can specify a speed multiplier
- When you save the current scene's wsc file in the code editor, the scene reloads automatically
- The data for the onKeyUp and onKeyDown events now contains a keyName property
- The data for the onKeyPress event now contains a charName property
- Added SceneObject.interval() to execute an object's function at regular intervals
- SceneObject.interval() and SceneObject.schedule() have been refactored to use the app timer
- BugFix (B232): Renaming a Path in the editor can cause unexpected behavior on further edits of the same path
- BugFix (B233): Path always appears (incorrectly) in the list of behaviors
- BugFix (B234): File system errors can cause a crash with the message FileError is not defined on Chrome 54+
- BugFix (B235): When an App is missing the init function, onAppTimer events never fire
- BugFix (B236): onAppTimer events fire for SceneObjects, but never fire for the wade.app object
- BugFix (B237): The behaviors of cloned objects don't retain the public properties of the original object's behaviors
- BugFix (B238): SceneObject.unschedule() doesn't work correctly
What's new in WADE 3.2.4 Download this version
- Isometric objects now receive an onIsoTileChange event every time their isometric coordinates change
- BugFix (B231): Isometric projects with tiles that use custom behaviors often fail to load correctly in the editor
What's new in WADE 3.2.2 Download this version
- You can pass a new forceWebGl flag into the options of wade.init() to use WebGl even when the browser detects potential performance problems
- BugFix (B227): Objects loaded through external modules (e.g. isometric objects) can be added to the scene before external scripts are executed
- BugFix (B228): Custom behaviors cannot be added to isometric object tiles using the tileset editor
- BugFix (B229): When a project with the latest version of WADE is started, the editor doesn't recognize that it's using the latest version and prompts the user to update
- BugFix (B230): When a project that uses wade physics is updated following the prompts in the editor, the dialog window remains open
What's new in WADE 3.2.1 Download this version
- BugFix (B225): Mouse events on the isometric terrain can get incorrect tile coordinates when they are close to the edges of a tile
- BugFix (B226): In the editor, changing data for a path and then making changes the scene properties invalidates the changes to the path data
What's new in WADE 3.2 Download this version
- Paths are a new way of tweening (interpolating) values of any properties of SceneObjects and Sprites
- Brand new visual path editor
- SceneObjects can be set to follow a path as soon as they are added to the scene (from the editor or in code)
- New onPathNode event for SceneObjects (fired upon reaching a path node)
- You can now use additional textures in your custom pixel shaders
- There is now a button to run the preview in full screen in the editor
- You can define custom UV coordinates for animations, so you can have regular spritesheets inside irregular spritesheets
- When calling wade.isMouseDown() you can pass it a buttonId to check if a specific mouse button is down
- Added wade.removeUnusedLayers() to remove all layers with no sprites (and all associated resources)
- wade.exportScene() will no longer export unused layers
- You can call SceneObject.getSpriteOffset() and setSpriteOffset() passing in either the Sprite's name or its index
- It is now possible to set a 'noExport' flag on SceneObjects that you don't want to be exported with wade.exportScene()
- In the isometric editor, painting terrain tiles no longer resets their heights to 0
- When auto-updating to a newer version of wade.js, you are now asked to update wade.physics.js too
- You can call SceneObject.setName() with no parameters to remove the name
- BugFix (B205): When calling loadImage, loadJson, etc for an asset that is cached, the callback is executed immediately and not at the next idle cycle
- BugFix (B206): Scenes with large isometric maps, no isometric objects and some non-isometric objects often fail to load correctly
- BugFix (B207): In isometric mode the current terrain brush is activated when the user right-clicks and drags to move the camera
- BugFix (B208): In the editor, mouse events on the isometric terrain can filter down to any objects that are behind the terrain
- BugFix (B209): The preview of isometric tiles doesn't match any rotation that was set in the tile data
- BugFix (B210): TextSprites can't be used in isometric tiles
- BugFix (B211): Two edges of sprites drawn with solidFill_() (including procedural_square) are semitransparent
- BugFix (B212): Creating a Sprite with a null texture in webgl mode may produce several warnings in the console
- BugFix (B213): Custom shaders cannot use uniforms of type ivec2
- BugFix (B214): In the editor it is sometimes impossible to select a custom shader uniform type as the options go past the bottom of the window
- BugFix (B215): Using an animated sprite with Mirror of Flip causes a crash in Internet Explorer 9
- BugFix (B216): When loading a scene with a TextSprite, the color pickers in the editor don't show the right colors
- BugFix (B217): Selecting an object with more than 8 sprites in the editor in WebGL mode causes a "Too many WebGL contexts" error in Chrome
- BugFix (B218): Color pickers for text sprites don't work in the isometric tile editor
- BugFix (B219): The text alignment drop-down for text sprites doesn't work in the isometric tile editor
- BugFix (B220): After deleting a tile from a tileset in the editor, subsequent delete and edit operations on the same tileset can target the wrong tile
- BugFix (B221): Additional behaviors added to Physics Objects do not receive onCollision events
- BugFix (B222): Calling wade.forceRedraw() specifying a layer id causes a crash
- BugFix (B223): When a Sprite is serialized, the array uniformTypeNames is incorrectly added to its custom properties
- BugFix (B224): Adding a custom function to SceneObjects from the editor doesn't work as expected and produces an error in the console
What's new in WADE 3.1 Download this version
- Added an additive draw function and an additive draw modifier for sprites (also available in the editor)
- The isometric engine now supports "cube" tiles, with individual height offsets
- Isometric tile sprites can now have a custom height in the isometric world
- In the editor, sprite preview windows and isometric tile preview windows now have a checkered background
- You can pass an additional argument to wade.getSpritesInArea() to get the result sorted (sprites in front are at the beginning of the array)
- The scene data supports a new parameter called loadGlTextures (also available in the editor) to create WebGl textures at scene loading time.
- The editor now highlights which functions and events contain some code
- Added wade.autoLoadImages() and wade.isAutoLoadingImages() to control what WADE should do when sprites with images that have not been loaded are added to the scene
- Added Sprite.getAllImageNames() to get a list of images used by the Sprite and all of its Animations
- wade.playAudioIfAvailable() and wade.playAudioSegmentIfAvailable() have been deprecated, as the "available" check is now done by wade.playAudio() and wade.playAudioSegment() directly
- Users are asked to confirm before leaving the editor page, to prevent accidental data loss
- SceneObject.getSpriteOffset() can be called with no parameters to get the first sprite offset
- WebGL is now disabled by default when major performance issues are detected
- BugFix (B195): In the editor right-click-to-drag doesn't work in isometric mode when clicking on the terrain
- BugFix (B196): When using right-click-to-drag it becomes impossible to select with a left click until the cursor mode is changed
- BugFix (B197): In the editor it is impossible to remove text sprites from SceneObjects that contain multiple sprites
- BugFix (B198): When serializing a SceneObject with Sprites with non-zero offsets and a non-zero rotation, the sprite offsets are wrong
- BugFix (B199): When using an object-style constructor for SceneObject with Sprites with non-zero offsets and a non-zero rotation, the sprite offsets are wrong
- BugFix (B200): Overwriting the current scene file in the editor with an external file doesn't update the current scene until you manually reload it
- BugFix (B201): When switching between isometric scenes, some terrain sprites from the old scene may persist into the new scene
- BugFix (B202): The automatic canvas fallback where webgl is not supported doesn't work on some systems (such as chromium with webgl disabled)
- BugFix (B203): The sorting of the isometric grid is sometimes incorrect when adding transitions and details at run-time
- BugFix (B204): When calling both setMaxWidth and setMaxLines on a TextSprite the resulting layout is wrong
What's new in WADE 3.0 Download this version
- Brand new isometric world editor and tileset editor
- Integrated the isometric module into the main WADE module
- Sprite.setPixelShader() allows you to use custom pixel shaders for your sprites
- The editor now includes a real-time shader editor for sprites
- New physics engine based on box2d
- You can now control the source UV coordinates of each sprite
- The scene data structure supports a 'modules' parameter to load part of the scene through external modules
- The sprites parameter in wade.iso.createObject is now an array of sprites that have the exact same data structure as non-isometric sprites
- SceneObjects and Sprites now have fadeIn and fadeOut functions
- Added SceneObject.importFunctions() to let you import member functions from an object that contains their string representation
- Sprite.alwaysDraw() forces a sprite to be drawn every frame, disabling draw optimizations
- Added wade.hashString() to quickly create a 32-bit hash of a given string
- Added wade.getActiveLayerIds() to get a list of all active layers
- In webgl render mode, power-of-two textures now get linear filtering, mipmapping and uv wrapping by default
- Changing render mode on a layer that hasn't been used does no longer causes the layer to be created twice (once in the default render mode, once in the new render mode)
- In wade.iso, the distinction between tiles and details is now gone, everything is simply a tile
- The default isometric tile size is now 256x128 world units (this doesn't affect the pixel resolution that can still be anything you like)
- You can now export iso maps with wade.iso.exportMap()
- You can define which animation should play automatically when iso objects are added to the scene
- Added wade.iso.getTerrain() to get the terrain object
- When calling wade.iso.createObject() you can now control the visibility of each sprite individually
- When creating an isometric object, it is now possible to define member functions using the special 'functions' object in the instanceData parameter
- Added an utility function wade.createPseudoArray() to create objects that behave like arrays, with the ability to execute a function every time an element of the array is set
- You can now right-click and drag to move around the scene in the editor
- SceneObject.setVelocity() can be passed either an object with x and y values, or 2 separate numbers
- Added "Add files" and "Add folder" buttons to the folder view in the editor, as an alternative to dragging and dropping files
- BugFix (B173): On old systems where FileReader is not supported, dynamically loading a font causes a crash
- BugFix (B174): Cloning a template object and then dynamically assigning behaviors to it via addBehavior can cause unexpected problems
- BugFix (B175): WADE fails to load scenes where the 'sceneObjects' array is not defined
- BugFix (B176): Calling SceneObject.removeSprite() before the object is added to the scene causes an error
- BugFix (B177): The size of a Sprite can be incorrectly serialized when no explicit size was set for the Sprite or the sprite references an image that is not available
- BugFix (B178): In canvas mode, any layers with moving objects are fully redrawn every frame instead of using the partial-draw optimization
- BugFix (B179): The sprite preview window in the editor doesn't take into account the sprite's layer's current render mode
- BugFix (B180): In the editor, renaming an animation on a sprite that is not the first sprite of the SceneObject doesn't always work
- BugFix (B181): When running in debug mode, functions of objects whose names contain space characters do not appear in the debugging tools
- BugFix (B182): When calling wade.iso.init() without a map parameter, the callback is never executed
- BugFix (B183): Calling wade.iso.setNumTiles() with a lower number than the current number of tiles doesn't remove tile sprites from the scene
- BugFix (B184): Crash when trying to create an iso object that has sprites with an empty array of animations
- BugFix (B185): It isn't possible to initialize the iso plugin with 0 tiles
- BugFix (B186): The debug grid doesn't resize automatically when changing the number of terrain tiles at run time
- BugFix (B187): The iso plug-in fails to load maps where the terrain does not use any textures
- BugFix (B188): When a SceneObject is serialized, behaviors that do not have a name parameter but are defined in the global namespace silently fail to export
- BugFix (B189): Internal (hidden) properties of SceneObjects are sometimes visibile in the editor
- BugFix (B190): When removing an Animation from a Sprite in the editor, the tooltip of the Remove Animation button remains visible
- BugFix (B191): When removing an element from an array in the behavior editor, the tooltip of the Remove Element button remains visible
- BugFix (B192): When editing objects with behaviors, multiple references to app.js get erroneously added to the scene scripts
- BugFix (B193): An 'onMoveComplete' event fires incorrectly when SceneObject.stopMoving() is called on an object that was not moving
- BugFix (B194): When a Sprite is created with an object-style constructor, its animation ignore the base sprite offset
Warning - Breaking changes:
- The default render mode is now webgl. If you need a canvas layer, you need to explicitly do wade.setLayerRenderMode(layerId, '2d');
What's new in WADE 2.1.1 Download this version
- BugFix (B172): It is no longer possible to drag images from the folder view into the scene without reloading the editor
What's new in WADE 2.1 Download this version
- Integrated the physics plug-in with the visual editor
- Added the ability to export to android APK from the editor
- Added a "cloud builds" panel to monitor the status of your cloud builds
- Added the ability to import objects from a different scene
- Added color pickers to select colors in the visual editor
- Behaviors now support a customEditor field to launch a custom editor from the visual editor
- New extension manager that lets you load your own scripts as part of the WADE IDE
- Significant performance and memory usage improvements in the editor
- Editor logs now include the time of each event
- Touch events are now handled by the container div rather than the window
- WADE now handles onMouseOut on the container div. This automatically triggers an onMouseUp event for the WADE app
- Sprites are always visible in the sprite preview window, even when they are set to be invisible in the editor
- BugFix (B163): When an animation is added to an empty sprite whose size was set explicitly, the sprite's size is ignored
- BugFix (B164): Dragging a modal window onto the "folder view" part of the editor makes the modal window unresponsive
- BugFix (B165): When switching to a new scene or project without reloading the editor, it's impossible to have objects with the same names as the ones in the previous scene
- BugFix (B166): Crash when constructing a Sprite with an object-style constructor, if the sprite has no image and some animations, but there is no active animation
- BugFix (B167): On touchscreen devices, the position of onMouseMove events can be incorrect when the WADE app is in a div inside a web page with scrolling
- BugFix (B168): Calling wade.stop() doesn't stop input events
- BugFix (B169): In 2d canvas mode, object that contain animations and that are cloned from the same template behave incorrectly when multiple clones are playing the same animation simultaneously
- BugFix (B170): Moving and resizing sprites in the scene editor doesn't always update the relevant numbers in the object and sprite editor panels
- BugFix (B171): onMouseMove and onRotationComplete are missing from the list of events in the visual editor
What's new in WADE 2.0 Download this version
- Shiny new visual editor with lots of new features
- Optimizations for WebGL rendering
- When scene objects are cloned, their name is no longer cloned
- BugFix (B161): Unable to load a scene that contains explicit duplicate references to scripts, images, json, fonts or sounds
- BugFix (B162): wade.vec2.normalizeInPlaceIfPossible() doesn't work
What's new in WADE 1.6.1 Download this version
- Rendering performance improvements (mainly for the 2d canvas-based renderer)
- Better support for WebAudio on low-spec devices
- You can now use dataURLs with wade.setAudio()
- You can pass an existing WebAudio audioContext as an option to wade.init()
- wade.stopAudio() can be called with no parameters to stop all the audio sources that are currently playing
- Each layer's resolution factor is taken into account when exporting and importing scenes
- Added an extra parameter to setImage, setFont, setJson and setAudio, so data can be set and cached for the asset preloader as well as the main asset loader
- Callbacks for all the loading functions (loadImage, loadFont, etc) are now passed the data that was just loaded, and the name of the file that was loaded
- wade.setAudio can be passed a callback parameter (useful when the audio data being set is a dataURL of a compressed audio type the needs to be decoded asynchronously)
- Scene files now support a webAudioOnly flag. Setting it implies that any audio files in the scene will be loaded only where WebAudio is supported
- BugFix (B153): When calling wade.init wihout having defined App, wade does not start
- BugFix (B154): When a scene object with pending timeouts is cloned, its timeouts aren't cloned
- BugFix (B155): SceneObject.schedule() doesn't work on template objects
- BugFix (B156): Preloading a scene that contains procedural sprites doesn't work
- BugFix (B157): Cannot import a scene that includes external JSON files
- BugFix (B158): Trying to load the same audio file multiple times causes a stall
- BugFix (B159): The callback for wade.playAudio may be executed twice on browsers that support WebAudio
- BugFix (B160): Input events on overlapping sprites that are on layers with no sorting can be triggered in the wrong order following calls to Sprite.setIndexInLayer()
What's new in WADE 1.6 Download this version
- This is the first open-source version of WADE: the source code is now included in the WADE zip file.
- Changed the syntax of wade init. You can now pass in 3 parameters (all optional): the app script, the app data, and an object with intialization options.
- Sprites can now have drawModifiers - it's a different syntax for setting stacks of draw functions. Easier but limited to the most common types of draw functions (flip, mirror, alpha, blink and fadeOpacity).
- Added SceneObject.process() to execute member functions for an object and all of its behaviors that have matching function names
- Added the ability to disable audio and/or input from wade.init
- Added a debug mode to wade (set from wade.init), that shows scripts in the debugger even for code loaded from JSON (such as Scene and SceneObject data structures).
- In debug mode, WADE will append sourceURL tags to scripts that don't have them.
- Added wade.isUsingQuadtree() to check if a layer is using quadtree-based optimizations
- The quadtree settings for each layer are now taken into account when importing/exporting a scene
- The default framerate for animations has been changed from 0 to 20
- Animations are set to autoResize by default
- wade.addSceneObject() now returns the object that was just added, for convenience (chaining function calls, etc).
- Gamepad events can be now received by SceneObjects like all other events
- BugFix (B152): When drawing a sprite to an external canvas with drawToImage(), rotations are ignored
What's new in WADE 1.5.1 Download this version
- Added support for custom .woff fonts (wade.loadFont(), wade.preloadFont(), and a 'fonts' field in the scene data structure)
- Added wade.isWebGlSupported() to check for WebGL support
- Added wade.isKeyDown() to check keyboard states
- Support for 'lighter' composite operations (aka additive blending) in webgl mode
- BugFix (B147): On Chrome for Android, converting a 2d layer to webgl at run-time doesn't work
- BugFix (B148): Chrome for Android is sometimes incorrectly detected as the stock Android browser, thus enabling double-buffering in 2d mode
- BugFix (B149): In 2d mode, rotating a TextSprite that has been cached doesn't rotate it around its center
- BugFix (B150): Cloning a SceneObject that contains a TextSprite doesn't work
- BugFix (B151): Caching a sprite with a rotation and then using Sprite.drawToImage doesn't work as expected
What's new in WADE 1.5 Download this version
- Brand new WebGL renderer - activate it on each layer with wade.setLayerRenderMode(layerId, 'webgl');
- You can now cache TextSprites too ( TextSprite.cache() )
- Added Sprite.getDrawFunction(). This returns the current draw function which, depending on the layer's render mode, could be a gl or canvas draw function.
- wade.playAudioIfAvailable() now returns the id of the audio source being played (like wade.playAudio() does)
- Trying to call Sprite.pushToBack(), Sprite.bringToFront() or Sprite.putBehindSprite() when the sprite is not in the scene now outputs an error message in the console rather than failing silently
- Added Animation.getRelativeImageName()
- BugFix (B133): When a sprite with an active animation is serialized, the image field contains the image from the animation rather than the last static image that was used
- BugFix (B134): Animation.setFrameNumber() doesn't trigger a redraw of the parent sprite
- BugFix (B135): Calling putBehindSprite() on a TextSprite causes an error
- BugFix (B136): TextSprite.setOutline() doesn't trigger a redraw of the text sprite
- BugFix (B137): TextSprite.drawToImage() doesn't work properly for text sprites that aren't center-aligned
- BugFix (B138): Sprites with active animations trigger a redraw of their area even if they aren't in the scene
- BugFix (B139): Sprites drawn with a grid_ draw function are always visible even when they are set to invisible
- BugFix (B140): Sprites drawn with a boundingBox_ draw function are always visible even when they are set to invisible
- BugFix (B141): wade.deleteCanvases() doesn't work when double buffering is enabled
- BugFix (B142): image smoothing settings don't work in IE10 and IE9
- BugFix (B143): changing image smoothing settings at run-time doesn't work if double-buffering is not enabled
- BugFix (B144): creating an empty sprite, setting its size, then adding an animation doesn't automatically play the animation
- BugFix (B145): Animations that have an offset render outside the parent sprite's bounding box, causing visual artifacts
- BugFix (B146): Concatenating fadeOpacity and resizeOverTime draw functions doesn't work when the time values used for different functions are different
What's new in WADE 1.4.3 Download this version
- Added wade.preloadScene() to load a scene asynchronously while another scene is active
- SceneObjects can now be flagged as templates. A template is a scene object that never receives any events, and is set to be invisible as soon as it's added to the scene
- wade.importScene has an additional (optional) parameter for asynchronous loading
- wade.loadScene and wade.importScene have an additional optional parameter for clearing the previous scene automatically before creating the new one
- When serializing behaviors without a name parameter, the name can be inferred automatically if the behavior is a global function
- Behaviors that don't have a 'serialize' function are now serialized automatically
- Added an 'orientation' parameter to the scene data structure
- Added wade.getWindowMode() to retrieve the current window mode
- Layer translate and scale factors are exported and imported as part of a scene
- Added wade.defaultLayer, which is the layer number that new sprites will use when they are created without specifying a layer id
- minScreenSize, maxScreenSize, orientation and windowMode are now automatically exported as part of the scene data structure
- BugFix (B129): wade.setSceneObjectIndex() causes an error
- BugFix (B130): Sprite.setIndexInLayer() doesn't trigger a redraw of the sprite
- BugFix (B131): Properties, behaviors and functions of a scene object are sometimes categorized incorrectly when serializing
- BugFix (B132): Behavior properties are ignored when constructing Scene Objects with object-style constructors
What's new in WADE 1.4.2 Download this version
- Added onBlur and onFocus events
- The scene data structure has a new 'scripts' parameter to load and execute scripts when a scene is loaded
- Added minScreenSize, maxScreenSize and windowMode to the scene data structure
- BugFix (B125): If animations are played before adding an object to the scene, the object's animation count can be wrong
- BugFix (B126): Scenes that have SceneObjects with no images but have some external audio files fail to load with wade.loadScene()
- BugFix (B127): WADE cannot start on Safari for Windows if Apple QuickTime is not installed
- BugFix (B128): wade.blacklistReferrers and wade.whitelistReferrers don't work on some versions of Safari
What's new in WADE 1.4.1 Download this version
- Added 'inPlace' versions of vector functions (wade.vec2.addInPlace, wade.vec2.rotateInPlace, etc).
- Added an option to SceneObject.serialize() to serialize all the object's member functions.
- Added an option to wade.exportScene() to export all member functions of scene objects
- When creating a SceneObject with an object-style constructor, you can have a 'functions' field that contains string representations of the objects' member functions
- wade.exportScene() can take an optional parameter to specify which SceneObjects should not be exported
- Added Sprite.getIndexInLayer() and Sprite.setIndexInLayer() for finer dynamic control over the draw order of each sprite
- Added wade.getSceneObjectIndex() and wade.setSceneObjectIndex() for finer dynamic control over the export order of scene objects
- Added wade.setJson()
- Added a 'dontExecute' option to wade.loadScipt() and wade.preloadScript()
- Added wade.getScript() and wade.setScript()
- Added wade.setSwipeTolerance() for better control over swipe gesture detection
- BugFix (B119): When a SceneObject is serialized after receiving input events, its custom properties contain the last event response data
- BugFix (B120): When creating a SceneObject with an object-style constructor, the horizontal alignment value is used for vertical alignment
- BugFix (B121): When rotating a scene object made of multiple sprites, sprite offsets aren't automatically rotated
- BugFix (B122): Even if wade.init() is called multiple times, App.init() is only ever called once
- BugFix (B123): Using the boundingBox_ draw function causes a memory leak
- BugFix (B124): If using an object-style constructor for Sprites, the scale factor is not set correctly
What's new in WADE 1.4 Download this version
View the newsletter about these changes
- Added wade.setLayer3DTransform(), supporting animated transitions on desktop browsers and some mobile browsers
- Added wade.preventIframe() to prevent the WADE App from being displayed in an iframe
- Added wade.siteLock() to lock the WADE App to a specific domain
- Added wade.blacklistReferrers() to prevent the WADE App from being linked from selected domains
- Added wade.whitelistReferrers() to only allow selected domains to link to the WADE App
- Added wade.getHostName() to get the host name from a URL string
- Added wade.removeLayer() to delete existing layers and free memory
- Every canvas element now has a sensible id property
- New onContainerResize event is fired when the container window's size changes (even if the app's screen size doesn't change)
- Performance improvements
- Default FPS is now 60
- You can now get and set names for Sprites and TextSprites
- Added Sprite.getAnimation() to get Animation objects based on animation names
- Added wade.skipMissedFrames() to avoid trying to catch up on any lag that's built up to the current point
- BugFix (B110): When a SceneObject has multiple sprites, SceneObject.getOverlappingObjects() may return an array that contains duplicate entries
- BugFix (B111): Some debug text may appear in the console window when calling SceneObject.rotateTo()
- BugFix (B112): Adding or removing scene objects when the simulation is paused doesn't trigger a redraw
- BugFix (B113): A canvas for layer 1 is always being created even if layer 1 is never used (it uses memory unnecessarily)
- BugFix (B114): Using wade.forceOrientation() results in the app being rotated upside-down on mobiles
- BugFix (B115): wade.screenCapture() and wade.drawLayerToImage() don't work properly when layers have resolution factors other than 1
- BugFix (B116): Timing is inconsistent, for example moving an object by 1000 pixels at 1000 pixels per second doesn't take a second
- BugFix (B117): TextSprite.cache() causes an error
- BugFix (B118): It isn't possible to use the built-in procedural images after setting a base path for the WADE App
Warning - If upgrading an existing project from previous versions of WADE, please read this note!
What's new in WADE 1.3.3 Download this version
- Several performance optimizations
- Behavior properties that can be serialized are serialized automatically when the parent scene object is serialized
- Added the minimal-ui tag to the default index.html (for iOS devices)
- BugFix (B109): The dontPlay parameter of Sprite.addAnimation() is ignored
What's new in WADE 1.3.2 Download this version
- Added wade.setCatchUpBuffer and getCatchUpBuffer to control how WADE should handle lag and missed frames
- Reverted default frame rate back to 30fps to ensure backwards compatibility (it can still be changed manually for new projects)
- BugFix (B108): Performance-related bug introduced with the previous release
What's new in WADE 1.3.1 Download this version
- Added a small set of built-in procecedural images (circle, square, star, fadingCircle)
- Changed the default framerate to 60fps
- Added TextSprite.setFixedSize() that can be used as an optimization to avoid recalculating a bounding box when the text changes
- Added functions to convert between screen space values and canvas space values (in addition to screen space conversions)
- You can now disable quadtrees on individual layers (can be useful as an optimization sometimes)
- Added wade.pauseSimulation() and wade.resumeSimulation()
- onMouseUp events are now fired even when they occur outside the App area
- Improved main loop alogrithm doesn't try to catch up with any lag when the app is too unresponsive (e.g. it's in a background tab)
- BugFix (B105): Calling SceneObject.serialize() on an object with no behaviors may fail in Chrome
- BugFix (B106): wade.screenDirectionToWorld() returns a wrong result for layers with scale and translation
- BugFix (B107): wade.worldPositionToScreen(), worldDirectionToScreen(), etc return unexpected results for layers with resolution factors other than 1
What's new in WADE 1.3 Download this version
View the newsletter about these changes
- Added wade.loadScene() and wade.importScene() to load a scene from a JSON file
- Added wade.exportScene() to export the current scene
- Added SceneObject.serialize(), Sprite.serialize(), TextSprite.serialize() and Animation.serialize()
- SceneObjects, Sprites, TextSprites and Animations can now be constructed with a single data object (that you can get through their serialize functions)
- Sprite.cache() to draw a sprite to an off-screen canvas and start using that canvas to draw the sprite afterwards
- Added wade.fadeInLayer() and wade.fadeOutLayer() that make use of hardware-accelerated CSS
- Added Animation.setFrameNumber(), Animation.getFrameNumber() and Animation.getNumFrames()
- You can pass an additional callback parameter to wade.moveCamera() if you want to execute a custom function when the camera finishes moving
- For SceneObjects that have a name, you can pass their names to wade.removeSceneObject()
- It is now possible to manually clear individual layers with wade.clearCanvas()
- It is now possible to manually draw individual layers (or the whole scene) with wade.draw()
- Added wade.getJson() to directly access JSON data that was loaded via wade.loadJson()
- SceneObject.getSpriteIndex() to retrieve the current index of a sprite
- SceneObject.addSprite() accepts an additional parameter to insert a sprite at a specific index
- Passing an animation name to Sprite.addAnimation() is now optional
- Removed Sprite.getActiveImageName which was the same as using Sprite.getImageName()
- BugFix (B99): Some debug text appears in the console on touch move events
- BugFix (B100): wade.getLayerOpacity() doesn't return correct numbers
- BugFix (B101): touch events don't work correctly in desktop versions of Chrome (e.g. on a touch screen laptop)
- BugFix (B102): after cloning a sprite with a rotation, collisions with the cloned sprite don't work correctly
- BugFix (B103): automatic texture streaming doesn't work when multiple sprites use the same streamed texture
- BugFix (B104): modifying a source image doesn't update spritesheet animations using that image
What's new in WADE 1.2 Download this version
View the newsletter about these changes
- Automaitc image streaming: creating a sprite with an image that hasn't been loaded will automatically trigger the background loading of that image, which will then be used by the sprite as soon as it's loaded.
- You can now pass an errorMessage parameter to wade.getImage(), to log a custom message when trying to access an image that hasn't been loaded
- You can now access the main canvas object being used by each layer
- You can draw individual layers to in-memory images (so you can create sprites with them)
- Added wade.screenCapture() to draw the contents of the screen to an image
- It is now possible to control the CSS opacity of each layer
- Added onSwipeLeft, onSwipeRight, onSwipeUp, onSwipeDown input events
- You can pass an extra parameter to wade.init if you want to use a container for the App that has a name different than the default 'wade_main_div'
- BugFix (B93): The onUpdate event doesn't fire anymore
- BugFix (B94): The transparent_ drawFunction is no longer available
- BugFix (B95): Memory leak when unloading images that are used by sprites that are not in the scene
- BugFix (B96): Apps using the 'container' window mode don't receive onResize events
- BugFix (B97): Using Sprite.drawToImage with a custom offset or transform may change the position of the original sprite in the scene
- BugFix (B98): Touchmove events don't work properly in Chrome for Android
What's new in WADE 1.1.3 Download this version
- New window mode ('container') can be used to force the game canvases to always match the size and position of the containing div (wade_main_div)
- Failing to load resources after multiple attempts doesn't stop the app anymore
- Added wade.forEachPixel() to easily perform per-pixel operations on images
- wade.log is the function that is now used to log messages from wade. It defaults to console.log, but it can be overridden.
- Added wade.forceRedraw() to force a full redraw of the scene (or of a single layer)
- Added support for absolute paths for loading local files (such as C:\filename) where the browser allows it (most browsers don't unless you explicitly give them access).
- The callback of wade.loadJson is now passed a parameter that contains the JSON data that has been loaded (if the loading succeeded)
- Added wade.restartInputEvent() that you can call after wade.stopInputEvents()
- Added wade.cancelInputEvents() so you can control whether you want to cancel and stop the propagation of input events captured by WADE
- Added Sprite.getActiveImageName() to get the name of the image currently being used by the sprite or its active animation
- BugFix (B89) wade.deleteCanvases() doesn't work anymore
- BugFix (B90) wade.getLayerDataURL() doesn't work
- BugFix (B91) Sprite.getImageName() and Animation.getImageName() do not take the base path into account (they always return names with relative paths)
- BugFix (B92) Updating an image with setImage or putImageData doesn't trigger a redraw of sprites using that image
What's new in WADE 1.1.2 Download this version
- Added wade.getImageDataURL method to generate a data URL from an image
- Added wade.getLayerDataURL method to generate a data URL from a game layer
- wade.getRelativeAppPath has been renamed to wade.getBasePath
- Added wade.setBasePath to change the base path of the app (file names used in wade.loadImage, wade.loadAudio, wade.getImage, etc. will be relative to this base path)
- Passing a 'destinations' parameter to wade.unpackSpriteSheet is now optional
- BugFix (B87): canvases that are created after the game is started don't have the correct size
- BugFix (B88): when the window mode is set to 'none', the position of the game canvases isn't always consistent
What's new in WADE 1.1.1 Download this version
- New onUpdate event that is fired on every simulation step
- Added a transparent_() draw function
- BugFix (B84): when using wade.playAudio() without a callback, an error is shown in the console
- BugFix (B85): wade.setFullScreen(false) to exit full screen mode doesn't work
- BugFix (B86): when the window mode is set to 'none', the coordinates of mouse events are wrong
What's new in WADE 1.1 Download this version
View the newsletter about these changes
- Added support for gamepads
- You can omit the 'start' parameter in PlayAudioSegment to play the sound from the beginning
- You can omit the 'end' parameter in PlayAudioSegmet to play the sound until the end of the source file
- playAudioSegment now returns the uid of the sound that is being played, so you can stop it with wade.stopAudio()
- Added an onRotationComplete event for Scene Objects
- You can now get all the SceneObjects with a given property/value pair
- "Loading images" can be clicked to open a URL in a new window
- You can now show a loading progress bar using wade.setLoadingBar()
- 2d vector maths (new wade.vec2 module)
- Added wade.loadImages to load multiple images in a single function call
- Double buffering is enabled by default for the android browser
- You can now pass a callback argument to playAudio and playAudioIfAvailable
- Added SceneObject.removeBehaviorByIndex
- Added wade.isEventListener to check if a Scene Object is currently listening for an event
- Added SceneObject.listenFor() as a shorthand alternative to wade.addEventListener
- Added SceneObject.stopListeningFor() as a shorthand alternative to wade.removeEventListener
- Added SceneObject.isListeningFor() as a shorthand alternative to wade.isEventListener
- BugFix (B79) wade.setWindowMode('none') doesn't work anymore
- BugFix (B80) SceneObject.rotateTo() doesn't work with negative angular velocities
- BugFix (B81) The callback passed to wade.playAudioSegment() isn't always executed in Chrome
- BugFix (B82) SceneObject.removeBehavior doesn't work
- BugFix (B83) Mouse events on TextSprites that aren't center-aligned or that have with multiple lines are inaccurate
What's new in WADE 1.0.3 Download this version
- Added Sprite.getScaleFactor() to get the size of the sprite relative to its source image (or animation frame)
- Added Animation.getFrameSize() to get the size of a single animation frame
- Animations now support autoResizing (resizing the parent sprite to fit the animation frame size, preserving its scale factor)
- Animations support an offset to be added to the parent sprite's position when playing
- BugFix (B77) wade.setSmoothing() doesn't work on layers with static objects only
- BugFix (B78) Animation.getImageSize() doesn't return the size of the whole spritesheet, but of a single animation frame
What's new in WADE 1.0.2 Download this version
- Added SceneObject.stopAnimation() and SceneObject.resumeAnimation()
- A behavior's clone() function now receives a reference to the new object
- You can pass an extra parameter to wade.addSceneObject, containing data that will be passed to the onAddToScene event
- Adding an animation to an empty sprite whose size hasn't been set will now resize the sprite automatically
- You can now retrieve a scene object's behavior using the behavior index
- It is now possible to put a sprite behind another sprite on the same layer with Sprite.putBehindSprite()
- added wade.stopAudio() to stop playing audio files
- wade.playAudio now returns a UID for the audio source, which you can then pass to wade.stopAudio()
- Bug Fix (B75): Animation blending with semi-transparent sprites doesn't work correctly
- Bug Fix (B76): When WADE is stopped (with wade.stop()), loading images aren't removed from the document's body.
What's new in WADE 1.0.1 Download this version
- When SceneObjects are cloned, behaviors are cloned using their clone function when present
- wade.getVersion() to check the current version of WADE
- wade.requireVersion() to check it the current version of WADE is greater or equal than a required version
- Bug Fix (B73): Sprites using gradients that don't move aren't rendered correctly when there are moving objects overlapping them on the same layer
- Bug Fix (B74): Re-adding a named scene obejct to the scene in a different position after it's been removed causes problems
What's new in WADE 1.0 Download this version
View the newsletter about these changes
- Named scene objects.
- Added wade.getImageData() and wade.putImageData().
- Handling of Tizen-specific requirements.
- Disabled the right-click context menu in WADE apps.
- Added wade.recreateCanvases() to complement wade.deleteCanvases().
- Added device orientation events.
- Added device motion events.
- Added a parameter to wade.addSceneObject to auto-listen for handled events.
- SceneObject.getBehaviors() to get a list of all the behaviors of an object.
- TextSprite.scaleBounds() to manually adjust the bounding box of text sprites.
- Added wade.getSceneObjects() to get all the objects in the scene.
- Support for multi touch.
- Reduced memory usage.
- Bug Fix (B63): overlap tests don't work with TextSprites
- Bug Fix (B64): SceneObject.clone() doesn't work on objects with no behavior
- Bug Fix (B65): when loading a cached script without the forceReload option WADE doesn't execute the script
- Bug Fix (B66): input events fire even when they happen outside the app's screen area
- Bug Fix (B67): moving vector graphics objects can have rendering artifacts around their edges
- Bug Fix (B68): vector graphics functions ignore the sprite's rotation
- Bug Fix (B69): when sprites have invalid coordinates (such as NaN), WADE gets stuck in an infinite loop
- Bug Fix (B70): rotated text sprites don't update their bounding boxes correctly
- Bug Fix (B71): the bounding box of text sprites is often too big
- Bug Fix (B72): overlapping objects on the same layer receive input events in the wrong order
Warning - When upgrading from previous versions of WADE, make sure that you update index.html and style.css as well as the javascript file, or your app won't work!
What's new in WADE 0.9.2 Download this version
View the newsletter about these changes
- Added draw functions for HTML5 composite operations.
- Get scene objects or sprites in a specific area.
- Get overlapping objects.
- Set and get the angular velocity of scene objects.
- Added a rotateTo() function to scene objects.
- Angular sprite offsets.
- OrientedBox vs orientedBox intersection test.
- OrientedBox vs box intersection test.
- OrientedBox contains point test.
- Added a getTargetRotation() function to scene objects.
- Get the parent scene object of a sprite with sprite.getSceneObject().
- Custom events for scene objects.
- Scheduled events for scene objects.
- Added an isAppInitialized() function to check whether the init function has been executed.
- Bounding box draw function for debugging.
- Major performance improvements.
- Bug Fix (B57): Calling wade.isMouseDown() from an onMouseDown function returns false.
- Bug Fix (B58): The opacity of animations with blending isn't constant on Chrome and Firefox.
- Bug Fix (B59): Using the flip_ draw function without any arguments doesn't work (although mirror_ does).
- Bug Fix (B60): Input events can fire before App.init() has been executed.
- Bug Fix (B61): Making sprites larger without moving them may sometimes cause rendering artifacts.
- Bug Fix (B62): Mouse events on rotated objects can be imprecise.
Warning - Breaking changes:
- SceneObject.updateSpriteOffset() has been removed - use SceneObject.setSpriteOffset() instead, it does the same thing.
What's new in WADE 0.9.1 Download this version
View the newsletter about these changes
- Added draw functions to mirror and flip sprites.
- Added upport for multiple main loop callbacks.
- Added a wade.moveCamera() function to handle camera movement.
- Added support for the camera tracking a scene object.
- Added an onCameraMoveComplete event.
- Bug Fix (B54): The setRotation() method doesn't work for TextSprites.
- Bug Fix (B55): Calling setRotation() on a static object doesn't cause it to redraw.
- Bug Fix (B56): The position of input events is wrong on layers with a resolution factor other than 1.
What's new in WADE 0.9 Download this version
View the newsletter about these changes
- Rewritten audio system, using the WebAudio API where available.
- Added support for animation blending.
- Added the ability to stop and resume animations.
- Added the ability to force landscape or portrait orientation.
- Added an onMouseIn event.
- Added an onMouseOut event.
- Get the screen position of the last mouse or input event.
- Bug Fix (B49): The first frame of animations played in reverse is always the start frame.
- Bug Fix (B50): The first frame of animation lasts half the time of the other frames.
- Bug Fix (B51): Moving or resizing a sprite that is using a gradientFill_ draw doesn't update the gradient.
- Bug Fix (B52): Resizing a sprite that is using a radialGradientCircle_ draw doesn't update the gradient.
- Bug Fix (B53): The first color in a radial gradient uses more space than the other colors.
Warning - Breaking changes:
- wade.getAudio() is now deprecated. Previously it used to return an HTML5 Audio element - now it may return a WebAudio buffer if the WebAudio API is supported. Please use wade.playAudio() and wade.playAudioSegment() to play sounds.
What's new in WADE 0.8.3 Download this version
View the newsletter about these changes
- Play animations in reverse.
- Play animations in ping-pong mode (forward first, then reverse).
- Control image smoothing (for the whole app, or per layer).
- Clone scene objects, sprites and animations.
- Cross-platform onClick event.
- Added the ability to set a movement tolerance for click events.
- Clear the scene with a single command.
- Added support for unloading sounds.
- Unload all sounds at once.
- Unload all images at once.
- Added a global "onResize" event.
- Bug Fix (B47): calling wade.isMouseDown() from an onMouseUp event returns true.
- Bug Fix (B48): wade.setMinScreenSize() and wade.setMaxScreenSize() don't have an immediate effect on wade.getScreenWidth() and wade.getScreenHeight().
What's new in WADE 0.8.2 Download this version
View the newsletter about these changes
- Predefined draw functions for vector graphics, including gradients and borders.
- Predefined draw functions to control sprite opacity.
- Predefined draw functions to control sprite resizing.
- Added the ability to concatenate draw functions.
What's new in WADE 0.8.1 Download this version
View the newsletter about these changes
- Set a rotation angle for scene objects and individual sprites
- Set a global resolution factor
- Set resolution factors for individual layers
- Support for fullscreen API
- Sprite.drawToImage() can be called with user-defined transforms and composite operations
- Rendering performance improvements
- You can pass a resolution factor to wade.createCanvas(), if you want to apply some CSS scaling to it
- Passing an object to store the result of wade.loadJson() and wade.preloadJson() is now optional
- Passing null to wade.removeSceneObject() doesn't cause an error anymore
- Bug Fix (B42): 'default' animations do not trigger an onAnimation start event when played
- Bug Fix (B43): playAnimation() doesn't set a dirty area when the animation is made of a single frame
- Bug Fix (B44): unable to re-load images that have been unloaded
- Bug Fix (B45): adding an offset when calling Sprite.drawToImage() doesn't have any effect
- Bug Fix (B46): sprite animations playing at 30fps often skip one frame
What's new in WADE 0.8 Download this version
- Drawing to offscreen canvases and HTML images
- Better support for resizing, with automatic scaling via css when exceeding the resolution limits
- Loading error callbacks (+timeouts to test connectivity)
- Global event listeners
- Unpacking sprite sheets
- Touch support for IE10 and Windows Phone 8
- Keyboard events
- Text outlines
- Support for local storage
- Support for offline application cache
- Unloading images to free memory
- Change text alignment at run-time
- Retrieve and measure single lines in a text sprite
- Query the state of mouse or touch input
- Change sprite layers at run-time
- Explicitly control double buffering
- Optimized the drawing of non-animated sprites
- Changed mouse wheel events to include position information
- Absolute screen position for mouse events
- Control caching of the main app script
- Can set dirty areas in custom draw calls
- Added 'wade.cloneArray' utility function
- Support for more transport protocols, not just http
- Fixed input problems with Firefox on touchscreen devices
- Fixed rendering problems in Android stock browser
- Fixed mouse wheel -> pinch zoom mapping
- Fixed the API for screen to world transforms
- Fixed bug with audio files that are not in the root directory
- Fixed bug loading the same json file multiple times
- Fixed bug setting "loading images" multiple times
Warning - Breaking changes:
- event data for mouse events now contains screenPosition.x and screenPosition.y rather than x and y