Quality of life in procedural town creation improved
BIN
assets/blender/astream/Atlas_00001.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/blender/astream/Atlas_00002.png
Normal file
|
After Width: | Height: | Size: 341 B |
BIN
assets/blender/astream/Atlas_00003.png
Normal file
|
After Width: | Height: | Size: 341 B |
BIN
assets/blender/astream/Atlas_00004.png
Normal file
|
After Width: | Height: | Size: 341 B |
BIN
assets/blender/astream/Atlas_00005.png
Normal file
|
After Width: | Height: | Size: 341 B |
BIN
assets/blender/astream/Atlas_00006.png
Normal file
|
After Width: | Height: | Size: 276 B |
BIN
assets/blender/astream/Atlas_12696.png
Normal file
|
After Width: | Height: | Size: 346 B |
BIN
assets/blender/astream/Atlas_32944.png
Normal file
|
After Width: | Height: | Size: 431 B |
BIN
assets/blender/astream/Atlas_36953.png
Normal file
|
After Width: | Height: | Size: 437 B |
BIN
assets/blender/astream/Atlas_52716.png
Normal file
|
After Width: | Height: | Size: 517 B |
BIN
assets/blender/astream/Atlas_73934.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
assets/blender/astream/atlas-gym-roughness.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
assets/blender/astream/atlas-gym-specular.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/blender/astream/bus-stop.blend
Normal file
BIN
assets/blender/astream/dirt-road.blend
Normal file
BIN
assets/blender/astream/lot-large1.blend
Normal file
BIN
assets/blender/astream/lot-large2.blend
Normal file
BIN
assets/blender/astream/lot-small0.blend
Normal file
BIN
assets/blender/astream/lot-small1.blend
Normal file
BIN
assets/blender/astream/lot-small2.blend
Normal file
BIN
assets/blender/astream/residental-garage.blend
Normal file
BIN
assets/blender/astream/residental-house1.blend
Normal file
BIN
assets/blender/astream/residental-house2.blend
Normal file
BIN
assets/blender/astream/residental-hut1.blend
Normal file
BIN
assets/blender/astream/sideroad-short1.blend
Normal file
BIN
assets/blender/astream/terrain-lot1.bin
Normal file
BIN
assets/blender/astream/terrain-lot1.blend
Normal file
153
assets/blender/astream/terrain-lot1.gltf
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
{
|
||||||
|
"asset":{
|
||||||
|
"generator":"Khronos glTF Blender I/O v3.6.28",
|
||||||
|
"version":"2.0"
|
||||||
|
},
|
||||||
|
"extensionsUsed":[
|
||||||
|
"KHR_materials_specular",
|
||||||
|
"KHR_materials_ior"
|
||||||
|
],
|
||||||
|
"scene":0,
|
||||||
|
"scenes":[
|
||||||
|
{
|
||||||
|
"name":"Scene",
|
||||||
|
"nodes":[
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes":[
|
||||||
|
{
|
||||||
|
"mesh":0,
|
||||||
|
"name":"terrain-parking-lot-col"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials":[
|
||||||
|
{
|
||||||
|
"alphaCutoff":0.5,
|
||||||
|
"alphaMode":"MASK",
|
||||||
|
"extensions":{
|
||||||
|
"KHR_materials_specular":{
|
||||||
|
"specularColorFactor":[
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"KHR_materials_ior":{
|
||||||
|
"ior":1.4500000476837158
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name":"material_atlas_36953_1",
|
||||||
|
"pbrMetallicRoughness":{
|
||||||
|
"baseColorTexture":{
|
||||||
|
"index":0
|
||||||
|
},
|
||||||
|
"metallicFactor":0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes":[
|
||||||
|
{
|
||||||
|
"name":"Plane",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":0,
|
||||||
|
"NORMAL":1,
|
||||||
|
"TEXCOORD_0":2
|
||||||
|
},
|
||||||
|
"indices":3,
|
||||||
|
"material":0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"textures":[
|
||||||
|
{
|
||||||
|
"sampler":0,
|
||||||
|
"source":0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"images":[
|
||||||
|
{
|
||||||
|
"mimeType":"image/png",
|
||||||
|
"name":"Atlas_36953",
|
||||||
|
"uri":"Atlas_36953.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"accessors":[
|
||||||
|
{
|
||||||
|
"bufferView":0,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":250,
|
||||||
|
"max":[
|
||||||
|
25.032987594604492,
|
||||||
|
0.3288002610206604,
|
||||||
|
49.057586669921875
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-25.032987594604492,
|
||||||
|
-4.005487442016602,
|
||||||
|
-37.008201599121094
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":1,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":250,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":2,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":250,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":3,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":474,
|
||||||
|
"type":"SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bufferViews":[
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":3000,
|
||||||
|
"byteOffset":0,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":3000,
|
||||||
|
"byteOffset":3000,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":2000,
|
||||||
|
"byteOffset":6000,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":948,
|
||||||
|
"byteOffset":8000,
|
||||||
|
"target":34963
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"samplers":[
|
||||||
|
{
|
||||||
|
"magFilter":9729,
|
||||||
|
"minFilter":9987
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers":[
|
||||||
|
{
|
||||||
|
"byteLength":8948,
|
||||||
|
"uri":"terrain-lot1.bin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
assets/blender/astream/terrain-parking-lot.blend
Normal file
@@ -10018,8 +10018,8 @@
|
|||||||
"lot_dir_offset": 37.336308,
|
"lot_dir_offset": 37.336308,
|
||||||
"lot_y_offset": 0,
|
"lot_y_offset": 0,
|
||||||
"lot_y_rotation": -90,
|
"lot_y_rotation": -90,
|
||||||
"lot_type": "small1",
|
"lot_type": "small0",
|
||||||
"lot_buildings": ""
|
"lot_buildings": ":0, 0, 0:0"
|
||||||
},
|
},
|
||||||
"right": {
|
"right": {
|
||||||
"transit_stop_count": 1,
|
"transit_stop_count": 1,
|
||||||
@@ -10038,8 +10038,8 @@
|
|||||||
"lot_dir_offset": 37.336308,
|
"lot_dir_offset": 37.336308,
|
||||||
"lot_y_offset": 0,
|
"lot_y_offset": 0,
|
||||||
"lot_y_rotation": 90,
|
"lot_y_rotation": 90,
|
||||||
"lot_type": "small1",
|
"lot_type": "small0",
|
||||||
"lot_buildings": ""
|
"lot_buildings": ":0, 0, 0:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -10056,11 +10056,11 @@
|
|||||||
"sideroad_y_rotation": 0,
|
"sideroad_y_rotation": 0,
|
||||||
"sideroad_type": "Null",
|
"sideroad_type": "Null",
|
||||||
"lot": 1,
|
"lot": 1,
|
||||||
"lot_offset": 18.799999,
|
"lot_offset": 27,
|
||||||
"lot_dir_offset": -8,
|
"lot_dir_offset": 0.5,
|
||||||
"lot_y_offset": 0,
|
"lot_y_offset": 0,
|
||||||
"lot_y_rotation": -90,
|
"lot_y_rotation": 0,
|
||||||
"lot_type": "small1",
|
"lot_type": "small0",
|
||||||
"lot_buildings": ":0, 0, 0:0"
|
"lot_buildings": ":0, 0, 0:0"
|
||||||
},
|
},
|
||||||
"right": {
|
"right": {
|
||||||
@@ -10077,10 +10077,10 @@
|
|||||||
"sideroad_type": "Null",
|
"sideroad_type": "Null",
|
||||||
"lot": 1,
|
"lot": 1,
|
||||||
"lot_offset": 35,
|
"lot_offset": 35,
|
||||||
"lot_dir_offset": -10,
|
"lot_dir_offset": 0,
|
||||||
"lot_y_offset": 0.1,
|
"lot_y_offset": 0.1,
|
||||||
"lot_y_rotation": 90,
|
"lot_y_rotation": 90,
|
||||||
"lot_type": "small1",
|
"lot_type": "small0",
|
||||||
"lot_buildings": ":0, 0, 0:0"
|
"lot_buildings": ":0, 0, 0:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -10691,7 +10691,7 @@
|
|||||||
"lot_y_offset": 0,
|
"lot_y_offset": 0,
|
||||||
"lot_y_rotation": -90,
|
"lot_y_rotation": -90,
|
||||||
"lot_type": "",
|
"lot_type": "",
|
||||||
"lot_buildings": ""
|
"lot_buildings": ":0, 0, 0:0"
|
||||||
},
|
},
|
||||||
"right": {
|
"right": {
|
||||||
"transit_stop_count": 0,
|
"transit_stop_count": 0,
|
||||||
@@ -10711,7 +10711,7 @@
|
|||||||
"lot_y_offset": 0,
|
"lot_y_offset": 0,
|
||||||
"lot_y_rotation": 90,
|
"lot_y_rotation": 90,
|
||||||
"lot_type": "",
|
"lot_type": "",
|
||||||
"lot_buildings": ""
|
"lot_buildings": ":0, 0, 0:0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
BIN
godot/astream/terrain/details/lot-large1.bin
Normal file
153
godot/astream/terrain/details/lot-large1.gltf
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
{
|
||||||
|
"asset":{
|
||||||
|
"generator":"Khronos glTF Blender I/O v3.6.28",
|
||||||
|
"version":"2.0"
|
||||||
|
},
|
||||||
|
"extensionsUsed":[
|
||||||
|
"KHR_materials_specular",
|
||||||
|
"KHR_materials_ior"
|
||||||
|
],
|
||||||
|
"scene":0,
|
||||||
|
"scenes":[
|
||||||
|
{
|
||||||
|
"name":"Scene",
|
||||||
|
"nodes":[
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes":[
|
||||||
|
{
|
||||||
|
"mesh":0,
|
||||||
|
"name":"terrain-col"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials":[
|
||||||
|
{
|
||||||
|
"alphaCutoff":0.5,
|
||||||
|
"alphaMode":"MASK",
|
||||||
|
"extensions":{
|
||||||
|
"KHR_materials_specular":{
|
||||||
|
"specularColorFactor":[
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"KHR_materials_ior":{
|
||||||
|
"ior":1.4500000476837158
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name":"material_atlas_36953_1",
|
||||||
|
"pbrMetallicRoughness":{
|
||||||
|
"baseColorTexture":{
|
||||||
|
"index":0
|
||||||
|
},
|
||||||
|
"metallicFactor":0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes":[
|
||||||
|
{
|
||||||
|
"name":"Plane",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":0,
|
||||||
|
"NORMAL":1,
|
||||||
|
"TEXCOORD_0":2
|
||||||
|
},
|
||||||
|
"indices":3,
|
||||||
|
"material":0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"textures":[
|
||||||
|
{
|
||||||
|
"sampler":0,
|
||||||
|
"source":0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"images":[
|
||||||
|
{
|
||||||
|
"mimeType":"image/png",
|
||||||
|
"name":"Atlas_36953",
|
||||||
|
"uri":"Atlas_36953.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"accessors":[
|
||||||
|
{
|
||||||
|
"bufferView":0,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"max":[
|
||||||
|
99.999267578125,
|
||||||
|
0.30028849840164185,
|
||||||
|
99.77977752685547
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-99.84414672851562,
|
||||||
|
-4.802618026733398,
|
||||||
|
-99.61351013183594
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":1,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":2,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":3,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":552,
|
||||||
|
"type":"SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bufferViews":[
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":3780,
|
||||||
|
"byteOffset":0,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":3780,
|
||||||
|
"byteOffset":3780,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":2520,
|
||||||
|
"byteOffset":7560,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1104,
|
||||||
|
"byteOffset":10080,
|
||||||
|
"target":34963
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"samplers":[
|
||||||
|
{
|
||||||
|
"magFilter":9729,
|
||||||
|
"minFilter":9987
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers":[
|
||||||
|
{
|
||||||
|
"byteLength":11184,
|
||||||
|
"uri":"lot-large1.bin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1066
godot/astream/terrain/details/lot-large1.gltf.import
Normal file
5
godot/astream/terrain/details/lot-large1.tscn
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://astream/terrain/details/lot-large1.gltf" type="PackedScene" id=1]
|
||||||
|
|
||||||
|
[node name="lot-large1" instance=ExtResource( 1 )]
|
||||||
BIN
godot/astream/terrain/details/lot-large2.bin
Normal file
153
godot/astream/terrain/details/lot-large2.gltf
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
{
|
||||||
|
"asset":{
|
||||||
|
"generator":"Khronos glTF Blender I/O v3.6.28",
|
||||||
|
"version":"2.0"
|
||||||
|
},
|
||||||
|
"extensionsUsed":[
|
||||||
|
"KHR_materials_specular",
|
||||||
|
"KHR_materials_ior"
|
||||||
|
],
|
||||||
|
"scene":0,
|
||||||
|
"scenes":[
|
||||||
|
{
|
||||||
|
"name":"Scene",
|
||||||
|
"nodes":[
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes":[
|
||||||
|
{
|
||||||
|
"mesh":0,
|
||||||
|
"name":"terrain-col"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials":[
|
||||||
|
{
|
||||||
|
"alphaCutoff":0.5,
|
||||||
|
"alphaMode":"MASK",
|
||||||
|
"extensions":{
|
||||||
|
"KHR_materials_specular":{
|
||||||
|
"specularColorFactor":[
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"KHR_materials_ior":{
|
||||||
|
"ior":1.4500000476837158
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name":"material_atlas_36953_1",
|
||||||
|
"pbrMetallicRoughness":{
|
||||||
|
"baseColorTexture":{
|
||||||
|
"index":0
|
||||||
|
},
|
||||||
|
"metallicFactor":0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes":[
|
||||||
|
{
|
||||||
|
"name":"Plane",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":0,
|
||||||
|
"NORMAL":1,
|
||||||
|
"TEXCOORD_0":2
|
||||||
|
},
|
||||||
|
"indices":3,
|
||||||
|
"material":0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"textures":[
|
||||||
|
{
|
||||||
|
"sampler":0,
|
||||||
|
"source":0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"images":[
|
||||||
|
{
|
||||||
|
"mimeType":"image/png",
|
||||||
|
"name":"Atlas_36953",
|
||||||
|
"uri":"Atlas_36953.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"accessors":[
|
||||||
|
{
|
||||||
|
"bufferView":0,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"max":[
|
||||||
|
199.999267578125,
|
||||||
|
0.30028849840164185,
|
||||||
|
199.77978515625
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-199.84414672851562,
|
||||||
|
-4.802618026733398,
|
||||||
|
-199.61351013183594
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":1,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":2,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":3,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":552,
|
||||||
|
"type":"SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bufferViews":[
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":3780,
|
||||||
|
"byteOffset":0,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":3780,
|
||||||
|
"byteOffset":3780,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":2520,
|
||||||
|
"byteOffset":7560,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1104,
|
||||||
|
"byteOffset":10080,
|
||||||
|
"target":34963
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"samplers":[
|
||||||
|
{
|
||||||
|
"magFilter":9729,
|
||||||
|
"minFilter":9987
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers":[
|
||||||
|
{
|
||||||
|
"byteLength":11184,
|
||||||
|
"uri":"lot-large2.bin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1066
godot/astream/terrain/details/lot-large2.gltf.import
Normal file
5
godot/astream/terrain/details/lot-large2.tscn
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://astream/terrain/details/lot-large2.gltf" type="PackedScene" id=1]
|
||||||
|
|
||||||
|
[node name="lot-large2" instance=ExtResource( 1 )]
|
||||||
BIN
godot/astream/terrain/details/lot-small0.bin
Normal file
153
godot/astream/terrain/details/lot-small0.gltf
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
{
|
||||||
|
"asset":{
|
||||||
|
"generator":"Khronos glTF Blender I/O v3.6.28",
|
||||||
|
"version":"2.0"
|
||||||
|
},
|
||||||
|
"extensionsUsed":[
|
||||||
|
"KHR_materials_specular",
|
||||||
|
"KHR_materials_ior"
|
||||||
|
],
|
||||||
|
"scene":0,
|
||||||
|
"scenes":[
|
||||||
|
{
|
||||||
|
"name":"Scene",
|
||||||
|
"nodes":[
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes":[
|
||||||
|
{
|
||||||
|
"mesh":0,
|
||||||
|
"name":"terrain-col"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials":[
|
||||||
|
{
|
||||||
|
"alphaCutoff":0.5,
|
||||||
|
"alphaMode":"MASK",
|
||||||
|
"extensions":{
|
||||||
|
"KHR_materials_specular":{
|
||||||
|
"specularColorFactor":[
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"KHR_materials_ior":{
|
||||||
|
"ior":1.4500000476837158
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name":"material_atlas_36953_1",
|
||||||
|
"pbrMetallicRoughness":{
|
||||||
|
"baseColorTexture":{
|
||||||
|
"index":0
|
||||||
|
},
|
||||||
|
"metallicFactor":0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes":[
|
||||||
|
{
|
||||||
|
"name":"Plane",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":0,
|
||||||
|
"NORMAL":1,
|
||||||
|
"TEXCOORD_0":2
|
||||||
|
},
|
||||||
|
"indices":3,
|
||||||
|
"material":0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"textures":[
|
||||||
|
{
|
||||||
|
"sampler":0,
|
||||||
|
"source":0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"images":[
|
||||||
|
{
|
||||||
|
"mimeType":"image/png",
|
||||||
|
"name":"Atlas_36953",
|
||||||
|
"uri":"Atlas_36953.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"accessors":[
|
||||||
|
{
|
||||||
|
"bufferView":0,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"max":[
|
||||||
|
29.999271392822266,
|
||||||
|
0.30028843879699707,
|
||||||
|
29.77977752685547
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-29.844146728515625,
|
||||||
|
-4.802618026733398,
|
||||||
|
-29.613506317138672
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":1,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":2,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":315,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":3,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":552,
|
||||||
|
"type":"SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bufferViews":[
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":3780,
|
||||||
|
"byteOffset":0,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":3780,
|
||||||
|
"byteOffset":3780,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":2520,
|
||||||
|
"byteOffset":7560,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1104,
|
||||||
|
"byteOffset":10080,
|
||||||
|
"target":34963
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"samplers":[
|
||||||
|
{
|
||||||
|
"magFilter":9729,
|
||||||
|
"minFilter":9987
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers":[
|
||||||
|
{
|
||||||
|
"byteLength":11184,
|
||||||
|
"uri":"lot-small0.bin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1066
godot/astream/terrain/details/lot-small0.gltf.import
Normal file
5
godot/astream/terrain/details/lot-small0.tscn
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://astream/terrain/details/lot-small0.gltf" type="PackedScene" id=1]
|
||||||
|
|
||||||
|
[node name="lot-small0" instance=ExtResource( 1 )]
|
||||||
@@ -80,61 +80,61 @@
|
|||||||
{
|
{
|
||||||
"bufferView":0,
|
"bufferView":0,
|
||||||
"componentType":5126,
|
"componentType":5126,
|
||||||
"count":330,
|
"count":220,
|
||||||
"max":[
|
"max":[
|
||||||
28.415786743164062,
|
39.999271392822266,
|
||||||
0.01780128851532936,
|
0.30028843879699707,
|
||||||
44.232872009277344
|
49.77977752685547
|
||||||
],
|
],
|
||||||
"min":[
|
"min":[
|
||||||
-28.410146713256836,
|
-39.844146728515625,
|
||||||
-4.802618026733398,
|
-4.802618026733398,
|
||||||
-39.0701789855957
|
-49.61350631713867
|
||||||
],
|
],
|
||||||
"type":"VEC3"
|
"type":"VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView":1,
|
"bufferView":1,
|
||||||
"componentType":5126,
|
"componentType":5126,
|
||||||
"count":330,
|
"count":220,
|
||||||
"type":"VEC3"
|
"type":"VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView":2,
|
"bufferView":2,
|
||||||
"componentType":5126,
|
"componentType":5126,
|
||||||
"count":330,
|
"count":220,
|
||||||
"type":"VEC2"
|
"type":"VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView":3,
|
"bufferView":3,
|
||||||
"componentType":5123,
|
"componentType":5123,
|
||||||
"count":492,
|
"count":348,
|
||||||
"type":"SCALAR"
|
"type":"SCALAR"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"bufferViews":[
|
"bufferViews":[
|
||||||
{
|
{
|
||||||
"buffer":0,
|
"buffer":0,
|
||||||
"byteLength":3960,
|
"byteLength":2640,
|
||||||
"byteOffset":0,
|
"byteOffset":0,
|
||||||
"target":34962
|
"target":34962
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":3960,
|
|
||||||
"byteOffset":3960,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"buffer":0,
|
"buffer":0,
|
||||||
"byteLength":2640,
|
"byteLength":2640,
|
||||||
"byteOffset":7920,
|
"byteOffset":2640,
|
||||||
"target":34962
|
"target":34962
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer":0,
|
"buffer":0,
|
||||||
"byteLength":984,
|
"byteLength":1760,
|
||||||
"byteOffset":10560,
|
"byteOffset":5280,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":696,
|
||||||
|
"byteOffset":7040,
|
||||||
"target":34963
|
"target":34963
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
],
|
],
|
||||||
"buffers":[
|
"buffers":[
|
||||||
{
|
{
|
||||||
"byteLength":11544,
|
"byteLength":7736,
|
||||||
"uri":"lot-small1.bin"
|
"uri":"lot-small1.bin"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -2,4 +2,6 @@
|
|||||||
|
|
||||||
[ext_resource path="res://astream/terrain/details/lot-small1.gltf" type="PackedScene" id=1]
|
[ext_resource path="res://astream/terrain/details/lot-small1.gltf" type="PackedScene" id=1]
|
||||||
|
|
||||||
[node name="lot-small1" instance=ExtResource( 1 )]
|
[node name="terrain" type="Spatial"]
|
||||||
|
|
||||||
|
[node name="lot-small1" parent="." instance=ExtResource( 1 )]
|
||||||
|
|||||||
BIN
godot/astream/terrain/details/lot-small2.bin
Normal file
153
godot/astream/terrain/details/lot-small2.gltf
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
{
|
||||||
|
"asset":{
|
||||||
|
"generator":"Khronos glTF Blender I/O v3.6.28",
|
||||||
|
"version":"2.0"
|
||||||
|
},
|
||||||
|
"extensionsUsed":[
|
||||||
|
"KHR_materials_specular",
|
||||||
|
"KHR_materials_ior"
|
||||||
|
],
|
||||||
|
"scene":0,
|
||||||
|
"scenes":[
|
||||||
|
{
|
||||||
|
"name":"Scene",
|
||||||
|
"nodes":[
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes":[
|
||||||
|
{
|
||||||
|
"mesh":0,
|
||||||
|
"name":"terrain-col"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials":[
|
||||||
|
{
|
||||||
|
"alphaCutoff":0.5,
|
||||||
|
"alphaMode":"MASK",
|
||||||
|
"extensions":{
|
||||||
|
"KHR_materials_specular":{
|
||||||
|
"specularColorFactor":[
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"KHR_materials_ior":{
|
||||||
|
"ior":1.4500000476837158
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name":"material_atlas_36953_1",
|
||||||
|
"pbrMetallicRoughness":{
|
||||||
|
"baseColorTexture":{
|
||||||
|
"index":0
|
||||||
|
},
|
||||||
|
"metallicFactor":0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes":[
|
||||||
|
{
|
||||||
|
"name":"Plane",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":0,
|
||||||
|
"NORMAL":1,
|
||||||
|
"TEXCOORD_0":2
|
||||||
|
},
|
||||||
|
"indices":3,
|
||||||
|
"material":0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"textures":[
|
||||||
|
{
|
||||||
|
"sampler":0,
|
||||||
|
"source":0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"images":[
|
||||||
|
{
|
||||||
|
"mimeType":"image/png",
|
||||||
|
"name":"Atlas_36953",
|
||||||
|
"uri":"Atlas_36953.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"accessors":[
|
||||||
|
{
|
||||||
|
"bufferView":0,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":241,
|
||||||
|
"max":[
|
||||||
|
99.999267578125,
|
||||||
|
0.30028843879699707,
|
||||||
|
49.77977752685547
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-99.84414672851562,
|
||||||
|
-4.802618026733398,
|
||||||
|
-49.61350631713867
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":1,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":241,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":2,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":241,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":3,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":408,
|
||||||
|
"type":"SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bufferViews":[
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":2892,
|
||||||
|
"byteOffset":0,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":2892,
|
||||||
|
"byteOffset":2892,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1928,
|
||||||
|
"byteOffset":5784,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":816,
|
||||||
|
"byteOffset":7712,
|
||||||
|
"target":34963
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"samplers":[
|
||||||
|
{
|
||||||
|
"magFilter":9729,
|
||||||
|
"minFilter":9987
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers":[
|
||||||
|
{
|
||||||
|
"byteLength":8528,
|
||||||
|
"uri":"lot-small2.bin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1066
godot/astream/terrain/details/lot-small2.gltf.import
Normal file
5
godot/astream/terrain/details/lot-small2.tscn
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://astream/terrain/details/lot-small2.gltf" type="PackedScene" id=1]
|
||||||
|
|
||||||
|
[node name="lot-small2" instance=ExtResource( 1 )]
|
||||||
BIN
godot/astream/terrain/details/residental-garage.bin
Normal file
235
godot/astream/terrain/details/residental-garage.gltf
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
{
|
||||||
|
"asset":{
|
||||||
|
"generator":"Khronos glTF Blender I/O v3.6.28",
|
||||||
|
"version":"2.0"
|
||||||
|
},
|
||||||
|
"extensionsUsed":[
|
||||||
|
"KHR_materials_specular",
|
||||||
|
"KHR_materials_ior"
|
||||||
|
],
|
||||||
|
"scene":0,
|
||||||
|
"scenes":[
|
||||||
|
{
|
||||||
|
"name":"Scene",
|
||||||
|
"nodes":[
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes":[
|
||||||
|
{
|
||||||
|
"mesh":0,
|
||||||
|
"name":"garage-col-colonly"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children":[
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"mesh":1,
|
||||||
|
"name":"garage"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"NurbsPath"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials":[
|
||||||
|
{
|
||||||
|
"alphaCutoff":0.5,
|
||||||
|
"alphaMode":"MASK",
|
||||||
|
"extensions":{
|
||||||
|
"KHR_materials_specular":{
|
||||||
|
"specularColorFactor":[
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"KHR_materials_ior":{
|
||||||
|
"ior":1.4500000476837158
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name":"material_atlas_36953_1",
|
||||||
|
"pbrMetallicRoughness":{
|
||||||
|
"baseColorTexture":{
|
||||||
|
"index":0
|
||||||
|
},
|
||||||
|
"metallicFactor":0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes":[
|
||||||
|
{
|
||||||
|
"name":"Cube",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":0,
|
||||||
|
"NORMAL":1,
|
||||||
|
"TEXCOORD_0":2
|
||||||
|
},
|
||||||
|
"indices":3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"Cube.014",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":4,
|
||||||
|
"NORMAL":5,
|
||||||
|
"TEXCOORD_0":6
|
||||||
|
},
|
||||||
|
"indices":7,
|
||||||
|
"material":0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"textures":[
|
||||||
|
{
|
||||||
|
"sampler":0,
|
||||||
|
"source":0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"images":[
|
||||||
|
{
|
||||||
|
"mimeType":"image/png",
|
||||||
|
"name":"Atlas_36953",
|
||||||
|
"uri":"Atlas_36953.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"accessors":[
|
||||||
|
{
|
||||||
|
"bufferView":0,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":160,
|
||||||
|
"max":[
|
||||||
|
19,
|
||||||
|
6,
|
||||||
|
4.5
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-12.100000381469727,
|
||||||
|
-0.5,
|
||||||
|
-4.5
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":1,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":160,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":2,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":160,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":3,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":420,
|
||||||
|
"type":"SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":4,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":129,
|
||||||
|
"max":[
|
||||||
|
19,
|
||||||
|
6,
|
||||||
|
4.500000953674316
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-12.100000381469727,
|
||||||
|
-0.5,
|
||||||
|
-4.499999046325684
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":5,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":129,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":6,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":129,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":7,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":306,
|
||||||
|
"type":"SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bufferViews":[
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1920,
|
||||||
|
"byteOffset":0,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1920,
|
||||||
|
"byteOffset":1920,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1280,
|
||||||
|
"byteOffset":3840,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":840,
|
||||||
|
"byteOffset":5120,
|
||||||
|
"target":34963
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1548,
|
||||||
|
"byteOffset":5960,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1548,
|
||||||
|
"byteOffset":7508,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":1032,
|
||||||
|
"byteOffset":9056,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":612,
|
||||||
|
"byteOffset":10088,
|
||||||
|
"target":34963
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"samplers":[
|
||||||
|
{
|
||||||
|
"magFilter":9729,
|
||||||
|
"minFilter":9987
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers":[
|
||||||
|
{
|
||||||
|
"byteLength":10700,
|
||||||
|
"uri":"residental-garage.bin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1066
godot/astream/terrain/details/residental-garage.gltf.import
Normal file
54
godot/astream/terrain/details/residental-garage1.tscn
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
[gd_scene load_steps=6 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://astream/terrain/details/residental-garage.gltf" type="PackedScene" id=1]
|
||||||
|
|
||||||
|
[sub_resource type="CubeMesh" id=1]
|
||||||
|
size = Vector3( 27, 1, 10 )
|
||||||
|
|
||||||
|
[sub_resource type="SpatialMaterial" id=2]
|
||||||
|
albedo_color = Color( 0.227451, 0.0235294, 0.0235294, 1 )
|
||||||
|
|
||||||
|
[sub_resource type="CubeMesh" id=3]
|
||||||
|
size = Vector3( 25, 6, 9 )
|
||||||
|
|
||||||
|
[sub_resource type="SpatialMaterial" id=4]
|
||||||
|
albedo_color = Color( 0.980392, 0.639216, 0.0705882, 1 )
|
||||||
|
|
||||||
|
[node name="garage" type="Spatial"]
|
||||||
|
|
||||||
|
[node name="LOD" type="LOD" parent="."]
|
||||||
|
|
||||||
|
[node name="MergeGroup" type="MergeGroup" parent="LOD"]
|
||||||
|
lod_range = 35.0
|
||||||
|
|
||||||
|
[node name="residental-garage" parent="LOD/MergeGroup" instance=ExtResource( 1 )]
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="LOD/MergeGroup"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.427596, 6.49411, 0 )
|
||||||
|
mesh = SubResource( 1 )
|
||||||
|
material/0 = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="MergeGroup1" type="MergeGroup" parent="LOD"]
|
||||||
|
visible = false
|
||||||
|
lod_range = 20.0
|
||||||
|
|
||||||
|
[node name="residental-garage" parent="LOD/MergeGroup1" instance=ExtResource( 1 )]
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="LOD/MergeGroup1"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.427596, 6.49411, 0 )
|
||||||
|
mesh = SubResource( 1 )
|
||||||
|
material/0 = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="MergeGroup2" type="MergeGroup" parent="LOD"]
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="LOD/MergeGroup2"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0 )
|
||||||
|
mesh = SubResource( 3 )
|
||||||
|
skeleton = NodePath("../../MergeGroup2")
|
||||||
|
material/0 = SubResource( 4 )
|
||||||
|
|
||||||
|
[node name="MeshInstance2" type="MeshInstance" parent="LOD/MergeGroup2"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.427596, 6.49411, 0 )
|
||||||
|
mesh = SubResource( 1 )
|
||||||
|
material/0 = SubResource( 2 )
|
||||||
BIN
godot/astream/terrain/details/residental-hut1.bin
Normal file
237
godot/astream/terrain/details/residental-hut1.gltf
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
{
|
||||||
|
"asset":{
|
||||||
|
"generator":"Khronos glTF Blender I/O v3.6.28",
|
||||||
|
"version":"2.0"
|
||||||
|
},
|
||||||
|
"extensionsUsed":[
|
||||||
|
"KHR_materials_specular",
|
||||||
|
"KHR_materials_ior"
|
||||||
|
],
|
||||||
|
"scene":0,
|
||||||
|
"scenes":[
|
||||||
|
{
|
||||||
|
"name":"Scene",
|
||||||
|
"nodes":[
|
||||||
|
1
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes":[
|
||||||
|
{
|
||||||
|
"mesh":0,
|
||||||
|
"name":"flat3-1-noimp",
|
||||||
|
"translation":[
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"children":[
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"mesh":1,
|
||||||
|
"name":"house3-col"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials":[
|
||||||
|
{
|
||||||
|
"alphaCutoff":0.5,
|
||||||
|
"alphaMode":"MASK",
|
||||||
|
"extensions":{
|
||||||
|
"KHR_materials_specular":{
|
||||||
|
"specularColorFactor":[
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476,
|
||||||
|
0.474271529955476
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"KHR_materials_ior":{
|
||||||
|
"ior":1.4500000476837158
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name":"material_atlas_73934_1",
|
||||||
|
"pbrMetallicRoughness":{
|
||||||
|
"baseColorTexture":{
|
||||||
|
"index":0
|
||||||
|
},
|
||||||
|
"metallicFactor":0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meshes":[
|
||||||
|
{
|
||||||
|
"name":"Plane.003",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":0,
|
||||||
|
"NORMAL":1,
|
||||||
|
"TEXCOORD_0":2
|
||||||
|
},
|
||||||
|
"indices":3,
|
||||||
|
"material":0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"Cube.003",
|
||||||
|
"primitives":[
|
||||||
|
{
|
||||||
|
"attributes":{
|
||||||
|
"POSITION":4,
|
||||||
|
"NORMAL":5,
|
||||||
|
"TEXCOORD_0":6
|
||||||
|
},
|
||||||
|
"indices":7,
|
||||||
|
"material":0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"textures":[
|
||||||
|
{
|
||||||
|
"sampler":0,
|
||||||
|
"source":0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"images":[
|
||||||
|
{
|
||||||
|
"mimeType":"image/png",
|
||||||
|
"name":"Atlas_73934",
|
||||||
|
"uri":"Atlas_73934.png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"accessors":[
|
||||||
|
{
|
||||||
|
"bufferView":0,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":28,
|
||||||
|
"max":[
|
||||||
|
11,
|
||||||
|
4,
|
||||||
|
11
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-11,
|
||||||
|
0,
|
||||||
|
-8
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":1,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":28,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":2,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":28,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":3,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":72,
|
||||||
|
"type":"SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":4,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":368,
|
||||||
|
"max":[
|
||||||
|
7,
|
||||||
|
13,
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"min":[
|
||||||
|
-7,
|
||||||
|
0,
|
||||||
|
-9
|
||||||
|
],
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":5,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":368,
|
||||||
|
"type":"VEC3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":6,
|
||||||
|
"componentType":5126,
|
||||||
|
"count":368,
|
||||||
|
"type":"VEC2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView":7,
|
||||||
|
"componentType":5123,
|
||||||
|
"count":1002,
|
||||||
|
"type":"SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bufferViews":[
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":336,
|
||||||
|
"byteOffset":0,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":336,
|
||||||
|
"byteOffset":336,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":224,
|
||||||
|
"byteOffset":672,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":144,
|
||||||
|
"byteOffset":896,
|
||||||
|
"target":34963
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":4416,
|
||||||
|
"byteOffset":1040,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":4416,
|
||||||
|
"byteOffset":5456,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":2944,
|
||||||
|
"byteOffset":9872,
|
||||||
|
"target":34962
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer":0,
|
||||||
|
"byteLength":2004,
|
||||||
|
"byteOffset":12816,
|
||||||
|
"target":34963
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"samplers":[
|
||||||
|
{
|
||||||
|
"magFilter":9729,
|
||||||
|
"minFilter":9987
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buffers":[
|
||||||
|
{
|
||||||
|
"byteLength":14820,
|
||||||
|
"uri":"residental-hut1.bin"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
1066
godot/astream/terrain/details/residental-hut1.gltf.import
Normal file
74
godot/astream/terrain/details/residental-hut1.tscn
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
[gd_scene load_steps=7 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://astream/terrain/details/residental-hut1.gltf" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://astream/terrain/details/parts/door1-portal.tscn" type="PackedScene" id=2]
|
||||||
|
[ext_resource path="res://astream/terrain/details/parts/residental-house-stair.tscn" type="PackedScene" id=3]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape" id=1]
|
||||||
|
extents = Vector3( 0.7, 1, 0.6 )
|
||||||
|
|
||||||
|
[sub_resource type="CubeMesh" id=2]
|
||||||
|
size = Vector3( 14, 7, 16 )
|
||||||
|
|
||||||
|
[sub_resource type="SpatialMaterial" id=3]
|
||||||
|
albedo_color = Color( 0.937255, 0.615686, 0.0627451, 1 )
|
||||||
|
|
||||||
|
[node name="residental-hut1" type="Spatial"]
|
||||||
|
|
||||||
|
[node name="LOD" type="LOD" parent="."]
|
||||||
|
|
||||||
|
[node name="MergeGroup" type="MergeGroup" parent="LOD"]
|
||||||
|
lod_range = 40.0
|
||||||
|
|
||||||
|
[node name="residental-hut1" parent="LOD/MergeGroup" instance=ExtResource( 1 )]
|
||||||
|
|
||||||
|
[node name="door1-portal" parent="LOD/MergeGroup" instance=ExtResource( 2 )]
|
||||||
|
transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 1, 1, -7.48604 )
|
||||||
|
skeleton = NodePath("../../..")
|
||||||
|
|
||||||
|
[node name="enter_destination" type="Spatial" parent="LOD/MergeGroup/door1-portal" groups=["smart_object"]]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.905, 0, 0.65 )
|
||||||
|
|
||||||
|
[node name="actions" type="Node" parent="LOD/MergeGroup/door1-portal/enter_destination"]
|
||||||
|
|
||||||
|
[node name="EnterDestination" type="Node" parent="LOD/MergeGroup/door1-portal/enter_destination/actions"]
|
||||||
|
|
||||||
|
[node name="Area" type="Area" parent="LOD/MergeGroup/door1-portal/enter_destination"]
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="LOD/MergeGroup/door1-portal/enter_destination/Area"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0 )
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="residental-house-stair" parent="LOD/MergeGroup" instance=ExtResource( 3 )]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -7.97294 )
|
||||||
|
|
||||||
|
[node name="MergeGroup2" type="MergeGroup" parent="LOD"]
|
||||||
|
visible = false
|
||||||
|
lod_range = 20.0
|
||||||
|
|
||||||
|
[node name="residental-hut1" parent="LOD/MergeGroup2" instance=ExtResource( 1 )]
|
||||||
|
|
||||||
|
[node name="door1-portal" parent="LOD/MergeGroup2" instance=ExtResource( 2 )]
|
||||||
|
transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 1, 1, -7.48604 )
|
||||||
|
skeleton = NodePath("../../..")
|
||||||
|
|
||||||
|
[node name="enter_destination" type="Spatial" parent="LOD/MergeGroup2/door1-portal" groups=["smart_object"]]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.905, 0, 0.65 )
|
||||||
|
|
||||||
|
[node name="actions" type="Node" parent="LOD/MergeGroup2/door1-portal/enter_destination"]
|
||||||
|
|
||||||
|
[node name="EnterDestination" type="Node" parent="LOD/MergeGroup2/door1-portal/enter_destination/actions"]
|
||||||
|
|
||||||
|
[node name="Area" type="Area" parent="LOD/MergeGroup2/door1-portal/enter_destination"]
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="LOD/MergeGroup2/door1-portal/enter_destination/Area"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0 )
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="MergeGroup3" type="MergeGroup" parent="LOD"]
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="LOD/MergeGroup3"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.5, 0 )
|
||||||
|
mesh = SubResource( 2 )
|
||||||
|
material/0 = SubResource( 3 )
|
||||||
@@ -37,7 +37,13 @@ building_data = {
|
|||||||
"foundation30": "res://astream/terrain/details/foundation30.tscn",
|
"foundation30": "res://astream/terrain/details/foundation30.tscn",
|
||||||
"foundation60": "res://astream/terrain/details/foundation60.tscn",
|
"foundation60": "res://astream/terrain/details/foundation60.tscn",
|
||||||
"bus-stop": "res://astream/terrain/details/bus-stop.tscn",
|
"bus-stop": "res://astream/terrain/details/bus-stop.tscn",
|
||||||
|
"lot-small0": "res://astream/terrain/details/lot-small0.tscn",
|
||||||
"lot-small1": "res://astream/terrain/details/lot-small1.tscn",
|
"lot-small1": "res://astream/terrain/details/lot-small1.tscn",
|
||||||
|
"lot-small2": "res://astream/terrain/details/lot-small2.tscn",
|
||||||
|
"lot-large1": "res://astream/terrain/details/lot-large1.tscn",
|
||||||
|
"lot-large2": "res://astream/terrain/details/lot-large2.tscn",
|
||||||
|
"residental-garage1": "res://astream/terrain/details/residental-garage1.tscn",
|
||||||
|
"residental-hut1": "res://astream/terrain/details/residental-hut1.tscn",
|
||||||
"sideroad-short1": "res://astream/terrain/details/sideroad-short1.tscn",
|
"sideroad-short1": "res://astream/terrain/details/sideroad-short1.tscn",
|
||||||
}
|
}
|
||||||
buildings_path = "res://astream/buildings.json"
|
buildings_path = "res://astream/buildings.json"
|
||||||
@@ -68,3 +74,53 @@ lot_y_rotation = -90.0
|
|||||||
lot_offset = 33.8
|
lot_offset = 33.8
|
||||||
lot_y_rotation = 90.0
|
lot_y_rotation = 90.0
|
||||||
|
|
||||||
|
[lines/edges/lot-small0/left]
|
||||||
|
lot_offset = 26.5
|
||||||
|
lot_y_rotation = 0
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-small0/right]
|
||||||
|
lot_offset = 26.5
|
||||||
|
lot_y_rotation = 180
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-small1/left]
|
||||||
|
lot_offset = 36
|
||||||
|
lot_y_rotation = 0
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-small1/right]
|
||||||
|
lot_offset = 36
|
||||||
|
lot_y_rotation = 180
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-small2/left]
|
||||||
|
lot_offset = 96
|
||||||
|
lot_y_rotation = 0
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-small2/right]
|
||||||
|
lot_offset = 96
|
||||||
|
lot_y_rotation = 180
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-large1/left]
|
||||||
|
lot_offset = 96
|
||||||
|
lot_y_rotation = 0
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-large1/right]
|
||||||
|
lot_offset = 96
|
||||||
|
lot_y_rotation = 180
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-large2/left]
|
||||||
|
lot_offset = 196
|
||||||
|
lot_y_rotation = 0
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
[lines/edges/lot-large2/right]
|
||||||
|
lot_offset = 196
|
||||||
|
lot_y_rotation = 180
|
||||||
|
lot_y_offset = 0
|
||||||
|
|
||||||
|
|||||||
@@ -1091,6 +1091,112 @@ class EdgeEditorHandler {
|
|||||||
result = 1;
|
result = 1;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
bool pack_buildings(
|
||||||
|
const AABB &lot_aabb,
|
||||||
|
std::vector<struct RoadLinesData::road_edge_side::buildings>
|
||||||
|
&buildings,
|
||||||
|
float gap)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Rect2 rect_lot(lot_aabb.position.x, lot_aabb.position.z,
|
||||||
|
lot_aabb.size.x, lot_aabb.size.z);
|
||||||
|
std::vector<Rect2> inputs, outputs;
|
||||||
|
List<Rect2> parts;
|
||||||
|
List<Rect2> parts_next;
|
||||||
|
rect_lot.grow_by(-4);
|
||||||
|
print_line("lot rect: " + (rect_lot.operator String()));
|
||||||
|
parts.push_back(rect_lot);
|
||||||
|
Vector<int> bad_indices;
|
||||||
|
for (i = 0; i < (int)buildings.size(); i++) {
|
||||||
|
if (buildings[i].id.length() == 0) {
|
||||||
|
if (bad_indices.find(i) < 0)
|
||||||
|
bad_indices.push_back(i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const AABB &aabb_building =
|
||||||
|
BuildingsData::get_singleton()
|
||||||
|
->building_aabbs[buildings[i].id];
|
||||||
|
Transform building_rot(
|
||||||
|
Basis().rotated(
|
||||||
|
Vector3(0, 1, 0),
|
||||||
|
Math::deg2rad(buildings[i].y_rotation)),
|
||||||
|
Vector3());
|
||||||
|
const AABB &aabb_building_rot =
|
||||||
|
building_rot.xform(aabb_building);
|
||||||
|
Rect2 input(aabb_building_rot.position.x,
|
||||||
|
aabb_building_rot.position.z,
|
||||||
|
aabb_building_rot.size.x,
|
||||||
|
aabb_building_rot.size.z);
|
||||||
|
if (input.size.x < 0.1f) {
|
||||||
|
if (bad_indices.find(i) < 0)
|
||||||
|
bad_indices.push_back(i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
print_line("id: " + buildings[i].id +
|
||||||
|
" input: " + (input.operator String()));
|
||||||
|
input.grow_by(gap);
|
||||||
|
inputs.push_back(input);
|
||||||
|
}
|
||||||
|
bad_indices.invert();
|
||||||
|
for (i = 0; i < (int)bad_indices.size(); i++)
|
||||||
|
buildings.erase(buildings.begin() + bad_indices[i]);
|
||||||
|
if (buildings.size() < 2)
|
||||||
|
return false;
|
||||||
|
for (i = 0; i < (int)inputs.size(); i++) {
|
||||||
|
bool found = false;
|
||||||
|
List<Rect2>::Element *e = parts.front();
|
||||||
|
while (e) {
|
||||||
|
Rect2 part = e->get();
|
||||||
|
if (part.size.x >= inputs[i].size.x &&
|
||||||
|
part.size.y >= inputs[i].size.y) {
|
||||||
|
found = true;
|
||||||
|
Rect2 output(part.position.x,
|
||||||
|
part.position.y,
|
||||||
|
inputs[i].size.x,
|
||||||
|
inputs[i].size.y);
|
||||||
|
outputs.push_back(output);
|
||||||
|
Rect2 part1(part.position.x,
|
||||||
|
part.position.y +
|
||||||
|
inputs[i].size.y,
|
||||||
|
inputs[i].size.x,
|
||||||
|
part.size.y -
|
||||||
|
inputs[i].size.y);
|
||||||
|
Rect2 part2(part.position.x +
|
||||||
|
inputs[i].size.x,
|
||||||
|
part.position.y,
|
||||||
|
part.size.x -
|
||||||
|
inputs[i].size.x,
|
||||||
|
part.size.y);
|
||||||
|
parts_next.push_back(part1);
|
||||||
|
parts_next.push_back(part2);
|
||||||
|
break;
|
||||||
|
} else
|
||||||
|
parts_next.push_back(part);
|
||||||
|
e = e->next();
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
print_line("can't fit " + itos(i));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
parts = parts_next;
|
||||||
|
}
|
||||||
|
if (outputs.size() < buildings.size())
|
||||||
|
return false;
|
||||||
|
Rect2 result;
|
||||||
|
for (i = 0; i < (int)outputs.size(); i++) {
|
||||||
|
print_line("output: " + itos(i) +
|
||||||
|
(outputs[i].operator String()));
|
||||||
|
result = result.merge(outputs[i]);
|
||||||
|
}
|
||||||
|
for (i = 0; i < (int)outputs.size(); i++) {
|
||||||
|
/* FIXME: why ? */
|
||||||
|
Vector2 center =
|
||||||
|
outputs[i].get_center() - result.get_center();
|
||||||
|
buildings[i].offsets.x = center.x;
|
||||||
|
buildings[i].offsets.z = center.y;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
void event_handler(const String &event, const Vector<Variant> &args)
|
void event_handler(const String &event, const Vector<Variant> &args)
|
||||||
{
|
{
|
||||||
if (event == "road_lines_edge_editor::edit") {
|
if (event == "road_lines_edge_editor::edit") {
|
||||||
@@ -1133,6 +1239,9 @@ class EdgeEditorHandler {
|
|||||||
case 200:
|
case 200:
|
||||||
pname = "clear";
|
pname = "clear";
|
||||||
break;
|
break;
|
||||||
|
case 201:
|
||||||
|
pname = "clear-buildings";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
pname = menu->get_item_metadata(item_index);
|
pname = menu->get_item_metadata(item_index);
|
||||||
break;
|
break;
|
||||||
@@ -1150,6 +1259,10 @@ class EdgeEditorHandler {
|
|||||||
get_edge_conf<float>(
|
get_edge_conf<float>(
|
||||||
pname, "left",
|
pname, "left",
|
||||||
"lot_y_rotation");
|
"lot_y_rotation");
|
||||||
|
rl.edges[index].left.lot_offset =
|
||||||
|
get_edge_conf<float>(
|
||||||
|
pname, "left",
|
||||||
|
"lot_offset");
|
||||||
float dir_offt =
|
float dir_offt =
|
||||||
rl.points[index + 1]
|
rl.points[index + 1]
|
||||||
.origin.distance_to(
|
.origin.distance_to(
|
||||||
@@ -1159,6 +1272,32 @@ class EdgeEditorHandler {
|
|||||||
rl.edges[index].left.lot_dir_offset =
|
rl.edges[index].left.lot_dir_offset =
|
||||||
dir_offt;
|
dir_offt;
|
||||||
}
|
}
|
||||||
|
} else if (pname.begins_with("residental-")) {
|
||||||
|
struct RoadLinesData::road_edge_side::buildings
|
||||||
|
b;
|
||||||
|
b.id = pname;
|
||||||
|
b.offsets = Vector3();
|
||||||
|
b.y_rotation = 0.0f;
|
||||||
|
|
||||||
|
rl.edges[index].left.buildings.push_back(b);
|
||||||
|
if (rl.edges[index].left.lot > 0) {
|
||||||
|
String lot_id =
|
||||||
|
rl.edges[index].left.lot_type;
|
||||||
|
if (rl.edges[index]
|
||||||
|
.left.buildings.size() >
|
||||||
|
1) {
|
||||||
|
const AABB &aabb_lot =
|
||||||
|
BuildingsData::get_singleton()
|
||||||
|
->building_aabbs
|
||||||
|
["lot-" +
|
||||||
|
lot_id];
|
||||||
|
pack_buildings(
|
||||||
|
aabb_lot,
|
||||||
|
rl.edges[index]
|
||||||
|
.left.buildings,
|
||||||
|
2.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (pname == "clear") {
|
} else if (pname == "clear") {
|
||||||
rl.edges[index].left.lot_type = "";
|
rl.edges[index].left.lot_type = "";
|
||||||
rl.edges[index].left.lot = 0;
|
rl.edges[index].left.lot = 0;
|
||||||
@@ -1175,6 +1314,9 @@ class EdgeEditorHandler {
|
|||||||
case 200:
|
case 200:
|
||||||
pname = "clear";
|
pname = "clear";
|
||||||
break;
|
break;
|
||||||
|
case 201:
|
||||||
|
pname = "clear-buildings";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
pname = menu->get_item_metadata(item_index);
|
pname = menu->get_item_metadata(item_index);
|
||||||
break;
|
break;
|
||||||
@@ -1195,6 +1337,10 @@ class EdgeEditorHandler {
|
|||||||
get_edge_conf<float>(
|
get_edge_conf<float>(
|
||||||
pname, "right",
|
pname, "right",
|
||||||
"lot_y_rotation");
|
"lot_y_rotation");
|
||||||
|
rl.edges[index].right.lot_offset =
|
||||||
|
get_edge_conf<float>(
|
||||||
|
pname, "right",
|
||||||
|
"lot_offset");
|
||||||
float dir_offt =
|
float dir_offt =
|
||||||
rl.points[index + 1]
|
rl.points[index + 1]
|
||||||
.origin.distance_to(
|
.origin.distance_to(
|
||||||
@@ -1204,6 +1350,33 @@ class EdgeEditorHandler {
|
|||||||
rl.edges[index].right.lot_dir_offset =
|
rl.edges[index].right.lot_dir_offset =
|
||||||
dir_offt;
|
dir_offt;
|
||||||
}
|
}
|
||||||
|
} else if (pname.begins_with("residental-") ||
|
||||||
|
pname.begins_with("business-")) {
|
||||||
|
struct RoadLinesData::road_edge_side::buildings
|
||||||
|
b;
|
||||||
|
b.id = pname;
|
||||||
|
b.offsets = Vector3();
|
||||||
|
b.y_rotation = 0.0f;
|
||||||
|
|
||||||
|
rl.edges[index].right.buildings.push_back(b);
|
||||||
|
if (rl.edges[index].right.lot > 0) {
|
||||||
|
String lot_id =
|
||||||
|
rl.edges[index].right.lot_type;
|
||||||
|
if (rl.edges[index]
|
||||||
|
.right.buildings.size() >
|
||||||
|
1) {
|
||||||
|
const AABB &aabb_lot =
|
||||||
|
BuildingsData::get_singleton()
|
||||||
|
->building_aabbs
|
||||||
|
["lot-" +
|
||||||
|
lot_id];
|
||||||
|
pack_buildings(
|
||||||
|
aabb_lot,
|
||||||
|
rl.edges[index]
|
||||||
|
.right.buildings,
|
||||||
|
2.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (pname == "clear") {
|
} else if (pname == "clear") {
|
||||||
rl.edges[index].right.lot_type = "";
|
rl.edges[index].right.lot_type = "";
|
||||||
rl.edges[index].right.lot = 0;
|
rl.edges[index].right.lot = 0;
|
||||||
@@ -1253,74 +1426,124 @@ public:
|
|||||||
v->call_deferred("add_child", sep);
|
v->call_deferred("add_child", sep);
|
||||||
v->call_deferred("add_child", h2);
|
v->call_deferred("add_child", h2);
|
||||||
side_handler(v, right, "right");
|
side_handler(v, right, "right");
|
||||||
MenuButton *mb = memnew(MenuButton);
|
struct menu_button_config {
|
||||||
v->call_deferred("add_child", mb);
|
String caption;
|
||||||
mb->set_text("Action...");
|
std::vector<std::pair<String, int> > *menu_items;
|
||||||
MenuButton *mb_left = memnew(MenuButton);
|
String filter;
|
||||||
v->call_deferred("add_child", mb_left);
|
String msg;
|
||||||
mb_left->set_text("Select left lot...");
|
String event;
|
||||||
MenuButton *mb_right = memnew(MenuButton);
|
};
|
||||||
mb_right->set_text("Select right lot...");
|
|
||||||
v->call_deferred("add_child", mb_right);
|
|
||||||
Error err = stream_conf.load("res://config/stream.conf");
|
|
||||||
assert(err == OK);
|
|
||||||
std::vector<std::pair<String, int> > menu_items = {
|
std::vector<std::pair<String, int> > menu_items = {
|
||||||
{ "Move lots starting from current edge to next edges",
|
{ "Move lots starting from current edge to next edges",
|
||||||
100 },
|
100 },
|
||||||
};
|
};
|
||||||
std::vector<std::pair<String, int> > menu_items_leftright = {
|
std::vector<std::pair<String, int> > menu_items_leftright = {
|
||||||
{ "Clear current lot and building(s)", 200 },
|
{ "Clear current lot and building(s)", 200 },
|
||||||
|
{ "Clear current building(s)", 201 },
|
||||||
};
|
};
|
||||||
|
int item_id = 1000;
|
||||||
for (i = 0; i < (int)menu_items.size(); i++)
|
struct menu_button_config buttons[] = {
|
||||||
mb->get_popup()->add_item(menu_items[i].first,
|
{
|
||||||
menu_items[i].second);
|
.caption = "Action...",
|
||||||
for (i = 0; i < (int)menu_items_leftright.size(); i++) {
|
.menu_items = &menu_items,
|
||||||
mb_left->get_popup()->add_item(
|
.filter = "",
|
||||||
menu_items_leftright[i].first,
|
.event = event_prefix + "::menu",
|
||||||
menu_items_leftright[i].second);
|
},
|
||||||
mb_right->get_popup()->add_item(
|
{
|
||||||
menu_items_leftright[i].first,
|
.caption = "Select left lot...",
|
||||||
menu_items_leftright[i].second);
|
.menu_items = &menu_items_leftright,
|
||||||
}
|
.filter = "lot-",
|
||||||
|
.msg = "Create lot ",
|
||||||
|
.event = event_prefix + "::menu::left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.caption = "Add left house...",
|
||||||
|
.menu_items = nullptr,
|
||||||
|
.filter = "residental-",
|
||||||
|
.msg = "Add house ",
|
||||||
|
.event = event_prefix + "::menu::left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.caption = "Add left business...",
|
||||||
|
.menu_items = nullptr,
|
||||||
|
.filter = "business-",
|
||||||
|
.msg = "Add business ",
|
||||||
|
.event = event_prefix + "::menu::left",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.caption = "Select right lot...",
|
||||||
|
.menu_items = &menu_items_leftright,
|
||||||
|
.filter = "lot-",
|
||||||
|
.msg = "Create lot ",
|
||||||
|
.event = event_prefix + "::menu::right",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.caption = "Add right house...",
|
||||||
|
.menu_items = nullptr,
|
||||||
|
.filter = "residental-",
|
||||||
|
.msg = "Add house ",
|
||||||
|
.event = event_prefix + "::menu::right",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.caption = "Add right business...",
|
||||||
|
.menu_items = nullptr,
|
||||||
|
.filter = "business-",
|
||||||
|
.msg = "Add business ",
|
||||||
|
.event = event_prefix + "::menu::right",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
Error err = stream_conf.load("res://config/stream.conf");
|
||||||
|
assert(err == OK);
|
||||||
Dictionary bdata =
|
Dictionary bdata =
|
||||||
stream_conf.get_value("buildings", "building_data");
|
stream_conf.get_value("buildings", "building_data");
|
||||||
int item_id = 1000;
|
|
||||||
List<Variant> building_list;
|
|
||||||
List<Variant>::Element *el;
|
List<Variant>::Element *el;
|
||||||
bdata.get_key_list(&building_list);
|
for (i = 0; i < (int)sizeof(buttons) / (int)sizeof(buttons[0]);
|
||||||
el = building_list.front();
|
i++) {
|
||||||
while (el) {
|
int j;
|
||||||
String pname = el->get();
|
MenuButton *mb = memnew(MenuButton);
|
||||||
String msg;
|
v->call_deferred("add_child", mb);
|
||||||
if (pname.begins_with("lot-"))
|
mb->set_text(buttons[i].caption);
|
||||||
msg = "Create lot: " + pname;
|
if (buttons[i].menu_items) {
|
||||||
else if (pname.begins_with("residental-"))
|
for (j = 0;
|
||||||
msg = "Add house: " + pname;
|
j < (int)buttons[i].menu_items->size();
|
||||||
if (msg.length() > 0 && pname.begins_with("lot-")) {
|
j++)
|
||||||
std::vector<PopupMenu *> menus = {
|
mb->get_popup()->add_item(
|
||||||
mb_left->get_popup(),
|
buttons[i]
|
||||||
mb_right->get_popup()
|
.menu_items->data()[j]
|
||||||
};
|
.first,
|
||||||
for (i = 0; i < (int)menus.size(); i++) {
|
buttons[i]
|
||||||
menus[i]->add_item(msg, item_id);
|
.menu_items->data()[j]
|
||||||
int item_index =
|
.second);
|
||||||
menus[i]->get_item_index(
|
}
|
||||||
item_id);
|
if (buttons[i].filter.length() > 0) {
|
||||||
menus[i]->set_item_metadata(item_index,
|
List<Variant> building_list;
|
||||||
pname);
|
bdata.get_key_list(&building_list);
|
||||||
item_id++;
|
el = building_list.front();
|
||||||
|
while (el) {
|
||||||
|
String pname = el->get();
|
||||||
|
if (pname.begins_with(
|
||||||
|
buttons[i].filter)) {
|
||||||
|
String message =
|
||||||
|
buttons[i].msg + " " +
|
||||||
|
pname;
|
||||||
|
mb->get_popup()->add_item(
|
||||||
|
message, item_id);
|
||||||
|
int item_index =
|
||||||
|
mb->get_popup()
|
||||||
|
->get_item_index(
|
||||||
|
item_id);
|
||||||
|
mb->get_popup()
|
||||||
|
->set_item_metadata(
|
||||||
|
item_index,
|
||||||
|
pname);
|
||||||
|
item_id++;
|
||||||
|
}
|
||||||
|
el = el->next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
el = el->next();
|
menu_handlers.push_back(memnew(PopupMenuSelectHandler(
|
||||||
|
mb->get_popup(), buttons[i].event)));
|
||||||
}
|
}
|
||||||
menu_handlers.push_back(memnew(PopupMenuSelectHandler(
|
|
||||||
mb->get_popup(), event_prefix + "::menu")));
|
|
||||||
menu_handlers.push_back(memnew(PopupMenuSelectHandler(
|
|
||||||
mb_left->get_popup(), event_prefix + "::menu::left")));
|
|
||||||
menu_handlers.push_back(memnew(PopupMenuSelectHandler(
|
|
||||||
mb_right->get_popup(),
|
|
||||||
event_prefix + "::menu::right")));
|
|
||||||
EditorEvent::get_singleton()->event.add_listener(
|
EditorEvent::get_singleton()->event.add_listener(
|
||||||
this, &EdgeEditorHandler::event_handler);
|
this, &EdgeEditorHandler::event_handler);
|
||||||
}
|
}
|
||||||
|
|||||||