This commit is contained in:
CortexCore 2023-11-02 20:58:36 +08:00
parent 3beceb1645
commit 7712c80804
75 changed files with 552 additions and 417 deletions

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bx6yl6f7ndpbr"
path="res://.godot/imported/ppt-background.png-4391d57a1d12c83b6f1052aca9a5a22d.ctex"
path="res://.godot/imported/ppt-background.png-828589540c2379f6b173c02245cee11e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Backgrounds/ppt-background.png"
dest_files=["res://.godot/imported/ppt-background.png-4391d57a1d12c83b6f1052aca9a5a22d.ctex"]
source_file="res://iFactory/Art/Backgrounds/ppt-background.png"
dest_files=["res://.godot/imported/ppt-background.png-828589540c2379f6b173c02245cee11e.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cll880ni5wb3b"
path="res://.godot/imported/icon__keyboard-arrow-down-rounded.png-6eebbfb5bfe0fdc9feaba2c321c1cbf2.ctex"
path="res://.godot/imported/icon__keyboard-arrow-down-rounded.png-742bb33744b102c69fd779f614e01e2e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon__keyboard-arrow-down-rounded.png"
dest_files=["res://.godot/imported/icon__keyboard-arrow-down-rounded.png-6eebbfb5bfe0fdc9feaba2c321c1cbf2.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon__keyboard-arrow-down-rounded.png"
dest_files=["res://.godot/imported/icon__keyboard-arrow-down-rounded.png-742bb33744b102c69fd779f614e01e2e.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c38luts5hc5fj"
path="res://.godot/imported/icon_chevron-left-rounded.png-d52ace74f945029e7d5b9ef5d1e7cd2d.ctex"
path="res://.godot/imported/icon_chevron-left-rounded.png-2816f06c50005d553fda012b4887f210.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_chevron-left-rounded.png"
dest_files=["res://.godot/imported/icon_chevron-left-rounded.png-d52ace74f945029e7d5b9ef5d1e7cd2d.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_chevron-left-rounded.png"
dest_files=["res://.godot/imported/icon_chevron-left-rounded.png-2816f06c50005d553fda012b4887f210.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bqwchhovknbro"
path="res://.godot/imported/icon_chevron-right-rounded.png-fc2ef58ba5ed5cd5007c94d3cb5f3cd4.ctex"
path="res://.godot/imported/icon_chevron-right-rounded.png-8c7919075cab56357734b8cd56e41258.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_chevron-right-rounded.png"
dest_files=["res://.godot/imported/icon_chevron-right-rounded.png-fc2ef58ba5ed5cd5007c94d3cb5f3cd4.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_chevron-right-rounded.png"
dest_files=["res://.godot/imported/icon_chevron-right-rounded.png-8c7919075cab56357734b8cd56e41258.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bv78twpgohary"
path="res://.godot/imported/icon_keyboard-arrow-down-left-rounded.png-32337fb2510779571bd80977d2103575.ctex"
path="res://.godot/imported/icon_keyboard-arrow-down-left-rounded.png-8f490cb5b31691017beea4e411c2b4c4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_keyboard-arrow-down-left-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-down-left-rounded.png-32337fb2510779571bd80977d2103575.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_keyboard-arrow-down-left-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-down-left-rounded.png-8f490cb5b31691017beea4e411c2b4c4.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bgetelgylr7nj"
path="res://.godot/imported/icon_keyboard-arrow-down-right-rounded.png-6a8e82104a5b8d215fb80867e242f829.ctex"
path="res://.godot/imported/icon_keyboard-arrow-down-right-rounded.png-3d4a6d5389ddb53b653101168c15250d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_keyboard-arrow-down-right-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-down-right-rounded.png-6a8e82104a5b8d215fb80867e242f829.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_keyboard-arrow-down-right-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-down-right-rounded.png-3d4a6d5389ddb53b653101168c15250d.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b0f1ssbsyejr7"
path="res://.godot/imported/icon_keyboard-arrow-up-left-rounded.png-03a93ef4063488a33a9220d344cc4c13.ctex"
path="res://.godot/imported/icon_keyboard-arrow-up-left-rounded.png-e42cdb9202cfaf135d354cbafd5a4ffb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_keyboard-arrow-up-left-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-up-left-rounded.png-03a93ef4063488a33a9220d344cc4c13.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_keyboard-arrow-up-left-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-up-left-rounded.png-e42cdb9202cfaf135d354cbafd5a4ffb.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b3j3yrtuhphox"
path="res://.godot/imported/icon_keyboard-arrow-up-right-rounded.png-5a901c0b3659907cc60233ac33767e69.ctex"
path="res://.godot/imported/icon_keyboard-arrow-up-right-rounded.png-91cd12ddba8df3f417d0bce73721c597.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_keyboard-arrow-up-right-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-up-right-rounded.png-5a901c0b3659907cc60233ac33767e69.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_keyboard-arrow-up-right-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-up-right-rounded.png-91cd12ddba8df3f417d0bce73721c597.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://crm4ulb2kav7v"
path="res://.godot/imported/icon_keyboard-arrow-up-rounded.png-d24e1955228301c5b2604312a32ea227.ctex"
path="res://.godot/imported/icon_keyboard-arrow-up-rounded.png-ca4c2a8fe0df37f7da568ba73d6067e6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_keyboard-arrow-up-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-up-rounded.png-d24e1955228301c5b2604312a32ea227.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_keyboard-arrow-up-rounded.png"
dest_files=["res://.godot/imported/icon_keyboard-arrow-up-rounded.png-ca4c2a8fe0df37f7da568ba73d6067e6.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://hyja43ovrk4p"
path="res://.godot/imported/icon_rotate-left-rounded.png-647087953e261f3114b6e66ea2ba7caa.ctex"
path="res://.godot/imported/icon_rotate-left-rounded.png-ea83c06ae418b64c8d97fa3fc5777f18.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_rotate-left-rounded.png"
dest_files=["res://.godot/imported/icon_rotate-left-rounded.png-647087953e261f3114b6e66ea2ba7caa.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_rotate-left-rounded.png"
dest_files=["res://.godot/imported/icon_rotate-left-rounded.png-ea83c06ae418b64c8d97fa3fc5777f18.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d1prw07m0wucn"
path="res://.godot/imported/icon_rotate-right-rounded.png-321aaab320c4b67e81b3836f822c0711.ctex"
path="res://.godot/imported/icon_rotate-right-rounded.png-450db910526a7d030043028518c014ce.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Arrows/icon_rotate-right-rounded.png"
dest_files=["res://.godot/imported/icon_rotate-right-rounded.png-321aaab320c4b67e81b3836f822c0711.ctex"]
source_file="res://iFactory/Art/Icons/Arrows/icon_rotate-right-rounded.png"
dest_files=["res://.godot/imported/icon_rotate-right-rounded.png-450db910526a7d030043028518c014ce.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://df80xi7s3tq22"
path="res://.godot/imported/Icon_Exit.png-076485796af3297254be2e5d0b479730.ctex"
path="res://.godot/imported/Icon_Exit.png-90bddef6eba52bd39d5f069db6b5a54d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Icon_Exit.png"
dest_files=["res://.godot/imported/Icon_Exit.png-076485796af3297254be2e5d0b479730.ctex"]
source_file="res://iFactory/Art/Icons/Icon_Exit.png"
dest_files=["res://.godot/imported/Icon_Exit.png-90bddef6eba52bd39d5f069db6b5a54d.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dytwon7lxa5gw"
path="res://.godot/imported/Icon_Registry_Editor.png-8fca1ecd05f4dcbccb2441763c7d8c46.ctex"
path="res://.godot/imported/Icon_Registry_Editor.png-e37f6f4a80a5f932f9e0a4c934de6556.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Icon_Registry_Editor.png"
dest_files=["res://.godot/imported/Icon_Registry_Editor.png-8fca1ecd05f4dcbccb2441763c7d8c46.ctex"]
source_file="res://iFactory/Art/Icons/Icon_Registry_Editor.png"
dest_files=["res://.godot/imported/Icon_Registry_Editor.png-e37f6f4a80a5f932f9e0a4c934de6556.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://58y4a67wwco4"
path="res://.godot/imported/Icon_Settings.png-3dfccfa9038d22ce946ffc2204216370.ctex"
path="res://.godot/imported/Icon_Settings.png-46b9a32e51b8646f3c2876edfb6e8c76.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Icon_Settings.png"
dest_files=["res://.godot/imported/Icon_Settings.png-3dfccfa9038d22ce946ffc2204216370.ctex"]
source_file="res://iFactory/Art/Icons/Icon_Settings.png"
dest_files=["res://.godot/imported/Icon_Settings.png-46b9a32e51b8646f3c2876edfb6e8c76.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cjk4xep1wgmul"
path="res://.godot/imported/Icon_ic_baseline-video-file.png-4d5c19b3a5bb9e09f31555cd3b0bbffd.ctex"
path="res://.godot/imported/Icon_ic_baseline-video-file.png-e55550597b0301eaa66e2f05580e79fa.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Icon_ic_baseline-video-file.png"
dest_files=["res://.godot/imported/Icon_ic_baseline-video-file.png-4d5c19b3a5bb9e09f31555cd3b0bbffd.ctex"]
source_file="res://iFactory/Art/Icons/Icon_ic_baseline-video-file.png"
dest_files=["res://.godot/imported/Icon_ic_baseline-video-file.png-e55550597b0301eaa66e2f05580e79fa.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bqgou7g0vqbov"
path="res://.godot/imported/Icon_mdi_cog-refresh.png-035d6a3f2bfd7118b2bf5ba388532b26.ctex"
path="res://.godot/imported/Icon_mdi_cog-refresh.png-0b816fc27074ef2326d1a0e61d7cb47e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Icon_mdi_cog-refresh.png"
dest_files=["res://.godot/imported/Icon_mdi_cog-refresh.png-035d6a3f2bfd7118b2bf5ba388532b26.ctex"]
source_file="res://iFactory/Art/Icons/Icon_mdi_cog-refresh.png"
dest_files=["res://.godot/imported/Icon_mdi_cog-refresh.png-0b816fc27074ef2326d1a0e61d7cb47e.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://wtpa4xcg7ky4"
path="res://.godot/imported/Icon_player-pause-filled.png-df6ed8155c0cc22b6fbe24a083a11d8d.ctex"
path="res://.godot/imported/Icon_player-pause-filled.png-2db02d8aee64438ffd6d3bc835a77951.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Icon_player-pause-filled.png"
dest_files=["res://.godot/imported/Icon_player-pause-filled.png-df6ed8155c0cc22b6fbe24a083a11d8d.ctex"]
source_file="res://iFactory/Art/Icons/Icon_player-pause-filled.png"
dest_files=["res://.godot/imported/Icon_player-pause-filled.png-2db02d8aee64438ffd6d3bc835a77951.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cans6tu1bntkn"
path="res://.godot/imported/Icon_player-play-filled.png-9ba009b04463dcd91484215e98b7c33a.ctex"
path="res://.godot/imported/Icon_player-play-filled.png-d4a83ef67d0b3639d95076a388c92163.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Icon_player-play-filled.png"
dest_files=["res://.godot/imported/Icon_player-play-filled.png-9ba009b04463dcd91484215e98b7c33a.ctex"]
source_file="res://iFactory/Art/Icons/Icon_player-play-filled.png"
dest_files=["res://.godot/imported/Icon_player-play-filled.png-d4a83ef67d0b3639d95076a388c92163.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cmerxcdq74b5l"
path="res://.godot/imported/Ionc_save.png-304c9d462b21c4c99af983555adaae81.ctex"
path="res://.godot/imported/Ionc_save.png-37c65fa192365ffd474f039bf47dcb14.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/Ionc_save.png"
dest_files=["res://.godot/imported/Ionc_save.png-304c9d462b21c4c99af983555adaae81.ctex"]
source_file="res://iFactory/Art/Icons/Ionc_save.png"
dest_files=["res://.godot/imported/Ionc_save.png-37c65fa192365ffd474f039bf47dcb14.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://8ekdl6dgus50"
path="res://.godot/imported/carbon_no-image.png-0f802ecc702d157f9902e484b3fe5a40.ctex"
path="res://.godot/imported/carbon_no-image.png-af9bf59675266badac27d614f59cb6c0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/carbon_no-image.png"
dest_files=["res://.godot/imported/carbon_no-image.png-0f802ecc702d157f9902e484b3fe5a40.ctex"]
source_file="res://iFactory/Art/Icons/carbon_no-image.png"
dest_files=["res://.godot/imported/carbon_no-image.png-af9bf59675266badac27d614f59cb6c0.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cwecc0c326uwp"
path="res://.godot/imported/dashicons_update.png-a2c0bcc4086adb8b526fe8b615a06538.ctex"
path="res://.godot/imported/dashicons_update.png-c118642ae3b2520453da54caabfb779d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/dashicons_update.png"
dest_files=["res://.godot/imported/dashicons_update.png-a2c0bcc4086adb8b526fe8b615a06538.ctex"]
source_file="res://iFactory/Art/Icons/dashicons_update.png"
dest_files=["res://.godot/imported/dashicons_update.png-c118642ae3b2520453da54caabfb779d.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://yamai0emyd0a"
path="res://.godot/imported/icon_ant-design_copy-twotone.png-22841f19d7ec4c9b9f8555f6458478fb.ctex"
path="res://.godot/imported/icon_ant-design_copy-twotone.png-63fdec2901e63e7c95116b69fe953d65.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_ant-design_copy-twotone.png"
dest_files=["res://.godot/imported/icon_ant-design_copy-twotone.png-22841f19d7ec4c9b9f8555f6458478fb.ctex"]
source_file="res://iFactory/Art/Icons/icon_ant-design_copy-twotone.png"
dest_files=["res://.godot/imported/icon_ant-design_copy-twotone.png-63fdec2901e63e7c95116b69fe953d65.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://pxxbxoejvuet"
path="res://.godot/imported/icon_arcticons_net-analyzer.png-fb2516993780d42205023d020e6de4df.ctex"
path="res://.godot/imported/icon_arcticons_net-analyzer.png-6743b57b71c794fc64795b88fa6e21b5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_arcticons_net-analyzer.png"
dest_files=["res://.godot/imported/icon_arcticons_net-analyzer.png-fb2516993780d42205023d020e6de4df.ctex"]
source_file="res://iFactory/Art/Icons/icon_arcticons_net-analyzer.png"
dest_files=["res://.godot/imported/icon_arcticons_net-analyzer.png-6743b57b71c794fc64795b88fa6e21b5.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dkjlnpeapxmn"
path="res://.godot/imported/icon_baseline-percentage.png-754165b5d529be739f1114a3e28cebf1.ctex"
path="res://.godot/imported/icon_baseline-percentage.png-84b88a9ad2465fa64f826f8f13718bd6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_baseline-percentage.png"
dest_files=["res://.godot/imported/icon_baseline-percentage.png-754165b5d529be739f1114a3e28cebf1.ctex"]
source_file="res://iFactory/Art/Icons/icon_baseline-percentage.png"
dest_files=["res://.godot/imported/icon_baseline-percentage.png-84b88a9ad2465fa64f826f8f13718bd6.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dv24ghy23fnje"
path="res://.godot/imported/icon_file-ppt-filled.png-00e85b76d5cfe699acbd1134787423c4.ctex"
path="res://.godot/imported/icon_file-ppt-filled.png-c754c41af01e8c8e2f99363a011edff3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_file-ppt-filled.png"
dest_files=["res://.godot/imported/icon_file-ppt-filled.png-00e85b76d5cfe699acbd1134787423c4.ctex"]
source_file="res://iFactory/Art/Icons/icon_file-ppt-filled.png"
dest_files=["res://.godot/imported/icon_file-ppt-filled.png-c754c41af01e8c8e2f99363a011edff3.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://2qyr2fcp2a2j"
path="res://.godot/imported/icon_filetype-exe.png-4e03e9d57788e2dc4102d3a9d9405fd6.ctex"
path="res://.godot/imported/icon_filetype-exe.png-130ccef0c3aee1e7a8e4ceefa6e24232.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_filetype-exe.png"
dest_files=["res://.godot/imported/icon_filetype-exe.png-4e03e9d57788e2dc4102d3a9d9405fd6.ctex"]
source_file="res://iFactory/Art/Icons/icon_filetype-exe.png"
dest_files=["res://.godot/imported/icon_filetype-exe.png-130ccef0c3aee1e7a8e4ceefa6e24232.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://chdrm4pbi6cm5"
path="res://.godot/imported/icon_fluent-mdl2_registry-editor.png-9307542f91e8af3355a25df2b2349d38.ctex"
path="res://.godot/imported/icon_fluent-mdl2_registry-editor.png-2d5db35a1252cbd8664ace461337cf3f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_fluent-mdl2_registry-editor.png"
dest_files=["res://.godot/imported/icon_fluent-mdl2_registry-editor.png-9307542f91e8af3355a25df2b2349d38.ctex"]
source_file="res://iFactory/Art/Icons/icon_fluent-mdl2_registry-editor.png"
dest_files=["res://.godot/imported/icon_fluent-mdl2_registry-editor.png-2d5db35a1252cbd8664ace461337cf3f.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cai2ch4k68eyi"
path="res://.godot/imported/icon_folder-delete.png-cc132054e6534facf2d6302edac5d032.ctex"
path="res://.godot/imported/icon_folder-delete.png-49718e41bf5b6dd67e97b2ccef0bd1c0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_folder-delete.png"
dest_files=["res://.godot/imported/icon_folder-delete.png-cc132054e6534facf2d6302edac5d032.ctex"]
source_file="res://iFactory/Art/Icons/icon_folder-delete.png"
dest_files=["res://.godot/imported/icon_folder-delete.png-49718e41bf5b6dd67e97b2ccef0bd1c0.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dhws1cqlkdixm"
path="res://.godot/imported/icon_folder.png-09bb9724cdeb2695a1525222c5593176.ctex"
path="res://.godot/imported/icon_folder.png-dea492a6f2ce1a1f57c8d24facdf2c8c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_folder.png"
dest_files=["res://.godot/imported/icon_folder.png-09bb9724cdeb2695a1525222c5593176.ctex"]
source_file="res://iFactory/Art/Icons/icon_folder.png"
dest_files=["res://.godot/imported/icon_folder.png-dea492a6f2ce1a1f57c8d24facdf2c8c.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://mfyhei8n50j0"
path="res://.godot/imported/icon_gears.png-781bfeeeb0b8060598e8f00e7206cbfb.ctex"
path="res://.godot/imported/icon_gears.png-96c7d1adb99149df2b5cf9f3b2a1a0b4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_gears.png"
dest_files=["res://.godot/imported/icon_gears.png-781bfeeeb0b8060598e8f00e7206cbfb.ctex"]
source_file="res://iFactory/Art/Icons/icon_gears.png"
dest_files=["res://.godot/imported/icon_gears.png-96c7d1adb99149df2b5cf9f3b2a1a0b4.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://fkd63fjc550"
path="res://.godot/imported/icon_help.png-e09ffd2d69ec7c92f04af48cdcd76397.ctex"
path="res://.godot/imported/icon_help.png-367aa23a2afc8d08a602720c21531443.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_help.png"
dest_files=["res://.godot/imported/icon_help.png-e09ffd2d69ec7c92f04af48cdcd76397.ctex"]
source_file="res://iFactory/Art/Icons/icon_help.png"
dest_files=["res://.godot/imported/icon_help.png-367aa23a2afc8d08a602720c21531443.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b447jkohs1utw"
path="res://.godot/imported/icon_material-symbols_bookmark-manager.png-96ef329288444734fff20b254c702f54.ctex"
path="res://.godot/imported/icon_material-symbols_bookmark-manager.png-c6a83c1a15b8d94761ba5aec1b492ea5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_material-symbols_bookmark-manager.png"
dest_files=["res://.godot/imported/icon_material-symbols_bookmark-manager.png-96ef329288444734fff20b254c702f54.ctex"]
source_file="res://iFactory/Art/Icons/icon_material-symbols_bookmark-manager.png"
dest_files=["res://.godot/imported/icon_material-symbols_bookmark-manager.png-c6a83c1a15b8d94761ba5aec1b492ea5.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dqhcsm0j6w85j"
path="res://.godot/imported/icon_material-symbols_search.png-9a40e0f391611cd2d8d14a588b377126.ctex"
path="res://.godot/imported/icon_material-symbols_search.png-9ce8e54c5989f75874426bb221edd498.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_material-symbols_search.png"
dest_files=["res://.godot/imported/icon_material-symbols_search.png-9a40e0f391611cd2d8d14a588b377126.ctex"]
source_file="res://iFactory/Art/Icons/icon_material-symbols_search.png"
dest_files=["res://.godot/imported/icon_material-symbols_search.png-9ce8e54c5989f75874426bb221edd498.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://jscvym83h015"
path="res://.godot/imported/icon_park-solid_install.png-26edcffe16b3bc0df6f2b5d8217fbfcc.ctex"
path="res://.godot/imported/icon_park-solid_install.png-e9ac277cc9ef09815c17f1dbe8bfa604.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_park-solid_install.png"
dest_files=["res://.godot/imported/icon_park-solid_install.png-26edcffe16b3bc0df6f2b5d8217fbfcc.ctex"]
source_file="res://iFactory/Art/Icons/icon_park-solid_install.png"
dest_files=["res://.godot/imported/icon_park-solid_install.png-e9ac277cc9ef09815c17f1dbe8bfa604.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dyum0qcnvw2fm"
path="res://.godot/imported/icon_park-twotone_data-user.png-34020cb927a9840cf6c1b7b53a3e190b.ctex"
path="res://.godot/imported/icon_park-twotone_data-user.png-95f2756f6eba741f5ad6fab0f8e19beb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_park-twotone_data-user.png"
dest_files=["res://.godot/imported/icon_park-twotone_data-user.png-34020cb927a9840cf6c1b7b53a3e190b.ctex"]
source_file="res://iFactory/Art/Icons/icon_park-twotone_data-user.png"
dest_files=["res://.godot/imported/icon_park-twotone_data-user.png-95f2756f6eba741f5ad6fab0f8e19beb.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://df2ytivbngvf4"
path="res://.godot/imported/icon_software.png-de62498618aeb6d83a87da5c83356071.ctex"
path="res://.godot/imported/icon_software.png-2ce8158466db2c20a4ed8212201d6ce9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_software.png"
dest_files=["res://.godot/imported/icon_software.png-de62498618aeb6d83a87da5c83356071.ctex"]
source_file="res://iFactory/Art/Icons/icon_software.png"
dest_files=["res://.godot/imported/icon_software.png-2ce8158466db2c20a4ed8212201d6ce9.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://l5wliaec3yiy"
path="res://.godot/imported/icon_streamline_interface-id-voice-2-identification-secure-id-soundwave-sound-voice-brackets-security.png-0cdd8a9ff54f6cf647cea5644e3d042b.ctex"
path="res://.godot/imported/icon_streamline_interface-id-voice-2-identification-secure-id-soundwave-sound-voice-brackets-security.png-fd4767b8dc0977dfc6e6c841515a8755.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_streamline_interface-id-voice-2-identification-secure-id-soundwave-sound-voice-brackets-security.png"
dest_files=["res://.godot/imported/icon_streamline_interface-id-voice-2-identification-secure-id-soundwave-sound-voice-brackets-security.png-0cdd8a9ff54f6cf647cea5644e3d042b.ctex"]
source_file="res://iFactory/Art/Icons/icon_streamline_interface-id-voice-2-identification-secure-id-soundwave-sound-voice-brackets-security.png"
dest_files=["res://.godot/imported/icon_streamline_interface-id-voice-2-identification-secure-id-soundwave-sound-voice-brackets-security.png-fd4767b8dc0977dfc6e6c841515a8755.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://biotbf2rpqme8"
path="res://.godot/imported/icon_style_round.png-f2bb5472f700b5e4ee262fe9df5d61a2.ctex"
path="res://.godot/imported/icon_style_round.png-f15da2226b7b36e1d2ddc773910a98a7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_style_round.png"
dest_files=["res://.godot/imported/icon_style_round.png-f2bb5472f700b5e4ee262fe9df5d61a2.ctex"]
source_file="res://iFactory/Art/Icons/icon_style_round.png"
dest_files=["res://.godot/imported/icon_style_round.png-f15da2226b7b36e1d2ddc773910a98a7.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cdteo2b8x1rkv"
path="res://.godot/imported/icon_tabler_select.png-701d2d08cf3e399dc7c08affa586e6ce.ctex"
path="res://.godot/imported/icon_tabler_select.png-42784b2ba2d7d960f6f0352b489eec26.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_tabler_select.png"
dest_files=["res://.godot/imported/icon_tabler_select.png-701d2d08cf3e399dc7c08affa586e6ce.ctex"]
source_file="res://iFactory/Art/Icons/icon_tabler_select.png"
dest_files=["res://.godot/imported/icon_tabler_select.png-42784b2ba2d7d960f6f0352b489eec26.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://sq1oh4tippad"
path="res://.godot/imported/icon_temperature-celsius.png-014db94285ae368b75fb5d2ddd0c058b.ctex"
path="res://.godot/imported/icon_temperature-celsius.png-9907c3e2a47bced858e5d4e8b154d978.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_temperature-celsius.png"
dest_files=["res://.godot/imported/icon_temperature-celsius.png-014db94285ae368b75fb5d2ddd0c058b.ctex"]
source_file="res://iFactory/Art/Icons/icon_temperature-celsius.png"
dest_files=["res://.godot/imported/icon_temperature-celsius.png-9907c3e2a47bced858e5d4e8b154d978.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://csg5g2yikwbqv"
path="res://.godot/imported/icon_window-close.png-7fda264512a9e71a981d4ab94031cec6.ctex"
path="res://.godot/imported/icon_window-close.png-ad57fc05ff8221a71d935d67e47de6d1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_window-close.png"
dest_files=["res://.godot/imported/icon_window-close.png-7fda264512a9e71a981d4ab94031cec6.ctex"]
source_file="res://iFactory/Art/Icons/icon_window-close.png"
dest_files=["res://.godot/imported/icon_window-close.png-ad57fc05ff8221a71d935d67e47de6d1.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cqrw55bdyolpi"
path="res://.godot/imported/icon_window-max-line.png-ff52e22b48efe93078d23754474f34f2.ctex"
path="res://.godot/imported/icon_window-max-line.png-0058dcd19d17719afa75d7d195a01fbd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_window-max-line.png"
dest_files=["res://.godot/imported/icon_window-max-line.png-ff52e22b48efe93078d23754474f34f2.ctex"]
source_file="res://iFactory/Art/Icons/icon_window-max-line.png"
dest_files=["res://.godot/imported/icon_window-max-line.png-0058dcd19d17719afa75d7d195a01fbd.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cwsuu3lt01tiy"
path="res://.godot/imported/icon_window-min-line.png-21cea09a6dee534efb7d047b54a5a4b5.ctex"
path="res://.godot/imported/icon_window-min-line.png-c9ba08857c11fefe84abf3a90814e584.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/icon_window-min-line.png"
dest_files=["res://.godot/imported/icon_window-min-line.png-21cea09a6dee534efb7d047b54a5a4b5.ctex"]
source_file="res://iFactory/Art/Icons/icon_window-min-line.png"
dest_files=["res://.godot/imported/icon_window-min-line.png-c9ba08857c11fefe84abf3a90814e584.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://gtho2m1sv43b"
path="res://.godot/imported/material-symbols_update.png-d1078a787b940682765e80589cd47680.ctex"
path="res://.godot/imported/material-symbols_update.png-85b65c0cac40524109c886641af2c64b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/material-symbols_update.png"
dest_files=["res://.godot/imported/material-symbols_update.png-d1078a787b940682765e80589cd47680.ctex"]
source_file="res://iFactory/Art/Icons/material-symbols_update.png"
dest_files=["res://.godot/imported/material-symbols_update.png-85b65c0cac40524109c886641af2c64b.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d354eewydsxs2"
path="res://.godot/imported/solar_smile-circle-bold.png-11152aa63dc1cc1bf141da09241142b0.ctex"
path="res://.godot/imported/solar_smile-circle-bold.png-2764a909280eaf05b4eab25518d988f6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Icons/solar_smile-circle-bold.png"
dest_files=["res://.godot/imported/solar_smile-circle-bold.png-11152aa63dc1cc1bf141da09241142b0.ctex"]
source_file="res://iFactory/Art/Icons/solar_smile-circle-bold.png"
dest_files=["res://.godot/imported/solar_smile-circle-bold.png-2764a909280eaf05b4eab25518d988f6.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dxsds46xgtfds"
path="res://.godot/imported/logo-caict.png-ec22664722b38ba2bca6fdc74c2d23fb.ctex"
path="res://.godot/imported/logo-caict.png-7f8514f6461a7bc79938b10a4559bba7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Logos/logo-caict.png"
dest_files=["res://.godot/imported/logo-caict.png-ec22664722b38ba2bca6fdc74c2d23fb.ctex"]
source_file="res://iFactory/Art/Logos/logo-caict.png"
dest_files=["res://.godot/imported/logo-caict.png-7f8514f6461a7bc79938b10a4559bba7.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://0x2ucgmorvoy"
path="res://.godot/imported/logo-intelli_non-color.png-c4fea4df155046836d54460bce752280.ctex"
path="res://.godot/imported/logo-intelli_non-color.png-ef75cb6b9e2dbf298b62f5d1fd2bedcf.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Logos/logo-intelli_non-color.png"
dest_files=["res://.godot/imported/logo-intelli_non-color.png-c4fea4df155046836d54460bce752280.ctex"]
source_file="res://iFactory/Art/Logos/logo-intelli_non-color.png"
dest_files=["res://.godot/imported/logo-intelli_non-color.png-ef75cb6b9e2dbf298b62f5d1fd2bedcf.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://7fbt23ba5le3"
path="res://.godot/imported/logo-intelli_non-color_wide.png-b54b4c513a7b4ebb69e3c76ee38c4717.ctex"
path="res://.godot/imported/logo-intelli_non-color_wide.png-f96d55354842a9f8d4dc68275455dcec.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Logos/logo-intelli_non-color_wide.png"
dest_files=["res://.godot/imported/logo-intelli_non-color_wide.png-b54b4c513a7b4ebb69e3c76ee38c4717.ctex"]
source_file="res://iFactory/Art/Logos/logo-intelli_non-color_wide.png"
dest_files=["res://.godot/imported/logo-intelli_non-color_wide.png-f96d55354842a9f8d4dc68275455dcec.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cm74m6rvgumxs"
path="res://.godot/imported/logo-intelli_non-color_wide_light.png-37002afba38b6bc9b3daec4cb2ad2fc3.ctex"
path="res://.godot/imported/logo-intelli_non-color_wide_light.png-6f72b41a84307264e67098a365ed6dba.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Logos/logo-intelli_non-color_wide_light.png"
dest_files=["res://.godot/imported/logo-intelli_non-color_wide_light.png-37002afba38b6bc9b3daec4cb2ad2fc3.ctex"]
source_file="res://iFactory/Art/Logos/logo-intelli_non-color_wide_light.png"
dest_files=["res://.godot/imported/logo-intelli_non-color_wide_light.png-6f72b41a84307264e67098a365ed6dba.ctex"]
[params]

View File

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://du6xc0u767362"
path="res://.godot/imported/shape_hexagon.png-65c4059e52b365301bf44f2da31b3195.ctex"
path="res://.godot/imported/shape_hexagon.png-b369ea9df4f9cc35a4b8f846860c6584.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Artists/Art/Shapes/shape_hexagon.png"
dest_files=["res://.godot/imported/shape_hexagon.png-65c4059e52b365301bf44f2da31b3195.ctex"]
source_file="res://iFactory/Art/Shapes/shape_hexagon.png"
dest_files=["res://.godot/imported/shape_hexagon.png-b369ea9df4f9cc35a4b8f846860c6584.ctex"]
[params]

View File

@ -4,12 +4,12 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://df10ceig3k8xr"
path="res://.godot/imported/BaseGround.dae-b3ed3348492562d904e6b4735f9d037d.scn"
path="res://.godot/imported/BaseGround.dae-7d28e67f4b9a36c6551d301eea1f6a8a.scn"
[deps]
source_file="res://Artists/Models/BaseGround.dae"
dest_files=["res://.godot/imported/BaseGround.dae-b3ed3348492562d904e6b4735f9d037d.scn"]
source_file="res://iFactory/Models/BaseGround.dae"
dest_files=["res://.godot/imported/BaseGround.dae-7d28e67f4b9a36c6551d301eea1f6a8a.scn"]
[params]
@ -22,6 +22,7 @@ meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30

View File

@ -0,0 +1,33 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://ba084lr1heich"
path="res://.godot/imported/BaseMap.fbx-0e3382bb90d463effdc8eba9ccf51906.scn"
[deps]
source_file="res://iFactory/Models/BaseMap.fbx"
dest_files=["res://.godot/imported/BaseMap.fbx-0e3382bb90d463effdc8eba9ccf51906.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
import_script/path=""
_subresources={}
gltf/embedded_image_handling=1

View File

@ -4,12 +4,12 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cfdqixhj2v06e"
path="res://.godot/imported/Model_SR7CL11.glb-6815aa97deda72c2f506409a8595226f.scn"
path="res://.godot/imported/Model_SR7CL11.glb-986161fbdeadd24d31ccf1f18d98725a.scn"
[deps]
source_file="res://Artists/Models/机械臂/Model_SR7CL11.glb"
dest_files=["res://.godot/imported/Model_SR7CL11.glb-6815aa97deda72c2f506409a8595226f.scn"]
source_file="res://iFactory/Models/机械臂/Model_SR7CL11.glb"
dest_files=["res://.godot/imported/Model_SR7CL11.glb-986161fbdeadd24d31ccf1f18d98725a.scn"]
[params]
@ -22,6 +22,7 @@ meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30

View File

@ -4,12 +4,12 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dx56b8ycucqlr"
path="res://.godot/imported/机械臂.dae-2c6889518b270dc725d0e64ced4671da.scn"
path="res://.godot/imported/机械臂.dae-16bff5420564e4ad5eb54d7204044a04.scn"
[deps]
source_file="res://Artists/Models/机械臂/机械臂.dae"
dest_files=["res://.godot/imported/机械臂.dae-2c6889518b270dc725d0e64ced4671da.scn"]
source_file="res://iFactory/Models/机械臂/机械臂.dae"
dest_files=["res://.godot/imported/机械臂.dae-16bff5420564e4ad5eb54d7204044a04.scn"]
[params]
@ -22,6 +22,7 @@ meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30

View File

@ -0,0 +1,39 @@
using System;
using Godot;
namespace BITKit;
/// <summary>
/// 设备值组件,仅包括设备值的数据
/// </summary>
public partial class DeviceValueComponent : EntityComponent
{
/// <summary>
/// 获取角度的路径
/// </summary>
[Export] public string Path { get; private set; }
/// <summary>
/// 值
/// </summary>
[Export]
public string Value
{
get => _value;
set
{
_value = value;
if (Engine.IsEditorHint() is false)
{
OnValueChanged?.Invoke(value,LastUpdateTime);
}
}
}
public DateTime LastUpdateTime { get; set; }
private string _value;
/// <summary>
/// 当值改变时的回调
/// </summary>
public event Action<string,DateTime> OnValueChanged;
}

View File

@ -0,0 +1,43 @@
using Godot;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using BITKit;
using BITKit.Entities;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
using Newtonsoft.Json.Linq;
#pragma warning disable CS0649 // 从未对字段赋值,字段将一直保持其默认值
namespace BITFactory;
public partial class IOTCloudService : EntityComponent
{
[Inject] private IEntitiesService _entitiesService;
private void Parse(string json)
{
var jObject = JObject.Parse(json);
foreach (var idComponent in _entitiesService.QueryComponents<IdComponent>())
{
if(jObject.TryGetValue(idComponent.Id,out var deviceToken) is false)continue;
var deviceValue = deviceToken.ToObject<JObject>();
foreach (var valueComponent in idComponent.Entity.Components.OfType<DeviceValueComponent>())
{
var lastUpdateTime = DateTime.Now;
if (deviceValue.TryGetValue("LastUpdateTime", out var _timeStr))
{
lastUpdateTime = DateTime.ParseExact(_timeStr.ToObject<string>(), "yyyy-MM-dd HH:mm:ss:fff", CultureInfo.InvariantCulture);
}
if (!deviceValue.TryGetValue(valueComponent.Path, out var value)) continue;
if (valueComponent.LastUpdateTime != lastUpdateTime)
valueComponent.Value = value.ToObject<string>();
valueComponent.LastUpdateTime = lastUpdateTime;
}
}
}
}

View File

@ -4,12 +4,8 @@ namespace BITKit;
/// <summary>
/// ECS中iFactory.Rotation的角度组件
/// </summary>
public partial class RotationComponent : EntityComponent
public partial class RotationComponent : DeviceValueComponent
{
/// <summary>
/// 获取角度的路径
/// </summary>
[Export] public string Path { get; private set; }
/// <summary>
/// 角度的绝对权重例如90*0,0,1 = 0,0,90
/// </summary>
@ -25,7 +21,7 @@ public partial class RotationComponent : EntityComponent
/// <summary>
/// 可读可写的当前角度
/// </summary>
public float CurrentAngle;
public float CurrentAngle { get; set; }
[ExportCategory("Nodes")]
[Export] public Node3D node3D;

View File

@ -0,0 +1,62 @@
using Godot;
using System;
using System.Collections.Generic;
using BITKit;
using Newtonsoft.Json.Linq;
namespace BITFactory;
public partial class PathRenderer : EntityBehaviour
{
[Export] private DeviceValueComponent valueComponent;
[Export] private Node3D root;
private readonly List<MeshInstance3D> meshInstances=new();
public override void OnAwake()
{
base.OnAwake();
valueComponent.OnValueChanged += OnValueChanged;
}
private void OnValueChanged(string arg1, DateTime arg2)
{
foreach (var x in meshInstances)
{
x.QueueFree();
}
meshInstances.Clear();
Vector3 lastPoint = Vector3.Zero;
foreach (var pair in JArray.Parse(arg1))
{
var x = pair["X"]!.ToObject<float>()!;
var y = pair["Y"]!.ToObject<float>()!;
var currentPoint =root.Position + new Vector3(x, 0, y);
if (lastPoint != Vector3.Zero)
{
meshInstances.Add(Line(lastPoint, currentPoint,Colors.Orange));
}
lastPoint = currentPoint;
}
}
public static MeshInstance3D Line(Vector3 pos1, Vector3 pos2, Color? color = null)
{
var meshInstance = new MeshInstance3D();
var immediateMesh = new ImmediateMesh();
var material = new StandardMaterial3D();
meshInstance.Mesh = immediateMesh;
meshInstance.CastShadow = GeometryInstance3D.ShadowCastingSetting.Off;
immediateMesh.SurfaceBegin(Mesh.PrimitiveType.Lines, material);
immediateMesh.SurfaceAddVertex(pos1);
immediateMesh.SurfaceAddVertex(pos2);
immediateMesh.SurfaceEnd();
material.ShadingMode = BaseMaterial3D.ShadingModeEnum.Unshaded;
material.AlbedoColor = color ?? Colors.WhiteSmoke;
(Engine.GetMainLoop() as SceneTree).Root.AddChild(meshInstance);
return meshInstance;
}
}

View File

@ -1,167 +0,0 @@
using Godot;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using BITKit.Core.Entites;
using BITKit.Packages.Core.LazyLoad;
using Cysharp.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace BITKit;
/// <summary>
/// 单例SCADA Service,从http接口获取json后解析为指定数据
/// </summary>
public partial class SCADAService : Node,IProvider<string>,IActivable
{
public const string _CurrentAngle="CurrentAngle";
public const string _CurrentRotation="CurrentRotation";
/// <summary>
/// 在构造函数中注入依赖
/// </summary>
public SCADAService()
{
BITApp.ServiceCollection.AddSingleton(this);
}
/// <summary>
/// 获取json的Url
/// </summary>
private readonly DataReference<string> _url = new("SCADA_GetInfos");
/// <summary>
/// 是否固定控制的Entity如果固定只会刷新一次如果不固定每帧都会刷新
/// </summary>
[Export]
private bool fixedEntities;
/// <summary>
/// 是否启用
/// </summary>
[Export]
public bool Enabled { get; set; } = true;
/// <summary>
/// 已加载的Entity
/// </summary>
private readonly Dictionary<string, IEntity> _entities = new();
/// <summary>
/// 获取Entity并加载依赖
/// </summary>
public override async void _Ready()
{
if (!fixedEntities) return;
await UniTask.Yield();
LoadAllEntities();
BIT4Log.Log<SCADAService>($"已加载{_entities.Count}个设备");
if (string.IsNullOrEmpty(_url))
{
BIT4Log.Warning("SCADA Url为空");
}
else
{
BIT4Log.Log<SCADAService>($"已找到SCADA_GetInfos:\t{_url.Get()}");
}
}
/// <summary>
/// 内部方法从EntityService加载所有Entity
/// </summary>
private void LoadAllEntities()
{
foreach (var entity in DI.Get<IEntitiesService>().Entities)
{
if (entity.TryGetComponent<IdComponent>(out var deviceComponent))
{
_entities.Add(deviceComponent.Id,deviceComponent.Entity);
}
}
}
/// <summary>
/// 从http请求json
/// </summary>
/// <summary>
/// 解析json
/// </summary>
/// <param name="json">从SCADA获取的Json</param>
public void Set(string json)
{
if(Enabled is false)return;
//首先从result中获取数组
var jArray = JsonConvert.DeserializeObject<JObject>(json)["result"]!.ToObject<JArray>();
//然后遍历所有数组的内容
foreach (var element in jArray)
{
//获取数组元素的Id
var id = element["id"]!.ToObject<string>();
//通过Id查找已加载的Entity
if (!_entities.TryGetValue(id, out var entity)) continue;
//加载数组中的"value"为json
var _key = element["value"]!.ToString();
string _json;
if (_key.Substring(0) is "\"")
{
_json = element["value"]!.ToObject<string>();
}
else
{
_json = element["value"].ToString();
}
//获取被加载为string的json
var obj = JsonConvert.DeserializeObject(_json);
//反序列化string为原始json
var value = JObject.Parse(obj!.ToString()!);
//提交json和entity
ProcessEntity(value,entity);
}
}
/// <summary>
/// 提交jObject数据和Entity进行解析和处理
/// </summary>
/// <param name="jObject">json [result] [index] [value] 中的原始json</param>
/// <param name="entity">引用实体如PLC-ZL</param>
private static void ProcessEntity(JObject jObject, IEntity entity)
{
//从Entity中加载所有Rotation Component
var rotationComponents = entity
.Components
.Where(x => x is RotationComponent)
.Select((x => (RotationComponent)x));
//遍历所有Rotation Component
foreach (var rotationComponent in rotationComponents)
{
//加载rotation需要的path,如 var angle = value["J1"]
var path = rotationComponent.Path;
//加载以获取到的角度
var rawAngle = jObject[path]!.ToObject<float>();
//补间角度
var currentAngle = rotationComponent.CurrentAngle = Mathf.Lerp(rotationComponent.CurrentAngle, rawAngle,
90 * BITAppForGodot.DeltaTime);
//最终角度 = 当前角度*角度权重 + 角度偏移 + 原始角度
var euler = currentAngle * rotationComponent.Weight + rotationComponent.Offset + rotationComponent.OriginalEuler;
//为Node3D.Rotation提交最后的角度计算结果
euler.X = Mathf.DegToRad(euler.X);
euler.Y = Mathf.DegToRad(euler.Y);
euler.Z = Mathf.DegToRad(euler.Z);
rotationComponent.node3D.Rotation = euler;
//rotationComponent.RotationDegrees = euler;
rotationComponent.SetMeta(_CurrentAngle,(int)rawAngle);
rotationComponent.SetMeta(_CurrentRotation,euler);
}
}
public string Get()
{
throw new NotImplementedException();
}
public void SetActive(bool active) => Enabled = active;
}

View File

@ -3,8 +3,8 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://lxp5hqmmunyg"
path.s3tc="res://.godot/imported/GridBox_Default.png-bb1c6d4aacf1c5f6fd401b790aebd27e.s3tc.ctex"
path.etc2="res://.godot/imported/GridBox_Default.png-bb1c6d4aacf1c5f6fd401b790aebd27e.etc2.ctex"
path.s3tc="res://.godot/imported/GridBox_Default.png-319d98429a3217d6bfbe21bf4f03cd01.s3tc.ctex"
path.etc2="res://.godot/imported/GridBox_Default.png-319d98429a3217d6bfbe21bf4f03cd01.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
@ -12,8 +12,8 @@ metadata={
[deps]
source_file="res://Artists/Textures/GridBox_Default.png"
dest_files=["res://.godot/imported/GridBox_Default.png-bb1c6d4aacf1c5f6fd401b790aebd27e.s3tc.ctex", "res://.godot/imported/GridBox_Default.png-bb1c6d4aacf1c5f6fd401b790aebd27e.etc2.ctex"]
source_file="res://iFactory/Textures/GridBox_Default.png"
dest_files=["res://.godot/imported/GridBox_Default.png-319d98429a3217d6bfbe21bf4f03cd01.s3tc.ctex", "res://.godot/imported/GridBox_Default.png-319d98429a3217d6bfbe21bf4f03cd01.etc2.ctex"]
[params]

File diff suppressed because one or more lines are too long

View File

@ -73,7 +73,13 @@ public partial class FreeLookCamera : Node3D,IVirtualCamera
switch (@event)
{
case InputEventMouseMotion mouseMotion:
if(Input.IsMouseButtonPressed(MouseButton.Middle) is false)break;
switch (OS.GetName())
{
case "Windows":
if(Input.IsMouseButtonPressed(MouseButton.Middle) is false)return;
break;
}
if (isMoving)
{
var velocity = mouseMotion.Relative;
@ -88,6 +94,14 @@ public partial class FreeLookCamera : Node3D,IVirtualCamera
else
{
var mouseVelocity = mouseMotion.Relative /* 0.022f*/ * 1.81f * (float)GetProcessDeltaTime();
switch (OS.GetName())
{
case "Android":
mouseVelocity *= 0.1f;
break;
}
euler.X -= mouseVelocity.Y;
euler.Y -= mouseVelocity.X;
euler.Y %= 360;

View File

@ -4,7 +4,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading;
using BITKit.Core.Entites;
using BITKit.Entities;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
@ -18,6 +18,8 @@ public partial class Entity : Node,IEntity
/// 类型组件的缓存
/// </summary>
private readonly Dictionary<Type,object> TypeComponents=new ();
private Object[] Components = Array.Empty<Object>();
/// <summary>
/// IEntityService的缓存
/// </summary>
@ -25,8 +27,7 @@ public partial class Entity : Node,IEntity
/// <summary>
/// 所有EntityComponent
/// </summary>
private IEntityComponent[] _components;
IEntityComponent[] IEntity.Components => _components;
IEntityComponent[] IEntity.Components => Components.OfType<IEntityComponent>().ToArray();
/// <summary>
/// IEntity.Id实现
/// </summary>
@ -40,14 +41,27 @@ public partial class Entity : Node,IEntity
/// 服务提供者
/// </summary>
public IServiceProvider ServiceProvider { get; private set; }
/// <summary>
/// 服务集合
/// </summary>
public IServiceCollection ServiceCollection { get; private set; }
public void Inject(object obj)
public void Inject(object node)
{
throw new NotImplementedException();
foreach (var fieldInfo in node.GetType()
.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Where(x=>x.GetCustomAttribute<InjectAttribute>() is not null)
)
{
var attribute = fieldInfo.GetCustomAttribute<InjectAttribute>();
if(attribute is null)continue;
fieldInfo.SetValue(node,
attribute.CanBeNull
? ServiceProvider.GetService(fieldInfo.FieldType)
: ServiceProvider.GetRequiredService(fieldInfo.FieldType));
}
}
private IServiceCollection _serviceCollection;
public override void _EnterTree()
{
@ -57,7 +71,7 @@ public partial class Entity : Node,IEntity
public override void _ExitTree()
{
_cancellationTokenSource.Cancel();
_entitiesService.UnRegister(this);
DI.Get<IEntitiesService>().UnRegister(this);
}
/// <summary>
@ -65,44 +79,77 @@ public partial class Entity : Node,IEntity
/// </summary>
public override void _Ready()
{
List<IEntityComponent> entityComponents = new();
Id = GetInstanceId();
ServiceCollection = new ServiceCollection();
DI.Get<IEntitiesService>().Register(this);
Components = MathNode.GetAllNode(this).ToArray();
List<IEntityComponent> entityComponents = new();
_entitiesService = DI.Get<IEntitiesService>();
_serviceCollection = new ServiceCollection();
_serviceCollection.AddLogging();
foreach (var x in MathNode.GetAllNode(this))
foreach (var x in Components)
{
GetInstanceId();
if (x is IEntityComponent entityComponent)
{
entityComponent.BuildService(_serviceCollection);
entityComponent.BuildService(ServiceCollection);
}
TypeComponents.TryAdd(x.GetType(), x);
foreach (var customType in x.GetType().GetCustomAttributes<CustomTypeAttribute>())
{
_serviceCollection.AddSingleton(customType.Type,x);
TypeComponents.TryAdd(customType.Type, x);
ServiceCollection.AddSingleton(customType.Type, x);
}
ServiceProvider = _serviceCollection.BuildServiceProvider();
ServiceProvider = ServiceCollection.BuildServiceProvider();
if (x is not IEntityComponent component) continue;
component.Entity = this;
TypeComponents.TryAdd(component.BaseType,component);
//BIT4Log.Log<Entity>($"已加载组件:{x.Name}");
component.OnAwake();
entityComponents.Add(component);
}
foreach (var component in TypeComponents.Values.OfType<IEntityComponent>())
foreach (var node in Components)
{
Inject(node);
}
foreach (var component in Components.OfType<IEntityBehavior>())
{
component.Initialize(this);
}
foreach (var component in Components.OfType<IEntityBehavior>())
{
component.OnAwake();
}
foreach (var component in Components.OfType<IEntityBehavior>())
{
component.OnStart();
}
_entitiesService.Register(this);
this._components = entityComponents.ToArray();
SetMeta("Components",Variant.From(_components.Select(x=>x.GetType().Name).ToArray()));
}
public override void _Process(double delta)
{
foreach (var component in Components.OfType<IEntityBehavior>())
{
component.OnUpdate((float)delta);
}
foreach (var component in Components.OfType<IEntityBehavior>())
{
component.OnLateUpdate((float)delta);
}
}
public override void _PhysicsProcess(double delta)
{
foreach (var component in Components.OfType<IEntityBehavior>())
{
component.OnFixedUpdate((float)delta);
}
}
public bool TryGetComponent<T>(out T component)
{

View File

@ -0,0 +1,26 @@
using BITKit.Entities;
namespace BITKit;
public abstract partial class EntityBehaviour:EntityComponent,IEntityBehavior
{
public virtual void Initialize(IEntity _entity)
{
}
public virtual void OnUpdate(float deltaTime)
{
}
public virtual void OnFixedUpdate(float deltaTime)
{
}
public virtual void OnLateUpdate(float deltaTime)
{
}
public virtual void OnDestroyComponent()
{
}
}

View File

@ -1,5 +1,5 @@
using System;
using BITKit.Core.Entites;
using BITKit.Entities;
using Godot;
using Microsoft.Extensions.DependencyInjection;

View File

@ -3,7 +3,8 @@ using Godot;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using BITKit.Core.Entites;
using BITKit.Entities;
using Microsoft.Extensions.DependencyInjection;
namespace BITKit;
/// <summary>
@ -22,6 +23,7 @@ public partial class GodotEntitiesService : Node,IEntitiesService
public IEntity[] Entities => _entities.Values.ToArray();
public bool Register(IEntity entity)
{
entity.ServiceCollection.AddSingleton<IEntitiesService>(this);
return _entities.TryAdd(entity.Id, entity);
}
public bool UnRegister(IEntity entity)

View File

@ -1,7 +1,7 @@
using Godot;
using System;
using System.Text;
using BITKit.Core.Entites;
using BITKit.Entities;
namespace BITKit;
[Tool]

View File

@ -0,0 +1,18 @@
using Godot;
using System;
namespace BITKit.UX;
public partial class UXProfiler : Node
{
[Export] private Label fpsLabel;
[Export] private Label resolutionLabel;
public override void _Process(double delta)
{
var windowSize = DisplayServer.WindowGetSize();
if (fpsLabel is not null)
fpsLabel.Text = $"FPS: {Engine.GetFramesPerSecond()}";
if (resolutionLabel is not null)
resolutionLabel.Text = $"Resolution: {windowSize.X}x{windowSize.Y}";
}
}

View File

@ -2,6 +2,7 @@ using Godot;
using System;
using System.Threading;
using BITKit.Packages.Core.LazyLoad;
using HttpClient = System.Net.Http.HttpClient;
namespace BITKit;
public partial class HttpGet : Node,IActivable
@ -18,51 +19,47 @@ public partial class HttpGet : Node,IActivable
[Signal]
public delegate void OnGetEventHandler(string httpContext);
/// <summary>
/// 最大并行请求数量
/// </summary>
private readonly LimitTimes limitConcurrent =new (1);
/// <summary>
/// 请求数据的间隔
/// </summary>
private readonly IntervalTimer _intervalTimer = new(1);
/// <summary>
/// http客户端
/// </summary>
private readonly ServiceLoader<System.Net.Http.HttpClient> httpClient=new();
private readonly HttpClient httpClient=new();
/// <summary>
/// 取消令牌用于取消Http Get
/// </summary>
private CancellationToken _cancellationToken;
private bool allowNextRequest = true;
public override void _Ready()
{
_cancellationToken = new CancellationToken();
}
/// <summary>
/// 物理帧用于控制并发和间隔的同时请求数据
/// </summary>
/// <param name="delta"></param>
public override void _PhysicsProcess(double delta)
{
if(Enabled is false)return;
if (Enabled is false) return;
//等待依赖加载
//请求间隔控制+请求并发控制
if (_intervalTimer.Allow is false || httpClient.IsLoaded is false) return;
if (_intervalTimer.Allow is false) return;
//如果url为空
if (string.IsNullOrEmpty(url)) return;
if (!limitConcurrent.AllowOnly) return;
//提交并发
limitConcurrent.CanUpdate();
//发送请求
Request();
if (allowNextRequest)
Request();
}
private async void Request()
{
allowNextRequest = false;
//获取json
try
{
var json = await httpClient.Value.GetStringAsync(url, _cancellationToken);
var json = await httpClient.GetStringAsync(url, _cancellationToken);
//取消执行,如果已取消令牌
_cancellationToken.ThrowIfCancellationRequested();
@ -72,14 +69,11 @@ public partial class HttpGet : Node,IActivable
catch (InvalidOperationException)
{
BIT4Log.Warning(url);
//返回并发数量
limitConcurrent.Release();
}
catch (OperationCanceledException)
{
//返回并发数量
limitConcurrent.Release();
}
allowNextRequest = true;
}
public void SetActive(bool active) => Enabled=active;

View File

@ -0,0 +1,3 @@
{
"SCADA_GetInfos":
}

View File

@ -1,34 +1,33 @@
[gd_scene load_steps=5 format=3 uid="uid://d4chakwg6mvoa"]
[gd_scene load_steps=6 format=3 uid="uid://d4chakwg6mvoa"]
[ext_resource type="PackedScene" path="res://Mods/芜湖/Models/芜湖_Preview.glb" id="1_tvd1v"]
[sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_uovsb"]
[sub_resource type="Sky" id="Sky_3qxhc"]
sky_material = SubResource("PhysicalSkyMaterial_uovsb")
[sub_resource type="Environment" id="Environment_61xed"]
background_mode = 2
sky = SubResource("Sky_3qxhc")
ambient_light_source = 3
ambient_light_color = Color(1, 1, 1, 1)
reflected_light_source = 2
ssr_enabled = true
ssao_enabled = true
ssil_enabled = true
sdfgi_enabled = true
glow_enabled = true
[ext_resource type="PackedScene" uid="uid://y02lhghb3uen" path="res://Mods/芜湖/Models/芜湖_Preview.glb" id="1_tvd1v"]
[ext_resource type="Environment" uid="uid://b3ixyu6o3d66r" path="res://Mods/芜湖/芜湖_Env.tres" id="2_iqc32"]
[ext_resource type="Script" path="res://Artists/Scripts/Factory/SCADAService.cs" id="3_w8flb"]
[ext_resource type="PackedScene" uid="uid://b0o6snyqo8t4l" path="res://Mods/芜湖/Models/AGV.glb" id="4_sbuf4"]
[ext_resource type="Script" path="res://BITKit/Scripts/Core/Exec.cs" id="5_5kx6j"]
[node name="芜湖" type="Node3D"]
[node name="芜湖_Preview" parent="." instance=ExtResource("1_tvd1v")]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_61xed")
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(0.00613622, -0.648081, 0.761547, 0, 0.761561, 0.648093, -0.999981, -0.00397684, 0.0046731, -14.0258, 9.83954, -14.3069)
current = true
fov = 45.0
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(-0.911173, 0.339102, 0.234037, -0.250366, -0.906805, 0.339149, 0.327232, 0.250429, 0.911156, -15.1469, 5.56796, 1.77906)
shadow_enabled = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = ExtResource("2_iqc32")
[node name="Node" type="Node" parent="."]
script = ExtResource("3_w8flb")
[node name="AGV" parent="." instance=ExtResource("4_sbuf4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.195, 0, 0)
[node name="Exec" type="Node" parent="."]
script = ExtResource("5_5kx6j")
path = "Mods/芜湖/wuhu_config.json"

View File

@ -0,0 +1,19 @@
[gd_resource type="Environment" load_steps=3 format=3 uid="uid://b3ixyu6o3d66r"]
[sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_uovsb"]
[sub_resource type="Sky" id="Sky_3qxhc"]
sky_material = SubResource("PhysicalSkyMaterial_uovsb")
[resource]
background_mode = 2
sky = SubResource("Sky_3qxhc")
ambient_light_source = 3
ambient_light_color = Color(1, 1, 1, 1)
reflected_light_source = 2
tonemap_mode = 2
ssr_enabled = true
ssao_enabled = true
ssil_enabled = true
sdfgi_enabled = true
glow_enabled = true

View File

@ -12,9 +12,8 @@ config_version=5
config/name="iFactory"
config/description="智慧工厂的映射与交互"
run/main_scene="res://Artists/Scenes/InitialLicense.tscn"
run/main_scene="res://Mods/芜湖/芜湖.tscn"
config/features=PackedStringArray("4.1", "C#", "Forward Plus")
run/low_processor_mode=true
boot_splash/bg_color=Color(0.00392157, 0, 0.00392157, 1)
config/icon="res://icon.svg"
config/version="1.0.0.5"