return to the character screeen. And other related improvements.
* Uid now optional when removing an entity from IdMaps since that Uid
may have been transferred to the new entity created when the client
exits "in-game".
* Added notes about making sure to update the CharacterId mapping when
changing the `kind` field of `Presence`.
* Add a parameter to `delete_entity_recorded` that indicates whether it
is being called from `handle_exit_ingame` and that provides the `Uid`
that was removed from the entity so that we can more explicitly and
correctly handle that case.
* We now add the Uid of the client to the deleted entities list when it
exits "ingame". (still need to rework code so that the client doesn't
delete its own entity).
* Improved integration of possession code with ForceUpdate logic.
* Don't remove `Presence` component from old entity in possession so
that deleting that entity will properly handle updating the
CharacterId unmapping (if the old entity isn't going to be deleted we
still remove the `Presence` component so that it doesn't keep terrain
loaded).
* Added a couple TODOs on existing tangential things I noticed.
types.
* Add new `IdMaps` type that contains mappings to Entity from Uid, CharacterId, and
RtsimEntity.
* Add PresenceKind::LoadingCharacter variant for when the CharacterId
has not actually been confirmed to exist and belong to the logged in
client. Switches to the regular PresenceKind::Character once the
character is loaded from the database and that is used to update the
entity.
* Start refactoring `delete_entity_recorded` to check for CharacterId
and RtsimEntity values that may need to be removed from the map (just
very start, not near complete).
* Other misc tweaks.
entities are synced from and displayed in.
NOTE: Syncing entities work at the granularity regions which are
multi-chunk squares but the display of entities in voxygen is limited in
a circle with the radiues of the supplied distance.
Additional details and changes:
* Added `ViewDistances` struct in `common` that contains separate
terrain and entity view distances (the entity view distance will be
clamped by the terrain view distance in uses of this).
* View distance requests from the client to the server now use this
type.
* When requesting the character or spectate state the client now passes
its desired view distances. This is exposed as a new parameter on
`Client::request_character`/`Client::request_spectate`. And the client
no longer needs to send a view distance request after entering these
states. This also allows us to avoid needing to initialize `Presence`
with a default view distance value on the server.
* Removed `DerefFlaggedStorage` from `Presence` and `RegionSubscription` since the
change tracking isn't used for these components.
* Add sliders in voxygen graphics and network tabs for this new setting.
Show the clamped value as well as the selected value next to the
slider.
* Rename existing "Entities View Distance" slider (which AFAIK controls
the distance at which different LOD levels apply to figures) to
"Entities Detail Distance" so we can use the former name for this new
slider.
distance changes (until the player crossed a chunk boundary and
triggered the normal update).
This introduces a `ViewDistance` struct that provides an abstraction
around limiting the rate the view distance can be cycled up and down.
This helps avoid unnecessary sending, deleting, and then resending of
synced things like entities (the client will still delete its terrain
locally and re-request it though).
The second part of this fix is storing the last view distance in the
`RegionSubscription` struct and then updating region subscriptions if
this doesn't match the current view distance in the `Presence`
component.
* Add mass
* Add density
* Add collider.
This one is strange as always, I don't know what's wrong, but debug hitbox
changes only after death. Real one seems to work.