Extending ct.js' gameplay loop with injections
Extending ct.js' gameplay loop with injections
Injections are a powerful instrument to extend functionality of ct.js framework beyond adding methods or properties. It allows you to add logic to a game loop, load resources, create bundled Templates, etc.
The injections folder inside your module's directory accepts files with code that will be injected while exporting a game. All of them are optional, and here is a list of all the possible injections:
General events:
load.js– fired once when a game's code has loaded, but nothing still happened, e.g. no resources were loaded;start.js– fired once when all the game's resources have been loaded. No game logic have been run yet.switch.js– fired each time when a room is switched, but before any other code. Here, aroomvariable is a name of the new room.
Room-specific events:
beforeroomoncreate.js— fired before a room is created, but after a camera and renderer are set.roomoncreate.js– fired after entering a new room. This code is evaluated after user-defined OnCreate code, when all the copies were created. Here,thisequals to a new room.roomonleave.js– fired before leaving a room, but before any user's script. Copies still exist here.beforeroomdraw.jsafterroomdraw.jsbeforeroomstep.jsafterroomstep.js
Copy-specific events:
onbeforecreate.js— applied to a newly created Copy, before its OnCreate event, but after its type information was applied. Works with bare Copies (copies of no template) as well.oncreate.js– applied to a newly created Copy, right after its own OnCreate event.ondestroy.js– applied to a Copy before it gets deleted. This code is called before a Copy's OnDestroy event.beforedraw.jsbeforestep.jsafterdraw.jsafterstep.js
Templating and utilities:
css.css– injects CSS into an exported game.res.js– called once while parsing loaded images.resload.js– called once after all the resources were loaded.templates.js– here you can place your own Templates.styles.js– here you can place your own drawing styles.htmltop.html– this code is placed right before the drawing canvas.htmlbottom.html– this code is placed right after the drawing canvas.
Also see Call order with mod's injections for a more complete picture of call order.
Templating
Each injection can substitute a special label with a value from your settings. If you defined a setting field with a key enableSockets, then all matches with /*%enableSockets%*/ in js, css, and html files will be replaced with user's chosen value.
Be wary, as a field may return an empty value. In JavaScript, you may use this wrapper to safely read a variable without breaking syntax: [/*%enableSockets%*/][0]. This will return either the defined value or undefined.
Tips
Templating is also supported in your index.js file.
