@dcl/protocol 1.0.0-2907820380.commit-4e0eac3 → 1.0.0-29255960851.commit-cd43ffd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +285 -0
- package/out-js/about.gen.d.ts +1 -0
- package/out-js/about.gen.js +6 -0
- package/out-js/about.gen.js.map +1 -0
- package/out-js/comms.gen.d.ts +1 -0
- package/out-js/comms.gen.js +6 -0
- package/out-js/comms.gen.js.map +1 -0
- package/out-js/decentraland/common/border_rect.gen.d.ts +49 -0
- package/out-js/decentraland/common/border_rect.gen.js +201 -0
- package/out-js/decentraland/common/border_rect.gen.js.map +1 -0
- package/out-js/decentraland/common/colors.gen.d.ts +59 -0
- package/out-js/decentraland/common/colors.gen.js +260 -0
- package/out-js/decentraland/common/colors.gen.js.map +1 -0
- package/out-js/decentraland/common/content_mapping.gen.d.ts +31 -0
- package/out-js/decentraland/common/content_mapping.gen.js +80 -0
- package/out-js/decentraland/common/content_mapping.gen.js.map +1 -0
- package/out-js/decentraland/common/sdk/user_data.gen.d.ts +63 -0
- package/out-js/decentraland/common/sdk/user_data.gen.js +330 -0
- package/out-js/decentraland/common/sdk/user_data.gen.js.map +1 -0
- package/out-js/decentraland/common/texture.gen.d.ts +105 -0
- package/out-js/decentraland/common/texture.gen.js +475 -0
- package/out-js/decentraland/common/texture.gen.js.map +1 -0
- package/out-js/decentraland/common/vectors.gen.d.ts +71 -0
- package/out-js/decentraland/common/vectors.gen.js +338 -0
- package/out-js/decentraland/common/vectors.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/comms_api.gen.d.ts +206 -0
- package/out-js/decentraland/kernel/apis/comms_api.gen.js +792 -0
- package/out-js/decentraland/kernel/apis/comms_api.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/communications_controller.gen.d.ts +105 -0
- package/out-js/decentraland/kernel/apis/communications_controller.gen.js +400 -0
- package/out-js/decentraland/kernel/apis/communications_controller.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/dev_tools.gen.d.ts +58 -0
- package/out-js/decentraland/kernel/apis/dev_tools.gen.js +142 -0
- package/out-js/decentraland/kernel/apis/dev_tools.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/engine_api.gen.d.ts +338 -0
- package/out-js/decentraland/kernel/apis/engine_api.gen.js +1452 -0
- package/out-js/decentraland/kernel/apis/engine_api.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/environment_api.gen.d.ts +283 -0
- package/out-js/decentraland/kernel/apis/environment_api.gen.js +1122 -0
- package/out-js/decentraland/kernel/apis/environment_api.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/ethereum_controller.gen.d.ts +225 -0
- package/out-js/decentraland/kernel/apis/ethereum_controller.gen.js +878 -0
- package/out-js/decentraland/kernel/apis/ethereum_controller.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/parcel_identity.gen.d.ts +146 -0
- package/out-js/decentraland/kernel/apis/parcel_identity.gen.js +557 -0
- package/out-js/decentraland/kernel/apis/parcel_identity.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/permissions.gen.d.ts +100 -0
- package/out-js/decentraland/kernel/apis/permissions.gen.js +360 -0
- package/out-js/decentraland/kernel/apis/permissions.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/players.gen.d.ts +127 -0
- package/out-js/decentraland/kernel/apis/players.gen.js +372 -0
- package/out-js/decentraland/kernel/apis/players.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/portable_experiences.gen.d.ts +178 -0
- package/out-js/decentraland/kernel/apis/portable_experiences.gen.js +607 -0
- package/out-js/decentraland/kernel/apis/portable_experiences.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/restricted_actions.gen.d.ts +304 -0
- package/out-js/decentraland/kernel/apis/restricted_actions.gen.js +1057 -0
- package/out-js/decentraland/kernel/apis/restricted_actions.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/runtime.gen.d.ts +217 -0
- package/out-js/decentraland/kernel/apis/runtime.gen.js +801 -0
- package/out-js/decentraland/kernel/apis/runtime.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/scene.gen.d.ts +59 -0
- package/out-js/decentraland/kernel/apis/scene.gen.js +171 -0
- package/out-js/decentraland/kernel/apis/scene.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/signed_fetch.gen.d.ts +139 -0
- package/out-js/decentraland/kernel/apis/signed_fetch.gen.js +615 -0
- package/out-js/decentraland/kernel/apis/signed_fetch.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/social_controller.gen.d.ts +72 -0
- package/out-js/decentraland/kernel/apis/social_controller.gen.js +207 -0
- package/out-js/decentraland/kernel/apis/social_controller.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/testing.gen.d.ts +249 -0
- package/out-js/decentraland/kernel/apis/testing.gen.js +1073 -0
- package/out-js/decentraland/kernel/apis/testing.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/user_action_module.gen.d.ts +56 -0
- package/out-js/decentraland/kernel/apis/user_action_module.gen.js +128 -0
- package/out-js/decentraland/kernel/apis/user_action_module.gen.js.map +1 -0
- package/out-js/decentraland/kernel/apis/user_identity.gen.d.ts +86 -0
- package/out-js/decentraland/kernel/apis/user_identity.gen.js +236 -0
- package/out-js/decentraland/kernel/apis/user_identity.gen.js.map +1 -0
- package/out-js/decentraland/kernel/comms/rfc4/comms.gen.d.ts +334 -0
- package/out-js/decentraland/kernel/comms/rfc4/comms.gen.js +2093 -0
- package/out-js/decentraland/kernel/comms/rfc4/comms.gen.js.map +1 -0
- package/out-js/decentraland/kernel/comms/rfc5/ws_comms.gen.d.ts +183 -0
- package/out-js/decentraland/kernel/comms/rfc5/ws_comms.gen.js +906 -0
- package/out-js/decentraland/kernel/comms/rfc5/ws_comms.gen.js.map +1 -0
- package/out-js/decentraland/kernel/comms/v3/archipelago.gen.d.ts +224 -0
- package/out-js/decentraland/kernel/comms/v3/archipelago.gen.js +1204 -0
- package/out-js/decentraland/kernel/comms/v3/archipelago.gen.js.map +1 -0
- package/out-js/decentraland/quests/definitions.gen.d.ts +541 -0
- package/out-js/decentraland/quests/definitions.gen.js +2728 -0
- package/out-js/decentraland/quests/definitions.gen.js.map +1 -0
- package/out-js/decentraland/realm/about.gen.d.ts +229 -0
- package/out-js/decentraland/realm/about.gen.js +1185 -0
- package/out-js/decentraland/realm/about.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/animator.gen.d.ts +62 -0
- package/out-js/decentraland/sdk/components/animator.gen.js +192 -0
- package/out-js/decentraland/sdk/components/animator.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/audio_source.gen.d.ts +61 -0
- package/out-js/decentraland/sdk/components/audio_source.gen.js +151 -0
- package/out-js/decentraland/sdk/components/audio_source.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/audio_stream.gen.d.ts +50 -0
- package/out-js/decentraland/sdk/components/audio_stream.gen.js +138 -0
- package/out-js/decentraland/sdk/components/audio_stream.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/avatar_attach.gen.d.ts +76 -0
- package/out-js/decentraland/sdk/components/avatar_attach.gen.js +262 -0
- package/out-js/decentraland/sdk/components/avatar_attach.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/avatar_base.gen.d.ts +36 -0
- package/out-js/decentraland/sdk/components/avatar_base.gen.js +129 -0
- package/out-js/decentraland/sdk/components/avatar_base.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/avatar_emote_command.gen.d.ts +37 -0
- package/out-js/decentraland/sdk/components/avatar_emote_command.gen.js +95 -0
- package/out-js/decentraland/sdk/components/avatar_emote_command.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +36 -0
- package/out-js/decentraland/sdk/components/avatar_equipped_data.gen.js +90 -0
- package/out-js/decentraland/sdk/components/avatar_equipped_data.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +62 -0
- package/out-js/decentraland/sdk/components/avatar_modifier_area.gen.js +160 -0
- package/out-js/decentraland/sdk/components/avatar_modifier_area.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/avatar_shape.gen.d.ts +82 -0
- package/out-js/decentraland/sdk/components/avatar_shape.gen.js +298 -0
- package/out-js/decentraland/sdk/components/avatar_shape.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/billboard.gen.d.ts +61 -0
- package/out-js/decentraland/sdk/components/billboard.gen.js +142 -0
- package/out-js/decentraland/sdk/components/billboard.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/camera_mode.gen.d.ts +36 -0
- package/out-js/decentraland/sdk/components/camera_mode.gen.js +70 -0
- package/out-js/decentraland/sdk/components/camera_mode.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/camera_mode_area.gen.d.ts +48 -0
- package/out-js/decentraland/sdk/components/camera_mode_area.gen.js +85 -0
- package/out-js/decentraland/sdk/components/camera_mode_area.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/common/avatar_mask.gen.d.ts +8 -0
- package/out-js/decentraland/sdk/components/common/avatar_mask.gen.js +34 -0
- package/out-js/decentraland/sdk/components/common/avatar_mask.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/common/camera_type.gen.d.ts +10 -0
- package/out-js/decentraland/sdk/components/common/camera_type.gen.js +46 -0
- package/out-js/decentraland/sdk/components/common/camera_type.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/common/id.gen.d.ts +1 -0
- package/out-js/decentraland/sdk/components/common/id.gen.js +6 -0
- package/out-js/decentraland/sdk/components/common/id.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/common/input_action.gen.d.ts +41 -0
- package/out-js/decentraland/sdk/components/common/input_action.gen.js +209 -0
- package/out-js/decentraland/sdk/components/common/input_action.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/common/loading_state.gen.d.ts +11 -0
- package/out-js/decentraland/sdk/components/common/loading_state.gen.js +57 -0
- package/out-js/decentraland/sdk/components/common/loading_state.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/common/raycast_hit.gen.d.ts +45 -0
- package/out-js/decentraland/sdk/components/common/raycast_hit.gen.js +163 -0
- package/out-js/decentraland/sdk/components/common/raycast_hit.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/common/texts.gen.d.ts +23 -0
- package/out-js/decentraland/sdk/components/common/texts.gen.js +120 -0
- package/out-js/decentraland/sdk/components/common/texts.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/engine_info.gen.d.ts +41 -0
- package/out-js/decentraland/sdk/components/engine_info.gen.js +95 -0
- package/out-js/decentraland/sdk/components/engine_info.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/gltf_container.gen.d.ts +41 -0
- package/out-js/decentraland/sdk/components/gltf_container.gen.js +101 -0
- package/out-js/decentraland/sdk/components/gltf_container.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +35 -0
- package/out-js/decentraland/sdk/components/gltf_container_loading_state.gen.js +70 -0
- package/out-js/decentraland/sdk/components/gltf_container_loading_state.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/gltf_node_modifiers.gen.d.ts +57 -0
- package/out-js/decentraland/sdk/components/gltf_node_modifiers.gen.js +164 -0
- package/out-js/decentraland/sdk/components/gltf_node_modifiers.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/material.gen.d.ts +108 -0
- package/out-js/decentraland/sdk/components/material.gen.js +536 -0
- package/out-js/decentraland/sdk/components/material.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/mesh_collider.gen.d.ts +130 -0
- package/out-js/decentraland/sdk/components/mesh_collider.gen.js +471 -0
- package/out-js/decentraland/sdk/components/mesh_collider.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/mesh_renderer.gen.d.ts +104 -0
- package/out-js/decentraland/sdk/components/mesh_renderer.gen.js +382 -0
- package/out-js/decentraland/sdk/components/mesh_renderer.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/nft_shape.gen.d.ts +74 -0
- package/out-js/decentraland/sdk/components/nft_shape.gen.js +259 -0
- package/out-js/decentraland/sdk/components/nft_shape.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/player_identity_data.gen.d.ts +37 -0
- package/out-js/decentraland/sdk/components/player_identity_data.gen.js +83 -0
- package/out-js/decentraland/sdk/components/player_identity_data.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/pointer_events.gen.d.ts +110 -0
- package/out-js/decentraland/sdk/components/pointer_events.gen.js +306 -0
- package/out-js/decentraland/sdk/components/pointer_events.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/pointer_events_result.gen.d.ts +42 -0
- package/out-js/decentraland/sdk/components/pointer_events_result.gen.js +133 -0
- package/out-js/decentraland/sdk/components/pointer_events_result.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/pointer_lock.gen.d.ts +35 -0
- package/out-js/decentraland/sdk/components/pointer_lock.gen.js +69 -0
- package/out-js/decentraland/sdk/components/pointer_lock.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/raycast.gen.d.ts +79 -0
- package/out-js/decentraland/sdk/components/raycast.gen.js +274 -0
- package/out-js/decentraland/sdk/components/raycast.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/raycast_result.gen.d.ts +48 -0
- package/out-js/decentraland/sdk/components/raycast_result.gen.js +132 -0
- package/out-js/decentraland/sdk/components/raycast_result.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/realm_info.gen.d.ts +43 -0
- package/out-js/decentraland/sdk/components/realm_info.gen.js +151 -0
- package/out-js/decentraland/sdk/components/realm_info.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/text_shape.gen.d.ts +81 -0
- package/out-js/decentraland/sdk/components/text_shape.gen.js +345 -0
- package/out-js/decentraland/sdk/components/text_shape.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/tween.gen.d.ts +220 -0
- package/out-js/decentraland/sdk/components/tween.gen.js +1213 -0
- package/out-js/decentraland/sdk/components/tween.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/tween_sequence.gen.d.ts +39 -0
- package/out-js/decentraland/sdk/components/tween_sequence.gen.js +122 -0
- package/out-js/decentraland/sdk/components/tween_sequence.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/tween_state.gen.d.ts +40 -0
- package/out-js/decentraland/sdk/components/tween_state.gen.js +122 -0
- package/out-js/decentraland/sdk/components/tween_state.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/ui_background.gen.d.ts +63 -0
- package/out-js/decentraland/sdk/components/ui_background.gen.js +197 -0
- package/out-js/decentraland/sdk/components/ui_background.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/ui_dropdown.gen.d.ts +45 -0
- package/out-js/decentraland/sdk/components/ui_dropdown.gen.js +187 -0
- package/out-js/decentraland/sdk/components/ui_dropdown.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/ui_dropdown_result.gen.d.ts +30 -0
- package/out-js/decentraland/sdk/components/ui_dropdown_result.gen.js +69 -0
- package/out-js/decentraland/sdk/components/ui_dropdown_result.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/ui_input.gen.d.ts +44 -0
- package/out-js/decentraland/sdk/components/ui_input.gen.js +172 -0
- package/out-js/decentraland/sdk/components/ui_input.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/ui_input_result.gen.d.ts +32 -0
- package/out-js/decentraland/sdk/components/ui_input_result.gen.js +83 -0
- package/out-js/decentraland/sdk/components/ui_input_result.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/ui_text.gen.d.ts +50 -0
- package/out-js/decentraland/sdk/components/ui_text.gen.js +177 -0
- package/out-js/decentraland/sdk/components/ui_text.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/ui_transform.gen.d.ts +238 -0
- package/out-js/decentraland/sdk/components/ui_transform.gen.js +1547 -0
- package/out-js/decentraland/sdk/components/ui_transform.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/video_player.gen.d.ts +51 -0
- package/out-js/decentraland/sdk/components/video_player.gen.js +177 -0
- package/out-js/decentraland/sdk/components/video_player.gen.js.map +1 -0
- package/out-js/decentraland/sdk/components/visibility_component.gen.d.ts +39 -0
- package/out-js/decentraland/sdk/components/visibility_component.gen.js +83 -0
- package/out-js/decentraland/sdk/components/visibility_component.gen.js.map +1 -0
- package/out-js/decentraland/sdk/development/local_development.gen.d.ts +70 -0
- package/out-js/decentraland/sdk/development/local_development.gen.js +283 -0
- package/out-js/decentraland/sdk/development/local_development.gen.js.map +1 -0
- package/out-js/decentraland/sdk/ecs6/components_ecs6.gen.d.ts +1005 -0
- package/out-js/decentraland/sdk/ecs6/components_ecs6.gen.js +7842 -0
- package/out-js/decentraland/sdk/ecs6/components_ecs6.gen.js.map +1 -0
- package/out-js/decentraland/sdk/ecs6/engine_interface_ecs6.gen.d.ts +398 -0
- package/out-js/decentraland/sdk/ecs6/engine_interface_ecs6.gen.js +2512 -0
- package/out-js/decentraland/sdk/ecs6/engine_interface_ecs6.gen.js.map +1 -0
- package/out-js/decentraland/social_service/errors.gen.d.ts +96 -0
- package/out-js/decentraland/social_service/errors.gen.js +405 -0
- package/out-js/decentraland/social_service/errors.gen.js.map +1 -0
- package/out-js/decentraland/social_service/v1/social_service_v1.gen.d.ts +501 -0
- package/out-js/decentraland/social_service/v1/social_service_v1.gen.js +2517 -0
- package/out-js/decentraland/social_service/v1/social_service_v1.gen.js.map +1 -0
- package/out-js/decentraland/social_service/v2/social_service_v2.gen.d.ts +1827 -0
- package/out-js/decentraland/social_service/v2/social_service_v2.gen.js +9308 -0
- package/out-js/decentraland/social_service/v2/social_service_v2.gen.js.map +1 -0
- package/out-js/google/protobuf/descriptor.gen.d.ts +436 -0
- package/out-js/google/protobuf/descriptor.gen.js +3173 -0
- package/out-js/google/protobuf/descriptor.gen.js.map +1 -0
- package/out-js/google/protobuf/empty.gen.d.ts +38 -0
- package/out-js/google/protobuf/empty.gen.js +54 -0
- package/out-js/google/protobuf/empty.gen.js.map +1 -0
- package/out-js/quests.gen.d.ts +1 -0
- package/out-js/quests.gen.js +6 -0
- package/out-js/quests.gen.js.map +1 -0
- package/out-js/sdk-apis.gen.d.ts +1 -0
- package/out-js/sdk-apis.gen.js +6 -0
- package/out-js/sdk-apis.gen.js.map +1 -0
- package/out-js/sdk-components.gen.d.ts +1 -0
- package/out-js/sdk-components.gen.js +6 -0
- package/out-js/sdk-components.gen.js.map +1 -0
- package/out-js/sdk-development.gen.d.ts +1 -0
- package/out-js/sdk-development.gen.js +6 -0
- package/out-js/sdk-development.gen.js.map +1 -0
- package/out-js/social.gen.d.ts +1 -0
- package/out-js/social.gen.js +6 -0
- package/out-js/social.gen.js.map +1 -0
- package/out-ts/about.gen.ts +3 -0
- package/out-ts/comms.gen.ts +3 -0
- package/out-ts/decentraland/common/border_rect.gen.ts +230 -0
- package/out-ts/decentraland/common/colors.gen.ts +293 -0
- package/out-ts/decentraland/common/content_mapping.gen.ts +93 -0
- package/out-ts/decentraland/common/sdk/user_data.gen.ts +370 -0
- package/out-ts/decentraland/common/texture.gen.ts +539 -0
- package/out-ts/decentraland/common/vectors.gen.ts +377 -0
- package/out-ts/decentraland/kernel/apis/comms_api.gen.ts +884 -0
- package/out-ts/decentraland/kernel/apis/communications_controller.gen.ts +434 -0
- package/out-ts/decentraland/kernel/apis/dev_tools.gen.ts +161 -0
- package/out-ts/decentraland/kernel/apis/engine_api.gen.ts +1587 -0
- package/out-ts/decentraland/kernel/apis/environment_api.gen.ts +1264 -0
- package/out-ts/decentraland/kernel/apis/ethereum_controller.gen.ts +982 -0
- package/out-ts/decentraland/kernel/apis/parcel_identity.gen.ts +608 -0
- package/out-ts/decentraland/kernel/apis/permissions.gen.ts +397 -0
- package/out-ts/decentraland/kernel/apis/players.gen.ts +415 -0
- package/out-ts/decentraland/kernel/apis/portable_experiences.gen.ts +668 -0
- package/out-ts/decentraland/kernel/apis/restricted_actions.gen.ts +1151 -0
- package/out-ts/decentraland/kernel/apis/runtime.gen.ts +911 -0
- package/out-ts/decentraland/kernel/apis/scene.gen.ts +192 -0
- package/out-ts/decentraland/kernel/apis/signed_fetch.gen.ts +691 -0
- package/out-ts/decentraland/kernel/apis/social_controller.gen.ts +230 -0
- package/out-ts/decentraland/kernel/apis/testing.gen.ts +1270 -0
- package/out-ts/decentraland/kernel/apis/user_action_module.gen.ts +146 -0
- package/out-ts/decentraland/kernel/apis/user_identity.gen.ts +264 -0
- package/out-ts/decentraland/kernel/comms/rfc4/comms.gen.ts +2389 -0
- package/out-ts/decentraland/kernel/comms/rfc5/ws_comms.gen.ts +1029 -0
- package/out-ts/decentraland/kernel/comms/v3/archipelago.gen.ts +1338 -0
- package/out-ts/decentraland/quests/definitions.gen.ts +3020 -0
- package/out-ts/decentraland/realm/about.gen.ts +1415 -0
- package/out-ts/decentraland/sdk/components/animator.gen.ts +240 -0
- package/out-ts/decentraland/sdk/components/audio_source.gen.ts +209 -0
- package/out-ts/decentraland/sdk/components/audio_stream.gen.ts +182 -0
- package/out-ts/decentraland/sdk/components/avatar_attach.gen.ts +289 -0
- package/out-ts/decentraland/sdk/components/avatar_base.gen.ts +149 -0
- package/out-ts/decentraland/sdk/components/avatar_emote_command.gen.ts +115 -0
- package/out-ts/decentraland/sdk/components/avatar_equipped_data.gen.ts +105 -0
- package/out-ts/decentraland/sdk/components/avatar_modifier_area.gen.ts +195 -0
- package/out-ts/decentraland/sdk/components/avatar_shape.gen.ts +383 -0
- package/out-ts/decentraland/sdk/components/billboard.gen.ts +172 -0
- package/out-ts/decentraland/sdk/components/camera_mode.gen.ts +86 -0
- package/out-ts/decentraland/sdk/components/camera_mode_area.gen.ts +115 -0
- package/out-ts/decentraland/sdk/components/common/avatar_mask.gen.ts +31 -0
- package/out-ts/decentraland/sdk/components/common/camera_type.gen.ts +43 -0
- package/out-ts/decentraland/sdk/components/common/id.gen.ts +3 -0
- package/out-ts/decentraland/sdk/components/common/input_action.gen.ts +206 -0
- package/out-ts/decentraland/sdk/components/common/loading_state.gen.ts +54 -0
- package/out-ts/decentraland/sdk/components/common/raycast_hit.gen.ts +204 -0
- package/out-ts/decentraland/sdk/components/common/texts.gen.ts +117 -0
- package/out-ts/decentraland/sdk/components/engine_info.gen.ts +119 -0
- package/out-ts/decentraland/sdk/components/gltf_container.gen.ts +127 -0
- package/out-ts/decentraland/sdk/components/gltf_container_loading_state.gen.ts +89 -0
- package/out-ts/decentraland/sdk/components/gltf_node_modifiers.gen.ts +204 -0
- package/out-ts/decentraland/sdk/components/material.gen.ts +655 -0
- package/out-ts/decentraland/sdk/components/mesh_collider.gen.ts +536 -0
- package/out-ts/decentraland/sdk/components/mesh_renderer.gen.ts +454 -0
- package/out-ts/decentraland/sdk/components/nft_shape.gen.ts +288 -0
- package/out-ts/decentraland/sdk/components/player_identity_data.gen.ts +102 -0
- package/out-ts/decentraland/sdk/components/pointer_events.gen.ts +415 -0
- package/out-ts/decentraland/sdk/components/pointer_events_result.gen.ts +170 -0
- package/out-ts/decentraland/sdk/components/pointer_lock.gen.ts +85 -0
- package/out-ts/decentraland/sdk/components/raycast.gen.ts +333 -0
- package/out-ts/decentraland/sdk/components/raycast_result.gen.ts +168 -0
- package/out-ts/decentraland/sdk/components/realm_info.gen.ts +183 -0
- package/out-ts/decentraland/sdk/components/text_shape.gen.ts +470 -0
- package/out-ts/decentraland/sdk/components/tween.gen.ts +1336 -0
- package/out-ts/decentraland/sdk/components/tween_sequence.gen.ts +134 -0
- package/out-ts/decentraland/sdk/components/tween_state.gen.ts +136 -0
- package/out-ts/decentraland/sdk/components/ui_background.gen.ts +223 -0
- package/out-ts/decentraland/sdk/components/ui_dropdown.gen.ts +231 -0
- package/out-ts/decentraland/sdk/components/ui_dropdown_result.gen.ts +80 -0
- package/out-ts/decentraland/sdk/components/ui_input.gen.ts +215 -0
- package/out-ts/decentraland/sdk/components/ui_input_result.gen.ts +97 -0
- package/out-ts/decentraland/sdk/components/ui_text.gen.ts +219 -0
- package/out-ts/decentraland/sdk/components/ui_transform.gen.ts +1775 -0
- package/out-ts/decentraland/sdk/components/video_player.gen.ts +231 -0
- package/out-ts/decentraland/sdk/components/visibility_component.gen.ts +108 -0
- package/out-ts/decentraland/sdk/development/local_development.gen.ts +316 -0
- package/out-ts/decentraland/sdk/ecs6/components_ecs6.gen.ts +8957 -0
- package/out-ts/decentraland/sdk/ecs6/engine_interface_ecs6.gen.ts +2886 -0
- package/out-ts/decentraland/social_service/errors.gen.ts +442 -0
- package/out-ts/decentraland/social_service/v1/social_service_v1.gen.ts +2799 -0
- package/out-ts/decentraland/social_service/v2/social_service_v2.gen.ts +10674 -0
- package/out-ts/google/protobuf/descriptor.gen.ts +3470 -0
- package/out-ts/google/protobuf/empty.gen.ts +72 -0
- package/out-ts/quests.gen.ts +3 -0
- package/out-ts/sdk-apis.gen.ts +3 -0
- package/out-ts/sdk-components.gen.ts +3 -0
- package/out-ts/sdk-development.gen.ts +3 -0
- package/out-ts/social.gen.ts +3 -0
- package/package.json +28 -9
- package/proto/decentraland/common/border_rect.proto +18 -0
- package/proto/decentraland/common/colors.proto +21 -0
- package/{kernel/apis/common/ContentMapping.proto → proto/decentraland/common/content_mapping.proto} +1 -0
- package/proto/decentraland/common/entity.proto +13 -0
- package/proto/decentraland/common/floats.proto +8 -0
- package/proto/decentraland/common/options.proto +51 -0
- package/proto/decentraland/common/quantization_example.proto +164 -0
- package/{kernel/apis/common/UserData.proto → proto/decentraland/common/sdk/user_data.proto} +1 -0
- package/proto/decentraland/common/texture.proto +45 -0
- package/proto/decentraland/common/vectors.proto +26 -0
- package/proto/decentraland/kernel/apis/comms_api.proto +61 -0
- package/proto/decentraland/kernel/apis/communications_controller.proto +29 -0
- package/{kernel/apis/DevTools.proto → proto/decentraland/kernel/apis/dev_tools.proto} +3 -0
- package/proto/decentraland/kernel/apis/engine_api.proto +118 -0
- package/proto/decentraland/kernel/apis/environment_api.proto +76 -0
- package/{kernel/apis/EthereumController.proto → proto/decentraland/kernel/apis/ethereum_controller.proto} +12 -1
- package/{kernel/apis/ParcelIdentity.proto → proto/decentraland/kernel/apis/parcel_identity.proto} +6 -2
- package/proto/decentraland/kernel/apis/permissions.proto +36 -0
- package/proto/decentraland/kernel/apis/players.proto +35 -0
- package/proto/decentraland/kernel/apis/portable_experiences.proto +55 -0
- package/proto/decentraland/kernel/apis/restricted_actions.proto +101 -0
- package/proto/decentraland/kernel/apis/runtime.proto +71 -0
- package/proto/decentraland/kernel/apis/scene.proto +16 -0
- package/{kernel/apis/SignedFetch.proto → proto/decentraland/kernel/apis/signed_fetch.proto} +9 -0
- package/proto/decentraland/kernel/apis/social_controller.proto +19 -0
- package/proto/decentraland/kernel/apis/testing.proto +100 -0
- package/{kernel/apis/UserActionModule.proto → proto/decentraland/kernel/apis/user_action_module.proto} +2 -0
- package/{kernel/apis/UserIdentity.proto → proto/decentraland/kernel/apis/user_identity.proto} +4 -2
- package/proto/decentraland/kernel/comms/rfc4/comms.proto +176 -0
- package/proto/decentraland/kernel/comms/rfc5/ws_comms.proto +104 -0
- package/proto/decentraland/kernel/comms/v1/broker.proto +114 -0
- package/proto/decentraland/kernel/comms/v1/comms.proto +68 -0
- package/proto/decentraland/kernel/comms/v2/comms.proto +61 -0
- package/proto/decentraland/kernel/comms/v3/archipelago.proto +86 -0
- package/{kernel → proto/decentraland/kernel}/comms/v3/comms.proto +3 -3
- package/proto/decentraland/pulse/pulse_client.proto +79 -0
- package/proto/decentraland/pulse/pulse_server.proto +144 -0
- package/proto/decentraland/pulse/pulse_shared.proto +57 -0
- package/proto/decentraland/quests/definitions.proto +185 -0
- package/proto/decentraland/realm/about.proto +138 -0
- package/{ecs → proto/decentraland/sdk}/components/README.md +3 -3
- package/proto/decentraland/sdk/components/animator.proto +31 -0
- package/proto/decentraland/sdk/components/asset_load.proto +10 -0
- package/proto/decentraland/sdk/components/asset_load_loading_state.proto +16 -0
- package/proto/decentraland/sdk/components/audio_analysis.proto +44 -0
- package/proto/decentraland/sdk/components/audio_event.proto +12 -0
- package/proto/decentraland/sdk/components/audio_source.proto +31 -0
- package/proto/decentraland/sdk/components/audio_stream.proto +22 -0
- package/proto/decentraland/sdk/components/avatar_attach.proto +51 -0
- package/proto/decentraland/sdk/components/avatar_base.proto +15 -0
- package/proto/decentraland/sdk/components/avatar_emote_command.proto +13 -0
- package/proto/decentraland/sdk/components/avatar_equipped_data.proto +13 -0
- package/proto/decentraland/sdk/components/avatar_locomotion_settings.proto +21 -0
- package/proto/decentraland/sdk/components/avatar_modifier_area.proto +33 -0
- package/proto/decentraland/sdk/components/avatar_shape.proto +49 -0
- package/proto/decentraland/sdk/components/billboard.proto +35 -0
- package/proto/decentraland/sdk/components/camera_mode.proto +12 -0
- package/proto/decentraland/sdk/components/camera_mode_area.proto +25 -0
- package/proto/decentraland/sdk/components/common/avatar_mask.proto +7 -0
- package/proto/decentraland/sdk/components/common/camera_transition.proto +11 -0
- package/proto/decentraland/sdk/components/common/camera_type.proto +9 -0
- package/{ecs → proto/decentraland/sdk}/components/common/id.proto +1 -0
- package/proto/decentraland/sdk/components/common/input_action.proto +37 -0
- package/proto/decentraland/sdk/components/common/loading_state.proto +10 -0
- package/proto/decentraland/sdk/components/common/media_state.proto +13 -0
- package/proto/decentraland/sdk/components/common/raycast_hit.proto +16 -0
- package/proto/decentraland/sdk/components/common/texts.proto +21 -0
- package/proto/decentraland/sdk/components/engine_info.proto +15 -0
- package/proto/decentraland/sdk/components/gltf_container.proto +19 -0
- package/proto/decentraland/sdk/components/gltf_container_loading_state.proto +13 -0
- package/proto/decentraland/sdk/components/gltf_node_modifiers.proto +25 -0
- package/proto/decentraland/sdk/components/input_modifier.proto +22 -0
- package/proto/decentraland/sdk/components/light_source.proto +28 -0
- package/proto/decentraland/sdk/components/main_camera.proto +11 -0
- package/proto/decentraland/sdk/components/map_pin.proto +16 -0
- package/proto/decentraland/sdk/components/material.proto +57 -0
- package/proto/decentraland/sdk/components/mesh_collider.proto +62 -0
- package/proto/decentraland/sdk/components/mesh_renderer.proto +43 -0
- package/proto/decentraland/sdk/components/nft_shape.proto +48 -0
- package/proto/decentraland/sdk/components/particle_system.proto +133 -0
- package/proto/decentraland/sdk/components/physics_combined_force.proto +21 -0
- package/proto/decentraland/sdk/components/physics_combined_impulse.proto +23 -0
- package/proto/decentraland/sdk/components/player_identity_data.proto +13 -0
- package/proto/decentraland/sdk/components/pointer_events.proto +64 -0
- package/proto/decentraland/sdk/components/pointer_events_result.proto +19 -0
- package/proto/decentraland/sdk/components/pointer_lock.proto +11 -0
- package/proto/decentraland/sdk/components/primary_pointer_info.proto +39 -0
- package/proto/decentraland/sdk/components/raycast.proto +58 -0
- package/proto/decentraland/sdk/components/raycast_result.proto +21 -0
- package/proto/decentraland/sdk/components/realm_info.proto +15 -0
- package/proto/decentraland/sdk/components/skybox_time.proto +20 -0
- package/proto/decentraland/sdk/components/text_shape.proto +45 -0
- package/proto/decentraland/sdk/components/trigger_area.proto +23 -0
- package/proto/decentraland/sdk/components/trigger_area_result.proto +34 -0
- package/proto/decentraland/sdk/components/tween.proto +117 -0
- package/proto/decentraland/sdk/components/tween_sequence.proto +18 -0
- package/proto/decentraland/sdk/components/tween_state.proto +18 -0
- package/proto/decentraland/sdk/components/ui_background.proto +34 -0
- package/proto/decentraland/sdk/components/ui_canvas_information.proto +30 -0
- package/proto/decentraland/sdk/components/ui_dropdown.proto +22 -0
- package/proto/decentraland/sdk/components/ui_dropdown_result.proto +11 -0
- package/proto/decentraland/sdk/components/ui_input.proto +20 -0
- package/proto/decentraland/sdk/components/ui_input_result.proto +12 -0
- package/proto/decentraland/sdk/components/ui_text.proto +26 -0
- package/proto/decentraland/sdk/components/ui_transform.proto +178 -0
- package/proto/decentraland/sdk/components/video_event.proto +25 -0
- package/proto/decentraland/sdk/components/video_player.proto +24 -0
- package/proto/decentraland/sdk/components/virtual_camera.proto +18 -0
- package/proto/decentraland/sdk/components/visibility_component.proto +16 -0
- package/proto/decentraland/sdk/development/local_development.proto +29 -0
- package/proto/decentraland/sdk/ecs6/components_ecs6.proto +678 -0
- package/proto/decentraland/sdk/ecs6/engine_interface_ecs6.proto +151 -0
- package/proto/decentraland/social_service/errors.proto +30 -0
- package/proto/decentraland/social_service/v1/social_service_v1.proto +163 -0
- package/proto/decentraland/social_service/v2/social_service_v2.proto +721 -0
- package/protoc-gen-bitwise/generator_csharp.js +248 -0
- package/protoc-gen-bitwise/options.js +139 -0
- package/protoc-gen-bitwise/plugin.js +87 -0
- package/protoc-gen-bitwise/runtime/cs/Quantize.cs +70 -0
- package/protoc-gen-bitwise/wire.js +239 -0
- package/public/about.proto +5 -0
- package/public/comms.proto +5 -0
- package/public/quests.proto +5 -0
- package/public/sdk-apis.proto +25 -0
- package/public/sdk-components.proto +43 -0
- package/public/sdk-development.proto +5 -0
- package/public/social.proto +6 -0
- package/ecs/components/Animator.proto +0 -18
- package/ecs/components/AudioSource.proto +0 -12
- package/ecs/components/AudioStream.proto +0 -10
- package/ecs/components/AvatarAttach.proto +0 -16
- package/ecs/components/AvatarModifierArea.proto +0 -16
- package/ecs/components/AvatarShape.proto +0 -20
- package/ecs/components/Billboard.proto +0 -10
- package/ecs/components/BoxShape.proto +0 -14
- package/ecs/components/CameraMode.proto +0 -9
- package/ecs/components/CameraModeArea.proto +0 -11
- package/ecs/components/CylinderShape.proto +0 -15
- package/ecs/components/GLTFShape.proto +0 -14
- package/ecs/components/Material.proto +0 -59
- package/ecs/components/NFTShape.proto +0 -19
- package/ecs/components/OnPointerDown.proto +0 -12
- package/ecs/components/OnPointerDownResult.proto +0 -17
- package/ecs/components/OnPointerUp.proto +0 -12
- package/ecs/components/OnPointerUpResult.proto +0 -17
- package/ecs/components/PlaneShape.proto +0 -14
- package/ecs/components/PointerLock.proto +0 -8
- package/ecs/components/SphereShape.proto +0 -13
- package/ecs/components/TextShape.proto +0 -34
- package/ecs/components/UiText.proto +0 -11
- package/ecs/components/UiTransform.proto +0 -161
- package/ecs/components/common/ActionButton.proto +0 -18
- package/ecs/components/common/CameraModeValue.proto +0 -6
- package/ecs/components/common/Color3.proto +0 -8
- package/ecs/components/common/Vector3.proto +0 -7
- package/kernel/apis/CommunicationsController.proto +0 -11
- package/kernel/apis/EngineAPI.proto +0 -180
- package/kernel/apis/EnvironmentAPI.proto +0 -67
- package/kernel/apis/ExperimentalAPI.proto +0 -16
- package/kernel/apis/Permissions.proto +0 -30
- package/kernel/apis/Players.proto +0 -28
- package/kernel/apis/PortableExperiences.proto +0 -40
- package/kernel/apis/RestrictedActions.proto +0 -25
- package/kernel/apis/SceneStateStorageController.proto +0 -114
- package/kernel/apis/SocialController.proto +0 -15
- package/kernel/comms/v1/broker.proto +0 -114
- package/kernel/comms/v1/comms.proto +0 -68
- package/kernel/comms/v2/comms.proto +0 -59
- package/renderer-protocol/EngineInterface.proto +0 -714
- package/renderer-protocol/RendererProtocol.proto +0 -26
- /package/{ecs → proto/decentraland/sdk}/components/Transform.md +0 -0
- /package/{ecs → proto/decentraland/sdk}/components/common/id.md +0 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* C# code generator for the protoc-gen-bitwise plugin.
|
|
5
|
+
*
|
|
6
|
+
* For every proto message that contains at least one uint32 field annotated
|
|
7
|
+
* with [(quantized)], this module emits a C# partial class that adds a computed
|
|
8
|
+
* float property named {FieldName}Quantized. The getter decodes the stored
|
|
9
|
+
* uint32 to a float; the setter encodes a float back to a uint32. Standard
|
|
10
|
+
* protobuf handles serialization of the uint32 wire field; this class adds a
|
|
11
|
+
* typed float accessor on top.
|
|
12
|
+
*
|
|
13
|
+
* Only uint32 fields are supported. bit_packed and unannotated fields are
|
|
14
|
+
* passed through without generating any accessor.
|
|
15
|
+
*
|
|
16
|
+
* Port of the original generator_csharp.py — output is intended to be
|
|
17
|
+
* byte-for-byte identical.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const { getFieldOptions } = require('./options')
|
|
21
|
+
|
|
22
|
+
// FieldDescriptorProto type/label constants.
|
|
23
|
+
const TYPE_UINT32 = 13
|
|
24
|
+
const LABEL_REPEATED = 3
|
|
25
|
+
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// Helpers
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
|
|
30
|
+
/** Mirrors Python str.capitalize(): upper-first, lowercase the rest. */
|
|
31
|
+
function capitalize(word) {
|
|
32
|
+
if (word.length === 0) return ''
|
|
33
|
+
return word[0].toUpperCase() + word.slice(1).toLowerCase()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** position_x -> PositionX */
|
|
37
|
+
function snakeToPascal(name) {
|
|
38
|
+
return name.split('_').map(capitalize).join('')
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** decentraland.kernel.comms.v3 -> Decentraland.Kernel.Comms.V3 */
|
|
42
|
+
function packageToNamespace(pkg) {
|
|
43
|
+
if (!pkg) return 'Generated'
|
|
44
|
+
return pkg.split('.').map(capitalize).join('.')
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Format a number with C printf %g semantics at `precision` significant digits:
|
|
49
|
+
* shortest of fixed/scientific, with trailing zeros and a trailing dot removed.
|
|
50
|
+
* Reproduces Python's `f'{value:.{precision}g}'`.
|
|
51
|
+
*/
|
|
52
|
+
function formatG(value, precision) {
|
|
53
|
+
if (precision <= 0) precision = 1
|
|
54
|
+
if (value === 0) return '0'
|
|
55
|
+
if (!Number.isFinite(value)) return value > 0 ? 'inf' : 'nan'
|
|
56
|
+
|
|
57
|
+
const negative = value < 0
|
|
58
|
+
const v = Math.abs(value)
|
|
59
|
+
|
|
60
|
+
// Correctly-rounded scientific form yields the decimal exponent X (handling
|
|
61
|
+
// carry such as 9.999 -> 1.0e+1).
|
|
62
|
+
const sci = v.toExponential(precision - 1)
|
|
63
|
+
const eIdx = sci.indexOf('e')
|
|
64
|
+
const X = parseInt(sci.slice(eIdx + 1), 10)
|
|
65
|
+
|
|
66
|
+
let result
|
|
67
|
+
if (X >= -4 && X < precision) {
|
|
68
|
+
// Fixed notation with (precision - 1 - X) fraction digits.
|
|
69
|
+
const fractionDigits = precision - 1 - X
|
|
70
|
+
result = v.toFixed(fractionDigits >= 0 ? fractionDigits : 0)
|
|
71
|
+
if (result.indexOf('.') !== -1) {
|
|
72
|
+
result = result.replace(/0+$/, '').replace(/\.$/, '')
|
|
73
|
+
}
|
|
74
|
+
} else {
|
|
75
|
+
// Scientific notation; printf prints at least two exponent digits.
|
|
76
|
+
let mantissa = sci.slice(0, eIdx)
|
|
77
|
+
if (mantissa.indexOf('.') !== -1) {
|
|
78
|
+
mantissa = mantissa.replace(/0+$/, '').replace(/\.$/, '')
|
|
79
|
+
}
|
|
80
|
+
const expSign = X < 0 ? '-' : '+'
|
|
81
|
+
let expDigits = String(Math.abs(X))
|
|
82
|
+
if (expDigits.length < 2) expDigits = '0' + expDigits
|
|
83
|
+
result = mantissa + 'e' + expSign + expDigits
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return (negative ? '-' : '') + result
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Format a value as a C# float literal (e.g. -100.0f). */
|
|
90
|
+
function formatFloat(value) {
|
|
91
|
+
let text = formatG(value, 8)
|
|
92
|
+
if (text.indexOf('.') === -1 && text.indexOf('e') === -1 && text.indexOf('E') === -1) {
|
|
93
|
+
text += '.0'
|
|
94
|
+
}
|
|
95
|
+
return text + 'f'
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Format a quantization step size for a doc comment (e.g. "≈ 0.003"). */
|
|
99
|
+
function formatStep(step) {
|
|
100
|
+
return '≈ ' + formatG(step, 6)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Per-message code generation
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Generate a C# partial class for a proto message, or null if it has no
|
|
109
|
+
* quantized uint32 fields. Returns an array of lines (no trailing newline).
|
|
110
|
+
*/
|
|
111
|
+
function generateMessage(msgProto, indent) {
|
|
112
|
+
const i = indent || ' '
|
|
113
|
+
const props = []
|
|
114
|
+
|
|
115
|
+
for (const field of msgProto.field) {
|
|
116
|
+
// Repeated/map fields are not supported.
|
|
117
|
+
if (field.label === LABEL_REPEATED) continue
|
|
118
|
+
// Only uint32 fields are candidates for quantized accessors.
|
|
119
|
+
if (field.type !== TYPE_UINT32) continue
|
|
120
|
+
|
|
121
|
+
const { quantized, quantizedPower } = getFieldOptions(field.optionsRaw)
|
|
122
|
+
const propName = snakeToPascal(field.name)
|
|
123
|
+
|
|
124
|
+
let doc, getExpr, setExpr, step, bits
|
|
125
|
+
if (quantized !== null) {
|
|
126
|
+
const mn = formatFloat(quantized.min)
|
|
127
|
+
const mx = formatFloat(quantized.max)
|
|
128
|
+
bits = quantized.bits
|
|
129
|
+
// Uniform quantizer — the step is constant across the whole range.
|
|
130
|
+
step = (quantized.max - quantized.min) / ((1 << bits) - 1)
|
|
131
|
+
doc = `Range [${mn}, ${mx}], ${bits} bits, step ${formatStep(step)}.`
|
|
132
|
+
getExpr = `Quantize.Decode(${propName}, ${mn}, ${mx}, ${bits})`
|
|
133
|
+
setExpr = `Quantize.Encode(value, ${mn}, ${mx}, ${bits})`
|
|
134
|
+
} else if (quantizedPower !== null) {
|
|
135
|
+
const mx = formatFloat(quantizedPower.max)
|
|
136
|
+
const pw = formatFloat(quantizedPower.pow)
|
|
137
|
+
bits = quantizedPower.bits
|
|
138
|
+
// Power curve is non-uniform: the finest step sits next to zero (first magnitude code),
|
|
139
|
+
// the COARSEST at the top of the range. The coarsest step upper-bounds the error for any
|
|
140
|
+
// value, so that's what the exposed {Name}QuantizedStep const carries (safe as a tolerance).
|
|
141
|
+
const magSteps = (1 << (bits - 1)) - 1
|
|
142
|
+
const nearZeroStep = quantizedPower.max * Math.pow(1 / magSteps, quantizedPower.pow)
|
|
143
|
+
step = quantizedPower.max * (1 - Math.pow((magSteps - 1) / magSteps, quantizedPower.pow))
|
|
144
|
+
doc =
|
|
145
|
+
`Range [-${mx}, ${mx}], power ${pw}, ${bits} bits ` +
|
|
146
|
+
`(sign + ${bits - 1}-bit magnitude), near-zero step ${formatStep(nearZeroStep)}.`
|
|
147
|
+
getExpr = `Quantize.DecodePower(${propName}, ${mx}, ${pw}, ${bits})`
|
|
148
|
+
setExpr = `Quantize.EncodePower(value, ${mx}, ${pw}, ${bits})`
|
|
149
|
+
} else {
|
|
150
|
+
continue
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Highest code the encoder can emit for this field. Both the linear quantizer (top code
|
|
154
|
+
// `2^bits - 1`) and the power quantizer (`(magnitude << 1) | sign` with an `bits-1`-bit
|
|
155
|
+
// magnitude, so top code `((2^(bits-1)-1) << 1) | 1 == 2^bits - 1`) share this bound.
|
|
156
|
+
const maxCode = 2 ** bits - 1
|
|
157
|
+
|
|
158
|
+
props.push({ propName, doc, getExpr, setExpr, step, maxCode })
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (props.length === 0) return null
|
|
162
|
+
|
|
163
|
+
const lines = []
|
|
164
|
+
lines.push(`public partial class ${msgProto.name}`)
|
|
165
|
+
lines.push('{')
|
|
166
|
+
|
|
167
|
+
// Decode on every get, encode on every set — no backing cache. The raw uint32 property is the
|
|
168
|
+
// single source of truth, so the float accessor can never disagree with the code on the wire
|
|
169
|
+
// (get-after-set returns the on-grid value a receiver decodes) and there is no stale-cache
|
|
170
|
+
// hazard when the raw field is mutated directly. Decode is a multiply-add; only power fields
|
|
171
|
+
// pay a MathF.Pow.
|
|
172
|
+
for (const { propName, doc, getExpr, setExpr, step } of props) {
|
|
173
|
+
lines.push(`${i}/// <summary>Coarsest quantization step of <see cref="${propName}Quantized"/>. Safe as an equality tolerance.</summary>`)
|
|
174
|
+
lines.push(`${i}public const float ${propName}QuantizedStep = ${formatFloat(step)};`)
|
|
175
|
+
lines.push(`${i}/// <summary>Float accessor for <see cref="${propName}"/>. ${doc}</summary>`)
|
|
176
|
+
lines.push(`${i}public float ${propName}Quantized`)
|
|
177
|
+
lines.push(`${i}{`)
|
|
178
|
+
lines.push(`${i}${i}get => ${getExpr};`)
|
|
179
|
+
lines.push(`${i}${i}set => ${propName} = ${setExpr};`)
|
|
180
|
+
lines.push(`${i}}`)
|
|
181
|
+
lines.push('')
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
lines.push(`${i}/// <summary>`)
|
|
185
|
+
lines.push(`${i}/// True when every quantized field holds a wire code within its declared bit width`)
|
|
186
|
+
lines.push(`${i}/// (<c>0 .. 2^bits-1</c>). The encoder never emits a code above this bound, so a larger`)
|
|
187
|
+
lines.push(`${i}/// value is a malformed/hostile message: decoding it would land far outside the field's`)
|
|
188
|
+
lines.push(`${i}/// <c>[min, max]</c> and, since the server relays raw codes verbatim, poison every observer.`)
|
|
189
|
+
lines.push(`${i}/// Reject before storing or relaying. Pure integer comparison — no decode.`)
|
|
190
|
+
lines.push(`${i}/// </summary>`)
|
|
191
|
+
lines.push(`${i}public bool AreQuantizedFieldsInRange() =>`)
|
|
192
|
+
props.forEach(({ propName, maxCode }, idx) => {
|
|
193
|
+
const prefix = idx === 0 ? '' : '&& '
|
|
194
|
+
const suffix = idx === props.length - 1 ? ';' : ''
|
|
195
|
+
lines.push(`${i}${i}${prefix}${propName} <= ${maxCode}u${suffix}`)
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
lines.push('}')
|
|
199
|
+
return lines
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
// Per-file code generation (public entry point)
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Generate a C# source file for a FileDescriptorProto, or null if the file
|
|
208
|
+
* contains no quantized uint32 fields.
|
|
209
|
+
* @returns {{name: string, content: string} | null}
|
|
210
|
+
*/
|
|
211
|
+
function generateCsharp(fileProto) {
|
|
212
|
+
const namespace = packageToNamespace(fileProto.package)
|
|
213
|
+
|
|
214
|
+
const protoFile = fileProto.name.split('/').pop()
|
|
215
|
+
const stem = snakeToPascal(protoFile.replace('.proto', ''))
|
|
216
|
+
const outName = `${stem}.Bitwise.cs`
|
|
217
|
+
|
|
218
|
+
const header = [
|
|
219
|
+
'// <auto-generated>',
|
|
220
|
+
'// Generated by protoc-gen-bitwise. DO NOT EDIT.',
|
|
221
|
+
`// Source: ${fileProto.name}`,
|
|
222
|
+
'// </auto-generated>',
|
|
223
|
+
'',
|
|
224
|
+
'using Decentraland.Networking.Bitwise;',
|
|
225
|
+
'',
|
|
226
|
+
`namespace ${namespace}`,
|
|
227
|
+
'{',
|
|
228
|
+
]
|
|
229
|
+
const footer = ['', `} // namespace ${namespace}`]
|
|
230
|
+
|
|
231
|
+
const body = []
|
|
232
|
+
for (const msg of fileProto.messageType) {
|
|
233
|
+
const msgLines = generateMessage(msg)
|
|
234
|
+
if (msgLines === null) continue
|
|
235
|
+
// Indent each line by 4 spaces (inside the namespace block).
|
|
236
|
+
for (const line of msgLines) {
|
|
237
|
+
body.push(line ? ' ' + line : '')
|
|
238
|
+
}
|
|
239
|
+
body.push('')
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (body.length === 0) return null
|
|
243
|
+
|
|
244
|
+
const content = header.concat(body, footer).join('\n') + '\n'
|
|
245
|
+
return { name: outName, content }
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
module.exports = { generateCsharp }
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Parser for the custom bitwise field options defined in options.proto.
|
|
5
|
+
*
|
|
6
|
+
* The descriptor decoder hands us the raw serialized FieldOptions bytes (it
|
|
7
|
+
* declares `options` as opaque bytes). We walk those bytes looking for the
|
|
8
|
+
* custom extension field numbers — protobuf preserves unknown/unregistered
|
|
9
|
+
* extension bytes, so they are always present even though no runtime here knows
|
|
10
|
+
* the extension schema. This mirrors the original options_pb2.py.
|
|
11
|
+
*
|
|
12
|
+
* Wire format: tag = (field_number << 3) | wire_type
|
|
13
|
+
* wire_type 0 = varint, 1 = 64-bit, 2 = length-delimited, 5 = 32-bit
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const { readVarint, skipField } = require('./wire')
|
|
17
|
+
|
|
18
|
+
// Extension field numbers as defined in options.proto.
|
|
19
|
+
const QUANTIZED_FIELD_NUMBER = 50001
|
|
20
|
+
const BIT_PACKED_FIELD_NUMBER = 50002
|
|
21
|
+
const QUANTIZED_POWER_FIELD_NUMBER = 50003
|
|
22
|
+
|
|
23
|
+
/** Parse a serialized QuantizedFloatOptions message: { min, max, bits }. */
|
|
24
|
+
function parseQuantized(data) {
|
|
25
|
+
const opts = { min: 0.0, max: 0.0, bits: 0 }
|
|
26
|
+
let pos = 0
|
|
27
|
+
while (pos < data.length) {
|
|
28
|
+
let tag
|
|
29
|
+
;[tag, pos] = readVarint(data, pos)
|
|
30
|
+
const fieldNum = tag >>> 3
|
|
31
|
+
const wireType = tag & 0x7
|
|
32
|
+
if (fieldNum === 1 && wireType === 5) {
|
|
33
|
+
// min (float)
|
|
34
|
+
opts.min = data.readFloatLE(pos)
|
|
35
|
+
pos += 4
|
|
36
|
+
} else if (fieldNum === 2 && wireType === 5) {
|
|
37
|
+
// max (float)
|
|
38
|
+
opts.max = data.readFloatLE(pos)
|
|
39
|
+
pos += 4
|
|
40
|
+
} else if (fieldNum === 3 && wireType === 0) {
|
|
41
|
+
// bits (uint32)
|
|
42
|
+
;[opts.bits, pos] = readVarint(data, pos)
|
|
43
|
+
} else {
|
|
44
|
+
pos = skipField(data, pos, wireType)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return opts
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Parse a serialized QuantizedPowerFloatOptions message: { max, pow, bits }. */
|
|
51
|
+
function parseQuantizedPower(data) {
|
|
52
|
+
const opts = { max: 0.0, pow: 0.0, bits: 0 }
|
|
53
|
+
let pos = 0
|
|
54
|
+
while (pos < data.length) {
|
|
55
|
+
let tag
|
|
56
|
+
;[tag, pos] = readVarint(data, pos)
|
|
57
|
+
const fieldNum = tag >>> 3
|
|
58
|
+
const wireType = tag & 0x7
|
|
59
|
+
if (fieldNum === 1 && wireType === 5) {
|
|
60
|
+
// max (float)
|
|
61
|
+
opts.max = data.readFloatLE(pos)
|
|
62
|
+
pos += 4
|
|
63
|
+
} else if (fieldNum === 2 && wireType === 5) {
|
|
64
|
+
// pow (float)
|
|
65
|
+
opts.pow = data.readFloatLE(pos)
|
|
66
|
+
pos += 4
|
|
67
|
+
} else if (fieldNum === 3 && wireType === 0) {
|
|
68
|
+
// bits (uint32)
|
|
69
|
+
;[opts.bits, pos] = readVarint(data, pos)
|
|
70
|
+
} else {
|
|
71
|
+
pos = skipField(data, pos, wireType)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return opts
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Parse a serialized BitPackedOptions message: { bits }. */
|
|
78
|
+
function parseBitPacked(data) {
|
|
79
|
+
const opts = { bits: 0 }
|
|
80
|
+
let pos = 0
|
|
81
|
+
while (pos < data.length) {
|
|
82
|
+
let tag
|
|
83
|
+
;[tag, pos] = readVarint(data, pos)
|
|
84
|
+
const fieldNum = tag >>> 3
|
|
85
|
+
const wireType = tag & 0x7
|
|
86
|
+
if (fieldNum === 1 && wireType === 0) {
|
|
87
|
+
// bits (uint32)
|
|
88
|
+
;[opts.bits, pos] = readVarint(data, pos)
|
|
89
|
+
} else {
|
|
90
|
+
pos = skipField(data, pos, wireType)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return opts
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Extract custom bitwise options from raw FieldOptions bytes.
|
|
98
|
+
*
|
|
99
|
+
* @param {Buffer|null} optionsRaw serialized FieldOptions, or null when unset.
|
|
100
|
+
* @returns {{quantized: object|null, bitPacked: object|null, quantizedPower: object|null}}
|
|
101
|
+
*/
|
|
102
|
+
function getFieldOptions(optionsRaw) {
|
|
103
|
+
if (!optionsRaw || optionsRaw.length === 0) {
|
|
104
|
+
return { quantized: null, bitPacked: null, quantizedPower: null }
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
let quantized = null
|
|
108
|
+
let bitPacked = null
|
|
109
|
+
let quantizedPower = null
|
|
110
|
+
let pos = 0
|
|
111
|
+
|
|
112
|
+
while (pos < optionsRaw.length) {
|
|
113
|
+
let tag
|
|
114
|
+
;[tag, pos] = readVarint(optionsRaw, pos)
|
|
115
|
+
const fieldNum = tag >>> 3
|
|
116
|
+
const wireType = tag & 0x7
|
|
117
|
+
|
|
118
|
+
if (wireType === 2) {
|
|
119
|
+
let len
|
|
120
|
+
;[len, pos] = readVarint(optionsRaw, pos)
|
|
121
|
+
const valueBytes = optionsRaw.subarray(pos, pos + len)
|
|
122
|
+
pos += len
|
|
123
|
+
if (fieldNum === QUANTIZED_FIELD_NUMBER) {
|
|
124
|
+
quantized = parseQuantized(valueBytes)
|
|
125
|
+
} else if (fieldNum === BIT_PACKED_FIELD_NUMBER) {
|
|
126
|
+
bitPacked = parseBitPacked(valueBytes)
|
|
127
|
+
} else if (fieldNum === QUANTIZED_POWER_FIELD_NUMBER) {
|
|
128
|
+
quantizedPower = parseQuantizedPower(valueBytes)
|
|
129
|
+
}
|
|
130
|
+
// else: unknown length-delimited field — already consumed.
|
|
131
|
+
} else {
|
|
132
|
+
pos = skipField(optionsRaw, pos, wireType)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return { quantized, bitPacked, quantizedPower }
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
module.exports = { getFieldOptions }
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* protoc-gen-bitwise — protoc plugin that generates C# bitwise serialization code.
|
|
6
|
+
*
|
|
7
|
+
* Protocol:
|
|
8
|
+
* 1. protoc writes a serialised CodeGeneratorRequest to this process's stdin.
|
|
9
|
+
* 2. This plugin reads it, generates C# partial classes with float accessor
|
|
10
|
+
* properties for every message that carries [(quantized)] field annotations.
|
|
11
|
+
* 3. A serialised CodeGeneratorResponse is written to stdout.
|
|
12
|
+
*
|
|
13
|
+
* Implemented in plain Node with a self-contained protobuf wire codec (see
|
|
14
|
+
* wire.js) so it runs with only `node` on PATH — no npm install required, even
|
|
15
|
+
* when invoked directly from a sibling checkout.
|
|
16
|
+
*
|
|
17
|
+
* Usage (from project root):
|
|
18
|
+
* protoc \
|
|
19
|
+
* --proto_path=proto \
|
|
20
|
+
* --bitwise_out=generated/ \
|
|
21
|
+
* --plugin=protoc-gen-bitwise=protoc-gen-bitwise/plugin.js \
|
|
22
|
+
* proto/my_messages.proto
|
|
23
|
+
*
|
|
24
|
+
* On Windows, protoc needs an executable wrapper, e.g. a .cmd that runs:
|
|
25
|
+
* node "<path>\protoc-gen-bitwise\plugin.js" %*
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
const { decodeRequest, encodeResponse } = require('./wire')
|
|
29
|
+
const { generateCsharp } = require('./generator_csharp')
|
|
30
|
+
|
|
31
|
+
// CodeGeneratorResponse.Feature.FEATURE_PROTO3_OPTIONAL — advertised so protoc
|
|
32
|
+
// does not reject the plugin when the schema uses proto3 `optional` fields.
|
|
33
|
+
const FEATURE_PROTO3_OPTIONAL = 1
|
|
34
|
+
|
|
35
|
+
function readStdin() {
|
|
36
|
+
return new Promise((resolve, reject) => {
|
|
37
|
+
const chunks = []
|
|
38
|
+
process.stdin.on('data', (chunk) => chunks.push(chunk))
|
|
39
|
+
process.stdin.on('end', () => resolve(Buffer.concat(chunks)))
|
|
40
|
+
process.stdin.on('error', reject)
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function main() {
|
|
45
|
+
const requestBytes = await readStdin()
|
|
46
|
+
const request = decodeRequest(requestBytes)
|
|
47
|
+
|
|
48
|
+
// Lookup map for all file descriptors (parity with the Python plugin).
|
|
49
|
+
const fileByName = new Map()
|
|
50
|
+
for (const file of request.protoFile) fileByName.set(file.name, file)
|
|
51
|
+
|
|
52
|
+
const files = []
|
|
53
|
+
let error = null
|
|
54
|
+
|
|
55
|
+
for (const fileName of request.fileToGenerate) {
|
|
56
|
+
// Skip the options definition file itself — it has no messages to generate.
|
|
57
|
+
if (fileName === 'decentraland/common/options.proto') continue
|
|
58
|
+
|
|
59
|
+
const fileProto = fileByName.get(fileName)
|
|
60
|
+
if (!fileProto) continue
|
|
61
|
+
|
|
62
|
+
try {
|
|
63
|
+
const generated = generateCsharp(fileProto)
|
|
64
|
+
if (generated) files.push(generated)
|
|
65
|
+
} catch (exc) {
|
|
66
|
+
error = `protoc-gen-bitwise: error processing ${fileName}: ${exc && exc.message ? exc.message : exc}`
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const response = encodeResponse({
|
|
71
|
+
error,
|
|
72
|
+
supportedFeatures: FEATURE_PROTO3_OPTIONAL,
|
|
73
|
+
files,
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
// Let the write flush before the process exits (do not call process.exit()).
|
|
77
|
+
process.stdout.write(response)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
main().catch((exc) => {
|
|
81
|
+
const response = encodeResponse({
|
|
82
|
+
error: `protoc-gen-bitwise: ${exc && exc.stack ? exc.stack : exc}`,
|
|
83
|
+
supportedFeatures: FEATURE_PROTO3_OPTIONAL,
|
|
84
|
+
files: [],
|
|
85
|
+
})
|
|
86
|
+
process.stdout.write(response)
|
|
87
|
+
})
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// Decentraland.Networking.Bitwise — Quantize
|
|
2
|
+
// Copy this file into your project alongside generated *.Bitwise.cs files.
|
|
3
|
+
// ReSharper disable once RedundantUsingDirective
|
|
4
|
+
|
|
5
|
+
using System;
|
|
6
|
+
|
|
7
|
+
namespace Decentraland.Networking.Bitwise
|
|
8
|
+
// ReSharper disable once ArrangeNamespaceBody
|
|
9
|
+
{
|
|
10
|
+
/// <summary>
|
|
11
|
+
/// Static helpers for quantizing float values to/from unsigned integers.
|
|
12
|
+
/// Intended for use with protobuf uint32 fields: the integer is transmitted
|
|
13
|
+
/// as a protobuf varint, while the float accessor lives in a generated partial class.
|
|
14
|
+
/// </summary>
|
|
15
|
+
public static class Quantize
|
|
16
|
+
{
|
|
17
|
+
/// <summary>
|
|
18
|
+
/// Encodes <paramref name="value" /> to a quantized <see cref="uint" />.
|
|
19
|
+
/// Values outside [<paramref name="min" />, <paramref name="max" />] are clamped.
|
|
20
|
+
/// </summary>
|
|
21
|
+
public static uint Encode(float value, float min, float max, int bits)
|
|
22
|
+
{
|
|
23
|
+
var steps = (1u << bits) - 1;
|
|
24
|
+
var t = Math.Clamp((value - min) / (max - min), 0f, 1f);
|
|
25
|
+
return (uint)MathF.Round(t * steps);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/// <summary>Decodes a quantized <see cref="uint" /> back to a float.</summary>
|
|
29
|
+
public static float Decode(uint encoded, float min, float max, int bits)
|
|
30
|
+
{
|
|
31
|
+
var steps = (1u << bits) - 1;
|
|
32
|
+
return (float)encoded / steps * (max - min) + min;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// <summary>
|
|
36
|
+
/// Encodes <paramref name="value" /> with a power-law curve into an
|
|
37
|
+
/// (<paramref name="bits" /> - 1)-bit linear unorm magnitude plus a sign bit. The magnitude is
|
|
38
|
+
/// <c>(|value| / max)^(1/pow)</c>, so the inverse <see cref="DecodePower" /> reconstructs
|
|
39
|
+
/// <c>sign * max * u^pow</c>. Zero is representable exactly; <paramref name="pow" /> > 1
|
|
40
|
+
/// concentrates resolution near zero. Magnitudes outside [0, <paramref name="max" />] are
|
|
41
|
+
/// clamped.
|
|
42
|
+
/// <para>
|
|
43
|
+
/// The encoded layout puts the magnitude in the high bits and the sign in the LSB
|
|
44
|
+
/// (<c>(magnitude << 1) | sign</c>). This keeps the varint cost a function of
|
|
45
|
+
/// magnitude rather than direction — a small <c>|value|</c> of either sign stays in a
|
|
46
|
+
/// single varint byte. Zero canonicalizes to <c>0</c> (a zero magnitude never sets the
|
|
47
|
+
/// sign bit), so proto3 still omits a stopped field entirely.
|
|
48
|
+
/// </para>
|
|
49
|
+
/// </summary>
|
|
50
|
+
public static uint EncodePower(float value, float max, float pow, int bits)
|
|
51
|
+
{
|
|
52
|
+
var magnitudeSteps = (1u << (bits - 1)) - 1;
|
|
53
|
+
var t = Math.Clamp(MathF.Abs(value) / max, 0f, 1f);
|
|
54
|
+
var u = MathF.Pow(t, 1f / pow);
|
|
55
|
+
var magnitude = (uint)MathF.Round(u * magnitudeSteps);
|
|
56
|
+
var sign = value < 0f && magnitude != 0u ? 1u : 0u;
|
|
57
|
+
return (magnitude << 1) | sign;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// <summary>Decodes a power-law quantized <see cref="uint" /> back to a float (inverse of
|
|
61
|
+
/// <see cref="EncodePower" />).</summary>
|
|
62
|
+
public static float DecodePower(uint encoded, float max, float pow, int bits)
|
|
63
|
+
{
|
|
64
|
+
var magnitudeSteps = (1u << (bits - 1)) - 1;
|
|
65
|
+
var u = (float)(encoded >> 1) / magnitudeSteps;
|
|
66
|
+
var magnitude = max * MathF.Pow(u, pow);
|
|
67
|
+
return (encoded & 1u) != 0 ? -magnitude : magnitude;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|