1.18.15 - UI anchors, circle gradients, 2d noise, stability hardening
- Added UI
anchorproperty for screen- and parent-relative positioning; existing shorts migrated to anchor-based layout - Added
drawEllipseGradientfor radial gradients (drawCircleGradientstays as a back-compat wrapper), demoed in the Shapes short - Added 1D and 2D gradient noise functions (
noise1D,noise2D) with tests, demoed in the new Noise short - Added
glDrawUntexturedfast path for solid rectangles, plus primitive count tracking for debug - Added an Image Font short that displays the built-in engine font and full character set
- Renames (breaking for ESM/TS users):
FontImage→ImageFont,engineFontImage→engineImageFont,isString→isStringLike.drawCircleGradientstays as a back-compat wrapper. - PathFinder: A* now uses octile distance, diagonal step blocked only by walls (not cost),
maxLoopraised to 1000, smoothing drops collinear nodes - Engine robustness: zeroed first-frame delta, release-build double-init guard,
EngineObject.addChildandupdatePhysicsbail mid-loop when active object is destroyed,rootElementdefaults todocument.body - Input:
mouseWheelaccumulates across the frame instead of overwriting; touch gamepad start-button fix; unused dpad digital-style input removed - Audio: node-graph leak plugged, hardened
getCurrentTime, stacked fades cancel, fade-out ramps anchored at current volume;Sound.getDurationreturns 0 (notundefined) while loading;speak/speakStopguard missingspeechSynthesis - WebGL: bind default framebuffer before postProcess, reset
glBatchCounton context loss, restoreUNPACK_FLIP_Y_WEBGLafter postProcess, mipmaps sync onglSetTextureData,glMakeOutlinemiter fix - Box2D:
setMassDatano longer silently ignores zero values, debugDrawTransform/destroy-tracking/raw-body contact listeners fixed, object physics methods refactored - Tile collision and tile layer issues found in deep-dive review fixed;
smallMoveUpfollows gravity sign so inverted gravity works - Tween system: clamp
Ease.EXPO/Ease.ELASTICat boundary inputs; reuse the sameTweenobject across loop iterations - Math: corrected
randInCircleannulus distribution and clamped min/max radius ratio to avoid NaN;isOverlappingis now symmetric - Save system tolerates
localStoragefailures; Newgrounds bails early when first API call fails so offline games don't freeze and handles error responses without crashing - TypeScript:
sign/hypot/log2wrapped as function expressions so.d.tspicks up signatures;isArraytype-guard annotation - Expanded FAQ and README, added Hello World snippet, clarified
mirror(rendering only),ParticleEmitter.fadeRate,TileInfopadding/bleed, post-process defaults - Declared Node 18+ engine requirement; Vite starter notes Node 20.19+ via Vite
- Dropped
--warning_level=VERBOSEfrom Closure Compiler call; shipFAQ.mdin the npm package
Check out the latest on GitHub to see everything we've been working on!
