diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2d9bd8a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,115 @@ +name: Release + +on: + push: + branches: [master] + workflow_dispatch: + +jobs: + build-package: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Semantic release + id: semantic + uses: cycjimmy/semantic-release-action@v4 + with: + extra_plugins: | + @semantic-release/changelog + @semantic-release/git + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + # Recreate the UPM (Release) branch for the latest version + - name: Create UPM Branch + if: steps.semantic.outputs.new_release_published == 'true' + run: | + echo Checking out UPM Branch + git checkout master + git config --global user.name oc-bot + git config --global user.email opencommissioning@spiratec.com + git checkout -B upm + + # Prep for release, hide Samples/ from Unity's compiler + - name: Refactor/Hide Samples Folder + if: steps.semantic.outputs.new_release_published == 'true' + run: | + echo Refactoring Samples + if [[ -d "Samples" ]]; then + git mv Samples Samples~ + rm -f Samples.meta + fi + + # Prep for release, hide Documentation/ from Unity's compiler + - name: Refactor/Hide Documentation Folder + if: steps.semantic.outputs.new_release_published == 'true' + run: | + echo Refactoring Documentation + if [[ -d "Documentation" ]]; then + git mv Documentation Documentation~ + rm -f Documentation.meta + fi + + # Prep for release, hide Tests/ from Unity's compiler + - name: Refactor/Hide Tests Folder + if: steps.semantic.outputs.new_release_published == 'true' + run: | + echo Refactoring Documentation + if [[ -d "Tests" ]]; then + git mv Tests Tests~ + rm -f Tests.meta + fi + + # RIf there's a new version, remove unwanted files from the upm branch + - name: Remove CI Files + if: steps.semantic.outputs.new_release_published == 'true' + run: | + echo Removing Continuous Integration Files + rm -f ".releaserc.json" + rm -rf ".github" + rm -f ".gitignore" + + # Push the UPM branch with this release + - name: Push UPM Branch + if: steps.semantic.outputs.new_release_published == 'true' + run: | + echo Pushing Release to UPM Branch + git commit -am "Release v${{steps.semantic.outputs.new_release_version}}" + git push -f -u origin upm + + # Tag the UPM branch with this release + - name: Tag UPM Branch + if: steps.semantic.outputs.new_release_published == 'true' + run: | + git tag -f upm/v${{ steps.semantic.outputs.new_release_version }} upm + git push -f origin --tags + + # Create package tarball for release artifact + - name: Create Package Tarball + if: steps.semantic.outputs.new_release_published == 'true' + run: | + mkdir package && find . -maxdepth 1 ! -name "package" ! -name "." -exec mv {} package/ \; && tar -czf OC-Core-${{steps.semantic.outputs.new_release_version}}.tar.gz package/ && shopt -s dotglob && mv package/* ./ && rmdir package + + # Publish this tagged as a release + - name: Publish New Repo Release + if: steps.semantic.outputs.new_release_published == 'true' + run: | + echo Creating Repo Release + gh release create upm/v${{steps.semantic.outputs.new_release_version}} -t "Release ${{steps.semantic.outputs.new_release_version}}" -n "${{steps.semantic.outputs.new_release_notes}}" + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + # Upload package Tarball + - name: Upload Release Artifact + if: steps.semantic.outputs.new_release_published == 'true' + run: | + echo Uploading release asset + gh release upload upm/v${{ steps.semantic.outputs.new_release_version }} OC-Core-${{ steps.semantic.outputs.new_release_version }}.tar.gz + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/.releaserc.json b/.releaserc.json new file mode 100644 index 0000000..15ec653 --- /dev/null +++ b/.releaserc.json @@ -0,0 +1,38 @@ +{ + "tagFormat": "v${version}", + "plugins": [ + [ + "@semantic-release/commit-analyzer", + { + "preset": "angular", + "releaseRules": [ + { + "type": "docs", + "scope": "README", + "release": "patch" + }, + { + "type": "refactor", + "release": "patch" + } + ] + } + ], + "@semantic-release/release-notes-generator", + [ + "@semantic-release/changelog", + { "preset": "angular" } + ], + [ + "@semantic-release/npm", + { "npmPublish": false } + ], + [ + "@semantic-release/git", + { + "assets": [ "package.json", "CHANGELOG.md" ], + "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" + } + ] + ] +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..68e96f5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,66 @@ +# 1.0.0 (2024-11-06) + + +### Bug Fixes + +* add opencommissioning email ([1875bdf](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/1875bdf4f5ba0349177523f702ce18a7bb8a9706)) +* ApiMessage header size ([273cd20](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/273cd201abaeb9e4d619bbc60f6415375028cb78)) +* client comment ([5d6f6ab](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/5d6f6ab5172273895285ed13abd1bb2bb9644ab8)) +* client plc instance ([fcfb39e](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/fcfb39e983aefa8854e17da327472ca03491288a)) +* client reconnect ([d2dc939](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/d2dc9399fb8546d786d6fa31e40900dbd6f62739)) +* client time scale ([e49faab](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/e49faab7acd6584c6ae4885ba57c1301e103ea49)) +* component menu rename ([82a7709](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/82a77090baf2b1e31fbaeaa9e1ea5e47ce875185)) +* demo sample hothix ([a8c6d8a](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/a8c6d8a842b57f39c66fc49b27f1a0eeb6702b20)) +* deviceByte to device ([51b27f6](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/51b27f60396294e525a71417d59f029f7b52dbd6)) +* Documentation ([ba983e9](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/ba983e98568daaa940cfa1e80202e264e991f4f9)) +* fixed scale rotation issues fbx ([a6b8a9c](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/a6b8a9cc0ecae3b67676861b778d0ca49252ddc3)) +* init commit ([c88e877](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/c88e877a5055ef9f9c0c0b13f5c002bfd74ac5ef)) +* LICENSE ([680deaf](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/680deaf00212f0ffaeebf1fa51311a995f44a055)) +* link drawer connection status ([063e728](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/063e7283bd8422ea807bdf600dbf328ab6e24658)) +* link reset ([91d0635](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/91d0635540df0f9b7c57f5070e31427e55a23f82)) +* LinkByte data byte mapping ([56c53e1](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/56c53e11e387cd169382cc7e8bb35d12dc67a455)) +* MDS to data ([447a76a](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/447a76a89dfdc37f3c04b7e633062b7000962414)) +* namespace rename ([03ed0b1](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/03ed0b1610ddc869d119a71e0c907882cf9ecb95)) +* package.json name ([89ac044](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/89ac044db994ca477e5739c126b316e397e9cf3c)) +* Panel device link override log ([2bc8efe](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/2bc8efed0c4ae751c5a289a694ff7b371a2299bb)) +* Panel Sampler data link ([40dff54](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/40dff54e8174de36283279aa688c38b2bb392f73)) +* panel sampler log context ([c7b0053](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/c7b00531321cf2bc94ddd453af141629023ee2f5)) +* payload context ([53478de](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/53478ded90a931dd57cfb51920a8eac33bb5a30d)) +* Property Field align ([5f0b063](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/5f0b063e09ea75c1f8416f4fff03238d4745681e)) +* property force value ([b535aa7](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/b535aa7d59c96412fde46fb0716096e73c03c0e1)) +* reactive property ([da1baef](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/da1baef91ac2e0898db6b4398bcc230fdd991a54)) +* refactoring warnings ([b0bdc7f](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/b0bdc7f313a14a8e36e137034b15d48d3f206c44)) +* remove lod from core ([99b96cd](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/99b96cdecfc698d2386681996f310b4ea042b70b)) +* remove user email from action ([22802ce](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/22802ceea9357830170aba9f06fc59867f53c818)) +* rename ([f7be623](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/f7be623a551b7fcbf2ea9efadfcce3ec7d694381)) +* rename namespaces ([e7ffe00](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/e7ffe0048a6b5f3efc27d12f4c75b91444c5edde)) +* rename stylesheets ([2da5bf7](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/2da5bf76622eb43fe7275b7b475f979da0efe7d2)) +* rename wizard pattern ([fa06660](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/fa06660e3474410f424012e06e24972b47f3ae63)) +* rider style warnings ([5fe9668](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/5fe9668cf2cf6b4274d54aa8b36d12c4bfe57f42)) +* sampler link data ([2fbaab1](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/2fbaab11355f847cb173bb911c9235877768a03e)) +* Scene config file name ([4fec981](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/4fec981aae9e22f9b5fd7ab57576fd5ef836feeb)) +* sensor analog initialization ([06e8346](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/06e8346fd5edb6252e9e00d65fb51d2012606cb5)) +* set LinkByte value from 'DataOut' instead of 'Control' ([2204c48](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/2204c4818541ed5e1e3f5b7d0349ed774b79f74a)) +* spit samples in two scenes ([6ec48c3](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/6ec48c305882e0d2b946013953723849ee994b6c)) +* TcAdsClient log ([1d355b4](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/1d355b40565556a03c5b93d7e6f2f4eba78c570d)) +* tcAdsClient port + StateChange ([2bcf99c](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/2bcf99cc4b932b43f0f37d5aab1b8c01e4bec1b1)) +* tipo in json ([8ca0668](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/8ca06689a7203047f2f51f8e01ba91d24f90ee70)) +* transprot size property ([c3054bf](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/c3054bfd5036aa5c8f7ad356c3b4dde7f9888c0c)) +* unit tests ([75ea1a7](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/75ea1a7f86d01627503d54b2e3f96f5172f3d90d)) +* update path in samples scene ([9b1f569](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/9b1f56985fa3488149d0e8a8e7e4d8016d9d9eb9)) +* workflow ([cd884bc](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/cd884bcbea481b496852411ce69c6029e430a966)) + + +### Features + +* add blender python script ([27f4b38](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/27f4b387465b23cd09d1b4094ae9e82b9813845c)) +* add github actions ([653ec64](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/653ec64f259fb41ea104fe08f3df385fa7e4fdf3)) +* add lod generation function ([8033ed8](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/8033ed8fde322ca50de902c9d20f45f9d0af45ef)) +* add realtive product data path to sample scene ([37645bc](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/37645bcbd03fdadc6c328eba5d208e6f3102fa9b)) +* Assistant pipe ([e4ff2e7](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/e4ff2e79dc4cf319ff1794b8e758adfa4ee47001)) +* data links braking changes ([2547106](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/25471066a5448e60fc2f7849be8b4d2b58162388)) +* LinkData rename ([110f3be](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/110f3be78d91cd73fff099a3d5a7268fac96d6ae)) +* Lock data link ([c9fc8c0](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/c9fc8c0ecbaeaa6ec0e91c414361569e028c352c)) +* recognize realtive paths to asset path ([f65d312](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/f65d312cd1a5a26f479f366843005f35491b9817)) +* renamed namespace ([1642590](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/1642590fabf3185f48c4a4764f08e87c0e8869ca)) +* tcAdsBufferType ([5d79345](https://github.com/OpenCommissioning/OC_Unity_Core_DRY/commit/5d79345099327a87e5268b7d728994c4b314764e)) diff --git a/CHANGELOG.md.meta b/CHANGELOG.md.meta new file mode 100644 index 0000000..9ad0e2f --- /dev/null +++ b/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e3154c5be8913564c93d83c2a5ffae90 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation.meta b/Documentation.meta new file mode 100644 index 0000000..f44377a --- /dev/null +++ b/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 095aaa91fe4a7a849b34856644af51d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images.meta b/Documentation/Images.meta new file mode 100644 index 0000000..d0fed52 --- /dev/null +++ b/Documentation/Images.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ecebaaf2ba694af58fd291fa0231b806 +timeCreated: 1730904682 \ No newline at end of file diff --git a/Documentation/Images/Axis_Inspector.png b/Documentation/Images/Axis_Inspector.png new file mode 100644 index 0000000..267eb67 Binary files /dev/null and b/Documentation/Images/Axis_Inspector.png differ diff --git a/Documentation/Images/Axis_Inspector.png.meta b/Documentation/Images/Axis_Inspector.png.meta new file mode 100644 index 0000000..addb9ed --- /dev/null +++ b/Documentation/Images/Axis_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: c86887328077b6a4ab5faa517126376e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Button_Inspector.png b/Documentation/Images/Button_Inspector.png new file mode 100644 index 0000000..44a1971 Binary files /dev/null and b/Documentation/Images/Button_Inspector.png differ diff --git a/Documentation/Images/Button_Inspector.png.meta b/Documentation/Images/Button_Inspector.png.meta new file mode 100644 index 0000000..ff6afee --- /dev/null +++ b/Documentation/Images/Button_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 4309d333f2ba8ce43bd43338b0446590 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/ColorChanger_Inspector.png b/Documentation/Images/ColorChanger_Inspector.png new file mode 100644 index 0000000..d39d004 Binary files /dev/null and b/Documentation/Images/ColorChanger_Inspector.png differ diff --git a/Documentation/Images/ColorChanger_Inspector.png.meta b/Documentation/Images/ColorChanger_Inspector.png.meta new file mode 100644 index 0000000..32135fd --- /dev/null +++ b/Documentation/Images/ColorChanger_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: f45b0fd5ba2fb7b40bc1af90865ffede +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Cylinder-20240625-141052.gif b/Documentation/Images/Cylinder-20240625-141052.gif new file mode 100644 index 0000000..ac61ba3 Binary files /dev/null and b/Documentation/Images/Cylinder-20240625-141052.gif differ diff --git a/Documentation/Images/Cylinder-20240625-141052.gif.meta b/Documentation/Images/Cylinder-20240625-141052.gif.meta new file mode 100644 index 0000000..1f180cf --- /dev/null +++ b/Documentation/Images/Cylinder-20240625-141052.gif.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 48b0505b21dd6d846b5b9894ab053b8f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Cylinder-20240625-141252.gif b/Documentation/Images/Cylinder-20240625-141252.gif new file mode 100644 index 0000000..bbf7f21 Binary files /dev/null and b/Documentation/Images/Cylinder-20240625-141252.gif differ diff --git a/Documentation/Images/Cylinder-20240625-141252.gif.meta b/Documentation/Images/Cylinder-20240625-141252.gif.meta new file mode 100644 index 0000000..2799e0e --- /dev/null +++ b/Documentation/Images/Cylinder-20240625-141252.gif.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: b6ffd693d9e7422459c6252b3eeeff2f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Cylinder_In_Action.gif b/Documentation/Images/Cylinder_In_Action.gif new file mode 100644 index 0000000..88f1ecf Binary files /dev/null and b/Documentation/Images/Cylinder_In_Action.gif differ diff --git a/Documentation/Images/Cylinder_In_Action.gif.meta b/Documentation/Images/Cylinder_In_Action.gif.meta new file mode 100644 index 0000000..2aafa25 --- /dev/null +++ b/Documentation/Images/Cylinder_In_Action.gif.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 9e32f2f09aa116747b00f8bec52696c3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Cylinder_Inspector.png b/Documentation/Images/Cylinder_Inspector.png new file mode 100644 index 0000000..5ebcff4 Binary files /dev/null and b/Documentation/Images/Cylinder_Inspector.png differ diff --git a/Documentation/Images/Cylinder_Inspector.png.meta b/Documentation/Images/Cylinder_Inspector.png.meta new file mode 100644 index 0000000..a3ec170 --- /dev/null +++ b/Documentation/Images/Cylinder_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 895bb5e63ae760c48b431fb2df52e324 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/DataReader_Inspector.png b/Documentation/Images/DataReader_Inspector.png new file mode 100644 index 0000000..1271bc0 Binary files /dev/null and b/Documentation/Images/DataReader_Inspector.png differ diff --git a/Documentation/Images/DataReader_Inspector.png.meta b/Documentation/Images/DataReader_Inspector.png.meta new file mode 100644 index 0000000..b562426 --- /dev/null +++ b/Documentation/Images/DataReader_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 7e3feaf4b33ed1c4fb60be8cf60a3ab5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/DemoScene.gif b/Documentation/Images/DemoScene.gif new file mode 100644 index 0000000..f90aeb6 Binary files /dev/null and b/Documentation/Images/DemoScene.gif differ diff --git a/Documentation/Images/DemoScene.gif.meta b/Documentation/Images/DemoScene.gif.meta new file mode 100644 index 0000000..9f40954 --- /dev/null +++ b/Documentation/Images/DemoScene.gif.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 0d040597bf286a945a8051191b807fb3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/DemoScene.png b/Documentation/Images/DemoScene.png new file mode 100644 index 0000000..20616a8 Binary files /dev/null and b/Documentation/Images/DemoScene.png differ diff --git a/Documentation/Images/DemoScene.png.meta b/Documentation/Images/DemoScene.png.meta new file mode 100644 index 0000000..683b655 --- /dev/null +++ b/Documentation/Images/DemoScene.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 9b46fb3a549232d468f1d6f5fdaab56e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Door_Inspector.png b/Documentation/Images/Door_Inspector.png new file mode 100644 index 0000000..c3fa13e Binary files /dev/null and b/Documentation/Images/Door_Inspector.png differ diff --git a/Documentation/Images/Door_Inspector.png.meta b/Documentation/Images/Door_Inspector.png.meta new file mode 100644 index 0000000..1c8a3d1 --- /dev/null +++ b/Documentation/Images/Door_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 526711180aab2cb46b84e9696900ddc3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/DrivePosition_Inspector.png b/Documentation/Images/DrivePosition_Inspector.png new file mode 100644 index 0000000..4f2acd8 Binary files /dev/null and b/Documentation/Images/DrivePosition_Inspector.png differ diff --git a/Documentation/Images/DrivePosition_Inspector.png.meta b/Documentation/Images/DrivePosition_Inspector.png.meta new file mode 100644 index 0000000..e46f87d --- /dev/null +++ b/Documentation/Images/DrivePosition_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: b47cf23ab11bddf45ac35a7490b3b0be +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/DriveSimple_Inspector.png b/Documentation/Images/DriveSimple_Inspector.png new file mode 100644 index 0000000..12e586f Binary files /dev/null and b/Documentation/Images/DriveSimple_Inspector.png differ diff --git a/Documentation/Images/DriveSimple_Inspector.png.meta b/Documentation/Images/DriveSimple_Inspector.png.meta new file mode 100644 index 0000000..3558fe4 --- /dev/null +++ b/Documentation/Images/DriveSimple_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 466b58b3194279948821e5cf57f4c0c1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/DriveSpeed_Action.gif b/Documentation/Images/DriveSpeed_Action.gif new file mode 100644 index 0000000..94961c4 Binary files /dev/null and b/Documentation/Images/DriveSpeed_Action.gif differ diff --git a/Documentation/Images/DriveSpeed_Action.gif.meta b/Documentation/Images/DriveSpeed_Action.gif.meta new file mode 100644 index 0000000..524aee7 --- /dev/null +++ b/Documentation/Images/DriveSpeed_Action.gif.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 911b75d1b50a91c459b5c51bd6fadfd6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/DriveSpeed_Inspector.png b/Documentation/Images/DriveSpeed_Inspector.png new file mode 100644 index 0000000..c145c0b Binary files /dev/null and b/Documentation/Images/DriveSpeed_Inspector.png differ diff --git a/Documentation/Images/DriveSpeed_Inspector.png.meta b/Documentation/Images/DriveSpeed_Inspector.png.meta new file mode 100644 index 0000000..0ea343a --- /dev/null +++ b/Documentation/Images/DriveSpeed_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 49ecc1033d1339145808008662459569 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/EntityStatic_Inspector.png b/Documentation/Images/EntityStatic_Inspector.png new file mode 100644 index 0000000..ae11894 Binary files /dev/null and b/Documentation/Images/EntityStatic_Inspector.png differ diff --git a/Documentation/Images/EntityStatic_Inspector.png.meta b/Documentation/Images/EntityStatic_Inspector.png.meta new file mode 100644 index 0000000..1463cda --- /dev/null +++ b/Documentation/Images/EntityStatic_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: fdbe9568fecc0ad4c94e2ef98e5c5aae +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/EntityTag_Inspector.png b/Documentation/Images/EntityTag_Inspector.png new file mode 100644 index 0000000..eb97eb4 Binary files /dev/null and b/Documentation/Images/EntityTag_Inspector.png differ diff --git a/Documentation/Images/EntityTag_Inspector.png.meta b/Documentation/Images/EntityTag_Inspector.png.meta new file mode 100644 index 0000000..317e511 --- /dev/null +++ b/Documentation/Images/EntityTag_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: b33bfe3a0eb35e04a918b3616c678c8a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Entity_Inspector.png b/Documentation/Images/Entity_Inspector.png new file mode 100644 index 0000000..4713fea Binary files /dev/null and b/Documentation/Images/Entity_Inspector.png differ diff --git a/Documentation/Images/Entity_Inspector.png.meta b/Documentation/Images/Entity_Inspector.png.meta new file mode 100644 index 0000000..307deee --- /dev/null +++ b/Documentation/Images/Entity_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 1b3989e63a85d7e46be7a45e149342b4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/ExampleHierarchy.png b/Documentation/Images/ExampleHierarchy.png new file mode 100644 index 0000000..0259746 Binary files /dev/null and b/Documentation/Images/ExampleHierarchy.png differ diff --git a/Documentation/Images/ExampleHierarchy.png.meta b/Documentation/Images/ExampleHierarchy.png.meta new file mode 100644 index 0000000..6e8bb6b --- /dev/null +++ b/Documentation/Images/ExampleHierarchy.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 589cae44fdf15624aa9e7b0c40bf4f2a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Gripper_Inspector.png b/Documentation/Images/Gripper_Inspector.png new file mode 100644 index 0000000..eb751cc Binary files /dev/null and b/Documentation/Images/Gripper_Inspector.png differ diff --git a/Documentation/Images/Gripper_Inspector.png.meta b/Documentation/Images/Gripper_Inspector.png.meta new file mode 100644 index 0000000..af420e5 --- /dev/null +++ b/Documentation/Images/Gripper_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 9d780db9dd9b1eb4fbaa46e52e07e1dc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/GuidedPayload_Inspector.png b/Documentation/Images/GuidedPayload_Inspector.png new file mode 100644 index 0000000..0b6b40c Binary files /dev/null and b/Documentation/Images/GuidedPayload_Inspector.png differ diff --git a/Documentation/Images/GuidedPayload_Inspector.png.meta b/Documentation/Images/GuidedPayload_Inspector.png.meta new file mode 100644 index 0000000..72b1662 --- /dev/null +++ b/Documentation/Images/GuidedPayload_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 6ab6d172620ff164395cbf3b98ddde52 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Hierarchy_Inspector.png b/Documentation/Images/Hierarchy_Inspector.png new file mode 100644 index 0000000..51ee496 Binary files /dev/null and b/Documentation/Images/Hierarchy_Inspector.png differ diff --git a/Documentation/Images/Hierarchy_Inspector.png.meta b/Documentation/Images/Hierarchy_Inspector.png.meta new file mode 100644 index 0000000..f4305ac --- /dev/null +++ b/Documentation/Images/Hierarchy_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 925a13f84e42bd349b8eb8a257a18ca2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Lamp_Inspector.png b/Documentation/Images/Lamp_Inspector.png new file mode 100644 index 0000000..efd748b Binary files /dev/null and b/Documentation/Images/Lamp_Inspector.png differ diff --git a/Documentation/Images/Lamp_Inspector.png.meta b/Documentation/Images/Lamp_Inspector.png.meta new file mode 100644 index 0000000..af307da --- /dev/null +++ b/Documentation/Images/Lamp_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: a90752dd32ad10b4186f696c0e226120 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Lock_Inspector.png b/Documentation/Images/Lock_Inspector.png new file mode 100644 index 0000000..5d8fb5e Binary files /dev/null and b/Documentation/Images/Lock_Inspector.png differ diff --git a/Documentation/Images/Lock_Inspector.png.meta b/Documentation/Images/Lock_Inspector.png.meta new file mode 100644 index 0000000..21c66ec --- /dev/null +++ b/Documentation/Images/Lock_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 178c0dc1cb2b48e43ae70d7519584573 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/MeasurementAngle_Inspector.png b/Documentation/Images/MeasurementAngle_Inspector.png new file mode 100644 index 0000000..2ce24ad Binary files /dev/null and b/Documentation/Images/MeasurementAngle_Inspector.png differ diff --git a/Documentation/Images/MeasurementAngle_Inspector.png.meta b/Documentation/Images/MeasurementAngle_Inspector.png.meta new file mode 100644 index 0000000..741a183 --- /dev/null +++ b/Documentation/Images/MeasurementAngle_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 0ed2dca703a5aca4d8fe03c04183ac8b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/MeasurementEncoder_Inspector.png b/Documentation/Images/MeasurementEncoder_Inspector.png new file mode 100644 index 0000000..1a282e1 Binary files /dev/null and b/Documentation/Images/MeasurementEncoder_Inspector.png differ diff --git a/Documentation/Images/MeasurementEncoder_Inspector.png.meta b/Documentation/Images/MeasurementEncoder_Inspector.png.meta new file mode 100644 index 0000000..60dcbf9 --- /dev/null +++ b/Documentation/Images/MeasurementEncoder_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 7b2e7875791258a4fb566681d52dfc99 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/PayloadDataReader_Inspector.png b/Documentation/Images/PayloadDataReader_Inspector.png new file mode 100644 index 0000000..19a5984 Binary files /dev/null and b/Documentation/Images/PayloadDataReader_Inspector.png differ diff --git a/Documentation/Images/PayloadDataReader_Inspector.png.meta b/Documentation/Images/PayloadDataReader_Inspector.png.meta new file mode 100644 index 0000000..0cf3ee0 --- /dev/null +++ b/Documentation/Images/PayloadDataReader_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: fba552a83eced2c4fafaa3678afc3f01 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/PayloadData_Inspector.png b/Documentation/Images/PayloadData_Inspector.png new file mode 100644 index 0000000..fc77320 Binary files /dev/null and b/Documentation/Images/PayloadData_Inspector.png differ diff --git a/Documentation/Images/PayloadData_Inspector.png.meta b/Documentation/Images/PayloadData_Inspector.png.meta new file mode 100644 index 0000000..0678a4f --- /dev/null +++ b/Documentation/Images/PayloadData_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: fc36d99c54428424db6f40a884f9de6e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/PayloadStorage_Inspector.png b/Documentation/Images/PayloadStorage_Inspector.png new file mode 100644 index 0000000..c0402e2 Binary files /dev/null and b/Documentation/Images/PayloadStorage_Inspector.png differ diff --git a/Documentation/Images/PayloadStorage_Inspector.png.meta b/Documentation/Images/PayloadStorage_Inspector.png.meta new file mode 100644 index 0000000..3e70422 --- /dev/null +++ b/Documentation/Images/PayloadStorage_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 8cb19d47bb947e64b96db15a9d951d9f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/PayloadTag_Inspector.png b/Documentation/Images/PayloadTag_Inspector.png new file mode 100644 index 0000000..0506382 Binary files /dev/null and b/Documentation/Images/PayloadTag_Inspector.png differ diff --git a/Documentation/Images/PayloadTag_Inspector.png.meta b/Documentation/Images/PayloadTag_Inspector.png.meta new file mode 100644 index 0000000..b20a110 --- /dev/null +++ b/Documentation/Images/PayloadTag_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 3a0b65980c6b2654aa8189d08c395511 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Payload_Inspector.png b/Documentation/Images/Payload_Inspector.png new file mode 100644 index 0000000..1f9fd6a Binary files /dev/null and b/Documentation/Images/Payload_Inspector.png differ diff --git a/Documentation/Images/Payload_Inspector.png.meta b/Documentation/Images/Payload_Inspector.png.meta new file mode 100644 index 0000000..5ec42e1 --- /dev/null +++ b/Documentation/Images/Payload_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 2cb3c09165f63924d88ddb74099c5c07 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Pool_Inspector.png b/Documentation/Images/Pool_Inspector.png new file mode 100644 index 0000000..ab90f1c Binary files /dev/null and b/Documentation/Images/Pool_Inspector.png differ diff --git a/Documentation/Images/Pool_Inspector.png.meta b/Documentation/Images/Pool_Inspector.png.meta new file mode 100644 index 0000000..3525e11 --- /dev/null +++ b/Documentation/Images/Pool_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 9ef5f9ef7fca2ea4b8c69ce7531a140e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/ProductDataDirectoryManager_Inspector.png b/Documentation/Images/ProductDataDirectoryManager_Inspector.png new file mode 100644 index 0000000..b9bf4b6 Binary files /dev/null and b/Documentation/Images/ProductDataDirectoryManager_Inspector.png differ diff --git a/Documentation/Images/ProductDataDirectoryManager_Inspector.png.meta b/Documentation/Images/ProductDataDirectoryManager_Inspector.png.meta new file mode 100644 index 0000000..1645095 --- /dev/null +++ b/Documentation/Images/ProductDataDirectoryManager_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 91b492e0cdf2e214294e1b1c88e6dac7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/ProductDataViewer.png b/Documentation/Images/ProductDataViewer.png new file mode 100644 index 0000000..7929979 Binary files /dev/null and b/Documentation/Images/ProductDataViewer.png differ diff --git a/Documentation/Images/ProductDataViewer.png.meta b/Documentation/Images/ProductDataViewer.png.meta new file mode 100644 index 0000000..594f5d1 --- /dev/null +++ b/Documentation/Images/ProductDataViewer.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 3bce45bde6a331a4e9c5508d1dcf14c3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/SampleProjectTree.png b/Documentation/Images/SampleProjectTree.png new file mode 100644 index 0000000..d0a0fc3 Binary files /dev/null and b/Documentation/Images/SampleProjectTree.png differ diff --git a/Documentation/Images/SampleProjectTree.png.meta b/Documentation/Images/SampleProjectTree.png.meta new file mode 100644 index 0000000..dd8f4f3 --- /dev/null +++ b/Documentation/Images/SampleProjectTree.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: d5df8d5668bd0564c9485166f8967372 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/SensorAnalog_Inspector.png b/Documentation/Images/SensorAnalog_Inspector.png new file mode 100644 index 0000000..6427061 Binary files /dev/null and b/Documentation/Images/SensorAnalog_Inspector.png differ diff --git a/Documentation/Images/SensorAnalog_Inspector.png.meta b/Documentation/Images/SensorAnalog_Inspector.png.meta new file mode 100644 index 0000000..0308dab --- /dev/null +++ b/Documentation/Images/SensorAnalog_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 057553cefdb59d847b3b13e7259b19ad +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/SensorBeam_Inspector.png b/Documentation/Images/SensorBeam_Inspector.png new file mode 100644 index 0000000..5cb52cf Binary files /dev/null and b/Documentation/Images/SensorBeam_Inspector.png differ diff --git a/Documentation/Images/SensorBeam_Inspector.png.meta b/Documentation/Images/SensorBeam_Inspector.png.meta new file mode 100644 index 0000000..941842c --- /dev/null +++ b/Documentation/Images/SensorBeam_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: ba1210c79530a474cb5e64549437eb00 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/SensorBinary_Inspector.png b/Documentation/Images/SensorBinary_Inspector.png new file mode 100644 index 0000000..fdd41f2 Binary files /dev/null and b/Documentation/Images/SensorBinary_Inspector.png differ diff --git a/Documentation/Images/SensorBinary_Inspector.png.meta b/Documentation/Images/SensorBinary_Inspector.png.meta new file mode 100644 index 0000000..dc869a0 --- /dev/null +++ b/Documentation/Images/SensorBinary_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 4e9ca7ac21549954eb61a0a9e77f6046 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Sink_Inspector.png b/Documentation/Images/Sink_Inspector.png new file mode 100644 index 0000000..49a8a8a Binary files /dev/null and b/Documentation/Images/Sink_Inspector.png differ diff --git a/Documentation/Images/Sink_Inspector.png.meta b/Documentation/Images/Sink_Inspector.png.meta new file mode 100644 index 0000000..801e359 --- /dev/null +++ b/Documentation/Images/Sink_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 7f38b3f748f7b5b42a1e167c09327182 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/Source_Inspector.png b/Documentation/Images/Source_Inspector.png new file mode 100644 index 0000000..c738242 Binary files /dev/null and b/Documentation/Images/Source_Inspector.png differ diff --git a/Documentation/Images/Source_Inspector.png.meta b/Documentation/Images/Source_Inspector.png.meta new file mode 100644 index 0000000..c27c28c --- /dev/null +++ b/Documentation/Images/Source_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: c912087a88df8dd4e8364ca6aa0ab087 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/StaticCollider_Inspector.png b/Documentation/Images/StaticCollider_Inspector.png new file mode 100644 index 0000000..15f5519 Binary files /dev/null and b/Documentation/Images/StaticCollider_Inspector.png differ diff --git a/Documentation/Images/StaticCollider_Inspector.png.meta b/Documentation/Images/StaticCollider_Inspector.png.meta new file mode 100644 index 0000000..a55ef7a --- /dev/null +++ b/Documentation/Images/StaticCollider_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 3716ca633131c74439a28b291b6e010b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/SwitchRotaryAnimation_Inspector.png b/Documentation/Images/SwitchRotaryAnimation_Inspector.png new file mode 100644 index 0000000..707c34e Binary files /dev/null and b/Documentation/Images/SwitchRotaryAnimation_Inspector.png differ diff --git a/Documentation/Images/SwitchRotaryAnimation_Inspector.png.meta b/Documentation/Images/SwitchRotaryAnimation_Inspector.png.meta new file mode 100644 index 0000000..05f7d29 --- /dev/null +++ b/Documentation/Images/SwitchRotaryAnimation_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 6391a526a3f6a9245ac8e28ecbd0031d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/SwitchRotary_Inspector.png b/Documentation/Images/SwitchRotary_Inspector.png new file mode 100644 index 0000000..9790262 Binary files /dev/null and b/Documentation/Images/SwitchRotary_Inspector.png differ diff --git a/Documentation/Images/SwitchRotary_Inspector.png.meta b/Documentation/Images/SwitchRotary_Inspector.png.meta new file mode 100644 index 0000000..4a07596 --- /dev/null +++ b/Documentation/Images/SwitchRotary_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 6257fa42a30b2c744981b429ec1bc0e2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/TagReader_Inspector.png b/Documentation/Images/TagReader_Inspector.png new file mode 100644 index 0000000..576a775 Binary files /dev/null and b/Documentation/Images/TagReader_Inspector.png differ diff --git a/Documentation/Images/TagReader_Inspector.png.meta b/Documentation/Images/TagReader_Inspector.png.meta new file mode 100644 index 0000000..5ede71e --- /dev/null +++ b/Documentation/Images/TagReader_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 6391bf304dd53c045bde6f59058f1d68 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/TcAdsClient_Inspector.png b/Documentation/Images/TcAdsClient_Inspector.png new file mode 100644 index 0000000..3e2b7d3 Binary files /dev/null and b/Documentation/Images/TcAdsClient_Inspector.png differ diff --git a/Documentation/Images/TcAdsClient_Inspector.png.meta b/Documentation/Images/TcAdsClient_Inspector.png.meta new file mode 100644 index 0000000..171a2b2 --- /dev/null +++ b/Documentation/Images/TcAdsClient_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: b20e27aa81c95ca4dbb5d7c4735bc235 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/TransportCurved_Gizmos.png b/Documentation/Images/TransportCurved_Gizmos.png new file mode 100644 index 0000000..6cdcf00 Binary files /dev/null and b/Documentation/Images/TransportCurved_Gizmos.png differ diff --git a/Documentation/Images/TransportCurved_Gizmos.png.meta b/Documentation/Images/TransportCurved_Gizmos.png.meta new file mode 100644 index 0000000..3447b94 --- /dev/null +++ b/Documentation/Images/TransportCurved_Gizmos.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 4765a2443b6f19c4ebdda331b61dadf9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/TransportCurved_Inspector.png b/Documentation/Images/TransportCurved_Inspector.png new file mode 100644 index 0000000..548938f Binary files /dev/null and b/Documentation/Images/TransportCurved_Inspector.png differ diff --git a/Documentation/Images/TransportCurved_Inspector.png.meta b/Documentation/Images/TransportCurved_Inspector.png.meta new file mode 100644 index 0000000..75d2757 --- /dev/null +++ b/Documentation/Images/TransportCurved_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: aa3415d5868ac8c44bbe4bcf3263c031 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/TransportLinear_Gizmos.png b/Documentation/Images/TransportLinear_Gizmos.png new file mode 100644 index 0000000..5c37bf1 Binary files /dev/null and b/Documentation/Images/TransportLinear_Gizmos.png differ diff --git a/Documentation/Images/TransportLinear_Gizmos.png.meta b/Documentation/Images/TransportLinear_Gizmos.png.meta new file mode 100644 index 0000000..bf0b75e --- /dev/null +++ b/Documentation/Images/TransportLinear_Gizmos.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 3b74e706507698d47bac979b76ab9dfb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Documentation/Images/TransportLinear_Inspector.png b/Documentation/Images/TransportLinear_Inspector.png new file mode 100644 index 0000000..a45f5c3 Binary files /dev/null and b/Documentation/Images/TransportLinear_Inspector.png differ diff --git a/Documentation/Images/TransportLinear_Inspector.png.meta b/Documentation/Images/TransportLinear_Inspector.png.meta new file mode 100644 index 0000000..0370221 --- /dev/null +++ b/Documentation/Images/TransportLinear_Inspector.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 960c784db5ce06f45bfe3a24ec687f67 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor.meta b/Editor.meta new file mode 100644 index 0000000..0101253 --- /dev/null +++ b/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f392ef06e1fefa3489f1869438466093 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/OC.Editor.asmdef b/Editor/OC.Editor.asmdef new file mode 100644 index 0000000..ddf8c9c --- /dev/null +++ b/Editor/OC.Editor.asmdef @@ -0,0 +1,19 @@ +{ + "name": "OC.Editor", + "rootNamespace": "OC", + "references": [ + "GUID:47fad80190177a94f917a02743203241", + "GUID:f51ebe6a0ceec4240a699833d6309b23" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Editor/OC.Editor.asmdef.meta b/Editor/OC.Editor.asmdef.meta new file mode 100644 index 0000000..9b1b439 --- /dev/null +++ b/Editor/OC.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3b4286cfcf2bfc24395a8d834c659111 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources.meta b/Editor/Resources.meta new file mode 100644 index 0000000..f026a9c --- /dev/null +++ b/Editor/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a6a170669b117e441a988b346d269f79 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources/StyleSheet.meta b/Editor/Resources/StyleSheet.meta new file mode 100644 index 0000000..703ac05 --- /dev/null +++ b/Editor/Resources/StyleSheet.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f80792f0226c4648afe1a31c78c2a3dc +timeCreated: 1689239111 \ No newline at end of file diff --git a/Editor/Resources/StyleSheet/oc-inspector.uss b/Editor/Resources/StyleSheet/oc-inspector.uss new file mode 100644 index 0000000..53a0a35 --- /dev/null +++ b/Editor/Resources/StyleSheet/oc-inspector.uss @@ -0,0 +1,167 @@ +.property-group { + flex-direction: column; + justify-content: space-between; + margin-top: 12px; + margin-bottom: 1px; + padding-top: 2px; + padding-right: 2px; + padding-bottom: 2px; + padding-left: 2px; + margin-right: 3px; + margin-left: 3px; +} + +.property-group__header { + flex-direction: row; + flex-grow: 0; + justify-content: space-between; + align-items: center; +} + +.property-group__line { + background-color: rgb(70, 70, 70); + flex-grow: 1; + height: 2px; + margin-top: 3px; + margin-right: 3px; + margin-bottom: 3px; + margin-left: 3px; +} + +.property-group__label { + -unity-font-style: bold; + margin-top: 1px; + margin-right: 3px; + margin-bottom: 1px; + margin-left: 3px; +} + +.button { + flex-grow: 0; + flex-shrink: 0; + -unity-text-align: middle-center; +} + +.button:checked { + background-color: var(--unity-colors-button-background-pressed); + border-color: var(--unity-colors-button-border-pressed); +} + +.button:checked:hover { + background-color: var(--unity-colors-button-background-hover_pressed); +} + +.button__label { + flex-grow: 1; + color: var(--unity-colors-button-text); + margin-left: 0; + margin-right: 0; + margin-top: 0; + margin-bottom: 0; + padding-left: 0; + padding-right: 0; + padding-top: 0; + padding-bottom: 0; + flex-shrink: 1; + min-width: auto; +} + +.button-checked { + background-color: rgb(70, 96, 124); + border-left-color: rgb(0, 0, 0); + border-right-color: rgb(0, 0, 0); + border-top-color: rgb(0, 0, 0); + border-bottom-color: rgb(0, 0, 0); +} + +.lamp { + align-items: center; +} + +.lamp__shape { + border-left-color: rgb(37, 37, 37); + border-right-color: rgb(37, 37, 37); + border-top-color: rgb(37, 37, 37); + border-bottom-color: rgb(37, 37, 37); + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + background-color: rgb(42, 42, 42); +} + +.lamp__shape-round { + border-top-left-radius: 10px; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + border-bottom-left-radius: 10px; + width: 12px; + height: 12px; + flex-shrink: 0; + flex-grow: 0; + max-width: 12px; + min-width: 12px; + max-height: 12px; +} + +.lamp__shape-square { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + width: 14px; + height: 14px; + max-width: 14px; + min-width: 14px; + max-height: 14px; + min-height: 14px; +} + +.lamp__shape-rectangle { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + width: 8px; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + height: 14px; + max-width: 8px; + min-width: 8px; + max-height: 14px; + min-height: 14px; +} + +.progress-bar { + flex-direction: column; + flex-grow: 0; + flex-shrink: 1; + margin-right: -2px; +} + +.progress-bar__container { + flex-direction: row; + flex-grow: 1; +} + +.progress-bar__limit { + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-left-color: rgb(37, 37, 37); + border-right-color: rgb(37, 37, 37); + border-top-color: rgb(37, 37, 37); + border-bottom-color: rgb(37, 37, 37); + width: 8px; +} + +.progress-bar__limit-active { + background-color: rgb(41, 255, 0); +} + +.inspector-label{ + flex-shrink: 0.4; +} diff --git a/Editor/Resources/StyleSheet/oc-inspector.uss.meta b/Editor/Resources/StyleSheet/oc-inspector.uss.meta new file mode 100644 index 0000000..8ff2a6a --- /dev/null +++ b/Editor/Resources/StyleSheet/oc-inspector.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 270f6427e82192149a5570a46078d705 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/Editor/Resources/UXML.meta b/Editor/Resources/UXML.meta new file mode 100644 index 0000000..1ab0931 --- /dev/null +++ b/Editor/Resources/UXML.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 007661c705a042a2a0c5ebe9f46067a5 +timeCreated: 1689170546 \ No newline at end of file diff --git a/Editor/Resources/UXML/ProductData.meta b/Editor/Resources/UXML/ProductData.meta new file mode 100644 index 0000000..70fa309 --- /dev/null +++ b/Editor/Resources/UXML/ProductData.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 483364e4e39674b4f967b883f665df04 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Resources/UXML/ProductData/ProductDataViewer.uxml b/Editor/Resources/UXML/ProductData/ProductDataViewer.uxml new file mode 100644 index 0000000..3c5adc4 --- /dev/null +++ b/Editor/Resources/UXML/ProductData/ProductDataViewer.uxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Editor/Resources/UXML/ProductData/ProductDataViewer.uxml.meta b/Editor/Resources/UXML/ProductData/ProductDataViewer.uxml.meta new file mode 100644 index 0000000..96368c6 --- /dev/null +++ b/Editor/Resources/UXML/ProductData/ProductDataViewer.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bb2ca8181db3b4f4e8c9125f0e75346f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Editor/Resources/UXML/ProductData/ProductTemplateEditor.uxml b/Editor/Resources/UXML/ProductData/ProductTemplateEditor.uxml new file mode 100644 index 0000000..29c911e --- /dev/null +++ b/Editor/Resources/UXML/ProductData/ProductTemplateEditor.uxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Editor/Resources/UXML/ProductData/ProductTemplateEditor.uxml.meta b/Editor/Resources/UXML/ProductData/ProductTemplateEditor.uxml.meta new file mode 100644 index 0000000..a6a94a3 --- /dev/null +++ b/Editor/Resources/UXML/ProductData/ProductTemplateEditor.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 08b80bf473022804092adc56f6a612ea +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Editor/Scripts.meta b/Editor/Scripts.meta new file mode 100644 index 0000000..8aa858f --- /dev/null +++ b/Editor/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d3f0188637e0c1458d69d1e9b1ed997 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Assistant.meta b/Editor/Scripts/Assistant.meta new file mode 100644 index 0000000..bdea7a3 --- /dev/null +++ b/Editor/Scripts/Assistant.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 15c319bbe10e7d14884d43f44cc16753 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Assistant/ApiMessage.cs b/Editor/Scripts/Assistant/ApiMessage.cs new file mode 100644 index 0000000..dd6345f --- /dev/null +++ b/Editor/Scripts/Assistant/ApiMessage.cs @@ -0,0 +1,65 @@ +using System; +using System.Text; + +namespace OC.Editor.Assistant +{ + internal class ApiMessage + { + public byte[] Buffer { get; } + public static int HeaderSize => 4; + + public ApiMessage(string payload) + { + Buffer = BuildMessage(Encoding.UTF8.GetBytes(payload)); + } + + public ApiMessage(byte[] payload) + { + Buffer = BuildMessage(payload); + } + + public new string ToString() + { + return Encoding.UTF8.GetString(Buffer, HeaderSize, Buffer.Length - HeaderSize); + } + + public static bool IsHeaderValid(byte[] header) + { + if (header.Length != HeaderSize) + { + return false; + } + + return header[3] == (byte)(header[2] + (header[0] ^ header[1])); + } + + public static int GetExpectedSize(byte[] header) + { + if (header.Length != HeaderSize) + { + return 0; + } + + return header[0] << 8 | header[1]; + } + + private static byte[] BuildHeader(byte[] payload) + { + var header = new byte[HeaderSize]; + header[0] = (byte)((payload.Length & 0xFF00) >> 8); + header[1] = (byte)(payload.Length & 0x00FF); + header[2] = 0x01; + header[3] = (byte)(header[2] + (header[0] ^ header[1])); + return header; + } + + private static byte[] BuildMessage(byte[] payload) + { + var header = BuildHeader(payload); + var message = new byte[header.Length + payload.Length]; + Array.Copy(header, 0, message, 0, HeaderSize); + Array.Copy(payload, 0, message, HeaderSize, payload.Length); + return message; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Assistant/ApiMessage.cs.meta b/Editor/Scripts/Assistant/ApiMessage.cs.meta new file mode 100644 index 0000000..cf3b25d --- /dev/null +++ b/Editor/Scripts/Assistant/ApiMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2eca9bafdbd4184880a00ebf9679855 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Assistant/ApiNode.cs b/Editor/Scripts/Assistant/ApiNode.cs new file mode 100644 index 0000000..9b9d1c0 --- /dev/null +++ b/Editor/Scripts/Assistant/ApiNode.cs @@ -0,0 +1,88 @@ +#nullable enable +using System; +using System.IO.Pipes; +using System.Threading; +using System.Threading.Tasks; + +namespace OC.Editor.Assistant +{ + internal class ApiNode : IDisposable + { + private NamedPipeServerStream? _pipeServer; + private readonly CancellationTokenSource _cancel = new(); + + private readonly string _localPipeName; + private readonly string _remotePipeName; + private readonly string _remoteHostname; + + internal ApiNode(string localPipeName, string remotePipeName, string remoteHostname) + { + _localPipeName = localPipeName; + _remotePipeName = remotePipeName; + _remoteHostname = remoteHostname; + } + + public void Listen() + { + Listen($"{_localPipeName}.server"); + } + + public Action? MessageReceived; + + public async Task Send(string data) + { + try + { + await using var pipeStream = new NamedPipeClientStream( + _remoteHostname, + $"{_remotePipeName}.server", + PipeDirection.InOut, + PipeOptions.Asynchronous); + await pipeStream.ConnectAsync(100); + var apiMessage = new ApiMessage(data); + await pipeStream.WriteAsync(apiMessage.Buffer, 0, apiMessage.Buffer.Length); + return true; + } + catch (Exception exception) + { + Logging.Logger.LogError(exception); + return false; + } + } + + private void Listen(string pipeName) + { + var cancelToken = _cancel.Token; + + Task.Run(async () => + { + while (!cancelToken.IsCancellationRequested) + { + _pipeServer = new NamedPipeServerStream(pipeName, PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous); + await _pipeServer.WaitForConnectionAsync(_cancel.Token); + + var buffer = new byte[ApiMessage.HeaderSize]; + if (await _pipeServer.ReadAsync(buffer, 0, ApiMessage.HeaderSize, cancelToken) == ApiMessage.HeaderSize + && ApiMessage.IsHeaderValid(buffer)) + { + var size = ApiMessage.GetExpectedSize(buffer); + buffer = new byte[size]; + + if (await _pipeServer.ReadAsync(buffer, 0, size, cancelToken) == size) + { + MessageReceived?.Invoke(new ApiMessage(buffer)); + } + } + + _pipeServer?.Close(); + } + }, cancelToken); + } + + public void Dispose() + { + _cancel.Cancel(); + _pipeServer?.Close(); + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Assistant/ApiNode.cs.meta b/Editor/Scripts/Assistant/ApiNode.cs.meta new file mode 100644 index 0000000..3a868e1 --- /dev/null +++ b/Editor/Scripts/Assistant/ApiNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fbbd913407d89a49b38e4401f5691ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Assistant/Connection.cs b/Editor/Scripts/Assistant/Connection.cs new file mode 100644 index 0000000..78208cc --- /dev/null +++ b/Editor/Scripts/Assistant/Connection.cs @@ -0,0 +1,89 @@ +using System; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace OC.Editor.Assistant +{ + /// + /// Connection to an Assistant instance based on a . + /// + public class Connection : IDisposable + { + private const string CONFIG_IDENTIFIER = "cfg"; + private const string MESSAGE_IDENTIFIER = "msg"; + private const string TIMESCALE_IDENTIFIER = "tsc"; + + private static readonly string AppDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + private readonly ApiNode _apiNode; + + /// + /// Creates a new connection to the Assistant. + /// + public Connection() : this(".") + { + } + + private Connection(string remoteHostName) + { + _apiNode = new ApiNode( + $"{nameof(OC)}.{nameof(Assistant)}.Remote", + $"{nameof(OC)}.{nameof(Assistant)}", + remoteHostName); + + _apiNode.MessageReceived += OnReceived; + _apiNode.Listen(); + } + + /// + /// Sends a client configuration to the Assistant. + /// The configuration to be sent. + /// + public async Task SendConfigAsync(XElement config) + { + var filePath = $@"{AppDataFolder}\{nameof(OC)}.{nameof(Assistant)}\ClientConfig.xml"; + config.Save(filePath); + await _apiNode.Send($"{CONFIG_IDENTIFIER}{filePath}"); + } + + /// + /// Sends a TimeScaling value to the Assistant. + /// + /// The TimeScaling value to be sent. + public async Task SendTimeScalingAsync(double value) + { + await _apiNode.Send($"{TIMESCALE_IDENTIFIER}{value}"); + } + + /// + /// Sends a command to the Assistant. + /// The message to be sent. + /// + public async Task SendMessageAsync(string message) + { + await _apiNode.Send($"{MESSAGE_IDENTIFIER}{message}"); + } + + /// + /// Received a message from the Assistant. + /// + public event Action MessageReceived; + + private void OnReceived(ApiMessage apiMessage) + { + var message = apiMessage.ToString(); + + if (message[..3] != MESSAGE_IDENTIFIER) + { + return; + } + + MessageReceived?.Invoke(message[3..]); + } + + /// + public void Dispose() + { + _apiNode.Dispose(); + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Assistant/Connection.cs.meta b/Editor/Scripts/Assistant/Connection.cs.meta new file mode 100644 index 0000000..224cf84 --- /dev/null +++ b/Editor/Scripts/Assistant/Connection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a1d0076175c1984a86b7e2386af383b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/EditorRenameInputDialog.cs b/Editor/Scripts/EditorRenameInputDialog.cs new file mode 100644 index 0000000..c9da060 --- /dev/null +++ b/Editor/Scripts/EditorRenameInputDialog.cs @@ -0,0 +1,105 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace OC.Editor +{ + public class EditorRenameInputDialog : EditorWindow + { + public Action OkButtonClicked; + public string Description; + public string InputText; + public string OkButtonLabel; + public string CancelButtonLabel; + public bool InitializedPosition; + public bool ShouldClose; + + private void OnGUI() + { + var e = Event.current; + if (e.type == EventType.KeyDown) + { + switch (e.keyCode) + { + case KeyCode.Escape: + ShouldClose = true; + e.Use(); + break; + case KeyCode.Return: + case KeyCode.KeypadEnter: + OkButtonClicked?.Invoke(); + ShouldClose = true; + e.Use(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + if (ShouldClose) Close(); + + var rect = EditorGUILayout.BeginVertical(); + EditorGUILayout.Space(12); + EditorGUILayout.LabelField(Description); + EditorGUILayout.Space(8); + GUI.SetNextControlName("inText"); + InputText = EditorGUILayout.TextField("", InputText); + GUI.FocusControl("inText"); + EditorGUILayout.Space(12); + + var r = EditorGUILayout.GetControlRect(); + r.width /= 2; + if (GUI.Button(r, OkButtonLabel)) + { + OkButtonClicked?.Invoke(); + ShouldClose = true; + } + + r.x += r.width; + if (GUI.Button(r, CancelButtonLabel)) + { + InputText = null; + ShouldClose = true; + } + + EditorGUILayout.Space(8); + EditorGUILayout.EndVertical(); + + + if (rect.width != 0 && minSize != rect.size) + { + minSize = maxSize = rect.size; + } + + if (!InitializedPosition) + { + var mousePos = GUIUtility.GUIToScreenPoint(Event.current.mousePosition); + position = new Rect(mousePos.x + 32, mousePos.y, position.width, position.height); + InitializedPosition = true; + } + } + + /// + /// Returns text player entered, or null if player cancelled the dialog. + /// + /// + /// + /// + /// + /// + /// + public static string Show(string title, string description, string inputText, string okButton = "OK", string cancelButton = "Cancel") + { + string result = null; + var window = CreateInstance(); + window.titleContent = new GUIContent(title); + window.Description = description; + window.InputText = inputText; + window.OkButtonLabel = okButton; + window.CancelButtonLabel = cancelButton; + window.OkButtonClicked += () => result = window.InputText; + window.ShowModal(); + return result; + } + } +} diff --git a/Editor/Scripts/EditorRenameInputDialog.cs.meta b/Editor/Scripts/EditorRenameInputDialog.cs.meta new file mode 100644 index 0000000..280b16d --- /dev/null +++ b/Editor/Scripts/EditorRenameInputDialog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41817aaaa4dfcb342b7795e843fa1bac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/EditorUtility.cs b/Editor/Scripts/EditorUtility.cs new file mode 100644 index 0000000..036e2f1 --- /dev/null +++ b/Editor/Scripts/EditorUtility.cs @@ -0,0 +1,58 @@ +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace OC.Editor +{ + public static class EditorUtility + { + public static void CreateScreenshot() + { + var path = UnityEditor.EditorUtility.OpenFolderPanel("Create Screenshot", "", "Screenshot.png"); + if (string.IsNullOrEmpty(path)) return; + + var fileName = Path.Combine(path, "Screenshot.png").Replace("\\", "/"); + fileName = GetNextAvailableFilename(fileName); + ScreenCapture.CaptureScreenshot(fileName); + Logging.Logger.Log($"{fileName} created!"); + Logging.Logger.Log($"{Directory.GetCurrentDirectory()}"); + } + + [MenuItem ("GameObject/Distance #x")] + public static void Distance() + { + var distance = Vector3.Distance(Selection.transforms[0].position, Selection.transforms[1].position); + Debug.Log($"{Selection.transforms[0].name} <> {Selection.transforms[1].name} => Distance: {distance}"); + } + + [MenuItem ("GameObject/Distance #x", true)] + public static bool DistanceValidation() + { + return Selection.transforms.Length == 2; + } + + public static string GetNextAvailableFilename(string fileName) + { + if (!File.Exists(fileName)) return fileName; + + string availableFilename; + var fileNameIndex = 1; + do + { + fileNameIndex += 1; + availableFilename = CreateNumberedFilename(fileName, fileNameIndex); + } + while (File.Exists(availableFilename)); + + return availableFilename; + } + + private static string CreateNumberedFilename(string fileName, int number) + { + var path = Path.GetDirectoryName(fileName); + var name = Path.GetFileNameWithoutExtension(fileName); + var extension = Path.GetExtension(fileName); + return $"{path}\\{name}{number}{extension}"; + } + } +} diff --git a/Editor/Scripts/EditorUtility.cs.meta b/Editor/Scripts/EditorUtility.cs.meta new file mode 100644 index 0000000..e797ee8 --- /dev/null +++ b/Editor/Scripts/EditorUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f976ee08c779ee84bb322f767d77a776 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/GeometryEditor.cs b/Editor/Scripts/GeometryEditor.cs new file mode 100644 index 0000000..205ff0e --- /dev/null +++ b/Editor/Scripts/GeometryEditor.cs @@ -0,0 +1,205 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor +{ + public class GeometryEditor : EditorWindow + { + private static GeometryEditor Instance { get; set; } + public GameObject Root { get; private set; } + public float VolumeFilter => _filterVolume; + public float VerticesDensity => _verticesDensity; + public bool InvertSelection => _invertSelection; + + private const string EDITOR_PREFS_ROOT = "GeometryEditor_Root"; + private const string EDITOR_FILTER_VOLUME = "GeometryEditor_FilterVolume"; + private const string EDITOR_FILTER_VERTICES = "GeometryEditor_FilterVerices"; + private const string TAG = "Geometry Editor"; + + [SerializeField] + private float _filterVolume = 0.1f; + [SerializeField] + private int _verticesDensity = 20; + [SerializeField] + private bool _invertSelection; + + [MenuItem("Tools/Geometry Editor/Geometry Editor Window")] + public static void ShowWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Geometry Editor"); + } + + [MenuItem("Tools/Geometry Editor/Reparenting &t", true, 400)] + public static bool VerifyReparenting() + { + return Instance != null && Selection.count > 0; + } + + [MenuItem("Tools/Geometry Editor/Reparenting &t", false, 400)] + public static void Reparenting() + { + ReparentingSelectedObjects(); + } + + [MenuItem("Tools/Geometry Editor/Select Parent &t", true, 400)] + public static bool VerifySelectParent() + { + return Instance != null && Selection.count > 0; + } + + [MenuItem("Tools/Geometry Editor/Select Parent &w", false, 400)] + public static void SelectParent() + { + var parent = Selection.activeGameObject.transform.parent; + if (parent == null) return; + Selection.activeObject = parent; + EditorGUIUtility.PingObject(Selection.activeGameObject); + } + + [MenuItem("Tools/Geometry Editor/Select Meshes (Size Filter) &y", true, 400)] + public static bool VerifySelectMeshWithSize() + { + return Instance != null && Selection.count > 0; + } + + [MenuItem("Tools/Geometry Editor/Select Meshes (Size Filter) &y", false, 400)] + public static void SelectMeshWithSize() + { + var target = Selection.activeGameObject; + if (target == null) return; + var meshFilters = target.GetComponentsInChildren(); + + var selectedObjects = new List(); + + for (var i = 0; i < meshFilters.Length; i++) + { + var progress = i / meshFilters.Length; + UnityEditor.EditorUtility.DisplayProgressBar("Select Meshes with Filter", "Mesh volume calculation", progress); + var meshFilter = meshFilters[i].GetComponent(); + var volume = Math.VolumeOfMesh(meshFilter.sharedMesh); + + if (volume < Instance.VolumeFilter) continue; + + var verticesDensity = meshFilter.sharedMesh.vertexCount / (volume * 1e6); + if (Instance.InvertSelection) + { + if (verticesDensity <= Instance.VerticesDensity) selectedObjects.Add(meshFilters[i].gameObject); + } + else + { + if (verticesDensity > Instance.VerticesDensity) selectedObjects.Add(meshFilters[i].gameObject); + } + + } + + UnityEditor.EditorUtility.ClearProgressBar(); + if (selectedObjects.Count > 0) + { + Selection.objects = selectedObjects.ToArray(); + } + } + + private void OnEnable() + { + Instance = this; + } + + private void OnDisable() + { + Instance = null; + + if (Root != null) + { + EditorPrefs.SetString(EDITOR_PREFS_ROOT, AssetDatabase.GetAssetOrScenePath(Root)); + } + else + { + EditorPrefs.DeleteKey(EDITOR_PREFS_ROOT); + } + + EditorPrefs.SetFloat(EDITOR_FILTER_VOLUME, _filterVolume); + EditorPrefs.SetInt(EDITOR_FILTER_VERTICES, _verticesDensity); + } + + public void CreateGUI() + { + var root = rootVisualElement; + var rootObjectField = new ObjectField("Root GameObject") + { + objectType = typeof(GameObject), + allowSceneObjects = true + }; + + rootObjectField.RegisterCallback>((evt) => { Root = (GameObject)evt.newValue; }); + + if (EditorPrefs.HasKey(EDITOR_PREFS_ROOT)) + { + var rootGameObject = GameObject.Find(EditorPrefs.GetString(EDITOR_PREFS_ROOT)); + if (rootGameObject != null) Root = rootGameObject; + } + + var filterVolumeField = new FloatField("Filter Volume"); + + if (EditorPrefs.HasKey(EDITOR_FILTER_VOLUME)) + { + _filterVolume = EditorPrefs.GetFloat(EDITOR_FILTER_VOLUME); + } + + filterVolumeField.SetValueWithoutNotify(_filterVolume); + filterVolumeField.RegisterValueChangedCallback(evt => _filterVolume = evt.newValue); + + var filterVerticesField = new IntegerField("Filter Vertices"); + + if (EditorPrefs.HasKey(EDITOR_FILTER_VERTICES)) + { + _verticesDensity = EditorPrefs.GetInt(EDITOR_FILTER_VERTICES); + } + + filterVerticesField.SetValueWithoutNotify(_verticesDensity); + filterVerticesField.RegisterValueChangedCallback(evt => _verticesDensity = evt.newValue); + + var invertSelectionToggle = new Toggle("Invert Selection"); + invertSelectionToggle.SetValueWithoutNotify(_invertSelection); + invertSelectionToggle.RegisterValueChangedCallback(evt => _invertSelection = evt.newValue); + + var selectFilterVolumeButton = new Button(SelectMeshWithSize) + { + text = "Filter on Volume" + }; + + root.Add(rootObjectField); + root.Add(filterVolumeField); + root.Add(filterVerticesField); + root.Add(invertSelectionToggle); + root.Add(selectFilterVolumeButton); + } + + private static void ReparentingSelectedObjects() + { + if (Instance.Root == null) + { + Log(LogType.Error, "Can't apply material! Material Palette is null!"); + return; + } + + var selectedObjects = Selection.gameObjects; + + foreach (var selectedObject in selectedObjects) + { + selectedObject.transform.parent = Instance.Root.transform; + } + + Log(LogType.Log, $"Reparenting {selectedObjects.Length} Object(s) in {AssetDatabase.GetAssetOrScenePath(Instance.Root)}"); + } + + private static void Log(LogType logType, object message) + { + Debug.unityLogger.Log(logType, TAG, message); + } + } +} diff --git a/Editor/Scripts/GeometryEditor.cs.meta b/Editor/Scripts/GeometryEditor.cs.meta new file mode 100644 index 0000000..8b3f318 --- /dev/null +++ b/Editor/Scripts/GeometryEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 302441446e15243418587ff7d55d3ca3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/GizmosUtils.cs b/Editor/Scripts/GizmosUtils.cs new file mode 100644 index 0000000..f496461 --- /dev/null +++ b/Editor/Scripts/GizmosUtils.cs @@ -0,0 +1,39 @@ +using UnityEditor; +using UnityEngine; + +namespace OC.Editor +{ + public class GizmosUtils + { + public static void DrawHandle(Matrix4x4 frame, float scale = 0.1f) + { + var position = frame.GetPosition(); + var rotation = frame.rotation; + + Handles.color = Handles.xAxisColor; + Handles.ArrowHandleCap( + 0, + position, + rotation * Quaternion.LookRotation(Vector3.right), + scale, + EventType.Repaint + ); + Handles.color = Handles.yAxisColor; + Handles.ArrowHandleCap( + 0, + position, + rotation * Quaternion.LookRotation(Vector3.up), + scale, + EventType.Repaint + ); + Handles.color = Handles.zAxisColor; + Handles.ArrowHandleCap( + 0, + position, + rotation * Quaternion.LookRotation(Vector3.forward), + scale, + EventType.Repaint + ); + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/GizmosUtils.cs.meta b/Editor/Scripts/GizmosUtils.cs.meta new file mode 100644 index 0000000..0b07403 --- /dev/null +++ b/Editor/Scripts/GizmosUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 954e16ad3685427b8f4a4d31d83151e8 +timeCreated: 1704720325 \ No newline at end of file diff --git a/Editor/Scripts/IndustrialPanel.meta b/Editor/Scripts/IndustrialPanel.meta new file mode 100644 index 0000000..5a7aa8d --- /dev/null +++ b/Editor/Scripts/IndustrialPanel.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 96330fc0f79444a1b42842ca77171164 +timeCreated: 1701421911 \ No newline at end of file diff --git a/Editor/Scripts/IndustrialPanel/IndustrialPanelWindow.cs b/Editor/Scripts/IndustrialPanel/IndustrialPanelWindow.cs new file mode 100644 index 0000000..152f6eb --- /dev/null +++ b/Editor/Scripts/IndustrialPanel/IndustrialPanelWindow.cs @@ -0,0 +1,360 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using OC.Interactions; +using OC.Project; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.IndustrialPanel +{ + public class IndustrialPanelWindow : EditorWindow + { + public ApplicationView ApplicationViewMode + { + get => _applicationViewMode; + set + { + if (_applicationViewMode == value) return; + _applicationViewMode = value; + SetApplicationViewMode(value); + } + } + + public TwoPaneSplitViewOrientation SplitViewOrientation + { + get => _splitViewOrientation; + set + { + if (_splitViewOrientation == value) return; + _splitViewOrientation = value; + SetSplitViewOrientation(value); + } + } + + private ApplicationView _applicationViewMode; + private TwoPaneSplitViewOrientation _splitViewOrientation; + + private bool _playMode; + private bool _isTreeViewMode; + private bool _isContentVertical; + + private const string EDITOR_PREFS_SPLIT_VIEW_ORIENTATION = "IndustrialPanel_SplitViewOrientation"; + + private TwoPaneSplitView _splitView; + private VisualElement _hierarchyContainer; + private ScrollView _contentContiner; + private VisualElement _hierarchyEmpty; + private VisualElement _contentEmpty; + private ToolbarBreadcrumbs _toolbarBreadcrumbs; + private int _lastSelectedId; + + [MenuItem("Open Commissioning/Industrial Panel")] + public static void ShowWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Industrial Panel"); + } + + public void CreateGUI() + { + var root = rootVisualElement; + var toolbar = new Toolbar(); + var toolbarMenu = new ToolbarMenu + { + text = "View" + }; + + toolbarMenu.menu.AppendAction("Horizontal View",_ => SplitViewOrientation = TwoPaneSplitViewOrientation.Horizontal, _ => DropdownMenuAction.Status.Normal); + toolbarMenu.menu.AppendAction("Vertical View",_ => SplitViewOrientation = TwoPaneSplitViewOrientation.Vertical, _ => DropdownMenuAction.Status.Normal); + toolbarMenu.Add(new ToolbarSpacer()); + _toolbarBreadcrumbs = new ToolbarBreadcrumbs(); + toolbarMenu.Add(_toolbarBreadcrumbs); + + + toolbar.Add(toolbarMenu); + root.Add(toolbar); + + var hierarchyLabel = new Label("Hierarchy") + { + style = + { + backgroundColor = new Color(0.15f, 0.15f, 0.15f), + alignContent = new StyleEnum(Align.Center), + alignItems = new StyleEnum(Align.Center), + color = Color.gray, + unityFont = new StyleFont((StyleKeyword)FontStyle.Bold), + unityTextAlign = new StyleEnum(TextAnchor.MiddleCenter) + } + }; + + _hierarchyEmpty = new VisualElement + { + style = + { + flexGrow = 1, + flexShrink = 1, + alignContent = new StyleEnum(Align.Center), + alignItems = new StyleEnum(Align.Center), + justifyContent = new StyleEnum(Justify.Center), + color = Color.gray + } + }; + _hierarchyEmpty.Add(new Label("Empty")); + + var hierarchySplitContainer = new VisualElement(); + var contentSplitContainer = new VisualElement(); + + _contentEmpty = new VisualElement + { + style = + { + flexGrow = 1, + flexShrink = 1, + alignContent = new StyleEnum(Align.Center), + alignItems = new StyleEnum(Align.Center), + justifyContent = new StyleEnum(Justify.Center), + color = Color.gray + } + }; + _contentEmpty.Add(new Label("Scene isn't started")); + + _hierarchyContainer = new VisualElement(); + _contentContiner = new ScrollView(ScrollViewMode.VerticalAndHorizontal); + + hierarchySplitContainer.Add(hierarchyLabel); + hierarchySplitContainer.Add(_hierarchyEmpty); + hierarchySplitContainer.Add(_hierarchyContainer); + + contentSplitContainer.Add(_contentEmpty); + contentSplitContainer.Add(_contentContiner); + + _splitView = new TwoPaneSplitView(0, 200, TwoPaneSplitViewOrientation.Horizontal); + _splitView.Add(hierarchySplitContainer); + _splitView.Add(contentSplitContainer); + + root.Add(_splitView); + + if (EditorPrefs.HasKey(EDITOR_PREFS_SPLIT_VIEW_ORIENTATION)) + { + _splitViewOrientation = (TwoPaneSplitViewOrientation)EditorPrefs.GetInt(EDITOR_PREFS_SPLIT_VIEW_ORIENTATION); + } + + _applicationViewMode = Application.isPlaying ? ApplicationView.PlayView : ApplicationView.EditorView; + + Rebuild(); + } + + private void OnEnable() + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + private void OnDisable() + { + EditorPrefs.SetInt(EDITOR_PREFS_SPLIT_VIEW_ORIENTATION, (int)_splitViewOrientation); + } + + private void OnDestroy() + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } + + private void OnPlayModeStateChanged(PlayModeStateChange state) + { + ApplicationViewMode = state == PlayModeStateChange.EnteredPlayMode ? ApplicationView.PlayView : ApplicationView.EditorView; + } + + private void Rebuild() + { + SetSplitViewOrientation(_splitViewOrientation); + SetApplicationViewMode(_applicationViewMode); + } + + private void SetApplicationViewMode(ApplicationView mode) + { + switch (mode) + { + case ApplicationView.EditorView: + _hierarchyEmpty.style.display = new StyleEnum(DisplayStyle.Flex); + _contentEmpty.style.display = new StyleEnum(DisplayStyle.Flex); + _hierarchyContainer.style.display = new StyleEnum(DisplayStyle.None); + _contentContiner.style.display = new StyleEnum(DisplayStyle.None); + break; + case ApplicationView.PlayView: + _hierarchyEmpty.style.display = new StyleEnum(DisplayStyle.None); + _contentEmpty.style.display = new StyleEnum(DisplayStyle.None); + _hierarchyContainer.style.display = new StyleEnum(DisplayStyle.Flex); + _contentContiner.style.display = new StyleEnum(DisplayStyle.Flex); + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + + RefreshHierarchy(); + } + + private void RefreshHierarchy() + { + _hierarchyContainer.Clear(); + _contentContiner.Clear(); + + if (_applicationViewMode != ApplicationView.PlayView) return; + + var panels = IndustrialPanelManager.Instance.IndustrialPanels; + _hierarchyContainer.Add(CreateTreeHierarchy(panels)); + } + + private void SetSplitViewOrientation(TwoPaneSplitViewOrientation orientation) + { + switch (orientation) + { + case TwoPaneSplitViewOrientation.Horizontal: + _splitView.orientation = TwoPaneSplitViewOrientation.Horizontal; + _contentContiner.contentContainer.style.flexDirection = new StyleEnum(FlexDirection.Row); + break; + case TwoPaneSplitViewOrientation.Vertical: + _splitView.orientation = TwoPaneSplitViewOrientation.Vertical; + _contentContiner.contentContainer.style.flexDirection = new StyleEnum(FlexDirection.Column); + break; + default: + throw new ArgumentOutOfRangeException(nameof(orientation), orientation, null); + } + } + + private VisualElement CreateTreeHierarchy(IReadOnlyList panels) + { + var treeView = new TreeView(); + var treeViewData = GetTreeData(panels); + + VisualElement MakeItems() => new Label(); + + void BindItem(VisualElement e, int i) + { + var item = treeView.GetItemDataForIndex>(i); + if (e is Label label) label.text = item.Name; + } + + treeView.SetRootItems(treeViewData); + treeView.makeItem = MakeItems; + treeView.bindItem = BindItem; + treeView.selectionType = SelectionType.Single; + treeView.Rebuild(); + + treeView.selectionChanged += TreeViewOnselectionChanged; + + treeView.horizontalScrollingEnabled = true; + treeView.fixedItemHeight = 16; + + try + { + treeView.SetSelectionById(_lastSelectedId); + } + catch (Exception) + { + // ignored + } + + return treeView; + } + + private void TreeViewOnselectionChanged(IEnumerable obj) + { + foreach (var item in obj) + { + var treeItem = item is TreeViewItem viewItem ? viewItem : default; + if (!treeItem.HasContent) continue; + _lastSelectedId = treeItem.Id; + CreateContent(treeItem.Content); + RefreshBreadcrumbs(treeItem.Path); + } + } + + private void CreateContent(List panels) + { + _contentContiner.Clear(); + foreach (var panel in panels) + { + _contentContiner.Add(panel.Create()); + } + } + + private void RefreshBreadcrumbs(string path) + { + _toolbarBreadcrumbs.Clear(); + var split = path.Split("."); + foreach (var item in split) + { + _toolbarBreadcrumbs.PushItem(item); + } + } + + private List>> GetTreeData(IReadOnlyList panels) + { + var count = 0; + var root = new TreeViewItem("root", "root", count); + + foreach (var panel in panels) + { + var split = panel.Link.Path.Split("."); + split[0] += $" ({panel.Link.Client.name})"; + + var current = root; + + for (var i = 0; i < split.Length-1; i++) + { + TreeViewItem item; + var index = current.Children.FindIndex(x => x.Name == split[i]); + if (index < 0) + { + count++; + item = new TreeViewItem(split[i], string.Join('.', split.Take(i+1)), count); + current.AddChild(item); + count++; + } + else + { + item = current.Children[index]; + } + + current = item; + } + + current.Content.Add(panel); + } + + var result = new List>>(count); + + foreach (var child in root.Children) + { + result.Add(GetViewItem(child)); + } + + return result; + } + + private TreeViewItemData> GetViewItem(TreeViewItem item) + { + var children = new List>>(); + + if (item.HasChildren) + { + foreach (var child in item.Children) + { + children.Add(GetViewItem(child)); + } + } + + return new TreeViewItemData>(item.Id, item, children); + } + + public enum ApplicationView + { + EditorView, + PlayView + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/IndustrialPanel/IndustrialPanelWindow.cs.meta b/Editor/Scripts/IndustrialPanel/IndustrialPanelWindow.cs.meta new file mode 100644 index 0000000..80d56e3 --- /dev/null +++ b/Editor/Scripts/IndustrialPanel/IndustrialPanelWindow.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 46c51291c3af41a0bf7bfd45a5947eb1 +timeCreated: 1701423030 \ No newline at end of file diff --git a/Editor/Scripts/IndustrialPanel/TreeViewItem.cs b/Editor/Scripts/IndustrialPanel/TreeViewItem.cs new file mode 100644 index 0000000..b5ee9d3 --- /dev/null +++ b/Editor/Scripts/IndustrialPanel/TreeViewItem.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; + +namespace OC.Editor +{ + public readonly struct TreeViewItem + { + public string Name { get; } + public string Path { get; } + public int Id { get; } + public List Content => _content; + public List> Children => _children; + public bool HasChildren => _children != null && _children.Count > 0; + public bool HasContent => _content != null && _content.Count > 0; + + private readonly List> _children; + private readonly List _content; + + public TreeViewItem(string name, string path, int id, List> children = null) + { + Name = name; + Path = path; + Id = id; + _children = children ?? new List>(); + _content = new List(); + } + + public void AddChild(TreeViewItem child) => _children.Add(child); + + public void AddChildren(IList> children) + { + foreach (var child in children) + { + AddChild(child); + } + } + + public void InsertChild(TreeViewItem child, int index) + { + if (index < 0 || index >= _children.Count) + { + _children.Add(child); + } + else + { + _children.Insert(index, child); + } + } + + public void RemoveChild(int childId) + { + if (_children == null) return; + for (var index = 0; index < _children.Count; ++index) + { + if (childId == _children[index].Id) + { + _children.RemoveAt(index); + break; + } + } + } + + internal int GetChildIndex(int itemId) + { + var childIndex = 0; + foreach (var child in _children) + { + if (child.Id == itemId) return childIndex; + ++childIndex; + } + return -1; + } + + internal void ReplaceChild(TreeViewItem newChild) + { + if (!HasChildren) return; + int index = 0; + foreach (var child in _children) + { + if (child.Id == newChild.Id) + { + _children.RemoveAt(index); + _children.Insert(index, newChild); + break; + } + ++index; + } + } + + } +} \ No newline at end of file diff --git a/Editor/Scripts/IndustrialPanel/TreeViewItem.cs.meta b/Editor/Scripts/IndustrialPanel/TreeViewItem.cs.meta new file mode 100644 index 0000000..119065f --- /dev/null +++ b/Editor/Scripts/IndustrialPanel/TreeViewItem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 790fc8c50cf1461284afab93ab5538e4 +timeCreated: 1701440990 \ No newline at end of file diff --git a/Editor/Scripts/Inspector.meta b/Editor/Scripts/Inspector.meta new file mode 100644 index 0000000..d5dc218 --- /dev/null +++ b/Editor/Scripts/Inspector.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 72ea52a6b252421087f148dd44e5ae9b +timeCreated: 1689167520 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Button.cs b/Editor/Scripts/Inspector/Button.cs new file mode 100644 index 0000000..3a6e068 --- /dev/null +++ b/Editor/Scripts/Inspector/Button.cs @@ -0,0 +1,45 @@ +using OC.VisualElements; +using OC.Interactions.UIElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Interactions.Button), true), CanEditMultipleObjects] + public class Button : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Interactions.Button; + if (component == null) return null; + + var container = new VisualElement(); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Pressed", Color.green).BindProperty(component.Pressed).AlignedField()); + groupStatus.Add(new LampField("Feedback", Color.green).BindProperty(component.Feedback).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new Toggle("Local Feedback"){bindingPath = "_localFeedback"}.AlignedField()); + groupSettings.Add(new EnumField("Type"){bindingPath = "_type"}.AlignedField()); + groupSettings.Add(new EnumField("Visual"){bindingPath = "_visualStyle._value"}.AlignedField()); + groupSettings.Add(new ColorField("Color"){bindingPath = "_color._value"}.AlignedField()); + groupSettings.Add(new PropertyField{bindingPath = "_colorChangers"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnClickEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPressedChanged"}); + groupEvents.Add(new PropertyField{bindingPath = "OnFeedbackChanged"}); + + container.Add(Factory.Create(component)); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Button.cs.meta b/Editor/Scripts/Inspector/Button.cs.meta new file mode 100644 index 0000000..6e4f22c --- /dev/null +++ b/Editor/Scripts/Inspector/Button.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fee6bef9a3c8473fbad779a7e6b0eb2c +timeCreated: 1702309281 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Cylinder.cs b/Editor/Scripts/Inspector/Cylinder.cs new file mode 100644 index 0000000..0907779 --- /dev/null +++ b/Editor/Scripts/Inspector/Cylinder.cs @@ -0,0 +1,50 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.Cylinder), true), CanEditMultipleObjects] + public class Cylinder : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.Cylinder; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + var hStack = new StackHorizontal(); + hStack.Add(new PushButton("Minus").BindProperty(component.Minus)); + hStack.Add(new PushButton("Plus").BindProperty(component.Plus)); + groupControl.Add(hStack); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new ProgressBar("Progress"){bindingPath = "_progress._value", ShowLimits = true}); + groupStatus.Add(new FloatField("Value"){isReadOnly = true}.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new Vector2Field("Limits"){bindingPath = "_limits._value"}.AlignedField()); + groupSettings.Add(new EnumField("Type"){bindingPath = "_type._value"}.AlignedField()); + groupSettings.Add(new FloatField("Time to Min"){bindingPath = "_timeToMin._value"}.AlignedField()); + groupSettings.Add(new FloatField("Time to Max"){bindingPath = "_timeToMax._value"}.AlignedField()); + groupSettings.Add(new PropertyField{bindingPath = "_profile"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnActiveChanged"}); + groupEvents.Add(new PropertyField{bindingPath = "OnLimitMinEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnLimitMaxEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} diff --git a/Editor/Scripts/Inspector/Cylinder.cs.meta b/Editor/Scripts/Inspector/Cylinder.cs.meta new file mode 100644 index 0000000..4417b93 --- /dev/null +++ b/Editor/Scripts/Inspector/Cylinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60d2c196eb3c6704aa17152d0b4f3043 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/Inspector/DataReader.cs b/Editor/Scripts/Inspector/DataReader.cs new file mode 100644 index 0000000..c87670a --- /dev/null +++ b/Editor/Scripts/Inspector/DataReader.cs @@ -0,0 +1,58 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.DataReader), true), CanEditMultipleObjects] + public class DataReader : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.DataReader; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + var readButton = new UnityEngine.UIElements.Button{text = "Read"}; + var writeButton = new UnityEngine.UIElements.Button{text = "Write"}; + var clearButton = new UnityEngine.UIElements.Button{text = "Clear"}; + readButton.clicked += component.Read; + writeButton.clicked += component.Write; + clearButton.clicked += component.Clear; + groupControl.Add(readButton); + groupControl.Add(writeButton); + groupControl.Add(clearButton); + groupControl.Add(new TextField("Target Data").BindProperty(component.TargetData)); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Collision", Color.yellow).BindProperty(component.Collision).AlignedField()); + groupStatus.Add(new TextField("Raw Data"){isReadOnly = true}.BindProperty(component.RawData).AlignedField()); + groupStatus.Add(new FloatField("Value"){isReadOnly = true}.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_groupId"}); + groupSettings.Add(new PropertyField{bindingPath = "_collisionFilter"}); + groupSettings.Add(new PropertyField{bindingPath = "_key"}); + groupSettings.Add(new PropertyField{bindingPath = "_autoRead"}); + groupSettings.Add(new PropertyField{bindingPath = "_cyclic"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnValueChangedEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnCollisionEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadEnterEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadExitEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/DataReader.cs.meta b/Editor/Scripts/Inspector/DataReader.cs.meta new file mode 100644 index 0000000..ba874ff --- /dev/null +++ b/Editor/Scripts/Inspector/DataReader.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e3626c94168743fdac55e39c915f4b48 +timeCreated: 1702394103 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Door.cs b/Editor/Scripts/Inspector/Door.cs new file mode 100644 index 0000000..0c5e9ad --- /dev/null +++ b/Editor/Scripts/Inspector/Door.cs @@ -0,0 +1,48 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Interactions.Door), true), CanEditMultipleObjects] + public class Door : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Interactions.Door; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + var openButton = new UnityEngine.UIElements.Button{text = "Open"}; + var closeButton = new UnityEngine.UIElements.Button{text = "Close"}; + openButton.clicked += component.Open; + closeButton.clicked += component.Close; + groupControl.Add(openButton); + groupControl.Add(closeButton); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Closed", Color.green).BindProperty(component.Closed).AlignedField()); + groupStatus.Add(new LampField("Lock", Color.green).BindProperty(component.Lock).AlignedField()); + groupStatus.Add(new LampField("Locked", Color.green).BindProperty(component.Locked).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_target"}); + groupSettings.Add(new PropertyField{bindingPath = "_duration"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnOpenEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnCloseEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Door.cs.meta b/Editor/Scripts/Inspector/Door.cs.meta new file mode 100644 index 0000000..ae22ec9 --- /dev/null +++ b/Editor/Scripts/Inspector/Door.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f9ca304f453747b2a120ad1f6f45cd67 +timeCreated: 1702393665 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/DrivePosition.cs b/Editor/Scripts/Inspector/DrivePosition.cs new file mode 100644 index 0000000..53a17d5 --- /dev/null +++ b/Editor/Scripts/Inspector/DrivePosition.cs @@ -0,0 +1,42 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.DrivePosition), true), CanEditMultipleObjects] + public class DrivePosition : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.DrivePosition; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + groupControl.Add(new FloatField("Target").BindProperty(component.Target).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Is Active", Color.green).BindProperty(component.IsActive).AlignedField()); + groupStatus.Add(new FloatField("Value"){isReadOnly = true}.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new FloatField("Speed"){bindingPath = "_speed._value"}.AlignedField()); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnActiveChanged"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/DrivePosition.cs.meta b/Editor/Scripts/Inspector/DrivePosition.cs.meta new file mode 100644 index 0000000..6fec6a7 --- /dev/null +++ b/Editor/Scripts/Inspector/DrivePosition.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4906a8a64c7d438c88a0e4ee984124e5 +timeCreated: 1702309001 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/DriveSimple.cs b/Editor/Scripts/Inspector/DriveSimple.cs new file mode 100644 index 0000000..f360d1c --- /dev/null +++ b/Editor/Scripts/Inspector/DriveSimple.cs @@ -0,0 +1,47 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.DriveSimple), true), CanEditMultipleObjects] + public class DriveSimple : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.DriveSimple; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + groupControl.Add(new FloatField("Target").BindProperty(component.Target).AlignedField()); + var hStack = new StackHorizontal(); + hStack.Add(new ToggleButton("Backward").BindProperty(component.Backward)); + hStack.Add(new ToggleButton("Forward").BindProperty(component.Forward)); + groupControl.Add(hStack); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Is Active", Color.green).BindProperty(component.IsActive).AlignedField()); + groupStatus.Add(new FloatField("Value"){isReadOnly = true}.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new FloatField("Speed"){bindingPath = "_speed._value"}.AlignedField()); + groupSettings.Add(new FloatField("Acceleration"){bindingPath = "_acceleration._value"}.AlignedField()); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnActiveChanged"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/DriveSimple.cs.meta b/Editor/Scripts/Inspector/DriveSimple.cs.meta new file mode 100644 index 0000000..8b06317 --- /dev/null +++ b/Editor/Scripts/Inspector/DriveSimple.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ede0f7b98fb74dbdb6946637f02808a1 +timeCreated: 1702307068 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/DriveSpeed.cs b/Editor/Scripts/Inspector/DriveSpeed.cs new file mode 100644 index 0000000..433f4e9 --- /dev/null +++ b/Editor/Scripts/Inspector/DriveSpeed.cs @@ -0,0 +1,42 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.DriveSpeed), true), CanEditMultipleObjects] + public class DriveSpeed : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.DriveSpeed; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + groupControl.Add(new FloatField("Target").BindProperty(component.Target).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Is Active", Color.green).BindProperty(component.IsActive).AlignedField()); + groupStatus.Add(new FloatField("Value"){isReadOnly = true}.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new FloatField("Acceleration"){bindingPath = "_acceleration._value"}.AlignedField()); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnActiveChanged"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/DriveSpeed.cs.meta b/Editor/Scripts/Inspector/DriveSpeed.cs.meta new file mode 100644 index 0000000..7dd7fbc --- /dev/null +++ b/Editor/Scripts/Inspector/DriveSpeed.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4c15afa7dade422596f2a2d7ad969d3b +timeCreated: 1702308910 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Gripper.cs b/Editor/Scripts/Inspector/Gripper.cs new file mode 100644 index 0000000..2647def --- /dev/null +++ b/Editor/Scripts/Inspector/Gripper.cs @@ -0,0 +1,59 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(MaterialFlow.Gripper), true), CanEditMultipleObjects] + public class Gripper : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as MaterialFlow.Gripper; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + var pickButton = new UnityEngine.UIElements.Button{text = "Pick"}; + var placeButton = new UnityEngine.UIElements.Button{text = "Place"}; + pickButton.clicked += component.Pick; + placeButton.clicked += component.Place; + groupControl.Add(pickButton); + groupControl.Add(placeButton); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Collision", Color.yellow).BindProperty(component.Collision).AlignedField()); + groupStatus.Add(new LampField("Is Active", Color.green).BindProperty(component.IsActive).AlignedField()); + groupStatus.Add(new LampField("Is Picked", Color.green).BindProperty(component.IsPicked).AlignedField()); + + var groupCollision = new PropertyGroup("Collision"); + groupCollision.Add(new PropertyField{bindingPath = "_pickType"}); + groupCollision.Add(new PropertyField{bindingPath = "_dynamicSize"}); + groupCollision.Add(new Vector3Field("Add. Collider Size"){bindingPath = "_additionalColliderSize"}.AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_groupId"}); + groupSettings.Add(new PropertyField{bindingPath = "_collisionFilter"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnCollisionEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadEnterEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadExitEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPickEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPlaceEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnIsActiveChangedEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnIsPickedChangedEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupCollision); + container.Add(groupSettings); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Gripper.cs.meta b/Editor/Scripts/Inspector/Gripper.cs.meta new file mode 100644 index 0000000..661bab5 --- /dev/null +++ b/Editor/Scripts/Inspector/Gripper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d9bfc057b54346439e3922908ceb73b1 +timeCreated: 1702310106 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Lamp.cs b/Editor/Scripts/Inspector/Lamp.cs new file mode 100644 index 0000000..a161cec --- /dev/null +++ b/Editor/Scripts/Inspector/Lamp.cs @@ -0,0 +1,44 @@ +using OC.VisualElements; +using OC.Interactions.UIElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Interactions.Lamp), true), CanEditMultipleObjects] + public class Lamp : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Interactions.Lamp; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + groupControl.Add(new ToggleButton("Signal").BindProperty(component.Value).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Value", Color.green).BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new ColorField("Color"){bindingPath = "_color._value"}.AlignedField()); + groupSettings.Add(new PropertyField{bindingPath = "_colorChangers"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnValueChanged"}); + + container.Add(Factory.Create(component)); + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Lamp.cs.meta b/Editor/Scripts/Inspector/Lamp.cs.meta new file mode 100644 index 0000000..ee6824d --- /dev/null +++ b/Editor/Scripts/Inspector/Lamp.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b55bd7eb99ea4df5a543257a9ee0e53c +timeCreated: 1702312025 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Lock.cs b/Editor/Scripts/Inspector/Lock.cs new file mode 100644 index 0000000..87010ca --- /dev/null +++ b/Editor/Scripts/Inspector/Lock.cs @@ -0,0 +1,46 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Interactions.Lock), true), CanEditMultipleObjects] + public class Lock : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Interactions.Lock; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + groupControl.Add(new ToggleButton("Lock").BindProperty(component.LockSignal)); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Lock", Color.green).BindProperty(component.LockSignal).AlignedField()); + groupStatus.Add(new LampField("Closed", Color.green).BindProperty(component.Closed).AlignedField()); + groupStatus.Add(new LampField("Locked", Color.green).BindProperty(component.Locked).AlignedField()); + + var groupSettings = new PropertyGroup("References"); + groupSettings.Add(new PropertyField{bindingPath = "_doors"}); + groupSettings.Add(new PropertyField{bindingPath = "_buttons"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnLockChanged"}); + groupEvents.Add(new PropertyField{bindingPath = "OnClosedChanged"}); + groupEvents.Add(new PropertyField{bindingPath = "OnLockedChanged"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Lock.cs.meta b/Editor/Scripts/Inspector/Lock.cs.meta new file mode 100644 index 0000000..b5a2870 --- /dev/null +++ b/Editor/Scripts/Inspector/Lock.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c658d621b6704bb7840bfbe0f30dc115 +timeCreated: 1702312468 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/PanelSampler.cs b/Editor/Scripts/Inspector/PanelSampler.cs new file mode 100644 index 0000000..6be2e0c --- /dev/null +++ b/Editor/Scripts/Inspector/PanelSampler.cs @@ -0,0 +1,36 @@ +using OC.Interactions.UIElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Interactions.PanelSampler), true), CanEditMultipleObjects] + public class PanelSampler : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Interactions.PanelSampler; + if (component == null) return null; + + var container = new VisualElement(); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_type"}); + groupSettings.Add(new PropertyField{bindingPath = "_components"}); + + var panel = new VisualElement(); + foreach (var item in component.Components) + { + var modul = Factory.Create(item); + if (modul != null) panel.Add(modul); + } + + container.Add(panel); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/PanelSampler.cs.meta b/Editor/Scripts/Inspector/PanelSampler.cs.meta new file mode 100644 index 0000000..0e9879f --- /dev/null +++ b/Editor/Scripts/Inspector/PanelSampler.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 91a39ca18ef1491a9faaba2b3f8a4c63 +timeCreated: 1702372253 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/SensorAnalog.cs b/Editor/Scripts/Inspector/SensorAnalog.cs new file mode 100644 index 0000000..b14f135 --- /dev/null +++ b/Editor/Scripts/Inspector/SensorAnalog.cs @@ -0,0 +1,41 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.SensorAnalog), true), CanEditMultipleObjects] + public class SensorAnalog : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.SensorAnalog; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + groupControl.Add(new FloatField("Value").BindProperty(component.Value).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new FloatField("Value"){isReadOnly = true}.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_factor"}); + groupSettings.Add(new PropertyField{bindingPath = "_valueSource"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField {bindingPath = "OnValueChangedEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/SensorAnalog.cs.meta b/Editor/Scripts/Inspector/SensorAnalog.cs.meta new file mode 100644 index 0000000..6eedd78 --- /dev/null +++ b/Editor/Scripts/Inspector/SensorAnalog.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1fcbb19699754485a69f6be3197f7fde +timeCreated: 1702371137 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/SensorBinary.cs b/Editor/Scripts/Inspector/SensorBinary.cs new file mode 100644 index 0000000..8f04a8e --- /dev/null +++ b/Editor/Scripts/Inspector/SensorBinary.cs @@ -0,0 +1,50 @@ +using OC.VisualElements; +using OC.MaterialFlow; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.SensorBinary), true), CanEditMultipleObjects] + public class SensorBinary : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.SensorBinary; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + groupControl.Add(new ToggleButton("Collision").BindProperty(component.State).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Collision", Color.yellow).BindProperty(component.Collision).AlignedField()); + groupStatus.Add(new LampField("Value", Color.green).BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new IntegerField("Group ID"){ bindingPath = "_groupId"}.AlignedField()); + groupSettings.Add(new MaskField("Collision Filter"){choices = Detector.Filter, bindingPath = "_collisionFilter"}.AlignedField()); + groupSettings.Add(new FloatField("Length"){bindingPath = "_length._value"}.AlignedField()); + groupSettings.Add(new Toggle("Invert"){bindingPath = "_invert"}.AlignedField()); + groupSettings.Add(new Toggle("Use Box Collider"){bindingPath = "_useBoxCollider"}.AlignedField()); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnValueChangedEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnCollisionEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadEnterEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadExitEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/SensorBinary.cs.meta b/Editor/Scripts/Inspector/SensorBinary.cs.meta new file mode 100644 index 0000000..f3f8c05 --- /dev/null +++ b/Editor/Scripts/Inspector/SensorBinary.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5695061bfe4d49f1bf20709c70ddeee6 +timeCreated: 1702370456 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Sink.cs b/Editor/Scripts/Inspector/Sink.cs new file mode 100644 index 0000000..5dfcc9a --- /dev/null +++ b/Editor/Scripts/Inspector/Sink.cs @@ -0,0 +1,46 @@ +using OC.VisualElements; +using OC.MaterialFlow; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(MaterialFlow.Sink), true), CanEditMultipleObjects] + public class Sink : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as MaterialFlow.Sink; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + var deleteButton = new UnityEngine.UIElements.Button{text = "Delete"}; + deleteButton.clicked += component.Delete; + groupControl.Add(deleteButton); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Collision", Color.yellow).BindProperty(component.Collision).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new Toggle("Auto Mode").BindProperty(component.Auto).AlignedField()); + groupSettings.Add(new IntegerField("Group ID"){bindingPath = "_groupId"}.AlignedField()); + groupSettings.Add(new MaskField("Collision Filter"){choices = Detector.Filter, bindingPath = "_collisionFilter"}.AlignedField()); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnCollisionEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadEnterEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadExitEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Sink.cs.meta b/Editor/Scripts/Inspector/Sink.cs.meta new file mode 100644 index 0000000..8455dfb --- /dev/null +++ b/Editor/Scripts/Inspector/Sink.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fc8501906f3d4895b42e0b77ea7272d6 +timeCreated: 1702372587 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Source.cs b/Editor/Scripts/Inspector/Source.cs new file mode 100644 index 0000000..0edbd0b --- /dev/null +++ b/Editor/Scripts/Inspector/Source.cs @@ -0,0 +1,52 @@ +using OC.VisualElements; +using OC.MaterialFlow; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(MaterialFlow.Source), true), CanEditMultipleObjects] + public class Source : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as MaterialFlow.Source; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + var createButton = new UnityEngine.UIElements.Button{text = "Create"}; + var deleteButton = new UnityEngine.UIElements.Button{text = "Delete"}; + createButton.clicked += component.Create; + deleteButton.clicked += component.Delete; + groupControl.Add(createButton); + groupControl.Add(deleteButton); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Collision", Color.yellow).BindProperty(component.Collision).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new IntegerField("Type ID"){bindingPath = "_typeId._value"}.AlignedField()); + groupSettings.Add(new LongField("Unique ID"){bindingPath = "_uniqueId._value"}.AlignedField()); + groupSettings.Add(new Toggle("Auto Mode"){bindingPath = "_auto._value"}.AlignedField()); + groupSettings.Add(new IntegerField("Group ID"){bindingPath = "_groupId"}.AlignedField()); + groupSettings.Add(new MaskField("Collision Filter"){ choices = Detector.Filter, bindingPath = "_collisionFilter"}.AlignedField()); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnCollisionEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadEnterEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadExitEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadCreated"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/Source.cs.meta b/Editor/Scripts/Inspector/Source.cs.meta new file mode 100644 index 0000000..a694780 --- /dev/null +++ b/Editor/Scripts/Inspector/Source.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cbe333a4477a4c8fa905b674f6fa4b2b +timeCreated: 1702373125 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/SwitchRotary.cs b/Editor/Scripts/Inspector/SwitchRotary.cs new file mode 100644 index 0000000..06c8fb6 --- /dev/null +++ b/Editor/Scripts/Inspector/SwitchRotary.cs @@ -0,0 +1,41 @@ +using OC.VisualElements; +using OC.Interactions.UIElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Interactions.SwitchRotary), true), CanEditMultipleObjects] + public class SwitchRotary : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Interactions.SwitchRotary; + if (component == null) return null; + + var container = new VisualElement(); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new IntegerField("Index"){isReadOnly = true}.BindProperty(component.Index).AlignedField()); + groupStatus.Add(new FloatField("Angle"){isReadOnly = true}.BindProperty(component.Angle).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_stateCount"}); + groupSettings.Add(new PropertyField{bindingPath = "_range"}); + groupSettings.Add(new PropertyField{bindingPath = "_offset"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField { bindingPath = "OnRotationChanged" }); + groupEvents.Add(new PropertyField { bindingPath = "OnIndexChanged" }); + + container.Add(Factory.Create(component)); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField { bindingPath = "_link" }); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/SwitchRotary.cs.meta b/Editor/Scripts/Inspector/SwitchRotary.cs.meta new file mode 100644 index 0000000..d39adbf --- /dev/null +++ b/Editor/Scripts/Inspector/SwitchRotary.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6a951aeb39cb4c68890dd3144e8f01bb +timeCreated: 1702373423 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TagReader.cs b/Editor/Scripts/Inspector/TagReader.cs new file mode 100644 index 0000000..e117846 --- /dev/null +++ b/Editor/Scripts/Inspector/TagReader.cs @@ -0,0 +1,47 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.TagReader), true), CanEditMultipleObjects] + public class TagReader : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.TagReader; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.AddOverrideOption(component); + groupControl.Add(new UnsignedLongField("Value").BindProperty(component.Value).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Collision", Color.yellow).BindProperty(component.Collision).AlignedField()); + groupStatus.Add(new UnsignedLongField("Unique ID"){isReadOnly = true}.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_groupId"}); + groupSettings.Add(new PropertyField{bindingPath = "_collisionFilter"}); + groupSettings.Add(new PropertyField{bindingPath = "_holdValue"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnValueChangedEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnCollisionEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadEnterEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadExitEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TagReader.cs.meta b/Editor/Scripts/Inspector/TagReader.cs.meta new file mode 100644 index 0000000..be2765e --- /dev/null +++ b/Editor/Scripts/Inspector/TagReader.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0a33a421519c4fdeac05cd70ee5df0c5 +timeCreated: 1702373742 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TcAdsClientInspector.cs b/Editor/Scripts/Inspector/TcAdsClientInspector.cs new file mode 100644 index 0000000..393620d --- /dev/null +++ b/Editor/Scripts/Inspector/TcAdsClientInspector.cs @@ -0,0 +1,56 @@ +using System; +using Cysharp.Threading.Tasks; +using OC.Communication.TwinCAT; +using UnityEditor; +using UnityEngine; + +namespace OC.Editor +{ + [CustomEditor(typeof(TcAdsClient),true)] + public class TcAdsClientInspector : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + var client = (TcAdsClient) target; + + GUILayout.Space(10); + if (GUILayout.Button("Connect")) + { + client.Connect(); + } + + if (GUILayout.Button("Disconnect")) + { + client.Disconnect(); + } + + if (GUILayout.Button("Create Configuration")) + { + ProjectTreeFactory.CreateAndSave(client); + } + + if (GUILayout.Button("Update TwinCAT Project")) + { + SendConfigAsync(client).Forget(); + } + } + +#pragma warning disable CS1998 + private async UniTask SendConfigAsync(Component root) +#pragma warning restore CS1998 + { + try + { + var projectTree = ProjectTreeFactory.Create(root); + var connection = new Assistant.Connection(); + await connection.SendConfigAsync(projectTree).AsUniTask(); + Logging.Logger.Log("Project Tree sent to Assistant", root); + } + catch (Exception exception) + { + Logging.Logger.LogError(exception); + } + } + } +} diff --git a/Editor/Scripts/Inspector/TcAdsClientInspector.cs.meta b/Editor/Scripts/Inspector/TcAdsClientInspector.cs.meta new file mode 100644 index 0000000..3c338fe --- /dev/null +++ b/Editor/Scripts/Inspector/TcAdsClientInspector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e02e8a5747734097850916f8b349c9a0 +timeCreated: 1675936750 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TransportCurved.cs b/Editor/Scripts/Inspector/TransportCurved.cs new file mode 100644 index 0000000..04e1747 --- /dev/null +++ b/Editor/Scripts/Inspector/TransportCurved.cs @@ -0,0 +1,43 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.TransportCurved), true), CanEditMultipleObjects] + public class TransportCurved : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.TransportCurved; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.Add(new FloatField("Target").BindProperty(component.Target).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new FloatField("Value"){ isReadOnly = true }.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_gizmos"}); + groupSettings.Add(new PropertyField{bindingPath = "_actor"}); + groupSettings.Add(new PropertyField{bindingPath = "_angle"}); + groupSettings.Add(new PropertyField{bindingPath = "_radius"}); + groupSettings.Add(new PropertyField{bindingPath = "_smoothness"}); + groupSettings.Add(new PropertyField{bindingPath = "_width"}); + groupSettings.Add(new PropertyField{bindingPath = "_height"}); + groupSettings.Add(new PropertyField{bindingPath = "_factor"}); + groupSettings.Add(new PropertyField{bindingPath = "_isDynamic"}); + groupSettings.Add(new PropertyField{bindingPath = "_isGuiding"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TransportCurved.cs.meta b/Editor/Scripts/Inspector/TransportCurved.cs.meta new file mode 100644 index 0000000..629c727 --- /dev/null +++ b/Editor/Scripts/Inspector/TransportCurved.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8046c3109502460a808cfe396d69dc57 +timeCreated: 1702374897 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TransportLinear.cs b/Editor/Scripts/Inspector/TransportLinear.cs new file mode 100644 index 0000000..303c60b --- /dev/null +++ b/Editor/Scripts/Inspector/TransportLinear.cs @@ -0,0 +1,41 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(Components.TransportLinear), true), CanEditMultipleObjects] + public class TransportLinear : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as Components.TransportLinear; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + groupControl.Add(new FloatField("Target").BindProperty(component.Target).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new FloatField("Value"){ isReadOnly = true }.BindProperty(component.Value).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_gizmos"}); + groupSettings.Add(new PropertyField{bindingPath = "_actor"}); + groupSettings.Add(new PropertyField{bindingPath = "_length"}); + groupSettings.Add(new PropertyField{bindingPath = "_width"}); + groupSettings.Add(new PropertyField{bindingPath = "_height"}); + groupSettings.Add(new PropertyField{bindingPath = "_factor"}); + groupSettings.Add(new PropertyField{bindingPath = "_isDynamic"}); + groupSettings.Add(new PropertyField{bindingPath = "_isGuiding"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TransportLinear.cs.meta b/Editor/Scripts/Inspector/TransportLinear.cs.meta new file mode 100644 index 0000000..8b472a9 --- /dev/null +++ b/Editor/Scripts/Inspector/TransportLinear.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7d3692b06539495e8431673591d87c58 +timeCreated: 1702374313 \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TypeChanger.cs b/Editor/Scripts/Inspector/TypeChanger.cs new file mode 100644 index 0000000..d1e1c13 --- /dev/null +++ b/Editor/Scripts/Inspector/TypeChanger.cs @@ -0,0 +1,48 @@ +using OC.VisualElements; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor.Inspector +{ + [CustomEditor(typeof(MaterialFlow.TypeChanger), true), CanEditMultipleObjects] + public class TypeChanger : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var component = target as MaterialFlow.TypeChanger; + if (component == null) return null; + + var container = new VisualElement(); + + var groupControl = new PropertyGroup("Control"); + var replaceButton = new UnityEngine.UIElements.Button{text = "Replace"}; + replaceButton.clicked += component.Replace; + groupControl.Add(replaceButton); + groupControl.Add(new IntegerField("Target Type ID").BindProperty(component.TargetTypeID).AlignedField()); + + var groupStatus = new PropertyGroup("Status"); + groupStatus.Add(new LampField("Collision", Color.yellow).BindProperty(component.Collision).AlignedField()); + groupStatus.Add(new IntegerField("Target Type ID"){isReadOnly = true}.BindProperty(component.ActualTypeID).AlignedField()); + + var groupSettings = new PropertyGroup("Settings"); + groupSettings.Add(new PropertyField{bindingPath = "_groupId"}); + groupSettings.Add(new PropertyField{bindingPath = "_collisionFilter"}); + + var groupEvents = new PropertyGroup("Events"); + groupEvents.Add(new PropertyField{bindingPath = "OnValueChangedEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnCollisionEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadEnterEvent"}); + groupEvents.Add(new PropertyField{bindingPath = "OnPayloadExitEvent"}); + + container.Add(groupControl); + container.Add(groupStatus); + container.Add(groupSettings); + container.Add(new PropertyField{bindingPath = "_link"}); + container.Add(groupEvents); + + return container; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/Inspector/TypeChanger.cs.meta b/Editor/Scripts/Inspector/TypeChanger.cs.meta new file mode 100644 index 0000000..881e327 --- /dev/null +++ b/Editor/Scripts/Inspector/TypeChanger.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 044506a242ab493fb2745218c4106f5b +timeCreated: 1702373981 \ No newline at end of file diff --git a/Editor/Scripts/LayerManager.cs b/Editor/Scripts/LayerManager.cs new file mode 100644 index 0000000..f064b9b --- /dev/null +++ b/Editor/Scripts/LayerManager.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace OC.Editor +{ + public static class LayerManager + { + public static void ApplyDefaultLayers() + { + var defaultLayers = System.Enum.GetValues(typeof(DefaultLayers)) as DefaultLayers[]; + if (defaultLayers == null || defaultLayers.Length < 1) + { + Logging.Logger.LogWarning("Default layer configuration can't be found!"); + return; + } + + var tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); + var tagManagerLayers = tagManager.FindProperty("layers"); + + foreach (var defaultLayer in defaultLayers) + { + var layerProperty = tagManagerLayers.GetArrayElementAtIndex((int)defaultLayer); + layerProperty.stringValue = defaultLayer.ToString(); + tagManager.ApplyModifiedProperties(); + } + + var layers = GetAllLayers(); + + foreach(var d1 in layers) + { + foreach (var d2 in layers) + { + Physics.IgnoreLayerCollision(d1.Value, d2.Value, true); + } + } + + Physics.IgnoreLayerCollision(layers["Default"], layers["Default"], false); + Physics.IgnoreLayerCollision(layers["Default"], layers[DefaultLayers.Transport.ToString()], false); + Physics.IgnoreLayerCollision(layers["Default"], layers[DefaultLayers.Interactions.ToString()], false); + Physics.IgnoreLayerCollision(layers[DefaultLayers.Stopper.ToString()], layers[DefaultLayers.Stopper.ToString()], false); + Physics.IgnoreLayerCollision(layers[DefaultLayers.Reader.ToString()], layers[DefaultLayers.Reader.ToString()], false); + + Logging.Logger.Log("Settings for Layers and Collision Matrix are set to default Open Commissioning configuration!"); + } + + private static Dictionary GetAllLayers() + { + var tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); + var layers = tagManager.FindProperty("layers"); + var layerSize = layers.arraySize; + + Dictionary dictionary = new Dictionary(); + + for (int i = 0; i < layerSize; i++) + { + SerializedProperty element = layers.GetArrayElementAtIndex(i); + string layerName = element.stringValue; + + if (!string.IsNullOrEmpty(layerName)) + { + dictionary.Add(layerName, i); + } + } + + return dictionary; + } + } +} diff --git a/Editor/Scripts/LayerManager.cs.meta b/Editor/Scripts/LayerManager.cs.meta new file mode 100644 index 0000000..c9f3d49 --- /dev/null +++ b/Editor/Scripts/LayerManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 464ed23457b43df48a93ace0ab3404da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/MaterialUtils.cs b/Editor/Scripts/MaterialUtils.cs new file mode 100644 index 0000000..5ad8f44 --- /dev/null +++ b/Editor/Scripts/MaterialUtils.cs @@ -0,0 +1,95 @@ +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; +using Object = UnityEngine.Object; + +namespace OC.Editor +{ + public class MaterialUtils : EditorWindow + { + private ObjectField _objectField; + private ObjectField _materialField; + private GameObject _target; + private Material _material; + + + [MenuItem("Open Commissioning/Material Utils")] + public static void ShowMaterialManager() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Material Utils"); + window.Show(); + } + + private void CreateGUI() + { + _objectField = new ObjectField("GameObject") + { + objectType = typeof(GameObject) + }; + + _materialField = new ObjectField("Material") + { + objectType = typeof(Material) + }; + + + rootVisualElement.Add(_objectField); + rootVisualElement.Add(_materialField); + + rootVisualElement.Add(new Button(ApplyMaterial) + { + text = "Set for all" + }); + + _objectField.RegisterCallback>((evt) => + { + _target = (GameObject)evt.newValue; + }); + + _materialField.RegisterCallback>((evt) => + { + _material = (Material)evt.newValue; + }); + + OnSelectionChange(); + } + + private void OnSelectionChange() + { + if (Selection.activeGameObject != null) + { + _target = Selection.activeGameObject; + _objectField.SetValueWithoutNotify(_target); + } + } + + private void ApplyMaterial() + { + if (_target == null) return; + if (_material == null) return; + var counter = 0; + + var renderes = _target.GetComponentsInChildren(); + foreach (var renderer in renderes) + { + Material[] materials = new Material[renderer.materials.Length]; + if (renderer.materials.Length > 1) + { + for (var i = 0; i < materials.Length; i++) + { + materials[i] = _material; + } + + renderer.materials = materials; + counter++; + } + + renderer.material = _material; + } + + Debug.Log($"Materials Utils: {counter} materials are changed"); + } + } +} diff --git a/Editor/Scripts/MaterialUtils.cs.meta b/Editor/Scripts/MaterialUtils.cs.meta new file mode 100644 index 0000000..b6ab0d5 --- /dev/null +++ b/Editor/Scripts/MaterialUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8f1e15da5136c640adacadbc9c7f62e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/ProductData.meta b/Editor/Scripts/ProductData.meta new file mode 100644 index 0000000..524129f --- /dev/null +++ b/Editor/Scripts/ProductData.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8c543b927fa9e4545b37bc2198fa5a7d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Editor/Scripts/ProductData/EntryDataElement.cs b/Editor/Scripts/ProductData/EntryDataElement.cs new file mode 100644 index 0000000..48d3b40 --- /dev/null +++ b/Editor/Scripts/ProductData/EntryDataElement.cs @@ -0,0 +1,129 @@ +using System; +using OC.Data; +using UnityEngine.UIElements; + +namespace OC.Editor +{ + public class EntryDataElement : VisualElement + { + private EntryData _entryData; + private readonly Foldout _foldout; + private readonly TextField _textFieldKey; + private readonly EnumField _enumFieldType; + private readonly TextField _textFieldValue; + private readonly TextField _textFieldInfo; + private bool _ignoreEnumCallback; + + public EntryDataElement() + { + var container = new VisualElement + { + style = + { + paddingLeft = new StyleLength(18) + } + }; + + _foldout = new Foldout(); + _textFieldKey = new TextField("Key"); + _enumFieldType = new EnumField("Type", EntryDataType.CHARS); + + _textFieldValue = new TextField("Value") + { + isDelayed = true + }; + _textFieldInfo = new TextField("Info") + { + isReadOnly = true + }; + + _foldout.Add(_textFieldKey); + _foldout.Add(_enumFieldType); + _foldout.Add(_textFieldValue); + _foldout.Add(_textFieldInfo); + container.Add(_foldout); + hierarchy.Add(container); + } + + public void Bind(EntryData entryData) + { + _entryData = entryData; + + _enumFieldType.Init(entryData.Type); + + //BUG: bloody Unity can not handle ChangeEvent + //SetValueWithoutNotify for EnumField not working properly. ChangeEvent will be triggered + //This bool flag "_ignoreEnumCallback" is workaround for ChangeEvent call + //https://forum.unity.com/threads/registercallback-for-changeevent-dealing-with-enums.692455/#post-7758939 + _ignoreEnumCallback = true; + _enumFieldType.UnregisterCallback>(TypeCallback); + + _foldout.text = _entryData.Key; + _textFieldKey.SetValueWithoutNotify(_entryData.Key); + _textFieldValue.SetValueWithoutNotify(_entryData.Value); + _textFieldInfo.SetValueWithoutNotify(GetTypeInfo(_entryData.Type, _entryData.Value)); + + _enumFieldType.RegisterCallback>(TypeCallback); + + _textFieldKey.RegisterCallback>(evt => + { + _entryData.Key = evt.newValue; + }); + + _textFieldValue.RegisterCallback>(evt => + { + var type = (EntryDataType)_enumFieldType.value; + + if (type == EntryDataType.CHARS) + { + _textFieldInfo.value = GetTypeInfo(type, _textFieldValue.text); + } + + if (entryData.Validate(_textFieldValue.value)) + { + _textFieldValue.SetValueWithoutNotify(evt.newValue); + _entryData.Value = evt.newValue; + } + else + { + _textFieldValue.SetValueWithoutNotify(evt.previousValue); + } + }); + + } + + private void TypeCallback(ChangeEvent evt) + { + if (_ignoreEnumCallback) + { + _ignoreEnumCallback = false; + return; + } + + if (!Enum.TryParse(evt.newValue, out EntryDataType type)) return; + + _entryData.Type = type; + _textFieldInfo.SetValueWithoutNotify(GetTypeInfo(_entryData.Type, _entryData.Value)); + + if (!_entryData.Validate(_entryData.Value)) + { + _entryData.Value = ""; + _textFieldValue.SetValueWithoutNotify(_entryData.Value); + } + } + + private static string GetTypeInfo(EntryDataType type, string value) + { + return type switch + { + EntryDataType.CHARS => $"CHARS array length: {value.Length}", + EntryDataType.BYTES => "Hex value format 0xAA (1 byte), 0xAABB (2 bytes)", + EntryDataType.INT16 => $"INT16 value format range: [{short.MinValue}, {short.MaxValue}]", + EntryDataType.INT32 => $"INT32 value format range: [{int.MinValue}, {int.MaxValue}]", + EntryDataType.UINT16 => $"UINT16 value format range: [{ushort.MinValue}, {ushort.MaxValue}]", + EntryDataType.UINT32 => $"UINT32 value format range: [{uint.MinValue}, {uint.MaxValue}]", + _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) + }; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/ProductData/EntryDataElement.cs.meta b/Editor/Scripts/ProductData/EntryDataElement.cs.meta new file mode 100644 index 0000000..69a7e6f --- /dev/null +++ b/Editor/Scripts/ProductData/EntryDataElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bf34ea1ce94a4c588ffb2b8c613c1971 +timeCreated: 1691402018 \ No newline at end of file diff --git a/Editor/Scripts/ProductData/EntryDataElementReadonly.cs b/Editor/Scripts/ProductData/EntryDataElementReadonly.cs new file mode 100644 index 0000000..e89b088 --- /dev/null +++ b/Editor/Scripts/ProductData/EntryDataElementReadonly.cs @@ -0,0 +1,106 @@ +using System; +using OC.Data; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor +{ + public class EntryDataElementReadonly : VisualElement + { + private EntryData _entryData; + private readonly Foldout _foldout; + private readonly TextField _textFieldKey; + private readonly TextField _textFieldType; + private readonly TextField _textFieldValue; + private readonly TextField _textFieldInfo; + + public EntryDataElementReadonly() + { + var container = new VisualElement + { + style = + { + paddingLeft = new StyleLength(18) + } + }; + + _foldout = new Foldout(); + _textFieldKey = new TextField("Key") + { + isReadOnly = true + }; + _textFieldType = new TextField("Type") + { + isReadOnly = true + }; + _textFieldValue = new TextField("Value") + { + isDelayed = true + }; + _textFieldInfo = new TextField("Info") + { + isReadOnly = true + }; + + _foldout.Add(_textFieldKey); + _foldout.Add(_textFieldType); + _foldout.Add(_textFieldValue); + _foldout.Add(_textFieldInfo); + container.Add(_foldout); + hierarchy.Add(container); + } + + public void Bind(EntryData entryData, ProductDataViewer productDataViewer) + { + _entryData = entryData; + _foldout.text = entryData.Key; + _textFieldKey.SetValueWithoutNotify(_entryData.Key); + _textFieldValue.SetValueWithoutNotify(_entryData.Value); + _textFieldType.SetValueWithoutNotify(_entryData.Type.ToString()); + _textFieldInfo.SetValueWithoutNotify(GetTypeInfo(_entryData.Type, _entryData.Value)); + + _textFieldValue.RegisterCallback>(evt => + { + if (_entryData.Type is EntryDataType.CHARS or EntryDataType.BYTES) + { + if (evt.previousValue.Length != evt.newValue.Length) + { + _textFieldValue.SetValueWithoutNotify(evt.previousValue); + Logging.Logger.Log(LogType.Error, $"{_entryData.Key}: Length of data array can't be changed!"); + return; + } + } + + if (_entryData.Type == EntryDataType.CHARS) + { + _textFieldInfo.value = GetTypeInfo(_entryData.Type, _textFieldValue.text); + } + + if (_entryData.Validate(_textFieldValue.value)) + { + _textFieldValue.SetValueWithoutNotify(evt.newValue); + _entryData.Value = evt.newValue; + productDataViewer.SetDirty(true); + } + else + { + _textFieldValue.SetValueWithoutNotify(evt.previousValue); + } + }); + } + + private static string GetTypeInfo(EntryDataType type, string value) + { + return type switch + { + EntryDataType.CHARS => $"CHARS array length: {value.Length}", + EntryDataType.BYTES => "Hex value format 0xAA (1 byte), 0xAABB (2 bytes)", + EntryDataType.INT16 => $"INT16 value format range: [{short.MinValue}, {short.MaxValue}]", + EntryDataType.INT32 => $"INT32 value format range: [{int.MinValue}, {int.MaxValue}]", + EntryDataType.UINT16 => $"UINT16 value format range: [{ushort.MinValue}, {ushort.MaxValue}]", + EntryDataType.UINT32 => $"UINT32 value format range: [{uint.MinValue}, {uint.MaxValue}]", + _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) + }; + } + } +} \ No newline at end of file diff --git a/Editor/Scripts/ProductData/EntryDataElementReadonly.cs.meta b/Editor/Scripts/ProductData/EntryDataElementReadonly.cs.meta new file mode 100644 index 0000000..a9da970 --- /dev/null +++ b/Editor/Scripts/ProductData/EntryDataElementReadonly.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 668bc8f751724ad0a64ab0229da070ce +timeCreated: 1691674033 \ No newline at end of file diff --git a/Editor/Scripts/ProductData/ProductDataViewer.cs b/Editor/Scripts/ProductData/ProductDataViewer.cs new file mode 100644 index 0000000..9a45659 --- /dev/null +++ b/Editor/Scripts/ProductData/ProductDataViewer.cs @@ -0,0 +1,163 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using OC.Data; +using OC.MaterialFlow; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace OC.Editor +{ + public class ProductDataViewer : EditorWindow + { + private const string UXML = "UXML/ProductData/ProductDataViewer"; + + private readonly List _entryData = new (); + + private VisualElement _file; + private VisualElement _empty; + private DropdownField _dropdownFieldDirectory; + private Button _buttonOverwrite; + private Label _textName; + private ListView _listView; + private string _fileName; + + private SerializedObject _serializedObject; + + + private List _directories; + private PayloadTag _payloadTag; + private int _selectedDirectoryIndex; + + + [MenuItem("Open Commissioning/Product Data/Data Viewer", priority = 100)] + private static void Init() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Product Data Viewer"); + } + + private void CreateGUI() + { + Resources.Load(UXML).CloneTree(rootVisualElement); + _serializedObject = new SerializedObject(this); + _serializedObject.ApplyModifiedProperties(); + + _empty = rootVisualElement.Q("empty"); + _file = rootVisualElement.Q("file"); + _dropdownFieldDirectory = rootVisualElement.Q("directory"); + + var toolbar = rootVisualElement.Q(); + toolbar.menu.AppendAction("Overwrite",_ => Overwrite(), _ => DropdownMenuAction.Status.Normal); + toolbar.menu.AppendAction("Clear",_ => Clear(), _ => DropdownMenuAction.Status.Normal); + + _textName = rootVisualElement.Q