Compare commits

...

4 Commits

Author SHA1 Message Date
Segey Lapin
18afb81b1f object asset update 2021-12-02 20:31:17 +03:00
Segey Lapin
79247e8e81 Project update 2021-12-02 20:30:18 +03:00
Segey Lapin
1a32732216 Removed town limits 2021-12-02 20:29:34 +03:00
Segey Lapin
48889c5044 Converted to grammar-based approach 2021-12-02 20:28:04 +03:00
39 changed files with 923 additions and 1592 deletions

View File

@@ -1,6 +1,6 @@
extends Reference
static func build_house(main_xform: Transform):
static func build_house2(main_xform: Transform):
var rnd = streaming.get_place_rnd(main_xform)
print(main_xform.origin, " seed = ", rnd.state)
var l = 5 + 2 * (rnd.randi() % 5) - 1
@@ -52,3 +52,116 @@ static func build_house(main_xform: Transform):
objects.push_back({"xform": xform, "data": obj_data})
return objects
static func build_walls(pos: Vector3, rnd: RandomNumberGenerator):
var objects = []
var xt = [Transform(Basis(), pos), Transform(Basis().rotated(Vector3.UP, PI), pos - Vector3(0, 0, 2))]
for x in range(xt.size()):
var obj_data = []
if rnd.randf() > 0.5:
obj_data.push_back("wall_solid")
elif rnd.randf() > 0.5:
obj_data.push_back("window_narrow")
else:
obj_data.push_back("window_wide")
objects.push_back({"xform": xt[x], "data": obj_data})
return objects
static func build_house(main_xform: Transform):
var rnd = streaming.get_place_rnd(main_xform)
var terminals = [
"side_wall",
"side_wall_rotated",
"room",
"entry",
"room_range",
"wheels_room"
]
var grammar = {
"start": ["side_wall", "room", "wheels_room", "rooms_entry", "wheels_room", "side_wall_rotated"],
"rooms_entry": ["rooms", "entry!", "rooms"],
"rooms": ["rooms#", ["room", "range!"]],
"entry!": ["entry"],
"range!": ["room_range"],
"rooms#": ["rooms"]
}
var seen = {}
var queue = ["start"]
var complete = false
while !complete:
complete = true
var data = []
for k in range(queue.size()):
var item = queue[k]
print("item=", item)
if !item in terminals:
complete = false
for de in grammar[item]:
var e
if typeof(de) == TYPE_ARRAY:
while true:
e = de[rnd.randi() % de.size()]
if !e.ends_with("!") || !seen.has(e):
break
else:
e = de
print("e=", e)
if e.ends_with("!"):
if seen.has(e):
continue
else:
seen[e] = 1
if e.ends_with("#"):
if queue.size() < 12:
if rnd.randf() >= 0.3:
data.push_back(e)
else:
data.push_back(e)
else:
data.push_back(item)
queue = data
if complete:
if !seen.has("entry!") || !seen.has("range!"):
complete = false
seen.clear()
queue = ["start"]
print("queue: ", queue)
var objects = []
for k in range(queue.size()):
var pos = Vector3(0, 0, k * 2)
var xform = Transform(Basis(), pos)
var xt = [Transform(Basis(), pos), Transform(Basis().rotated(Vector3.UP, PI), pos - Vector3(0, 0, 2))]
match queue[k]:
"side_wall":
objects.push_back({"xform": xform, "data": ["side_wall", "bottom_side"]})
"room":
objects.push_back({"xform": xform, "data": ["roof_floor", "bottom"]})
objects.append_array(build_walls(pos, rnd))
if rnd.randf() > 0.6:
objects.push_back({"xform": xform, "data": ["wall_internal"]})
"wheels_room":
objects.push_back({"xform": xform, "data": ["roof_floor", "bottom_wheels"]})
objects.append_array(build_walls(pos, rnd))
if rnd.randf() > 0.6:
objects.push_back({"xform": xform, "data": ["wall_internal"]})
"room_range":
objects.push_back({"xform": xform, "data": ["roof_floor_range", "bottom"]})
objects.append_array(build_walls(pos, rnd))
if rnd.randf() > 0.6:
objects.push_back({"xform": xform, "data": ["wall_internal"]})
"entry":
for x in range(xt.size()):
var obj_data = []
if x == 0:
continue
if rnd.randf() > 0.5:
obj_data.push_back("wall_solid")
elif rnd.randf() > 0.5:
obj_data.push_back("window_narrow")
else:
obj_data.push_back("window_wide")
objects.push_back({"xform": xt[x], "data": obj_data})
objects.push_back({"xform": xform, "data": ["roof_floor", "entry", "bottom"]})
"side_wall_rotated":
objects.append_array(build_walls(pos, rnd))
objects.push_back({"xform": xform, "data": ["roof_floor", "side_wall_rotated", "bottom_side_rotated", "bottom"]})
return objects

View File

@@ -36,6 +36,7 @@ scenario="*res://autoload/scenario.gd"
[debug]
settings/profiler/max_functions=65535
settings/stdout/verbose_stdout=true
[display]
@@ -80,6 +81,10 @@ fps_mode={
]
}
[physics]
3d/physics_engine="Bullet"
[rendering]
quality/driver/fallback_to_gles2=true

Binary file not shown.

View File

@@ -66,100 +66,13 @@
"materials" : [
{
"doubleSided" : true,
"name" : "Green.004",
"name" : "foilage",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.06995400041341782,
0.12185700237751007,
0.047887999564409256,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.6732679605484009
}
"baseColorTexture" : {
"index" : 0
},
{
"doubleSided" : true,
"name" : "Wood",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.12234099954366684,
0.05628800019621849,
0.04760900139808655,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.6732679605484009
}
},
{
"doubleSided" : true,
"name" : "Leaves",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.12185700237751007,
0.09563499689102173,
0.07339099794626236,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.6732679605484009
}
},
{
"doubleSided" : true,
"name" : "DarkGreen",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.042527999728918076,
0.07266899943351746,
0.02957800030708313,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.6732679605484009
}
},
{
"doubleSided" : true,
"name" : "Green.005",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.06995400041341782,
0.12185700237751007,
0.047887999564409256,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.6732679605484009
}
},
{
"doubleSided" : true,
"name" : "Yellow.001",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.358379989862442,
0.2837910056114197,
0.0901150032877922,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.6732679605484009
}
},
{
"doubleSided" : true,
"name" : "Pink",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.373759001493454,
0.09044600278139114,
0.22160300612449646,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.6732679605484009
"roughnessFactor" : 0.6545454263687134
}
}
],
@@ -170,9 +83,10 @@
{
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1
"NORMAL" : 1,
"TEXCOORD_0" : 2
},
"indices" : 2,
"indices" : 3,
"material" : 0
}
]
@@ -182,19 +96,12 @@
"primitives" : [
{
"attributes" : {
"POSITION" : 3,
"NORMAL" : 4
"POSITION" : 4,
"NORMAL" : 5,
"TEXCOORD_0" : 6
},
"indices" : 5,
"material" : 1
},
{
"attributes" : {
"POSITION" : 6,
"NORMAL" : 7
},
"indices" : 8,
"material" : 2
"indices" : 7,
"material" : 0
}
]
},
@@ -203,11 +110,12 @@
"primitives" : [
{
"attributes" : {
"POSITION" : 9,
"NORMAL" : 10
"POSITION" : 8,
"NORMAL" : 9,
"TEXCOORD_0" : 10
},
"indices" : 11,
"material" : 3
"material" : 0
}
]
},
@@ -217,10 +125,11 @@
{
"attributes" : {
"POSITION" : 12,
"NORMAL" : 13
"NORMAL" : 13,
"TEXCOORD_0" : 14
},
"indices" : 14,
"material" : 4
"indices" : 15,
"material" : 0
}
]
},
@@ -229,23 +138,29 @@
"primitives" : [
{
"attributes" : {
"POSITION" : 15,
"NORMAL" : 16
"POSITION" : 16,
"NORMAL" : 17,
"TEXCOORD_0" : 18
},
"indices" : 17,
"material" : 5
},
{
"attributes" : {
"POSITION" : 18,
"NORMAL" : 19
},
"indices" : 20,
"material" : 6
"indices" : 19,
"material" : 0
}
]
}
],
"textures" : [
{
"sampler" : 0,
"source" : 0
}
],
"images" : [
{
"mimeType" : "image/png",
"name" : "foliage",
"uri" : "foliage.png"
}
],
"accessors" : [
{
"bufferView" : 0,
@@ -271,70 +186,54 @@
},
{
"bufferView" : 2,
"componentType" : 5126,
"count" : 624,
"type" : "VEC2"
},
{
"bufferView" : 3,
"componentType" : 5123,
"count" : 888,
"type" : "SCALAR"
},
{
"bufferView" : 3,
"componentType" : 5126,
"count" : 80,
"max" : [
0.018657727167010307,
1.6145683526992798,
0.04910542815923691
],
"min" : [
-0.03639454022049904,
-0.00018746100249700248,
-0.020252957940101624
],
"type" : "VEC3"
},
{
"bufferView" : 4,
"componentType" : 5126,
"count" : 80,
"type" : "VEC3"
},
{
"bufferView" : 5,
"componentType" : 5123,
"count" : 114,
"type" : "SCALAR"
},
{
"bufferView" : 6,
"componentType" : 5126,
"count" : 420,
"count" : 500,
"max" : [
0.2818242609500885,
1.4256141185760498,
1.6145683526992798,
0.3100934326648712
],
"min" : [
-0.3423629105091095,
0.26863014698028564,
-0.00018746100249700248,
-0.3140755295753479
],
"type" : "VEC3"
},
{
"bufferView" : 7,
"bufferView" : 5,
"componentType" : 5126,
"count" : 420,
"count" : 500,
"type" : "VEC3"
},
{
"bufferView" : 8,
"bufferView" : 6,
"componentType" : 5126,
"count" : 500,
"type" : "VEC2"
},
{
"bufferView" : 7,
"componentType" : 5123,
"count" : 540,
"count" : 654,
"type" : "SCALAR"
},
{
"bufferView" : 9,
"bufferView" : 8,
"componentType" : 5126,
"count" : 1134,
"count" : 1232,
"max" : [
0.45378240942955017,
0.8412840366363525,
@@ -347,11 +246,17 @@
],
"type" : "VEC3"
},
{
"bufferView" : 9,
"componentType" : 5126,
"count" : 1232,
"type" : "VEC3"
},
{
"bufferView" : 10,
"componentType" : 5126,
"count" : 1134,
"type" : "VEC3"
"count" : 1232,
"type" : "VEC2"
},
{
"bufferView" : 11,
@@ -362,7 +267,7 @@
{
"bufferView" : 12,
"componentType" : 5126,
"count" : 932,
"count" : 1000,
"max" : [
0.7841669917106628,
0.7323634624481201,
@@ -378,22 +283,28 @@
{
"bufferView" : 13,
"componentType" : 5126,
"count" : 932,
"count" : 1000,
"type" : "VEC3"
},
{
"bufferView" : 14,
"componentType" : 5126,
"count" : 1000,
"type" : "VEC2"
},
{
"bufferView" : 15,
"componentType" : 5123,
"count" : 1536,
"type" : "SCALAR"
},
{
"bufferView" : 15,
"bufferView" : 16,
"componentType" : 5126,
"count" : 1196,
"count" : 1232,
"max" : [
0.7932196855545044,
0.8964381814002991,
1.2399932146072388,
0.7817763686180115
],
"min" : [
@@ -403,44 +314,22 @@
],
"type" : "VEC3"
},
{
"bufferView" : 16,
"componentType" : 5126,
"count" : 1196,
"type" : "VEC3"
},
{
"bufferView" : 17,
"componentType" : 5123,
"count" : 1806,
"type" : "SCALAR"
"componentType" : 5126,
"count" : 1232,
"type" : "VEC3"
},
{
"bufferView" : 18,
"componentType" : 5126,
"count" : 36,
"max" : [
0.05127303674817085,
1.2399932146072388,
0.05427424982190132
],
"min" : [
-0.05127303674817085,
0.5572494268417358,
-0.05427418276667595
],
"type" : "VEC3"
"count" : 1232,
"type" : "VEC2"
},
{
"bufferView" : 19,
"componentType" : 5126,
"count" : 36,
"type" : "VEC3"
},
{
"bufferView" : 20,
"componentType" : 5123,
"count" : 54,
"count" : 1860,
"type" : "SCALAR"
}
],
@@ -457,103 +346,104 @@
},
{
"buffer" : 0,
"byteLength" : 1776,
"byteLength" : 4992,
"byteOffset" : 14976
},
{
"buffer" : 0,
"byteLength" : 960,
"byteOffset" : 16752
"byteLength" : 1776,
"byteOffset" : 19968
},
{
"buffer" : 0,
"byteLength" : 960,
"byteOffset" : 17712
"byteLength" : 6000,
"byteOffset" : 21744
},
{
"buffer" : 0,
"byteLength" : 228,
"byteOffset" : 18672
"byteLength" : 6000,
"byteOffset" : 27744
},
{
"buffer" : 0,
"byteLength" : 5040,
"byteOffset" : 18900
"byteLength" : 4000,
"byteOffset" : 33744
},
{
"buffer" : 0,
"byteLength" : 5040,
"byteOffset" : 23940
"byteLength" : 1308,
"byteOffset" : 37744
},
{
"buffer" : 0,
"byteLength" : 1080,
"byteOffset" : 28980
"byteLength" : 14784,
"byteOffset" : 39052
},
{
"buffer" : 0,
"byteLength" : 13608,
"byteOffset" : 30060
"byteLength" : 14784,
"byteOffset" : 53836
},
{
"buffer" : 0,
"byteLength" : 13608,
"byteOffset" : 43668
"byteLength" : 9856,
"byteOffset" : 68620
},
{
"buffer" : 0,
"byteLength" : 3600,
"byteOffset" : 57276
"byteOffset" : 78476
},
{
"buffer" : 0,
"byteLength" : 11184,
"byteOffset" : 60876
"byteLength" : 12000,
"byteOffset" : 82076
},
{
"buffer" : 0,
"byteLength" : 11184,
"byteOffset" : 72060
"byteLength" : 12000,
"byteOffset" : 94076
},
{
"buffer" : 0,
"byteLength" : 8000,
"byteOffset" : 106076
},
{
"buffer" : 0,
"byteLength" : 3072,
"byteOffset" : 83244
"byteOffset" : 114076
},
{
"buffer" : 0,
"byteLength" : 14352,
"byteOffset" : 86316
"byteLength" : 14784,
"byteOffset" : 117148
},
{
"buffer" : 0,
"byteLength" : 14352,
"byteOffset" : 100668
"byteLength" : 14784,
"byteOffset" : 131932
},
{
"buffer" : 0,
"byteLength" : 3612,
"byteOffset" : 115020
"byteLength" : 9856,
"byteOffset" : 146716
},
{
"buffer" : 0,
"byteLength" : 432,
"byteOffset" : 118632
},
"byteLength" : 3720,
"byteOffset" : 156572
}
],
"samplers" : [
{
"buffer" : 0,
"byteLength" : 432,
"byteOffset" : 119064
},
{
"buffer" : 0,
"byteLength" : 108,
"byteOffset" : 119496
"magFilter" : 9729,
"minFilter" : 9987
}
],
"buffers" : [
{
"byteLength" : 119604,
"byteLength" : 160292,
"uri" : "terrain-bushes.bin"
}
]

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -47,8 +47,6 @@ func _process(delta):
else:
streaming.setup_town(site)
streaming.setup_traffic(site)
if (streaming.towns > 2):
break
print("towns done: ", streaming.towns)
var poly = RoadsData.get_site_polygon_3d(0)
var center = Vector3()