D4 (t_691b51ce): Editor-Sync — 59 neue Prop-Thumbs + Map-Builder-Probe (3 Props mit Kollisionsboxen)

This commit is contained in:
Hermes (scopedvr-dev) 2026-10-19 18:10:41 +00:00
parent b288e8a1e8
commit 6c65b13a8f
61 changed files with 894 additions and 1 deletions

View file

@ -1,6 +1,6 @@
{
"library_version": 1,
"note": "Editor-Kopie der offiziellen Bibliotheks-Registry (geschlossener Baukasten, PLAN Entscheidung 20). Quelle: scopedvr-match-server library/objects.json — beim Registrieren neuer Objekte DORT zuerst eintragen und hier synchron ziehen. 'poly' = Referenz-Dreieckszahl (Budget-Rechnung, map_format.md §4 V8); 'collision' = Approximation für Platzhalter-Darstellung im Viewport.",
"note": "Server-Registry der offiziellen Asset-Bibliothek (geschlossener Baukasten, PLAN Entscheidung 20). 'poly' = Referenz-Dreieckszahl des Client-Meshes (Budget-Rechnung, map_format.md §4 V8); 'collision' = Server-Approximation (Nur Physik, headless). Die Bibliothek waechst mit der Client-Asset-Liste — IDs sind IMMER zuerst HIER registriert, bevor Maps sie referenzieren.",
"objects": {
"barracks_001": {
"poly": 1139,
@ -16,6 +16,188 @@
"kategorie": "buildings",
"name_de": "Kaserne"
},
"barrel_001": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_001.glb",
"kategorie": "props",
"name_de": "Fass 01"
},
"barrel_002": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_002.glb",
"kategorie": "props",
"name_de": "Fass 02"
},
"barrel_003": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_003.glb",
"kategorie": "props",
"name_de": "Fass 03"
},
"barrel_004": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_004.glb",
"kategorie": "props",
"name_de": "Fass 04"
},
"barrel_005": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_005.glb",
"kategorie": "props",
"name_de": "Fass 05"
},
"barrel_006": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_006.glb",
"kategorie": "props",
"name_de": "Fass 06"
},
"barrel_007": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_007.glb",
"kategorie": "props",
"name_de": "Fass 07"
},
"barrel_008": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_008.glb",
"kategorie": "props",
"name_de": "Fass 08"
},
"barrel_009": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_009.glb",
"kategorie": "props",
"name_de": "Fass 09"
},
"barrel_010": {
"poly": 184,
"collision": {
"shape": "box",
"size": [
0.617,
0.85,
0.617
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_010.glb",
"kategorie": "props",
"name_de": "Fass 10"
},
"barrel_011": {
"poly": 192,
"collision": {
"shape": "box",
"size": [
1.183,
2.578,
1.183
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_011.glb",
"kategorie": "props",
"name_de": "Fass 11"
},
"barrel_012": {
"poly": 296,
"collision": {
"shape": "box",
"size": [
1.605,
0.948,
1.052
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_012.glb",
"kategorie": "props",
"name_de": "Fass 12"
},
"barrel_013": {
"poly": 126,
"collision": {
"shape": "box",
"size": [
2.297,
1.409,
1.183
]
},
"glb": "res://assets/objekte/military_desert/props/barrel_013.glb",
"kategorie": "props",
"name_de": "Fass 13"
},
"barrier_001": {
"poly": 72,
"collision": {
@ -390,6 +572,440 @@
"radius": 0.8
}
},
"box_001": {
"poly": 604,
"collision": {
"shape": "box",
"size": [
1.411,
0.784,
0.947
]
},
"glb": "res://assets/objekte/military_desert/props/box_001.glb",
"kategorie": "props",
"name_de": "Kiste 01"
},
"box_002": {
"poly": 604,
"collision": {
"shape": "box",
"size": [
1.411,
0.784,
0.947
]
},
"glb": "res://assets/objekte/military_desert/props/box_002.glb",
"kategorie": "props",
"name_de": "Kiste 02"
},
"box_003": {
"poly": 604,
"collision": {
"shape": "box",
"size": [
1.411,
0.784,
0.947
]
},
"glb": "res://assets/objekte/military_desert/props/box_003.glb",
"kategorie": "props",
"name_de": "Kiste 03"
},
"box_004": {
"poly": 200,
"collision": {
"shape": "box",
"size": [
1.568,
0.684,
0.684
]
},
"glb": "res://assets/objekte/military_desert/props/box_004.glb",
"kategorie": "props",
"name_de": "Kiste 04"
},
"box_005": {
"poly": 200,
"collision": {
"shape": "box",
"size": [
1.568,
0.684,
0.684
]
},
"glb": "res://assets/objekte/military_desert/props/box_005.glb",
"kategorie": "props",
"name_de": "Kiste 05"
},
"box_006": {
"poly": 104,
"collision": {
"shape": "box",
"size": [
1.21,
0.334,
0.452
]
},
"glb": "res://assets/objekte/military_desert/props/box_006.glb",
"kategorie": "props",
"name_de": "Kiste 06"
},
"box_007": {
"poly": 104,
"collision": {
"shape": "box",
"size": [
1.21,
0.334,
0.452
]
},
"glb": "res://assets/objekte/military_desert/props/box_007.glb",
"kategorie": "props",
"name_de": "Kiste 07"
},
"box_008": {
"poly": 104,
"collision": {
"shape": "box",
"size": [
1.21,
0.334,
0.452
]
},
"glb": "res://assets/objekte/military_desert/props/box_008.glb",
"kategorie": "props",
"name_de": "Kiste 08"
},
"box_009": {
"poly": 104,
"collision": {
"shape": "box",
"size": [
1.646,
0.334,
0.451
]
},
"glb": "res://assets/objekte/military_desert/props/box_009.glb",
"kategorie": "props",
"name_de": "Kiste 09"
},
"box_010": {
"poly": 104,
"collision": {
"shape": "box",
"size": [
1.646,
0.334,
0.451
]
},
"glb": "res://assets/objekte/military_desert/props/box_010.glb",
"kategorie": "props",
"name_de": "Kiste 10"
},
"box_011": {
"poly": 104,
"collision": {
"shape": "box",
"size": [
1.646,
0.334,
0.451
]
},
"glb": "res://assets/objekte/military_desert/props/box_011.glb",
"kategorie": "props",
"name_de": "Kiste 11"
},
"box_012": {
"poly": 120,
"collision": {
"shape": "box",
"size": [
0.623,
0.623,
0.623
]
},
"glb": "res://assets/objekte/military_desert/props/box_012.glb",
"kategorie": "props",
"name_de": "Kiste 12"
},
"box_013": {
"poly": 120,
"collision": {
"shape": "box",
"size": [
0.623,
0.623,
0.623
]
},
"glb": "res://assets/objekte/military_desert/props/box_013.glb",
"kategorie": "props",
"name_de": "Kiste 13"
},
"box_014": {
"poly": 108,
"collision": {
"shape": "box",
"size": [
0.623,
0.623,
0.623
]
},
"glb": "res://assets/objekte/military_desert/props/box_014.glb",
"kategorie": "props",
"name_de": "Kiste 14"
},
"box_015": {
"poly": 108,
"collision": {
"shape": "box",
"size": [
0.623,
0.623,
0.623
]
},
"glb": "res://assets/objekte/military_desert/props/box_015.glb",
"kategorie": "props",
"name_de": "Kiste 15"
},
"box_016": {
"poly": 84,
"collision": {
"shape": "box",
"size": [
0.623,
0.623,
0.623
]
},
"glb": "res://assets/objekte/military_desert/props/box_016.glb",
"kategorie": "props",
"name_de": "Kiste 16"
},
"box_017": {
"poly": 84,
"collision": {
"shape": "box",
"size": [
0.623,
0.623,
0.623
]
},
"glb": "res://assets/objekte/military_desert/props/box_017.glb",
"kategorie": "props",
"name_de": "Kiste 17"
},
"box_018": {
"poly": 84,
"collision": {
"shape": "box",
"size": [
1.156,
0.623,
0.623
]
},
"glb": "res://assets/objekte/military_desert/props/box_018.glb",
"kategorie": "props",
"name_de": "Kiste 18"
},
"box_019": {
"poly": 84,
"collision": {
"shape": "box",
"size": [
1.156,
0.623,
0.623
]
},
"glb": "res://assets/objekte/military_desert/props/box_019.glb",
"kategorie": "props",
"name_de": "Kiste 19"
},
"box_020": {
"poly": 195,
"collision": {
"shape": "box",
"size": [
1.438,
1.321,
1.439
]
},
"glb": "res://assets/objekte/military_desert/props/box_020.glb",
"kategorie": "props",
"name_de": "Kiste 20"
},
"box_021": {
"poly": 195,
"collision": {
"shape": "box",
"size": [
1.438,
1.321,
1.439
]
},
"glb": "res://assets/objekte/military_desert/props/box_021.glb",
"kategorie": "props",
"name_de": "Kiste 21"
},
"box_022": {
"poly": 195,
"collision": {
"shape": "box",
"size": [
1.438,
1.321,
1.439
]
},
"glb": "res://assets/objekte/military_desert/props/box_022.glb",
"kategorie": "props",
"name_de": "Kiste 22"
},
"box_023": {
"poly": 195,
"collision": {
"shape": "box",
"size": [
1.438,
1.321,
1.439
]
},
"glb": "res://assets/objekte/military_desert/props/box_023.glb",
"kategorie": "props",
"name_de": "Kiste 23"
},
"box_024": {
"poly": 350,
"collision": {
"shape": "box",
"size": [
1.438,
1.421,
1.439
]
},
"glb": "res://assets/objekte/military_desert/props/box_024.glb",
"kategorie": "props",
"name_de": "Kiste 24"
},
"box_025": {
"poly": 350,
"collision": {
"shape": "box",
"size": [
1.438,
1.421,
1.439
]
},
"glb": "res://assets/objekte/military_desert/props/box_025.glb",
"kategorie": "props",
"name_de": "Kiste 25"
},
"box_026": {
"poly": 594,
"collision": {
"shape": "box",
"size": [
3.462,
1.489,
3.305
]
},
"glb": "res://assets/objekte/military_desert/props/box_026.glb",
"kategorie": "props",
"name_de": "Kiste 26"
},
"box_027": {
"poly": 739,
"collision": {
"shape": "box",
"size": [
2.641,
2.376,
2.54
]
},
"glb": "res://assets/objekte/military_desert/props/box_027.glb",
"kategorie": "props",
"name_de": "Kiste 27"
},
"box_028": {
"poly": 594,
"collision": {
"shape": "box",
"size": [
3.462,
1.489,
3.305
]
},
"glb": "res://assets/objekte/military_desert/props/box_028.glb",
"kategorie": "props",
"name_de": "Kiste 28"
},
"box_029": {
"poly": 739,
"collision": {
"shape": "box",
"size": [
2.641,
2.376,
2.54
]
},
"glb": "res://assets/objekte/military_desert/props/box_029.glb",
"kategorie": "props",
"name_de": "Kiste 29"
},
"box_030": {
"poly": 739,
"collision": {
"shape": "box",
"size": [
2.641,
2.376,
2.54
]
},
"glb": "res://assets/objekte/military_desert/props/box_030.glb",
"kategorie": "props",
"name_de": "Kiste 30"
},
"box_031": {
"poly": 594,
"collision": {
"shape": "box",
"size": [
3.462,
1.489,
3.305
]
},
"glb": "res://assets/objekte/military_desert/props/box_031.glb",
"kategorie": "props",
"name_de": "Kiste 31"
},
"bruecke_holz": {
"poly": 228,
"collision": {
@ -2351,6 +2967,103 @@
"radius": 1.5
}
},
"shell_001": {
"poly": 320,
"collision": {
"shape": "box",
"size": [
0.456,
1.368,
0.456
]
},
"glb": "res://assets/objekte/military_desert/props/shell_001.glb",
"kategorie": "props",
"name_de": "Granate 01"
},
"shell_002": {
"poly": 184,
"collision": {
"shape": "none"
},
"glb": "res://assets/objekte/military_desert/props/shell_002.glb",
"kategorie": "props",
"name_de": "Granate 02"
},
"shell_003": {
"poly": 186,
"collision": {
"shape": "box",
"size": [
0.177,
1.107,
0.177
]
},
"glb": "res://assets/objekte/military_desert/props/shell_003.glb",
"kategorie": "props",
"name_de": "Granate 03"
},
"shell_004": {
"poly": 186,
"collision": {
"shape": "box",
"size": [
0.177,
1.107,
0.177
]
},
"glb": "res://assets/objekte/military_desert/props/shell_004.glb",
"kategorie": "props",
"name_de": "Granate 04"
},
"shell_005": {
"poly": 212,
"collision": {
"shape": "none"
},
"glb": "res://assets/objekte/military_desert/props/shell_005.glb",
"kategorie": "props",
"name_de": "Granate 05"
},
"shell_006": {
"poly": 88,
"collision": {
"shape": "none"
},
"glb": "res://assets/objekte/military_desert/props/shell_006.glb",
"kategorie": "props",
"name_de": "Granate 06"
},
"shell_007": {
"poly": 94,
"collision": {
"shape": "box",
"size": [
1.963,
0.488,
0.488
]
},
"glb": "res://assets/objekte/military_desert/props/shell_007.glb",
"kategorie": "props",
"name_de": "Granate 07"
},
"shell_008": {
"poly": 94,
"collision": {
"shape": "box",
"size": [
1.963,
0.488,
0.488
]
},
"glb": "res://assets/objekte/military_desert/props/shell_008.glb",
"kategorie": "props",
"name_de": "Granate 08"
},
"stein_kiesel_1": {
"poly": 136,
"collision": {
@ -2755,6 +3468,104 @@
"kategorie": "buildings",
"name_de": "Zelt 14"
},
"training_item_001": {
"poly": 518,
"collision": {
"shape": "box",
"size": [
1.156,
1.108,
1.307
]
},
"glb": "res://assets/objekte/military_desert/props/training_item_001.glb",
"kategorie": "props",
"name_de": "Trainingsziel 01"
},
"training_item_002": {
"poly": 778,
"collision": {
"shape": "box",
"size": [
0.529,
1.279,
0.962
]
},
"glb": "res://assets/objekte/military_desert/props/training_item_002.glb",
"kategorie": "props",
"name_de": "Trainingsziel 02"
},
"training_item_003": {
"poly": 1996,
"collision": {
"shape": "box",
"size": [
1.393,
1.416,
1.008
]
},
"glb": "res://assets/objekte/military_desert/props/training_item_003.glb",
"kategorie": "props",
"name_de": "Trainingsziel 03"
},
"training_item_004": {
"poly": 1320,
"collision": {
"shape": "box",
"size": [
0.81,
1.509,
0.926
]
},
"glb": "res://assets/objekte/military_desert/props/training_item_004.glb",
"kategorie": "props",
"name_de": "Trainingsziel 04"
},
"training_item_005": {
"poly": 392,
"collision": {
"shape": "box",
"size": [
1.731,
1.264,
1.894
]
},
"glb": "res://assets/objekte/military_desert/props/training_item_005.glb",
"kategorie": "props",
"name_de": "Trainingsziel 05"
},
"training_item_006": {
"poly": 304,
"collision": {
"shape": "box",
"size": [
1.731,
1.53,
1.87
]
},
"glb": "res://assets/objekte/military_desert/props/training_item_006.glb",
"kategorie": "props",
"name_de": "Trainingsziel 06"
},
"training_item_007": {
"poly": 628,
"collision": {
"shape": "box",
"size": [
2.562,
2.818,
3.204
]
},
"glb": "res://assets/objekte/military_desert/props/training_item_007.glb",
"kategorie": "props",
"name_de": "Trainingsziel 07"
},
"tree_pine": {
"poly": 180,
"collision": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 702 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,020 B

BIN
library/thumbs/box_001.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
library/thumbs/box_002.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
library/thumbs/box_003.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 805 B

BIN
library/thumbs/box_004.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

BIN
library/thumbs/box_005.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
library/thumbs/box_006.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

BIN
library/thumbs/box_007.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,018 B

BIN
library/thumbs/box_008.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

BIN
library/thumbs/box_009.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

BIN
library/thumbs/box_010.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

BIN
library/thumbs/box_011.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

BIN
library/thumbs/box_012.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

BIN
library/thumbs/box_013.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

BIN
library/thumbs/box_014.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

BIN
library/thumbs/box_015.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

BIN
library/thumbs/box_016.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

BIN
library/thumbs/box_017.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

BIN
library/thumbs/box_018.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

BIN
library/thumbs/box_019.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

BIN
library/thumbs/box_020.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

BIN
library/thumbs/box_021.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 B

BIN
library/thumbs/box_022.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 B

BIN
library/thumbs/box_023.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

BIN
library/thumbs/box_024.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

BIN
library/thumbs/box_025.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

BIN
library/thumbs/box_026.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

BIN
library/thumbs/box_027.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
library/thumbs/box_028.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

BIN
library/thumbs/box_029.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
library/thumbs/box_030.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

BIN
library/thumbs/box_031.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 927 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 953 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,82 @@
extends SceneTree
## D4-Beweis (t_691b51ce): Map-Builder platziert 3 Military-Props auf dem Boden
## und zeigt ihre Kollisionsboxen (Drahtgitter aus registry `collision.size`).
##
## xvfb-run -a /opt/data/home/bin/godot4 --rendering-driver opengl3 --path . \
## --resolution 1600x900 -s res://tests/probe_d4_mapbuilder.gd
##
## Ausgabe: /tmp/d4_mapbuilder.png + Prüfzeilen (Modus == GLB, Fußpunkt y=0)
const MapDocument := preload("res://src/svmap/map_document.gd")
const PLATZ := [
{"id": "barrel_001", "pos": [-2.2, 0.0, 0.0], "rot_y_deg": 0.0},
{"id": "box_020", "pos": [0.6, 0.0, 0.6], "rot_y_deg": 25.0},
{"id": "training_item_005", "pos": [3.6, 0.0, -0.6], "rot_y_deg": 180.0},
]
func _initialize() -> void:
var manifest: Dictionary = JSON.parse_string(FileAccess.get_file_as_string("res://library/objects.json"))
var doc: Dictionary = MapDocument.create_new("D4-Beweis", 256.0, "mittag")
doc["objects"] = PLATZ
var bauer: Node3D = load("res://src/viewport/map_view_builder.gd").new()
root.add_child(bauer)
await process_frame
bauer.rebuild(doc, manifest)
var lib: Dictionary = manifest.get("objects", {})
var fehler: Array = []
for i in PLATZ.size():
var marker: Node3D = bauer.object_markers[i]
if marker == null:
fehler.append("%s: kein Marker" % PLATZ[i]["id"])
continue
var oid := str(PLATZ[i]["id"])
var entry: Dictionary = lib.get(oid, {})
if entry.is_empty():
fehler.append("%s: nicht in der Bibliothek" % oid)
continue
var col: Dictionary = entry.get("collision", {})
var groesse: Array = col.get("size", [0.0, 0.0, 0.0])
# Kollisionsbox als Drahtgitter (Fußpunkt: Unterkante y=0).
var box := MeshInstance3D.new()
var bm := BoxMesh.new()
bm.size = Vector3(float(groesse[0]), float(groesse[1]), float(groesse[2])) + Vector3(0.01, 0.01, 0.01)
box.mesh = bm
var mat := StandardMaterial3D.new()
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
mat.albedo_color = Color(0.15, 1.0, 0.35, 0.28)
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
mat.cull_mode = BaseMaterial3D.CULL_DISABLED
mat.wireframe = true
box.material_override = mat
box.position = Vector3(0.0, float(groesse[1]) * 0.5, 0.0)
marker.add_child(box)
var echt := bool(marker.get_meta("glb"))
var mi := marker.get_child(0) as MeshInstance3D
var mesh_aabb := mi.mesh.get_aabb() if (mi != null and mi.mesh != null) else AABB()
print("%s: ehctesGLB=%s registry=%.3f/%.3f/%.3f mesh_aabb=%.3f/%.3f/%.3f mesh_min_y=%.3f"
% [oid, str(echt), float(groesse[0]), float(groesse[1]), float(groesse[2]),
mesh_aabb.size.x, mesh_aabb.size.y, mesh_aabb.size.z, mesh_aabb.position.y])
if not echt:
fehler.append("%s: rendert nur den Platzhalter (GLB fehlt)" % oid)
var cam := Camera3D.new()
cam.fov = 45.0
cam.position = Vector3(4.5, 3.2, 7.5)
root.add_child(cam)
await process_frame
cam.look_at(Vector3(0.6, 0.7, 0.0), Vector3.UP)
cam.current = true
cam.make_current()
await process_frame
await process_frame
await RenderingServer.frame_post_draw
root.get_texture().get_image().save_png("/tmp/d4_mapbuilder.png")
for f in fehler:
print(" FEHLER: %s" % f)
print("PROBE_D4_MAPBUILDER_%s" % ("FAIL" if not fehler.is_empty() else "OK"))
quit(1 if not fehler.is_empty() else 0)