This is the changelog for the FastCast module. The top-most version is the current live version unless otherwise noted.
Version 13 // Luau Strong Types
+ Added new boolean property
SimulateBeforePhysics to Caster.
+ Employed the use of RunService.PostSimulation and RunService.PreSimulation as appended by Roblox Version 466.
- Removed uses of RenderStepped and Heartbeat
+ Added an option for cast recalculation with resolution enforcement. For more information, see FastCastBehavior.
* Fixed a bug causing casts that set AutoIgnoreContainer=true without specifying a RaycastParams instance to error.
* Fixed a mistake that caused type references from TypeDefinitions to actually go unused. This may resolve some lag.
* Fixed an issue with the debug gun that caused numeric constant
FIRE_DELAY to do nothing.
+ Added new
CosmeticBulletProvider property to
FastCastBehavior. It relies on
PartCache. It has a number of unique interactions with the module, so be sure you read up on the docs.
+ Implemented a new extension module called
TypeMarshaller which offers a sandboxed variant of
typeof() capable of returning custom type names. This is used with PartCache to verify that a proper object is being input.
+ Implemented the RayPierced event in the example gun.
* Cleaned up the example gun's code a bit, made some stuff more clear.
* Fixed a bug in the example gun that caused setting the gravity constant to do nothing.
* Fixed a memory leak in
Signal caused when using
Signal:Wait(). Threads that have finished yielding are now removed from the internal registry.
* Fixed a bug where same-frame modification of cast trajectory would falsely set the acceleration parameter to the new position instead of the new acceleration.
* Altered the behavior of the example gun to demo more elaborate behaviors of the pierce function.
Signal:Wait() as requested by thatNOOBisSMART.
+ Added new mandatory
Name property to Signal objects for error tracking. This is an internal change.
* Fixed a bug where issues in event handlers would appear to be thrown in the module instead. This is an artifact of
coroutine.wrap. The module now throws its own error and provides its own stack trace.
* Fixed a bug reported by Urulad where the ActiveCast object defined
CastRayInfo, but the rest of the script used the old
RayInfo entries. The type for ActiveCast has been changed to use the old names.
+ Added dedicated types for all objects. The module is now compliant with strong type limits.
- Removed all appearances of the
MandateType function as it is obsolete with strong types implemented.
Version 12 // Cleanup Work
+ Added new FastCastBehavior type. This type is cosmetic (in reality it's just a table). It contains information dictating how the cast should behave, hence its name.
+ Added new constructor
FastCast.newBehavior() to create these new objects.
+ Added more logic to the cosmetic bullet system that allows users to let the module handle parenting and ignoring the bullets for them (this is part of the Behavior system)
* IMPORTANT: Altered the parameters in Caster:Fire() to be more minimal and use the new behavior data packet. Old code will completely fail to function with this new API.
* ActiveCast will no longer create a new trajectory if a mutation method (set/add velocity/accel/position) is called, given the condition that the latest trajectory's start time is identical to the total runtime of the cast (meaning that the trajectory hasn't even started simulating yet, so changing its data won't cause problems). This should improve efficiency of set/add.
* Cleaned up the example gun's code. It's more organized and ideally more readable. It was getting messy.
Version 11 // New API Compliance & Physics Updates
* Fixed a bug causing Pause and Resume to completely fail to function.
* Fixed a number of performance regressions
* Fixed a bug where SetVelocity/Acceleration/Position would actually add values, and AddVelocity/... would add the value * 2
+ Moved events back to Caster
+ Added CastTerminated event to Caster
+ All events now fire with a reference to the ActiveCast that raised them (since a caster can be simulating several casts at once)
* Investigating performance regressions
* Fixed a number of issues reported.
+ Added new ActiveCast class to represent individual bullets.
+ Raycasting API for WorldRoot is now used.
+ Added new methods for getting/setting/adding to the velocity, acceleration, or position of casts during runtime.
+ Added new RayPierced method which fires identically to RayHit with the exception that it fires on a pierce.
+ ActiveCasts now contain the RayHit, LengthChanged, and RayPierced events.
+ Added new Terminated event for when casts terminate.
* Complete reconstruction of the module's internal code.
* Changed the event parameters for RayHit, LengthChanged, and RayPierced to use the new WorldRoot API.
Version 10 // Physics & Piercing Improvements
* Fixed issue reported by Bloxxer_sama where the RayHit event was missing its segmentVelocity parameter if the ray exceeded its maximum length. A zero-length vector will now be supplied for that parameter.
+ LengthChanged event now returns the segment velocity for the latest ray as requested by GFink
+ RayHit event and CanRayPierce callback also implement this
* Fixed all bugs pertaining to physics casts clipping through things + being overall inaccurate.
* Fixed a bug where cast visualization would create a cone adornment with no length for pierced casts
* Swapped the colors between a hit and a pierce. Pierce hit markers are now red (like the cone) and hits are green.
Version 9 // Pierce Update
+ Added new built-in cast visualization. No more copying code from the example gun. This new visualization is very versatile and shows casts that are cancelled (due to piercing), as well as hits.
* Fixed a bug with piercing casts sometimes skipping embedded solid objects (e.g. a piercable wall with a layer of non-piercable stuff inside of it) (reported by dispeller)
* The material parameter of RayHit will now be Enum.Material.Air instead of nil if nothing is hit.
* Fixed bug reported by 0_1195 where FireWithWhitelist and FireWithBlacklist did not allow for the use of piercing.
+ Added bullet piercing. See docs for more info.
+ Added some debug logging which is disabled by default.
Version 8 // FastCast Redux Release
* Fix bug reported by user Spooce -- Failing to pass in bulletAcceleration caused the physics calulation function to error.
+ Added IgnoreWater parameter as requested by user 0_1195
* Organized the code a little bit.
+ Complete rewrite of the entire module from the ground up. Code is far more efficient and clean.
* Changed parameters of Fire, FireWithWhitelist, and FireWithBlacklist. See API docs for more info.
- Removed global Gravity property. This is now specified per-fire. It is also a Vector3.
- Removed global IgnoreDescendantsInstance property. This is now specified per-fire.
- Removed global ExtraForce property. This has been merged with Gravity.
Version 7 // Physics Update
+ Added new BulletAcceleration parameter. Specifying this allows you to apply acceleration on a per-bullet basis (As an alternative to Caster.ExtraForce)
+ Re-added the Signal module into the FastCast module itself as requiring by ID is not possible on the clientside.
- Removed NoThread parameter
FastCast 6.x.y (Docs Missing)
+ Vector3 Velocity added! You can now specify the bullet's velocity as a Vector3 (where it was originally just a number). This was suggested by user "JetIagged" (https://www.roblox.com/users/898618/profile/)
* Fixed a bug with the example gun causing the bullet to shoot backwards. This was not an error with the module, but instead with the example gun itself.
- Deprecated NoThread property. Having this set to true will cause a warning to be thrown.
FastCast 5.x.y (Docs Missing)
+ Added conditions to methods Fire, FireWithWhitelist, and FireWithBlacklist that cause them to throw an error if run with a dot (.) instead of a colon (:) (e.g. Caster.Fire(...) instead of Caster:Fire(...))
* Changed the module model itself to not include the signal module. It is now required via ID. The signal module can be found here: https://roblox.com/library/2530470096/rbxscriptsignal
No prior versions have been documented.