Spaces and Shapes (May 2026 update) • Easel
Skip to main content<br>Spaces, contacts, shapes and more!<br>The May 2026 update is here,<br>with a whole host of new features and improvements to make your games even better.
info<br>Easel is a programming language that makes your game multiplayer automatically!<br>Intrigued? Visit our home page to learn more.
Spaces
The new Spaces feature lets you partition colliders into multiple independent physics simulations.
This lets you make a game with multiple areas, for example, a town where the player can walk around and enter different buildings.<br>The indoor areas can be in different spaces from the outdoor area,<br>separating their physics simulations and allowing you to even have different gravity indoors versus outdoors.
Spaces are handled efficiently by Easel's physics engine,<br>with all the bodies, colliders, contacts, etc across all spaces still stored together in the same linear arrays and processed as one.<br>The first level of the spatial partitioning tree is now the space,<br>but besides that there is little overhead to having multiple spaces.<br>The physics engine was already separately processing independent islands of bodies and this is a natural extension of that.
For this reason, it is incredibly easy to move bodies between spaces by changing the PhysicsSpace property,<br>whereas in other physics engines this may require reconstructing the entire body and all its colliders in another physics engine instance.<br>When your hero moves from inside to outside, it is easy to retain all their physics state and the transition is seamless.
Contacts
Sometimes, you need to know what is touching what in your game.<br>For example, your hero can only jump when they are touching the ground.<br>You can access information like this using the new contact query functions.<br>See QueryContacts, QueryAnyContact<br>and CountContacts for more details.
The BeforeCollide function has been updated to include the contact point as well.<br>This lets you do things like spawn sparks where you hero's sword strikes an enemy.
Position Change Signals
You can now detect and respond to changes in position by awaiting the<br>Pos and Heading properties.
For example, let's say you have a tutorial where the player must learn to walk to the right.<br>Instead of polling every frame, you can use await Pos to only recheck when the player actually moves, like so:
while Pos.X 35 { await Pos }
This allows more of your world to sleep when nothing is happening, enabling better performance and larger worlds.
Per-Collider Continuous Collision Detection
Continuous collision detection (CCD) prevents fast-moving projectiles like bullets<br>from tunnelling through walls. It is computationally expensive, but up until this point,<br>CCD was an all-or-nothing setting that applied to every collider on a body.<br>The new intercept parameter of PolygonCollider<br>can enable CCD on a per-collider basis.
This is especially useful in some particular cases.<br>For example, a hero character with two colliders:
A small collider representing the hero's actual body, used for normal movement and collision.<br>CCD is enabled on this collider to prevent movement artifacts.
A large screen-sized sensor collider representing the hero's "awareness" area, used to wake up enemies when the hero is close by.<br>This collider is so large that it could never tunnel through anything in a single simulation step.<br>Enabling CCD on this collider achieves nothing except wastes of performance,<br>especially because its size means it sweeps through a lot of space and therefore many other colliders every tick.
With the new intercept parameter on PolygonCollider, you can enable CCD only on the colliders where it is actually needed.<br>We now recommend this as the only way you enable CCD, and so are deprecating the old bullet=true parameter on Body.<br>Don't worry though, Easel will continue to support the bullet=true parameter so all your old code will still work.
Rhombuses
The new Rhombus shape can be used to efficiently create 2D isometric tiles in Easel.<br>Isometric is a great way to get some of the beauty of 3D graphics while still maintaining the performance and simplicity of 2D.<br>Pre-render your 3D assets into isometric sprites facing multiple directions,<br>then use the new Rhombus shape to give them the correct collision shape.
Stricter Networking Heartbeat
When in a multiplayer game, Easel kicks out players who have not responded to pings for 15 seconds.<br>This is necessary as they degrade the performance of the game for everyone else,<br>because they require everyone to maintain a longer history of the game state.
Interestingly, because WebSocket pings are built into the browser's networking stack,<br>sometimes pings may succeed at the browser engine level while none of the game's messages are being processed.<br>Perhaps the user switched tabs and the Easel tab was fully suspended in the background.
Easel now detects and kicks players in this situation as well, improving the experience for everyone...