This Iteration was basically to add more needs of the persons, but i got some good testers, suggesting a lot of useful things and improvements. They also build very large ships with >50 persons. The performance was fine, but not at the target. Due to i wanted to add more features it was needed to refactor the architecture of the simulation, so it gains a big performance boost.
Persons now have a Mood. It's a 2. Level need, influences by the basic needs like nutrition or sleep.. The Mood has an influence on the activity productivity when the person is working (more to that below in the Productivity section).
Later its planned to add also a 3. Level like rebellion stage or hope, that changes even slower. It's also prepared to add some long term effects on it, like good or bad news from earth could have a slow effect over a given time, that could also reflect the thoughts of the person.
New Resource Event Architecture
Most of the simulation time goes to set up the next tasks for the resources, hitting a limit. This was improved now, so all resource calculations (air, tubes, boxes, needs, ...) are now done with a single code base. This allows to manage it just with a single next event, instead of all keeping all events. It improves the simulation up to 2-3 times in the editor and should have also a big effect as bigger the ship will become.
I made also a very big refactoring by promoting the activities of a building to separate simulation objects. Before they were a part of the building causing an inefficient architecture. This separation now allows several optimisations and further features, like having multiple same activities in one building. Also the algorithms to detect the state of an activity e.g. for an interior light or animation can now directly check in the hierarchy for the related work, instead of searching for it. I could also do a lot of optimisation for larger ships.
Another advantage of operate the activities was to be able to cache there the productivity. I refactored that part also a lot, so its now just calculating the changed productivity parts and is able to performant and flexible recalculate the productivity. E.g. it can also calculate the Productivity without the customers, so it can see if the customers stops to being active without big effort. This makes it finally possible to rethink the service activities, working now like all the others (so 1 of 2 customers will have 50% efficiency).
The last part of the performance improvement was to make the metrics faster to update. When searching for something to do its caching the main values. When a service building gets available, the person checks first its faster than the current one, before recalculating all other options he has.
All in all it gained a huge performance boost. The starting ship can push now the first 3 months of playtime in a few seconds.
Async Save games
Big ships had some troubles with long save duration. It took ~5s for a big ship. To prevent a big lag at the autosave, it was necessary to split separate the save process to be able to render frames in the meantime. I was able to copy the complete simulation of the big ship in ~100ms, and could than run async on this data, so the main simulation can still continue while saving! Its now just 1 small frame drop when the autosave start, to prevent saving inconsistent data. Till its done, i can set up a maximum time the save game should use, to not drop the fps too much, so its similar as the Person Generation and the Simulation Tasks.
I also improved the general save process, so if something happens while saving, the save game is not gone like before. Its first saving it to a temp file and just using it when everything is successfully finished preventing corrupt save games.
Its now also showing it, when its auto saving and the save game dialog got a progress popup.
Zoom to Mouse
To make it easier in large ships to move around, i added a zoom to mouse feature. Before, the camera just zoomed to the center of the screen, what was usually not what the player wanted to see. Now it's zooming directly to the mouse-cursor, except when the player moves the camera at the same time.
Zoom and Follow Entities
In large ships it was also not so easy to find buildings or persons. To make this easier, i added a zoom to the building and interior, when clicking on the big icon at the details. For persons its similar, but the camera will directly follow the person, till the camera moves away. Zooming and rotating the camera did not stop that, to give more controls over it.
More options to Events
Due to a player feedback, i improved the events (e.g. out of energy). He wanted to have the info panel, but without stopping the simulation. The main usage i is for the arrived supply ship, that is a good info, but there i usually no need to stop it. To make this good visible, i added a toggle button to the event Panel. Its also changeable in the options any time for any event. (Thanks to BurritoBotV3000)
Other smaller changes
- Fixed missing Personages when loading a game
- Fixed wrong gender for new crew members (not matching the name)
- Fixed missing corner of one building
- Fixed Removing Interior left over meshes (Thanks to BurritoBotV3000 for report)
- Fixed Exception in some cases with Tooltips (Thanks to BurritoBotV3000 for report)
- Fixed Problem that work targets are not cleared when dismantle (Thanks to BurritoBotV3000 for report)
- Improved Error Handling Screens
- Fixed Update of Work Container Warnings
- Added Click on ResourceOverview select related Buildings (Thanks to BurritoBotV3000 for report)
- Added in or out hint to the production labels (Thanks to hackerintraining)
- Prevent problems caused by single exceptions in ui (more robust)
- Fixed smoothing issues at the Starting Rocket in the intro
- Start with more methane to prevent running out of methane too early (thanks to hackerintraining)
- Added Problem Pump Interior to the Water pipe warning event (thanks to hackerintraining for report)
- Fixed drop down options can be not visible
- Added Scroll bar for Choosing Popups for large ships
- Highlight dismantle button red when over and confirm (thanks to BurritoBotV3000)
- Added Stop Time warp button to Events (thanks to BurritoBotV3000)
- Performance improvement for find users and find next activity
- Added Info to UI if the person generator is running
- Fixed Perspective Overflow not working anymore
- Only show the Interior-Tiles when its needed, to see the floor wall textures better
- Fixed wrong camera movement first time entering the interior configuration
- Fixed Unity issue, that parent and children are wrong (problem with save games in special situations)
- Fixed selection issue of special case in Photovoltaic Panel under construction (thanks to BurritoBotV3000 for report)
- Fixed exception when try to add another storage in interior configuration with ctrl
- Fixed Maintenance not stop maintaining when loosing connection (thanks to ichao for report)
- Make Snapshot releases (Test version) have a reasonable Date
- Persons stay longer at the current service building before leaving to other things
- Starting Generator gets directly the ThrowOutIfFull, so new players not get a problem with it too early.
- Added More speed options (30s, 10 m/s and 5h/s) to have more flexibility (thanks to BurritoBotV3000 for the hint)
- Changed Construction Icon to the Hammer, to prevent confusion with Maintenance
- Fixed Feedback Popup could be behind tutorial-tooltips
- Make the border red on empty container values, to hint the player more to problems.
- Fixed missing and wrong updated Colors of ConnectedStorages Icons
- Fixed wrong status on full single box storages at connectedStorage Icons
- Make sure Space bar also stops the time warp when a TextDield is focused
- Changed WorkingS lot Click Behavior to use a more usual key-binding (Thanks to BurritoBotV3000 for the hint)
- Increased building layer size of the photovoltaic panel, to prevent confusion due to multiple layers
- Keep the Rotation when switching from interior to con fig camera
- No Condition impact to the Service Activities to prevent unrealistic duration. (thanks to BurritoBotV3000 for testing)