December 23 2015 build
| This is the article of a development build of Skyscraper Simulator.|
It has been confirmed a good-faith contribution to the Skyscraper wiki.
This is an update to the previous build, and so I have that build's notes after this one, since it's still relevant.
This build has mostly an overhauled People Manager system, with much better routing, proper waits (people wait for doors to open, etc), better status reporting, etc. They also exit the elevators if Fire Phase 1 is enabled, and exit if the elevator goes into a service mode. A serious crash was also fixed in the window.
The app will no longer exit to the main menu when you shut down the active sim engine - this had broken due to a last-minute change in the previous build.
I fixed an issue where if a service mode was enabled from something like the elevator editor, the related switch would no longer work since it was already in that mode. The switches now move even if the elevator is already in the mode.
For hall call responses, elevators will now take over other elevator's responses to the calls, if they become available and are more eligible for the call. They will also now stop if the related route table is empty (so it'll stop if another elevator takes over a call, if it has no more calls), and they will now skip a dequeued floor (if an elevator is going to multiple floors, and the one it's currently going to is dequeued, it'll skip that floor instead of arriving at it anyway).
I made some performance improvements to the main window and control panel window, that will speed up additional building loads (since they were running slower than usual, due to those windows). I also fixed a number of initialization bugs in multiple places, which will increase reliability.
I've done some work to the Elevator Editor, mainly added a Type box, removed the old Origin box, combined the Door Height and Width boxes together, and made the Active Hall Call Direction box show the direction text along with the type of call it is (Car, Hall or System).
-(Elevator Editor) Active Hall Direction box now shows the direction text along with the call type
-(Elevator Editor) combined Door Height and Door Width boxes into a single Door Size
-(Elevator Editor) added Type box
-(Elevator Editor) removed the Origin box (no longer used)
-(Bullet) updated with a minor initialization fix
-person object should use floor ID text instead of number
-cleanups of Object Information window - this also fixes some serious object initialization bugs
-cleaned up singleton variables in frontend; moved them into the object classes
-control panel windows should be created on-demand (performance improvement)
-have only main screen handle idle events - this and the previous change should result in minor performance improvements
-pause the control panel's timer when the progress bar is visible (performance improvement)
-if elevator's routes are empty, stop the elevator when cancelling the hall call response
-added support for elevators that are closer and become available during an active hall call, to take over the call response.
-added function (C++) to cancel an elevator's hall call response route, if no related floor button has been pressed
-added function (C++) to return control/button light status
-in the control panel, timer object should be reinitialized, not deleted and recreated from the OnInit call in the timer notify function. This fixes an issue where the timer object was deleted and then code continued to run in it's Notify function
-fixed an issue where elevator service mode controls would get stuck if an elevator was switched into a different service mode, while the controls were set. This change has the elevator mode setting functions succeed instead of fail, if the mode is the same.
-person should update their Current Floor setting while riding in an elevator
-have person wait until doors are open before exiting elevator
-more status reporting for Person object
-have person stop route if hall call fails
-if a person presses a call button, and the call status becomes invalid while they're waiting (the button light switches off), have them stop their route -if a person is in an elevator that switches into a service mode, have them exit that elevator and try the hall call again
-if fire phase 1 mode is enabled while a person is in an elevator, have them exit at the recall floor instead of their original destination, and cancel all routes
-(Triton Center) motor position fixes
-added GetDirectFloors function (C++), along with code to find some routes that would fail with previous tests
-have route functions keep track of direct connections; this improves performance
-added an indirect local elevator check, if a person needs to take a local elevator before reaching direct route elevators
-shutdown fix - the system was exiting to the main menu if the active engine was shut down, when it's supposed to switch to another engine
-fix to properly reset values in People Manager window, when selecting a different person
-if person is riding in elevator, show riding status
-for Person object, wait for elevator doors to open before pressing floor button
-fix person list refreshing when switching engines
-array size fix for GetPerson function - fixes a crash when the list only contains 1 person, and the user switches to a different engine
Previous build notes (12/15/15 build):
This build is probably the largest feature update in the history of the simulator, for a single build. In addition to numerous serious bugfixes, this build contains work from 2 feature branches and another major feature that was made in the trunk code. The new major features:
-New Sound System code (soundsystem branch) This build has new sound system management code, which makes sound loading and processing much more efficient. The old code would load sound files from disk for each sound object, resulting in a lot of disk loading activity, but the new system will only load a sound file once, and the objects will share the single loaded file, resulting in less disk loads and stuttering issues. This new sound system can also report statistics on the console, with new script commands. The new command ShowLoadedSounds lists the currently loaded sound files, along with the number of objects referencing it, and sound channels opened. The new ShowPlayingSounds command shows details on all sounds objects currently playing, in groups based on the sound file. Those commands are listed near the bottom of the Script Guide (designguide.html).
Skyscraper now uses the newer FMOD Studio sound library instead of the previously used FMOD Ex
-Person objects (trunk code) This feature is a replacement for the Random Activity feature. It's a basic simulation of people, and when Random Activity is turned on, a person is created for each floor the building has, and additionally a person with service elevator access (so for the Simple building it'll create 12 total, 11 regular people since it has 10 floors and 1 roof level, and an additional service person). When a person has random activity enabled, they will choose a random floor to go to in the building, and use Skyscraper's new elevator routing code to find a path to that destination floor. They'll press the related elevator call button, wait for the elevator, press the floor button inside the elevator, cross skylobbies if needed, and reach the destination floor. People can be managed in the new People Manager window, and this window lists the people along with their name, starting floor and destination floor, if the routing is active (if they're actively heading to the floor), status information, and other things. You can also create your own people this way, and even name them. This is the beginning of Sim Tower-like functionality, which is something I had always wanted. Keep in mind that this feature requires the new elevator Type parameter, in order for the person routing to know which elevators to use, otherwise all elevators appear as standard "Local" elevators to the sim engine. The routing code also supports up to 2 skylobbies between.
-Engine Contexts (engine_contexts branch) This is the big feature, and it needed it's own branch since it destabilized the frontend code very significantly. With this feature, Skyscraper can now load multiple buildings in the same 3D environment, and switch between them. This is done by creating "Engine Contexts", or containers that hold a paired SBS sim engine and script interpreter together, for each instance. Buildings can also be loaded in parallel, loaded while the user is doing things in another building, and even rendered (displayed) while it's loading. This feature is still under development, but is working very well so far, and appears to be stable. Engines can be managed in the new Engine Manager window, and also with new keys, which are ";" (semicolon) to load a new building, the "k" key to unload the last building, and the number keys 1 to 0 (across the top of the keyboard) to switch the camera between per-engine cameras. Right now the system will place each new building at a diagonal offset of the previous building, but you can move the new building by making it active, then clicking on the Object Manager dialog, choosing it's root SBS object, clicking Move, and moving the whole sim engine instance around in 3D space. In the Engine Manager window, you'll see the per-engine position offset, and you can also choose "Concurrent Loading" to have any new building load while the active building is still running, and "Render on Startup" to display the new building as it's loading (this runs slow though). Camera states are also restored when switching between sim engines, since each engine has a separate camera object. Script language support for using this is still pending, and I wanted to get this feature in a build so that people could play with it before doing any more.
Screenshots of that feature in action:
There's a known issue of buildings loaded after the first one sometimes having darker textures, and this is being investigated. Also the ground for each building will appear, causing overlaps (I'll be dealing with this soon), but for now you can switch to the other instances and delete their Landscape ground objects to fix it.
For other things, the elevator doors are now using relative positioning, and they should be working properly now. The Caelum sky system now uses the SBS scaling factor, so positions in the "sky.os" script are correct now, and I've also added new "Cloudy" and "Overcast" sky types. There's been numerous call button enhancements, to make hall call handling more realistic (see the changelog below for more details). Script error messages now show the script filename instead of the section number (which was deprecated in relation to the better "script context" field), and they also now show the engine context number if there's more than 1 sim engine running, mainly to identify which script interpreter had the error, since there will be multiple ones running.
I just added the "Cloudy" and "Overcast" sky types to the script guide, and so they didn't make it into the build packages. You can see them in the SVN script guide copy (this link always points to the latest one):
In relation to future updates, lately I've been looking into multithreading portions of the app, and am looking into Intel Threading Building Blocks, which might be able to help out very easily - I'll be making a test branch for this:
Linux builds are now done on Debian 8.
For other recent changes, see the previous build post:
-new People Manager dialog
-script errors now show the engine context number of the error, if more than one engine is running
-script errors now show the building filename instead of the section number, which isn't needed due to the script context string
-new Engine Contexts system, along with the Engine Manager dialog, which allows multiple buildings to be loaded and run in parallel
-elevators should continue checking elevator availability in a QueuePending stage, if the elevator is on the same floor as the call, and the doors are open or opening/closing. This lets the elevator take the call and re-open in that situation
-objects without parent scenenodes should attach to engine scenenode, not scene root node
-moved scenenode-related code out into separate SceneNode object
-added OgreBullet project files to main solution, to simplify building process on Windows. The separate OgreBullet solution is no longer needed.
-make sure building is specified before trying to load building
-call buttons should update arrival notification if elevator is on same floor and opened
-call buttons should reprocess call if the elevator that is handling the active call becomes unavailable during movement
-Random Activity now uses the new people code, and the old functionality has been removed
-added routing functions, for Person object to find an elevator route to a floor
-have elevators notify call buttons on arrival
-added object validity functions
-switched to FMOD Studio for sound
-ToRemote/ToLocal functions should support turning off the Z-flip (for rescaling only)
-created ObjectBase class for lightweight objects (currently Actions and Polygons)
-removed singleton pointer and properly propagate and store engine pointer, through object parent parameters
-added Person object
-added elevator type parameter, and added to main building files
-added ShowLoadedSounds and ShowPlayingSounds script commands
-cache file listing in VerifyFile function, to fix a major performance bottleneck when a building is missing lots of files along with a large data folder existing
-print FMOD version number on initialization
-new Sound System code, which provides more efficient sound management
-timers and meshes should be permanent by default
-call buttons should reject call if related button does not exist
-added Cloudy and Overcast sky types
-have Caelum use SBS scaling factor
-converted elevator door movement to relative positioning; also fixes an issue with vertically-moving shaft doors from working properly
-cleanups for HitBeam function
-converted elevator door movement to relative positioning; also fixes an issue with vertically-moving shaft doors from working properly
-sound support should not be switched off when IntroMusic is set to false in the INI file
- There are a total of 34 changes, fixes, and removals between the last build and this build in the main changelog and 33 changes, fixes, and removals between the last build and this build in the previous changelog, making 67 total changes.