There are plenty of reasons behind this. But these are the main ones:
- We relied on proprietary software
- GML sucks
- Underlaying layer was a blackbox
- Engine build on top of MonoGame FW
- Room editor works as 60 fps GameWindow, thus allowing for editor events
- Implement as much of GMS pipeline into C# as possible
- Upgrade outdated concepts of GMS
Done
- Sprite
- Font
WIP
- Object (GameObject)
- Events
- Room
- Layer
- Tile + Autotile
TBD
- Shader
- Timeline
- Path
- 60 fps monoForm
- allows to manage multiple rooms
- supports grid
- Creation code (roslyn)
- Collision detection (quadtrees, spatial hash) ✔️
- Physics WIP (elastic + dynamic collisions, circle-circle, rect-rect, circle-rect)
Events are aiming to imitate GMS native events while introducing some newcomers and discarding obsolete overheat.
- OnSetup - Use to toggle predefined GameObject behavior / custom plugins
- OnCreate - Equal to create
- OnStep - Equal to step
- OnDraw - Equal to draw
These are defined in the same way like classic events but occur on room editor events
- EvtCreate - Once object is placed in game
- EvtLoad - When project is loaded and instance gets deserialized
- EvtSave - Before instance gets serialized
- EvtDelete - When object is removed from a room
- EvtDraw - Occurs when object is drawn in room editor
- EvtStep - Occurs on each tick (60x per second)
- EvtContextMenuSelected - Once an item is selected from a right-click context menu
- string_ - ✔️
- math_ - ✔️
- mouse_ - ✔️
- keyboard_ - ✔️
- window_ - ✔️
- instance_ - ✔️
- GameSave() - ✔️
- GameLoad() - ✔️
- draw_ - WIP
- synth_ - ✔️