(663) New Error List Window for Code Generation Errors:
A new error reporting system has been put in place that makes it easier to find and correct LSL syntax and variable/function declaration errors directly from within MiceOnABeam and before exporting the generated code to your virtual world.
While LSL errors continue to be flagged inline whenever a Properties Editor is saved, the entire model is now re-checked upon generating the LSL code and a summary of outstanding LSL errors are listed in a new Code Generation Errors window.
From here you can select an error and go to the modeling component of interest. As well you can open up the corresponding Properties Editor which will display the error message right at the point in the LSL code where the error was found. You can then fix the error and quickly regenerate the code by selecting the Refresh button on the Code Generation Errors dialog to update the error list.
(8) Undeclared LSL Variables & Functions are now flagged:
References to undeclared LSL variables and functions are now detected and flagged as errors both when the Properties Editor is saved and again upon generation of the LSL code for the model (in conjunction with the new Code Generation Errors dialog).
Local variables that are multiply declared within the same local scope of an LSL code segment will also be flagged as errors.
Recall that LSL permits local variable declarations to override (i.e., use the same name as) global variable declarations and so in MiceOnABeam state variables and functions can override those defined in a higher scope. Therefore MiceOnABeam will not flag a local variable or function declaration which overrides a higher scoped one defined as a state variable, function or Custom Global. In general overriding variables and functions should be avoided as their models and LSL code are harder to follow and understand.
(11) Multi-Segment Straight or Curved Transitions with Auto-Align:
You are now able to create multiple straight or curved segments for a transition! In previous releases there was only a single Selection Handle for a transition which you could then click and drag to create a curved bend in the transition.
To create an additional Selection Handle press and hold the Control key and click on the desired location on a selected transition. Then click and drag the new Selection Handle to create the new bend. To delete a Selection Handle, just Control-click it.
In addition if you would prefer straight line segments instead of curves for a particular transition, de-select Smooth Transition from it's context menu. Note that a transition will be automatically curved the first time it's mid-point Selection Handle is moved if the Automatically Smooth Transition option is enabled in the Transitions panel of the Options dialog.
To align a particular line or curved segment of a transition to either a horizontal or vertical position, just hold down the Shift key when clicking and dragging a Selection Handle to the nearest horizontal or vertical plane. Note that alignment is always done one segment at a time, from the selected Selection Handle to the adjacent handle (towards the starting point of the transition).
Finally you can move the display of the transition's label to another Selection Handle by holding down both the Control & Shift keys and then clicking on the desired Selection Handle.
(628) New State Explorer:
In a more complex model consisting of several Composite States, it can be tedious to traverse the nested state hierarchy to get to the particular state of interest.
The new State Explorer feature addresses this by providing a tree-like view of the model's state hierarchy so that you can easily zero-in on the exact part of your model that you wish to examine.
Aside from just viewing the state hierarchy, you can also open up a State, Properties, Comment or State Variable/Functions editor from the context menu for a selected state in the State Explorer.
If the Show extended model comments option is enabled in the Models panel of the Options dialog, the lower Comments pane of the State Explorer will show the extended description for the state including Events, Entry/Exit actions and State Variables/Functions. In this way model information is at your fingertips without having to open up additional editors.
(645) New Junction Point Modeling Component:
A new toolbar component called a Junction Point is now available to help build your script models.
Similarly to an Entry/Exit Point the Junction Point can be used to merge several input transitions into a single output transition. However Junction Points are not limited to a state's border and can be created anywhere within a State Editor. It can really help de-clutter model diagrams by reducing the number of transition lines required.
(667) New Icon Displayed for State with State Variables or State Functions:
A new icon will now be displayed on a state if there are State Variables or State Functions defined for it. In this way you can now quickly scan your model to determine which states have these defined.
This icon will also be displayed on the bottom of the State Editor if the enclosing state has State Variables/Functions defined.
In addition, the defined State Variables/Functions will be listed in a separate compartment on the state's label for easy reference. If there is insufficient space to display all the compartments of the state label, then an ellipsis will be displayed at the bottom of the state.
Both the display of the State Variables/Functions icon as well as their listing on a state can be enabled or disabled via the Show State Variables & Functions Icon option in the States panel of the Options dialog.
(629) State Variables & Functions Can Now be Moved or Copied Between States:
State Variables and State Functions can now be moved or copied from one State Variables/Functions editor to another!
As before, you can move a State Variable or Function to a different position within it's data grid by clicking and dragging on it's row header to the new position.
Now, by holding down the CTRL key, the row will be copied to the new location instead of being moved. If copying, remember to change the name of the new variable or function! In addition you are not limited to moving or copying the row to the same data grid: You can move or copy the State Variable/Function to the State Variables/Functions editor of a different state!
Note that the new row copying feature is also available in the Edit User LSL Actions and the State Variable Configured Choices data grids as well.
(635) Direct Access to Event Arguments Now Provided in Choice Point Outgoing Transitions:
In earlier versions of MiceOnABeam, event argument names could not be accessed directly within any transition leaving a Choice Point. This required either the saving of argument values within State Variables for use later on or the use of the built-in EVENTxxx() functions to access the argument values. This limitation was due to the fact that a Choice Point can have more than one incoming transition to it and can therefore have more than one triggering event.
However, in common use a Choice Point typically has only a single incoming transition, so in such case where that transition also has a defined event, v1.0.3 now permits it's event argument names to be referenced directly within the Guard Condition or Transition Action of any outgoing transition of the Choice Point. This change will significantly simplify the use of Choice Points for newcomers to MiceOnABeam.
►IMPORTANT NOTE: To implement this feature the code generator adds in local variable declarations for each event argument within the (non-empty) Transition Action code of Choice Point transitions. Therefore these variables will conflict with other variables that you may have created that have the same name. Please review the following cases:
In the case where you created a local variable to contain the event argument obtaining it from one of the EVENTxxx() functions, you can simply delete the conflicting statement and access the event argument directly by name. This conflict will be flagged as an error.
In the case where you created a local variable which happens to have the same name of the event argument, you must rename your local variable. This conflict will be flagged as an error.
In the case where there is a reference to a higher scoped State Variable or Custom Global variable whose name conflicts with an event argument's name, no error will be flagged as the event argument will now override the reference to the higher scoped variable and your LSL code will not operate as intended. In this case, the higher scoped variable must be renamed.
As an added bonus, direct named access to the event arguments will be available in all outgoing transitions of any following single-input Choice Point connected to the original Choice Point with the single incoming event.
(668) State Function Parameters in the State Variables & Functions Editor Now Validated:
The Parameters column in the State Functions table of the State Variables & Functions Editor is now validated when attempting to leave the field. Any errors must first be resolved in order to save the changes to the State Function.
(680) Show Comments Button Now Shows Extended Information for States & Transitions:
Often when scanning through a more complex model, you may find yourself opening and closing various editors to review the design details. After awhile this can get very tedious.
To help you when reviewing a model a new program option has been added to enhance the Show Comments button on the State Editor toolbar. When the Show extended model comments option in the Models pane of the Options dialog is enabled, additional design information is included along with the component's comment.
For a state this includes additional information on it's Entry and Exit actions, contained transition (LSL) events and defined State Variables and Functions.
For a transition this includes additional information on it's (LSL) event, Transition Guard and Transition Action.
Note that within the extended comment information Guard Condition and State Variable initialization code are fully shown and not abbreviated as they are when displayed in the state notation label.
(595) Double-Click on State Editor Will Now Go Outside State:
You can now simply double-click over the background of a State Editor to go to it's containing state. This is equivalent to selecting Go Outside State from the State Editor's right-click menu.
In conjunction with setting the Double-Click Action to Go Inside Component within the Models pane of the Options dialog, this can really streamline traversing up and down the state hierarchy for models with Composite States.
(692) Wildcard characters Now Accepted Within Search Strings:
The wildcard characters * and ? can now be used within search strings of the Search Dialog. A ? will match any character at that position of the search string, while a * will match any number of characters within that position of the search string (but the fewest number of characters that it takes to have a successful match).
The use of the wildcard characters in a search can be enabled or disabled via a new Match wildcards option within the Search Dialog. Wildcard characters are enabled by default.
(648) New & Updated LSL Actions:
Updated LSL Actions:
- GiveToMany: Missing declaration for loop variable; Fixed;
- ScanForSomething: Added parameter for forward scan area;
- ScanRepeatedly: Added parameter for forward scan area;
- GetObjectDetails: Supports the following new items:
New LSL Actions:
- SetLinkMediaProperties: Sets the media properties on the specified linked prim;
- ClearLinkMediaProperties: Clears the media properties on the specified linked prim;
- SetCameraPosition: Sets the offsets for the camera eye and the camera target, for avatars that sit on the linked prim.
- SetMouselook: Sets if a sitting avatar should be forced into mouselook when they sit on this prim;
- SetCameraToFollowAvatar: Sets camera properties to follow your avatar;
- LockCameraToPosition: Locks camera to a fixed position and focus;
- ResetCameraSettings: Resets all camera parameters to default values and turns off scripted camera control;
- GetCameraPosition: Gets the current camera position for the avatar;
- GetCameraRotation: Gets the current camera rotation for the avatar;
- ResetCameraSettings: Resets all camera parameters to default values and turns off scripted camera control;
- GetSeatedAvatar: Gets the key of the avatar that is sitting on the linked prim;
- SetLinkSitTarget: Sets the sit location for the linked prim;
- ResetLinkSitTarget: Resets the sit location for the linked prim;
- SetVelocity: Applies a velocity to a physical object;
- SetAngularVelocity: Applies a rotational velocity to a physical object;
- SayToSomeone: Chat some text on the specified channel to someone or some object within the region;
- SetPhysicsMaterial: Sets the physics material;
- GetPhysicsMaterial: Gets the current physics material settings;
- SetPrimLocalPosition: Sets the prim's local position;
- SpinLinkedPrim & SetPrimOmega: Rotates a linked prim around an axis;
- StopLinkedSpin: Stop the spinning of a linked prim;
- SetPrimShapeType: Sets the type of shape the physics engine should use for the prim;
(701) LSL Actions and Categories Now Alphabetically Sorted:
Within the Insert Action menu, the LSL Action categories and their sub-menu items are now alphabetically sorted for easier access.
(643) New LSL functions and constants:
The following new LSL functions and constants are now supported. Note that several of them may still be in pre-release status in Second Life and as such may not yet be fully-supported.
(646) Script Menu Items Renamed for Increased Clarity:
For increased clarity, the Rename, Set Version, Custom Globals and Edit Comment menu items within the Script menu have been renamed to Rename Script, Set Script Version, Edit Custom Globals and Edit Script Comment respectively.
(632) ELSE Statement Moved After else if in Code Completion:
The ELSE value for Guard Conditions was showing up in the Code Completion pop-up lists ahead of the else if control structure, causing some users to inadvertently select ELSE instead of else if.
To remedy this the ELSE has been moved to follow the LSL control structures in the Code Completion list.
(698) Improved Appearance and Handling of Data Grids in Various Dialogs:
When the Component Configuration and LSL Action Configuration Wizard forms are now re-sized, their contained parameters grid will also re-size to show any parameters that may have been hidden.
In addition, proper theme colors are now used for highlighting rows in all data grids in various dialogs.
(708) Improved Parsing of State Variable Initialization Code:
When you define a State Variable in MiceOnABeam, you can supply an initialization value which, by default, will be assigned to the variable when the generated script is first started up. Due to LSL restrictions on global variables, these values may only be simple constants; no complex expressions are permitted.
With this release, entering in a complex LSL expression for a State Variable's initialization will flag a parsing error, unless the variable is otherwise configured via the State Variable Configure Options dialog to initialize during state entry.
(689) Help Cursor Now Shown When Show Comments Button Selected:
The Help Cursor will now be shown whenever the Show Comments button has been selected. This will indicate that comments (and extended comments if the Show extended model comments option has been enabled) will be displayed when the cursor is moved over a component.
(730) Larger Area Now Provided for State Variables in editor:
By default the State Variables and Functions editor will now show three State Variables and two State Functions.
(737) Propagated Code Now Inserted at Beginning of Leaf State Entry/Exit Code:
Propagated code designated by the #leaf and #endleaf compiler directives is now inserted at the beginning of the Entry/Exit Action code of a Composite State's Simple States whereas in previous releases it was appended to the leaf code segment.
(669) Search results will now show highlighted in previously opened property editors:
In previous releases, text in an already opened Properties Editor that matches a search was not highlighted when that Properties Editor was activated from the Search Dialog. This has been fixed.
Remember that any changes made in an opened Properties Editor have not yet been saved and so will not directly correspond to any search results.
(691) Help tips for the Search Dialog have now been added:
Help tips (enabled from the main Help menu) were missing from the Search Dialog. These have now been added.
(690) Crash on attempting to open Properties or State Editor for deleted item from Search Dialog:
If a component was found as a result of a search in the Search Dialog and then subsequently deleted, a crash would occur if the properties for that component or it's containing State Editor was attempted to be opened from the Search Dialog.
If a found component is subsequently deleted, the right-click menu in the Search Dialog will have it's corresponding menu items disabled.
(664) Error loop for invalid LSL Actions:
During code generation for an entered LSL Action, if the parameter specification was determined to be in error, MiceOnABeam would loop continuously on reporting the error. This has been fixed.
Further, the parameter in question will be prefixed in the generated code with "ERROR_IN_LSL_ACTION".
(644) Initializer in "for" loop is now optional as per LSL spec:
Previously a blank initializer in a "for" loop would be flagged as an LSL syntax error. As per the LSL specification, the initializer is now optional.
(695) Deleting name of State Variable/Function or Configured Choice could leave an empty row:
Empty rows within the State Variable, State Function or Configured Choices grids should be automatically deleted during normal validation of the row data. In the case where the row validation was triggered by clicking on the row dedicated for new entries, the blank row was not removed. This has been fixed.
(693) Error lines were saved in code after LSL Action editing:
On editing a new or existing LSL Action, if a coding error was overridden by the user, the error message line was included within the generated LSL Action compiler directive. Error messages are now cleared before saving the LSL Action.
(702) Bugs fixed in several editors involving data grids:
Several bugs have been fixed involving editors which use a data grid to display information.
- For the State Variables/Functions editor, the Configured Choices grid within the State Variable Configure Options dialog and the User LSL Actions editor:
Directly entering LSL code in *new* row code columns did not enable code completion.
Selecting and de-selecting the *new* row could cause a crash.
- In the User LSL Actions editor, entering code directly in the Default column of a new Parameter row and then tabbing out of that column would cause a crash.
- In the User LSL Actions editor blank Code Lines were not automatically removed.
- In the State Variables/Functions editor:
In the State Variables data grid if a comment or description was entered in without the Name and Type fields filled in, and then the row deselected, the row would be deleted.
In the Functions data grid if parameters were entered in without the Name and Type fields filled in, and then the row deselected, the row would be deleted.
All these issues have been resolved.
(704) Choice Points were difficult to select in some circumstances:
A Choice Point with a vertical, incoming transition could be difficult to select, or draw a transition from. This has been fixed.
(694) Opening additional copy of model from Component Library Browser fails:
Previously if a model file was opened from the Component Library Browser and it's script name was changed, a subsequent additional opening of that model file from the library would fail with the error message that a script with the same name already exists. This has been fixed.
(696) LSL Actions could not be used within functions declared within Custom Globals:
You may now insert the built-in LSL Actions within a function declared within the Custom Globals code for a model.
(732) Crash on editing properties of Default History transition:
Editing the properties of a Default History Transition would cause a crash on saving the changes. This has been fixed.
(737) LSL Actions were not handled properly if inserted within #leaf #endleaf directives:
LSL Action compiler directives were neither propagated nor expanded when used within #leaf #endleaf compiler directives. This has been fixed.
(132) Moving a State Editor window will clear the Undo/Redo history.
(405) Can't close a State Variables and Functions Editor containing an invalid field:
If there is a field with invalid data in the State Variables/Functions Editor, the editor cannot be closed using the ESC key. It will also not close using the Close Box the first time it is pressed. In this case the Cancel button should be used to abort the changes.
(224) Crash on startup updating Splash Screen:
Particularly in Windows 7 installations a rare crash may occur on startup of the MiceOnABeam program after displaying the initial Splash Screen. Code has been put in to detect this issue and avoid aborting the program.
A work-around for the problem if it still occurs is to disable the Splash Screen by de-selecting Show Splash Screen in the General pane of the Tools/Options menu.
(790) Accented letters in string will flag coding error:
Using accented letters in a string constant will cause a coding error to be issued. As a work-around click OK on the properties editor and select Yes to ignore the error and save your code anyways. Then ensure that the Generate Code On Errors option is selected in the Code Generation options of the Options menu. When you Generate LSL the code will be fine.
(797) Crash on saving Edit User Actions if comment field empty:
If a new LSL Action definition is created within the Edit User LSL Actions window and the Comment field is not assigned, then clicking Save or OK will cause a crash. The Comment field for a user-defined LSL Action must always be defined. This field will be made mandatory in the next release.
(829) TRACE_XXX functions not generated if only placed within state functions:
If any of the TRACE_xxx functions are only placed within state functions, then the required LSL code for the trace is not included within the generated code. A work-around is to put a dummy call to the TRACE_xxx function of interest within the top Initial Transition of the script model.