Compare commits
2 Commits
ba2444b592
...
aae5d0a8c3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aae5d0a8c3 | ||
|
|
daece19b55 |
@@ -11,104 +11,145 @@ onready var obj_names = {
|
|||||||
|
|
||||||
var done = false
|
var done = false
|
||||||
|
|
||||||
class radial_grid:
|
var side_wall: PackedScene = preload("res://objects/wall-side.scn")
|
||||||
var radial_points = []
|
var bottom_side: PackedScene = preload("res://objects/bottom-side.scn")
|
||||||
var max_r = 0.0
|
var bottom: PackedScene = preload("res://objects/bottom.scn")
|
||||||
var grid = []
|
var bottom_wheels: PackedScene = preload("res://objects/bottom-wheels.scn")
|
||||||
var width: int = 0
|
var entry: PackedScene = preload("res://objects/entry.scn")
|
||||||
var height: int = 0
|
var roof_floor: PackedScene = preload("res://objects/roof-floor.scn")
|
||||||
var nodes = []
|
var roof_floor_range: PackedScene = preload("res://objects/roof-floor-range.scn")
|
||||||
func build(poly, center):
|
var wall_internal: PackedScene = preload("res://objects/wall-internal.scn")
|
||||||
var height = center.y
|
var window_narrow: PackedScene = preload("res://objects/window-narrow.scn")
|
||||||
max_r = 0.0
|
var window_wide: PackedScene = preload("res://objects/window-wide.scn")
|
||||||
for p in range(poly.size()):
|
var wall_solid: PackedScene = preload("res://objects/wall-solid.scn")
|
||||||
var ep1 = poly[p]
|
|
||||||
ep1.y = height
|
|
||||||
var ep2 = poly[(p + 1) % poly.size()]
|
|
||||||
ep2.y = height
|
|
||||||
var d = (ep2 - ep1).normalized()
|
|
||||||
radial_points.push_back(ep1)
|
|
||||||
var dst = ep1.distance_to(ep2)
|
|
||||||
while dst > 32:
|
|
||||||
ep1 += d * 32
|
|
||||||
radial_points.push_back(ep1)
|
|
||||||
dst -= 32
|
|
||||||
for p in range(radial_points.size()):
|
|
||||||
var ep = radial_points[p]
|
|
||||||
var dst = ep.distance_to(center)
|
|
||||||
if max_r < dst:
|
|
||||||
max_r = dst
|
|
||||||
width = radial_points.size()
|
|
||||||
height = int(max_r / 32)
|
|
||||||
grid.resize(width * height)
|
|
||||||
for p in range(width):
|
|
||||||
var start = radial_points[p]
|
|
||||||
var end = center
|
|
||||||
var step = (end - start).normalized() * (end - start).length() / float(height + 1)
|
|
||||||
var val = start
|
|
||||||
for q in range(height):
|
|
||||||
grid[p * height + q] = {"position": val, "node": null}
|
|
||||||
func get_grid_node(x, y):
|
|
||||||
return grid[x * height + y].node
|
|
||||||
func set_grid_node(x, y, node):
|
|
||||||
if !node in nodes:
|
|
||||||
nodes.push_back(node)
|
|
||||||
grid[x * height + y].node = node
|
|
||||||
func place_grid(aabb: AABB, node) -> void:
|
|
||||||
for u in range(width):
|
|
||||||
for v in range(height):
|
|
||||||
if aabb.has_point(grid[u * height + v].position):
|
|
||||||
set_grid_node(u, v, node)
|
|
||||||
func get_pos(x, y):
|
|
||||||
return grid[x * height + y].position
|
|
||||||
|
|
||||||
onready var grid = radial_grid.new()
|
var courtyard_tile: PackedScene = preload("res://objects/courtyard-tile.scn")
|
||||||
|
var foundation_tile: PackedScene = preload("res://objects/foundation.scn")
|
||||||
|
var room_tile: PackedScene = preload("res://objects/block-room-corridoor.scn")
|
||||||
|
var tower_walls_tile: PackedScene = preload("res://objects/tower-walls.scn")
|
||||||
|
var tower_floor_tile: PackedScene = preload("res://objects/tower_floor.scn")
|
||||||
|
var stairs_tile: PackedScene = preload("res://objects/stairs.scn")
|
||||||
|
var gate_bottom_tile: PackedScene = preload("res://objects/gate_bottom.scn")
|
||||||
|
var gate_top_tile: PackedScene = preload("res://objects/gate-top.scn")
|
||||||
|
var entry_tile: PackedScene = preload("res://objects/block-room-entry.scn")
|
||||||
|
var roof_tile: PackedScene = preload("res://objects/roof.scn")
|
||||||
|
var tower_roof_tile: PackedScene = preload("res://objects/tower-roof.scn")
|
||||||
|
|
||||||
func debug_poly(poly):
|
onready var palace_map_data = {
|
||||||
for k in range(poly.size()):
|
"courtyard_tile": courtyard_tile,
|
||||||
var p1 = poly[k]
|
"foundation_tile": foundation_tile,
|
||||||
var p2 = poly[(k + 1) % poly.size()]
|
"room_tile": room_tile,
|
||||||
var l = p1.distance_to(p2)
|
"tower_walls_tile": tower_walls_tile,
|
||||||
var d = (p2 - p1).normalized()
|
"tower_floor_tile": tower_floor_tile,
|
||||||
var pt = p1
|
"stairs_tile": stairs_tile,
|
||||||
while l > 0.0:
|
"gate_bottom_tile": gate_bottom_tile,
|
||||||
for e in range(0, 30, 2):
|
"gate_top_tile": gate_top_tile,
|
||||||
var mi = MeshInstance.new()
|
"entry_tile": entry_tile,
|
||||||
mi.mesh = CubeMesh.new()
|
"roof_tile": roof_tile,
|
||||||
get_tree().root.add_child(mi)
|
"tower_roof_tile": tower_roof_tile
|
||||||
mi.global_transform.origin = pt + Vector3(0, e, 0)
|
}
|
||||||
pt += d * 5.0
|
|
||||||
l -= 5.0
|
|
||||||
|
|
||||||
func calc_border(poly, offt):
|
|
||||||
var height = RoadsData.get_site_avg_height(0)
|
|
||||||
var border = []
|
|
||||||
border.resize(poly.size())
|
|
||||||
for k in range(poly.size()):
|
|
||||||
var i = k - 1
|
|
||||||
if i < 0:
|
|
||||||
i += poly.size()
|
|
||||||
var p1 = poly[i]
|
|
||||||
var p2 = poly[k]
|
|
||||||
var p3 = poly[(k + 1) % poly.size()]
|
|
||||||
var p1x = Vector2(p1.x, p1.z)
|
|
||||||
var p2x = Vector2(p2.x, p2.z)
|
|
||||||
var p3x = Vector2(p2.x, p2.z)
|
|
||||||
var p4x = Vector2(p3.x, p3.z)
|
|
||||||
var n1 = (p2x - p1x).tangent().normalized()
|
|
||||||
var n2 = (p4x - p3x).tangent().normalized()
|
|
||||||
p1x -= n1 * offt
|
|
||||||
p2x -= n1 * offt
|
|
||||||
p3x -= n2 * offt
|
|
||||||
p4x -= n2 * offt
|
|
||||||
|
|
||||||
var xp = Geometry.segment_intersects_segment_2d(p1x, p2x, p3x, p4x)
|
#class radial_grid:
|
||||||
if !xp:
|
# var radial_points = []
|
||||||
xp = p2x.linear_interpolate(p3x, 0.5) - (n1 + n2).normalized() * offt
|
# var max_r = 0.0
|
||||||
var tp = Vector3(xp.x, height, xp.y)
|
# var grid = []
|
||||||
border[k] = tp
|
# var width: int = 0
|
||||||
return border
|
# var height: int = 0
|
||||||
|
# var nodes = []
|
||||||
|
# func build(poly, center):
|
||||||
|
# var height = center.y
|
||||||
|
# max_r = 0.0
|
||||||
|
# for p in range(poly.size()):
|
||||||
|
# var ep1 = poly[p]
|
||||||
|
# ep1.y = height
|
||||||
|
# var ep2 = poly[(p + 1) % poly.size()]
|
||||||
|
# ep2.y = height
|
||||||
|
# var d = (ep2 - ep1).normalized()
|
||||||
|
# radial_points.push_back(ep1)
|
||||||
|
# var dst = ep1.distance_to(ep2)
|
||||||
|
# while dst > 32:
|
||||||
|
# ep1 += d * 32
|
||||||
|
# radial_points.push_back(ep1)
|
||||||
|
# dst -= 32
|
||||||
|
# for p in range(radial_points.size()):
|
||||||
|
# var ep = radial_points[p]
|
||||||
|
# var dst = ep.distance_to(center)
|
||||||
|
# if max_r < dst:
|
||||||
|
# max_r = dst
|
||||||
|
# width = radial_points.size()
|
||||||
|
# height = int(max_r / 32)
|
||||||
|
# grid.resize(width * height)
|
||||||
|
# for p in range(width):
|
||||||
|
# var start = radial_points[p]
|
||||||
|
# var end = center
|
||||||
|
# var step = (end - start).normalized() * (end - start).length() / float(height + 1)
|
||||||
|
# var val = start
|
||||||
|
# for q in range(height):
|
||||||
|
# grid[p * height + q] = {"position": val, "node": null}
|
||||||
|
# func get_grid_node(x, y):
|
||||||
|
# return grid[x * height + y].node
|
||||||
|
# func set_grid_node(x, y, node):
|
||||||
|
# if !node in nodes:
|
||||||
|
# nodes.push_back(node)
|
||||||
|
# grid[x * height + y].node = node
|
||||||
|
# func place_grid(aabb: AABB, node) -> void:
|
||||||
|
# for u in range(width):
|
||||||
|
# for v in range(height):
|
||||||
|
# if aabb.has_point(grid[u * height + v].position):
|
||||||
|
# set_grid_node(u, v, node)
|
||||||
|
# func get_pos(x, y):
|
||||||
|
# return grid[x * height + y].position
|
||||||
|
|
||||||
|
# onready var grid = radial_grid.new()
|
||||||
|
|
||||||
|
#func debug_poly(poly):
|
||||||
|
# for k in range(poly.size()):
|
||||||
|
# var p1 = poly[k]
|
||||||
|
# var p2 = poly[(k + 1) % poly.size()]
|
||||||
|
# var l = p1.distance_to(p2)
|
||||||
|
# var d = (p2 - p1).normalized()
|
||||||
|
# var pt = p1
|
||||||
|
# while l > 0.0:
|
||||||
|
# for e in range(0, 30, 2):
|
||||||
|
# var mi = MeshInstance.new()
|
||||||
|
# mi.mesh = CubeMesh.new()
|
||||||
|
# get_tree().root.add_child(mi)
|
||||||
|
# mi.global_transform.origin = pt + Vector3(0, e, 0)
|
||||||
|
# pt += d * 5.0
|
||||||
|
# l -= 5.0
|
||||||
|
#
|
||||||
|
#func calc_border(poly, offt):
|
||||||
|
# var height = RoadsData.get_site_avg_height(0)
|
||||||
|
# var border = []
|
||||||
|
# border.resize(poly.size())
|
||||||
|
# for k in range(poly.size()):
|
||||||
|
# var i = k - 1
|
||||||
|
# if i < 0:
|
||||||
|
# i += poly.size()
|
||||||
|
# var p1 = poly[i]
|
||||||
|
# var p2 = poly[k]
|
||||||
|
# var p3 = poly[(k + 1) % poly.size()]
|
||||||
|
# var p1x = Vector2(p1.x, p1.z)
|
||||||
|
# var p2x = Vector2(p2.x, p2.z)
|
||||||
|
# var p3x = Vector2(p2.x, p2.z)
|
||||||
|
# var p4x = Vector2(p3.x, p3.z)
|
||||||
|
# var n1 = (p2x - p1x).tangent().normalized()
|
||||||
|
# var n2 = (p4x - p3x).tangent().normalized()
|
||||||
|
# p1x -= n1 * offt
|
||||||
|
# p2x -= n1 * offt
|
||||||
|
# p3x -= n2 * offt
|
||||||
|
# p4x -= n2 * offt
|
||||||
|
#
|
||||||
|
# var xp = Geometry.segment_intersects_segment_2d(p1x, p2x, p3x, p4x)
|
||||||
|
# if !xp:
|
||||||
|
# xp = p2x.linear_interpolate(p3x, 0.5) - (n1 + n2).normalized() * offt
|
||||||
|
# var tp = Vector3(xp.x, height, xp.y)
|
||||||
|
# border[k] = tp
|
||||||
|
# return border
|
||||||
|
#
|
||||||
|
var traffic_rnd: RandomNumberGenerator
|
||||||
|
var traffic_astar: AStar
|
||||||
var towns = 0
|
var towns = 0
|
||||||
func setup_town(site):
|
func setup_town(site):
|
||||||
if !RoadsData.site_is_town(site):
|
if !RoadsData.site_is_town(site):
|
||||||
@@ -116,7 +157,7 @@ func setup_town(site):
|
|||||||
return
|
return
|
||||||
var poly = RoadsData.get_site_polygon_3d(site)
|
var poly = RoadsData.get_site_polygon_3d(site)
|
||||||
var height = RoadsData.get_site_avg_height(site)
|
var height = RoadsData.get_site_avg_height(site)
|
||||||
var border2 = calc_border(poly, 60)
|
var border2 = RoadsData.get_site_border(site, 60)
|
||||||
var aabbs = []
|
var aabbs = []
|
||||||
var poly2 = []
|
var poly2 = []
|
||||||
poly2.resize(border2.size())
|
poly2.resize(border2.size())
|
||||||
@@ -127,8 +168,8 @@ func setup_town(site):
|
|||||||
center += p
|
center += p
|
||||||
center /= poly.size()
|
center /= poly.size()
|
||||||
center.y = height
|
center.y = height
|
||||||
grid.build(border2, center)
|
# grid.build(border2, center)
|
||||||
var radial_points = grid.radial_points
|
var radial_points = RoadsData.get_site_radial_points(site, 32.0, 64.0)
|
||||||
var max_r = 0.0
|
var max_r = 0.0
|
||||||
for p in range(radial_points.size()):
|
for p in range(radial_points.size()):
|
||||||
var ep = radial_points[p]
|
var ep = radial_points[p]
|
||||||
@@ -156,7 +197,7 @@ func setup_town(site):
|
|||||||
var xform = Transform(Basis(), pstart).looking_at(pstart + d, Vector3.UP)
|
var xform = Transform(Basis(), pstart).looking_at(pstart + d, Vector3.UP)
|
||||||
stream_obj("trailer_house", xform)
|
stream_obj("trailer_house", xform)
|
||||||
var aabb = AABB(pstart, Vector3())
|
var aabb = AABB(pstart, Vector3())
|
||||||
aabb = aabb.grow(20)
|
aabb = aabb.grow(32)
|
||||||
aabbs.push_back(aabb)
|
aabbs.push_back(aabb)
|
||||||
print("placed to: ", pstart)
|
print("placed to: ", pstart)
|
||||||
pstart = pstart + d * step
|
pstart = pstart + d * step
|
||||||
@@ -167,9 +208,9 @@ func setup_first_town():
|
|||||||
assert(!done)
|
assert(!done)
|
||||||
var poly = RoadsData.get_site_polygon_3d(0)
|
var poly = RoadsData.get_site_polygon_3d(0)
|
||||||
var height = RoadsData.get_site_avg_height(0)
|
var height = RoadsData.get_site_avg_height(0)
|
||||||
var border = calc_border(poly, 32)
|
var border = RoadsData.get_site_border(0, 32)
|
||||||
var border1a = calc_border(poly, 42)
|
var border1a = RoadsData.get_site_border(0, 42)
|
||||||
var border2 = calc_border(poly, 60)
|
var border2 = RoadsData.get_site_border(0, 60)
|
||||||
|
|
||||||
var poly2 = []
|
var poly2 = []
|
||||||
poly2.resize(border2.size())
|
poly2.resize(border2.size())
|
||||||
@@ -180,8 +221,8 @@ func setup_first_town():
|
|||||||
center += p
|
center += p
|
||||||
center /= poly.size()
|
center /= poly.size()
|
||||||
center.y = height
|
center.y = height
|
||||||
grid.build(border2, center)
|
# grid.build(border2, center)
|
||||||
var radial_points = grid.radial_points
|
var radial_points = RoadsData.get_site_radial_points(0, 32.0, 64.0)
|
||||||
var max_r = 0.0
|
var max_r = 0.0
|
||||||
for p in range(radial_points.size()):
|
for p in range(radial_points.size()):
|
||||||
var ep = radial_points[p]
|
var ep = radial_points[p]
|
||||||
@@ -227,7 +268,7 @@ func setup_first_town():
|
|||||||
var xform = Transform(Basis(), pstart).looking_at(pstart + d, Vector3.UP)
|
var xform = Transform(Basis(), pstart).looking_at(pstart + d, Vector3.UP)
|
||||||
stream_obj("trailer_house", xform)
|
stream_obj("trailer_house", xform)
|
||||||
var aabb = AABB(pstart, Vector3())
|
var aabb = AABB(pstart, Vector3())
|
||||||
aabb = aabb.grow(20)
|
aabb = aabb.grow(32)
|
||||||
aabbs.push_back(aabb)
|
aabbs.push_back(aabb)
|
||||||
print("placed to: ", pstart)
|
print("placed to: ", pstart)
|
||||||
pstart = pstart + d * step
|
pstart = pstart + d * step
|
||||||
@@ -235,9 +276,64 @@ func setup_first_town():
|
|||||||
towns += 1
|
towns += 1
|
||||||
done = true
|
done = true
|
||||||
|
|
||||||
|
func setup_traffic(site):
|
||||||
|
var poly = RoadsData.get_site_polygon_3d(site)
|
||||||
|
var lp = get_tree().root
|
||||||
|
for p in range(poly.size()):
|
||||||
|
var p1 = poly[p]
|
||||||
|
var p2 = poly[(p + 1) % poly.size()]
|
||||||
|
var n = (p2 - p1).cross(Vector3.UP).normalized()
|
||||||
|
var t = (p2 - p1).normalized()
|
||||||
|
var l = p1.distance_to(p2)
|
||||||
|
var xpos = p1 + t * 8.0
|
||||||
|
var xe = 128.0
|
||||||
|
if l < xe + 16.0:
|
||||||
|
xpos = p1.linear_interpolate(p2, 0.5)
|
||||||
|
var x = xpos + n * 1.5 + Vector3.UP * 0.5
|
||||||
|
var xform = Transform(Basis(), x).looking_at(x + t * 3.0, Vector3.UP)
|
||||||
|
var c = Spatial.new()
|
||||||
|
lp.add_child(c)
|
||||||
|
c.transform = xform
|
||||||
|
c.add_to_group("spawn")
|
||||||
|
c.add_to_group("keep")
|
||||||
|
c.add_to_group("traffic_spawn")
|
||||||
|
else:
|
||||||
|
while l > xe + 16.0:
|
||||||
|
var x = xpos + n * 4.0 + Vector3.UP * 0.5
|
||||||
|
var xform = Transform(Basis(), x).looking_at(x + t * 3.0, Vector3.UP)
|
||||||
|
var c = Spatial.new()
|
||||||
|
lp.add_child(c)
|
||||||
|
c.transform = xform
|
||||||
|
c.add_to_group("spawn")
|
||||||
|
c.add_to_group("keep")
|
||||||
|
c.add_to_group("traffic_spawn")
|
||||||
|
xpos += t * xe
|
||||||
|
l -= xe
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
traffic_rnd = RandomNumberGenerator.new()
|
||||||
|
traffic_rnd.randomize()
|
||||||
|
traffic_astar = AStar.new()
|
||||||
for k in obj_names.keys():
|
for k in obj_names.keys():
|
||||||
Spawner.add_scene(k, obj_names[k])
|
Spawner.add_scene(k, obj_names[k])
|
||||||
|
for k in palace_map_data.keys():
|
||||||
|
Spawner.add_scene(k, palace_map_data[k])
|
||||||
|
var parts = {
|
||||||
|
"side_wall": side_wall,
|
||||||
|
"bottom_side": bottom_side,
|
||||||
|
"bottom": bottom,
|
||||||
|
"bottom_wheels": bottom_wheels,
|
||||||
|
"entry": entry,
|
||||||
|
"roof_floor": roof_floor,
|
||||||
|
"roof_floor_range": roof_floor_range,
|
||||||
|
"wall_internal": wall_internal,
|
||||||
|
"window_narrow": window_narrow,
|
||||||
|
"window_wide": window_wide,
|
||||||
|
"wall_solid": wall_solid
|
||||||
|
}
|
||||||
|
for k in parts.keys():
|
||||||
|
Spawner.add_scene(k, parts[k])
|
||||||
|
Traffic.add_traffic_vehicle(car)
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
var delay = 3.0
|
var delay = 3.0
|
||||||
@@ -249,7 +345,7 @@ func _process(delta):
|
|||||||
if delay < 0:
|
if delay < 0:
|
||||||
state = 1
|
state = 1
|
||||||
1:
|
1:
|
||||||
Spawner.update_view(self, 300)
|
Spawner.update_view(self, 200)
|
||||||
var sc = get_tree().root
|
var sc = get_tree().root
|
||||||
var viewport: = get_viewport()
|
var viewport: = get_viewport()
|
||||||
if !viewport:
|
if !viewport:
|
||||||
@@ -258,15 +354,143 @@ func _process(delta):
|
|||||||
if !cam:
|
if !cam:
|
||||||
return
|
return
|
||||||
var cam_xform: = cam.global_transform
|
var cam_xform: = cam.global_transform
|
||||||
|
# building parts
|
||||||
|
call_deferred("real_spawn_child")
|
||||||
|
|
||||||
func stream_obj(obj: String, xform: Transform):
|
func stream_obj(obj: String, xform: Transform):
|
||||||
Spawner.place_scene(obj, xform)
|
Spawner.place_scene(obj, xform)
|
||||||
|
func switch_to_distant_vehicle(n):
|
||||||
|
var sp = PhysicsServer.body_get_space(n.get_rid())
|
||||||
|
var l = n.get_linear_velocity()
|
||||||
|
n.set_meta("velocity", l)
|
||||||
|
n.set_meta("space", sp)
|
||||||
|
PhysicsServer.body_set_space(n.get_rid(), RID())
|
||||||
|
func switch_to_close_vehicle(n):
|
||||||
|
var sp = n.get_meta("space")
|
||||||
|
PhysicsServer.body_set_space(n.get_rid(), sp)
|
||||||
|
n.remove_meta("space")
|
||||||
|
if n.has_meta("velocity"):
|
||||||
|
n.set_linear_velocity(n.get_meta("velocity"))
|
||||||
|
n.remove_meta("velocity")
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
var cam = get_viewport().get_camera()
|
var cam = get_viewport().get_camera()
|
||||||
if !cam:
|
if !cam:
|
||||||
return
|
return
|
||||||
match state:
|
match state:
|
||||||
1:
|
1:
|
||||||
|
# convert to distant traffic here
|
||||||
|
for n in get_tree().get_nodes_in_group("traffic_vehicle"):
|
||||||
|
var p1 = cam.global_transform.origin
|
||||||
|
var p2 = n.global_transform.origin
|
||||||
|
var check_coords = cam.global_transform.xform_inv(p2)
|
||||||
|
var steer = 0.0
|
||||||
|
var x_target = Vector3()
|
||||||
|
var next_target = Vector3()
|
||||||
|
var orientation = n.global_transform
|
||||||
|
orientation.origin = Vector3()
|
||||||
|
var direction = orientation.xform(Vector3(0, 0, -1))
|
||||||
|
var good_path = false
|
||||||
|
var engine_force = n.engine_force
|
||||||
|
if !n.has_meta("curve"):
|
||||||
|
create_path(n, p2, direction * 10.0)
|
||||||
|
if n.has_meta("curve"):
|
||||||
|
var curve = n.get_meta("curve")
|
||||||
|
if curve.get_point_count() > 0:
|
||||||
|
var plength = n.get_meta("curve_length")
|
||||||
|
var offt = curve.get_closest_offset(p2)
|
||||||
|
var offt_ext = 8.0
|
||||||
|
if n.has_meta("velocity"):
|
||||||
|
offt_ext = n.get_meta("velocity").length()
|
||||||
|
offt = clamp(offt + offt_ext, 0, plength)
|
||||||
|
var p0 = curve.interpolate_baked(offt, false)
|
||||||
|
next_target = p0
|
||||||
|
if false: # p0.distance_squared_to(p2) > 16.0:
|
||||||
|
n.remove_meta("curve")
|
||||||
|
steer = 0.0
|
||||||
|
x_target = Vector3()
|
||||||
|
next_target = p2 + direction * 4.0
|
||||||
|
else:
|
||||||
|
var xt0 = n.global_transform.xform_inv(p0)
|
||||||
|
x_target = xt0
|
||||||
|
if xt0.z < 0.0:
|
||||||
|
steer = xt0.x
|
||||||
|
if steer == 0.0:
|
||||||
|
steer = -1
|
||||||
|
else:
|
||||||
|
steer = x_target.x
|
||||||
|
steer = sign(steer)
|
||||||
|
# if abs(steer) < 0.005:
|
||||||
|
# steer = 0.0
|
||||||
|
n.set_meta("x_target", x_target)
|
||||||
|
print("position: ", p2, " direction: ", direction, " next_target: ", next_target, " x_target: ", x_target, " steer: ", steer, " ! ", (next_target - p2).normalized())
|
||||||
|
else:
|
||||||
|
assert(false)
|
||||||
|
# if check_coords.z > 160 || check_coords.z < -120 || abs(check_coords.x) > 100:
|
||||||
|
# n.queue_free()
|
||||||
|
if false: # check_coords.z > 40.0 || check_coords.z < -25.0 || abs(check_coords.x) > 20.0:
|
||||||
|
if !n.has_meta("space"):
|
||||||
|
switch_to_distant_vehicle(n)
|
||||||
|
var xvel = (next_target - p2).normalized() * 6.0
|
||||||
|
n.set_meta("velocity", xvel)
|
||||||
|
var pos = n.global_transform.origin
|
||||||
|
var vel = (next_target - p2).normalized() * 6.0
|
||||||
|
if n.has_meta("velocity"):
|
||||||
|
vel = n.get_meta("velocity")
|
||||||
|
var speed = vel.length()
|
||||||
|
|
||||||
|
var stf = (next_target - pos).normalized() * speed
|
||||||
|
# stf.y = vel.y
|
||||||
|
vel = vel.linear_interpolate(stf, delta)
|
||||||
|
var target_pos = pos + vel
|
||||||
|
# vel.y = vel.y * delta
|
||||||
|
var newpos = pos.linear_interpolate(target_pos, delta)
|
||||||
|
n.set_meta("velocity", vel)
|
||||||
|
# why?
|
||||||
|
var xform = Transform(Basis(), newpos).looking_at(newpos - vel * 4.0, Vector3.UP)
|
||||||
|
n.global_transform = xform
|
||||||
|
else:
|
||||||
|
if n.has_meta("space"):
|
||||||
|
switch_to_close_vehicle(n)
|
||||||
|
var v = n.get_linear_velocity()
|
||||||
|
n.set_meta("velocity", v)
|
||||||
|
var l = v.length()
|
||||||
|
# if abs(steer) > 3.0 || !good_path:
|
||||||
|
# # vehicle totally lost
|
||||||
|
# n.brake = 60000
|
||||||
|
# n.engine_force = 0
|
||||||
|
# elif abs(steer) > 2.0:
|
||||||
|
# # vehicle lost
|
||||||
|
# n.engine_force = 0
|
||||||
|
if next_target.length_squared() == 0:
|
||||||
|
engine_force = 0.0
|
||||||
|
steer = 0.0
|
||||||
|
else:
|
||||||
|
if abs(steer) > 3.0:
|
||||||
|
engine_force *= 0.9
|
||||||
|
engine_force = clamp(engine_force, 2500.0, max(2500, engine_force))
|
||||||
|
else:
|
||||||
|
if abs(steer) > 4.0 && l > 5.0:
|
||||||
|
engine_force = engine_force * 0.9996
|
||||||
|
if l > 7.0:
|
||||||
|
engine_force = engine_force * 0.9996
|
||||||
|
elif l < 1.1:
|
||||||
|
engine_force = clamp(engine_force * 1.004, 6000, 8000)
|
||||||
|
elif l < 2.5:
|
||||||
|
engine_force = clamp(engine_force * 1.002, 5000, 7000)
|
||||||
|
elif l < 5.0:
|
||||||
|
engine_force = clamp(engine_force * 1.001, 4000, 6000)
|
||||||
|
elif l < 6.0:
|
||||||
|
engine_force = clamp(engine_force * 1.001, 3000, 5000)
|
||||||
|
# engine_force = 0.0
|
||||||
|
engine_force = clamp(engine_force, 0, 8500)
|
||||||
|
print("engine_force: ", engine_force)
|
||||||
|
n.engine_force = engine_force
|
||||||
|
n.brake = 0
|
||||||
|
# n.steering = clamp(steer, -1, 1)
|
||||||
|
var base_steering = n.steering
|
||||||
|
var main_steering = base_steering * 0.95 + steer * 0.05
|
||||||
|
n.steering = clamp(main_steering, -1, 1)
|
||||||
|
n.set_meta("steering", n.steering)
|
||||||
var space_state = get_viewport().get_world().direct_space_state
|
var space_state = get_viewport().get_world().direct_space_state
|
||||||
# probaly should not be here
|
# probaly should not be here
|
||||||
for n in get_tree().get_nodes_in_group("spawn"):
|
for n in get_tree().get_nodes_in_group("spawn"):
|
||||||
@@ -289,8 +513,114 @@ func _physics_process(delta):
|
|||||||
elif n.is_in_group("female"):
|
elif n.is_in_group("female"):
|
||||||
characters.replace_character(n, "female", ["cmdq", "marker", "hurtboxes", "student"])
|
characters.replace_character(n, "female", ["cmdq", "marker", "hurtboxes", "student"])
|
||||||
elif n.is_in_group("car"):
|
elif n.is_in_group("car"):
|
||||||
var c = car.instance()
|
var p1 = cam.global_transform.origin
|
||||||
var p = get_tree().root
|
var p2 = n.global_transform.origin
|
||||||
p.add_child(c)
|
if p1.distance_squared_to(p2) < 5000.0:
|
||||||
c.global_transform = n.global_transform
|
var c = car.instance()
|
||||||
n.queue_free()
|
c.add_to_group("saved_vehicle")
|
||||||
|
var p = get_tree().root
|
||||||
|
p.add_child(c)
|
||||||
|
c.global_transform = n.global_transform
|
||||||
|
n.queue_free()
|
||||||
|
# elif n.is_in_group("traffic_spawn"):
|
||||||
|
# var p1 = cam.global_transform.origin
|
||||||
|
# var p2 = n.global_transform.origin
|
||||||
|
# if !n.has_meta("cooldown") && p1.distance_squared_to(p2) < 10000.0:
|
||||||
|
# var c = car.instance()
|
||||||
|
# c.add_to_group("traffic_vehicle")
|
||||||
|
# var p = get_tree().root
|
||||||
|
# p.add_child(c)
|
||||||
|
# c.global_transform = n.global_transform
|
||||||
|
# c.parked = false
|
||||||
|
# c.mode = c.MODE_RIGID
|
||||||
|
# c.engine_force = 2500
|
||||||
|
# c.steering = 0
|
||||||
|
# var xf = c.global_transform
|
||||||
|
# xf.origin = Vector3()
|
||||||
|
# var vel = xf.xform(Vector3(0, 0, -10))
|
||||||
|
# c.set_linear_velocity(vel)
|
||||||
|
# var sp = PhysicsServer.body_get_space(c.get_rid())
|
||||||
|
# c.set_meta("space", sp)
|
||||||
|
# PhysicsServer.body_set_space(c.get_rid(), RID())
|
||||||
|
# n.set_meta("cooldown", 2.0 + randi() % 8)
|
||||||
|
# # create_path(c, p2, vel)
|
||||||
|
# elif n.has_meta("cooldown"):
|
||||||
|
# var cd = n.get_meta("cooldown")
|
||||||
|
# cd -= delta
|
||||||
|
# if cd < 0:
|
||||||
|
# n.remove_meta("cooldown")
|
||||||
|
func get_curve_closest(curve, p2):
|
||||||
|
var test_offt = curve.get_closest_offset(p2)
|
||||||
|
var testp = curve.interpolate_baked(test_offt, false)
|
||||||
|
return testp
|
||||||
|
func test_curve(curve, p2):
|
||||||
|
var testp = get_curve_closest(curve, p2)
|
||||||
|
return testp.distance_squared_to(p2) < 16.0
|
||||||
|
|
||||||
|
func create_path(c, p2, vel):
|
||||||
|
c.set_meta("velocity", vel)
|
||||||
|
print("create_path: velocity: ", vel)
|
||||||
|
var rangle = traffic_rnd.randf() * PI * 2.0
|
||||||
|
var randa = 500.0 + traffic_rnd.randf() * 500.0
|
||||||
|
var xt = cos(rangle) * randa
|
||||||
|
var yt = cos(rangle) * randa
|
||||||
|
var rv = Vector3(xt, 0, yt)
|
||||||
|
var target = RoadsData.get_closest_point(p2 + rv, false)
|
||||||
|
var cur = RoadsData.get_closest_point(p2, false)
|
||||||
|
while cur == target:
|
||||||
|
rangle = traffic_rnd.randf() * PI * 2.0
|
||||||
|
randa = 500.0 + traffic_rnd.randf() * 500.0
|
||||||
|
xt = cos(rangle) * randa
|
||||||
|
yt = sin(rangle) * randa
|
||||||
|
rv = Vector3(xt, 0, yt)
|
||||||
|
target = RoadsData.get_closest_point(p2 + rv, false)
|
||||||
|
c.set_meta("target", target)
|
||||||
|
var path = RoadsData.get_point_path(cur, target);
|
||||||
|
assert(cur != target)
|
||||||
|
assert(path.size() > 0)
|
||||||
|
var curve = Curve3D.new()
|
||||||
|
for e in range(path.size() - 1):
|
||||||
|
var pt1 = path[e]
|
||||||
|
var pt2 = path[e + 1]
|
||||||
|
var nt = (pt2 - pt1).cross(Vector3.UP).normalized()
|
||||||
|
var d = (pt2 - pt1).normalized()
|
||||||
|
var l = pt1.distance_to(pt2)
|
||||||
|
while l > 16.0:
|
||||||
|
pt1 += d * 8.0
|
||||||
|
curve.add_point(pt1 + nt * 3.0 + Vector3.UP * 0.5)
|
||||||
|
l -= 8.0
|
||||||
|
if (!test_curve(curve, p2)):
|
||||||
|
var testp = get_curve_closest(curve, p2)
|
||||||
|
var e = p2 + (testp - p2).normalized() * 2.0
|
||||||
|
var nt = (testp - p2).cross(Vector3.UP).normalized()
|
||||||
|
curve.add_point(e + nt * 3.0 + Vector3.UP * 0.5, Vector3(), Vector3(), 0)
|
||||||
|
assert(test_curve(curve, p2))
|
||||||
|
c.set_meta("curve", curve)
|
||||||
|
c.set_meta("curve_length", curve.get_baked_length())
|
||||||
|
|
||||||
|
# buildings
|
||||||
|
|
||||||
|
var spawn = []
|
||||||
|
|
||||||
|
func spawn_child(n: String, xform: Transform) -> void:
|
||||||
|
var sp = {"node": n, "xform": xform}
|
||||||
|
spawn.push_back(sp)
|
||||||
|
func real_spawn_child():
|
||||||
|
var count = 0
|
||||||
|
while spawn.size() > 0:
|
||||||
|
var e = spawn.pop_front()
|
||||||
|
Spawner.place_scene(e.node, e.xform)
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
func update_node_position(n):
|
||||||
|
var space_state = get_viewport().get_world().direct_space_state
|
||||||
|
var where = n.get_global_transform().origin
|
||||||
|
var from = where
|
||||||
|
var to = where
|
||||||
|
from.y -= 8.0
|
||||||
|
to.y += 8.0
|
||||||
|
var result = space_state.intersect_ray(from, to)
|
||||||
|
if result.empty() || !result.has("collider"):
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
n.global_transform.origin = result.position
|
||||||
|
|||||||
Binary file not shown.
@@ -1,22 +1,9 @@
|
|||||||
extends Spatial
|
extends Spatial
|
||||||
|
|
||||||
var courtyard_tile: PackedScene = load("res://objects/courtyard-tile.scn")
|
|
||||||
var foundation_tile: PackedScene = load("res://objects/foundation.scn")
|
|
||||||
var room_tile: PackedScene = load("res://objects/block-room-corridoor.scn")
|
|
||||||
var tower_walls_tile: PackedScene = load("res://objects/tower-walls.scn")
|
|
||||||
var tower_floor_tile: PackedScene = load("res://objects/tower_floor.scn")
|
|
||||||
var stairs_tile: PackedScene = load("res://objects/stairs.scn")
|
|
||||||
var gate_bottom_tile: PackedScene = load("res://objects/gate_bottom.scn")
|
|
||||||
var gate_top_tile: PackedScene = load("res://objects/gate-top.scn")
|
|
||||||
var entry_tile: PackedScene = load("res://objects/block-room-entry.scn")
|
|
||||||
var roof_tile: PackedScene = load("res://objects/roof.scn")
|
|
||||||
var tower_roof_tile: PackedScene = load("res://objects/tower-roof.scn")
|
|
||||||
|
|
||||||
const tile_size = 8
|
const tile_size = 8
|
||||||
const palace_size = 8
|
const palace_size = 8
|
||||||
const layers = 4
|
const layers = 4
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
var voffset = 0.0
|
var voffset = 0.0
|
||||||
for layer in range(layers):
|
for layer in range(layers):
|
||||||
@@ -34,15 +21,16 @@ func _ready():
|
|||||||
var x = i * tile_size - palace_size * tile_size / 2
|
var x = i * tile_size - palace_size * tile_size / 2
|
||||||
var z = j * tile_size - palace_size * tile_size / 2
|
var z = j * tile_size - palace_size * tile_size / 2
|
||||||
if layer == 0:
|
if layer == 0:
|
||||||
var ct = courtyard_tile.instance()
|
var ct = "courtyard_tile"
|
||||||
var xform = Transform(Basis(), Vector3(x, voffset, z))
|
var xform = Transform(Basis(), Vector3(x, voffset, z))
|
||||||
if i > 0 && i < palace_size - 1:
|
if i > 0 && i < palace_size - 1:
|
||||||
if j > 0 && j < palace_size - 1:
|
if j > 0 && j < palace_size - 1:
|
||||||
call_deferred("place", ct, xform)
|
call_deferred("place", ct, xform)
|
||||||
if i in [0, palace_size - 1] || j in [0, palace_size - 1]:
|
if i in [0, palace_size - 1] || j in [0, palace_size - 1]:
|
||||||
call_deferred("place", ct, xform)
|
if (j == palace_size / 2.0 || i != palace_size / 2.0):
|
||||||
|
call_deferred("place", "foundation_tile", xform)
|
||||||
else:
|
else:
|
||||||
var ct = room_tile.instance()
|
var ct = "room_tile"
|
||||||
var tower_angles = {
|
var tower_angles = {
|
||||||
0:
|
0:
|
||||||
{
|
{
|
||||||
@@ -71,15 +59,15 @@ func _ready():
|
|||||||
elif tower_angles.has(i) && tower_angles[i].has(j):
|
elif tower_angles.has(i) && tower_angles[i].has(j):
|
||||||
xform.basis = Basis().rotated(Vector3.UP, tower_angles[i][j])
|
xform.basis = Basis().rotated(Vector3.UP, tower_angles[i][j])
|
||||||
if layer == layers - 1:
|
if layer == layers - 1:
|
||||||
var twr = tower_roof_tile.instance()
|
var twr = "tower_roof_tile"
|
||||||
call_deferred("place", twr, xform)
|
call_deferred("place", twr, xform)
|
||||||
else:
|
else:
|
||||||
var tw = tower_walls_tile.instance()
|
var tw = "tower_walls_tile"
|
||||||
call_deferred("place", tw, xform)
|
call_deferred("place", tw, xform)
|
||||||
var st = stairs_tile.instance()
|
var st = "stairs_tile"
|
||||||
call_deferred("place", st, xform)
|
call_deferred("place", st, xform)
|
||||||
if layer == 1:
|
if layer == 1:
|
||||||
var tfl = tower_floor_tile.instance()
|
var tfl = "tower_floor_tile"
|
||||||
call_deferred("place", tfl, xform)
|
call_deferred("place", tfl, xform)
|
||||||
var car = Spatial.new()
|
var car = Spatial.new()
|
||||||
car.add_to_group("spawn")
|
car.add_to_group("spawn")
|
||||||
@@ -97,27 +85,26 @@ func _ready():
|
|||||||
add_child(major_f)
|
add_child(major_f)
|
||||||
major_f.global_transform = Transform(Basis(), Vector3(cos(PI / 3 * e) * 2.0, 0, sin(PI / 3 * e) * 2.0) + Vector3(10.0, 0, 0))
|
major_f.global_transform = Transform(Basis(), Vector3(cos(PI / 3 * e) * 2.0, 0, sin(PI / 3 * e) * 2.0) + Vector3(10.0, 0, 0))
|
||||||
print("PALACE done")
|
print("PALACE done")
|
||||||
func place(obj, where):
|
|
||||||
add_child(obj)
|
func place(obj: String, where: Transform):
|
||||||
obj.transform = where
|
streaming.spawn_child(obj, global_transform * where)
|
||||||
print("placed at ", where.origin)
|
|
||||||
|
|
||||||
func spawn_wall(layer:int, i: int, j: int, xform: Transform):
|
func spawn_wall(layer:int, i: int, j: int, xform: Transform):
|
||||||
if layer == layers - 1:
|
if layer == layers - 1:
|
||||||
var rt = roof_tile.instance()
|
var rt = "roof_tile"
|
||||||
call_deferred("place", rt, xform)
|
call_deferred("place", rt, xform)
|
||||||
elif (j != palace_size / 2.0 && i != palace_size / 2.0)|| layer > 2:
|
elif (j != palace_size / 2.0 && i != palace_size / 2.0)|| layer > 2:
|
||||||
var ct = room_tile.instance()
|
var ct = "room_tile"
|
||||||
call_deferred("place", ct, xform)
|
call_deferred("place", ct, xform)
|
||||||
elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 1:
|
elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 1:
|
||||||
var ent = entry_tile.instance()
|
var ent = "entry_tile"
|
||||||
call_deferred("place", ent, xform)
|
call_deferred("place", ent, xform)
|
||||||
elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 1:
|
elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 1:
|
||||||
var gw = gate_bottom_tile.instance()
|
var gw = "gate_bottom_tile"
|
||||||
call_deferred("place", gw, xform)
|
call_deferred("place", gw, xform)
|
||||||
elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 2:
|
elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 2:
|
||||||
var gw = gate_top_tile.instance()
|
var gw = "gate_top_tile"
|
||||||
call_deferred("place", gw, xform)
|
call_deferred("place", gw, xform)
|
||||||
elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 2:
|
elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 2:
|
||||||
var ct = room_tile.instance()
|
var ct = "room_tile"
|
||||||
call_deferred("place", ct, xform)
|
call_deferred("place", ct, xform)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"asset" : {
|
"asset" : {
|
||||||
"generator" : "Khronos glTF Blender I/O v1.6.16",
|
"generator" : "Khronos glTF Blender I/O v1.5.17",
|
||||||
"version" : "2.0"
|
"version" : "2.0"
|
||||||
},
|
},
|
||||||
"scene" : 0,
|
"scene" : 0,
|
||||||
@@ -176,7 +176,7 @@
|
|||||||
"NORMAL" : 9,
|
"NORMAL" : 9,
|
||||||
"TEXCOORD_0" : 10
|
"TEXCOORD_0" : 10
|
||||||
},
|
},
|
||||||
"indices" : 3,
|
"indices" : 11,
|
||||||
"material" : 0
|
"material" : 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -186,11 +186,11 @@
|
|||||||
"primitives" : [
|
"primitives" : [
|
||||||
{
|
{
|
||||||
"attributes" : {
|
"attributes" : {
|
||||||
"POSITION" : 11,
|
"POSITION" : 12,
|
||||||
"NORMAL" : 12,
|
"NORMAL" : 13,
|
||||||
"TEXCOORD_0" : 13
|
"TEXCOORD_0" : 14
|
||||||
},
|
},
|
||||||
"indices" : 14,
|
"indices" : 15,
|
||||||
"material" : 0
|
"material" : 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -200,11 +200,11 @@
|
|||||||
"primitives" : [
|
"primitives" : [
|
||||||
{
|
{
|
||||||
"attributes" : {
|
"attributes" : {
|
||||||
"POSITION" : 15,
|
"POSITION" : 16,
|
||||||
"NORMAL" : 16,
|
"NORMAL" : 17,
|
||||||
"TEXCOORD_0" : 17
|
"TEXCOORD_0" : 18
|
||||||
},
|
},
|
||||||
"indices" : 18,
|
"indices" : 19,
|
||||||
"material" : 0
|
"material" : 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -214,11 +214,11 @@
|
|||||||
"primitives" : [
|
"primitives" : [
|
||||||
{
|
{
|
||||||
"attributes" : {
|
"attributes" : {
|
||||||
"POSITION" : 19,
|
"POSITION" : 20,
|
||||||
"NORMAL" : 20,
|
"NORMAL" : 21,
|
||||||
"TEXCOORD_0" : 21
|
"TEXCOORD_0" : 22
|
||||||
},
|
},
|
||||||
"indices" : 22,
|
"indices" : 23,
|
||||||
"material" : 0
|
"material" : 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -228,11 +228,11 @@
|
|||||||
"primitives" : [
|
"primitives" : [
|
||||||
{
|
{
|
||||||
"attributes" : {
|
"attributes" : {
|
||||||
"POSITION" : 23,
|
"POSITION" : 24,
|
||||||
"NORMAL" : 24,
|
"NORMAL" : 25,
|
||||||
"TEXCOORD_0" : 25
|
"TEXCOORD_0" : 26
|
||||||
},
|
},
|
||||||
"indices" : 26,
|
"indices" : 27,
|
||||||
"material" : 0
|
"material" : 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -242,11 +242,11 @@
|
|||||||
"primitives" : [
|
"primitives" : [
|
||||||
{
|
{
|
||||||
"attributes" : {
|
"attributes" : {
|
||||||
"POSITION" : 27,
|
"POSITION" : 28,
|
||||||
"NORMAL" : 28,
|
"NORMAL" : 29,
|
||||||
"TEXCOORD_0" : 29
|
"TEXCOORD_0" : 30
|
||||||
},
|
},
|
||||||
"indices" : 30,
|
"indices" : 31,
|
||||||
"material" : 0
|
"material" : 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -256,11 +256,11 @@
|
|||||||
"primitives" : [
|
"primitives" : [
|
||||||
{
|
{
|
||||||
"attributes" : {
|
"attributes" : {
|
||||||
"POSITION" : 31,
|
"POSITION" : 32,
|
||||||
"NORMAL" : 32,
|
"NORMAL" : 33,
|
||||||
"TEXCOORD_0" : 33
|
"TEXCOORD_0" : 34
|
||||||
},
|
},
|
||||||
"indices" : 34,
|
"indices" : 35,
|
||||||
"material" : 0
|
"material" : 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -270,11 +270,11 @@
|
|||||||
"primitives" : [
|
"primitives" : [
|
||||||
{
|
{
|
||||||
"attributes" : {
|
"attributes" : {
|
||||||
"POSITION" : 35,
|
"POSITION" : 36,
|
||||||
"NORMAL" : 36,
|
"NORMAL" : 37,
|
||||||
"TEXCOORD_0" : 37
|
"TEXCOORD_0" : 38
|
||||||
},
|
},
|
||||||
"indices" : 38,
|
"indices" : 39,
|
||||||
"material" : 0
|
"material" : 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -284,11 +284,11 @@
|
|||||||
"primitives" : [
|
"primitives" : [
|
||||||
{
|
{
|
||||||
"attributes" : {
|
"attributes" : {
|
||||||
"POSITION" : 39,
|
"POSITION" : 40,
|
||||||
"NORMAL" : 40,
|
"NORMAL" : 41,
|
||||||
"TEXCOORD_0" : 41
|
"TEXCOORD_0" : 42
|
||||||
},
|
},
|
||||||
"indices" : 42
|
"indices" : 43
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -365,7 +365,7 @@
|
|||||||
{
|
{
|
||||||
"bufferView" : 8,
|
"bufferView" : 8,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 24,
|
"count" : 20,
|
||||||
"max" : [
|
"max" : [
|
||||||
4,
|
4,
|
||||||
0.800000011920929,
|
0.800000011920929,
|
||||||
@@ -381,17 +381,23 @@
|
|||||||
{
|
{
|
||||||
"bufferView" : 9,
|
"bufferView" : 9,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 24,
|
"count" : 20,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 10,
|
"bufferView" : 10,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 24,
|
"count" : 20,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 11,
|
"bufferView" : 11,
|
||||||
|
"componentType" : 5123,
|
||||||
|
"count" : 30,
|
||||||
|
"type" : "SCALAR"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView" : 12,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 849,
|
"count" : 849,
|
||||||
"max" : [
|
"max" : [
|
||||||
@@ -407,25 +413,25 @@
|
|||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 12,
|
"bufferView" : 13,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 849,
|
"count" : 849,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 13,
|
"bufferView" : 14,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 849,
|
"count" : 849,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 14,
|
"bufferView" : 15,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 2178,
|
"count" : 2178,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 15,
|
"bufferView" : 16,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 905,
|
"count" : 905,
|
||||||
"max" : [
|
"max" : [
|
||||||
@@ -441,27 +447,27 @@
|
|||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 16,
|
"bufferView" : 17,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 905,
|
"count" : 905,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 17,
|
"bufferView" : 18,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 905,
|
"count" : 905,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 18,
|
"bufferView" : 19,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 1596,
|
"count" : 1596,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 19,
|
"bufferView" : 20,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 80,
|
"count" : 104,
|
||||||
"max" : [
|
"max" : [
|
||||||
4,
|
4,
|
||||||
3.799999952316284,
|
3.799999952316284,
|
||||||
@@ -469,31 +475,31 @@
|
|||||||
],
|
],
|
||||||
"min" : [
|
"min" : [
|
||||||
-4,
|
-4,
|
||||||
-0.19999992847442627,
|
-0.9999999403953552,
|
||||||
-4.5
|
-4.5
|
||||||
],
|
],
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 20,
|
"bufferView" : 21,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 80,
|
"count" : 104,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 21,
|
"bufferView" : 22,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 80,
|
"count" : 104,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 22,
|
"bufferView" : 23,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 156,
|
"count" : 252,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 23,
|
"bufferView" : 24,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 504,
|
"count" : 504,
|
||||||
"max" : [
|
"max" : [
|
||||||
@@ -509,25 +515,25 @@
|
|||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 24,
|
"bufferView" : 25,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 504,
|
"count" : 504,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 25,
|
"bufferView" : 26,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 504,
|
"count" : 504,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 26,
|
"bufferView" : 27,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 1332,
|
"count" : 1332,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 27,
|
"bufferView" : 28,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 4,
|
"count" : 4,
|
||||||
"max" : [
|
"max" : [
|
||||||
@@ -543,25 +549,25 @@
|
|||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 28,
|
"bufferView" : 29,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 4,
|
"count" : 4,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 29,
|
"bufferView" : 30,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 4,
|
"count" : 4,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 30,
|
"bufferView" : 31,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 6,
|
"count" : 6,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 31,
|
"bufferView" : 32,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1143,
|
"count" : 1143,
|
||||||
"max" : [
|
"max" : [
|
||||||
@@ -577,25 +583,25 @@
|
|||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 32,
|
"bufferView" : 33,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1143,
|
"count" : 1143,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 33,
|
"bufferView" : 34,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1143,
|
"count" : 1143,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 34,
|
"bufferView" : 35,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 3180,
|
"count" : 3180,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 35,
|
"bufferView" : 36,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 36,
|
"count" : 36,
|
||||||
"max" : [
|
"max" : [
|
||||||
@@ -611,25 +617,25 @@
|
|||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 36,
|
"bufferView" : 37,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 36,
|
"count" : 36,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 37,
|
"bufferView" : 38,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 36,
|
"count" : 36,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 38,
|
"bufferView" : 39,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 60,
|
"count" : 60,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 39,
|
"bufferView" : 40,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1832,
|
"count" : 1832,
|
||||||
"max" : [
|
"max" : [
|
||||||
@@ -645,19 +651,19 @@
|
|||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 40,
|
"bufferView" : 41,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1832,
|
"count" : 1832,
|
||||||
"type" : "VEC3"
|
"type" : "VEC3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 41,
|
"bufferView" : 42,
|
||||||
"componentType" : 5126,
|
"componentType" : 5126,
|
||||||
"count" : 1832,
|
"count" : 1832,
|
||||||
"type" : "VEC2"
|
"type" : "VEC2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"bufferView" : 42,
|
"bufferView" : 43,
|
||||||
"componentType" : 5123,
|
"componentType" : 5123,
|
||||||
"count" : 2964,
|
"count" : 2964,
|
||||||
"type" : "SCALAR"
|
"type" : "SCALAR"
|
||||||
@@ -706,183 +712,188 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 288,
|
"byteLength" : 240,
|
||||||
"byteOffset" : 39872
|
"byteOffset" : 39872
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 288,
|
"byteLength" : 240,
|
||||||
"byteOffset" : 40160
|
"byteOffset" : 40112
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 192,
|
"byteLength" : 160,
|
||||||
"byteOffset" : 40448
|
"byteOffset" : 40352
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buffer" : 0,
|
||||||
|
"byteLength" : 60,
|
||||||
|
"byteOffset" : 40512
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 10188,
|
"byteLength" : 10188,
|
||||||
"byteOffset" : 40640
|
"byteOffset" : 40572
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 10188,
|
"byteLength" : 10188,
|
||||||
"byteOffset" : 50828
|
"byteOffset" : 50760
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 6792,
|
"byteLength" : 6792,
|
||||||
"byteOffset" : 61016
|
"byteOffset" : 60948
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 4356,
|
"byteLength" : 4356,
|
||||||
"byteOffset" : 67808
|
"byteOffset" : 67740
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 10860,
|
"byteLength" : 10860,
|
||||||
"byteOffset" : 72164
|
"byteOffset" : 72096
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 10860,
|
"byteLength" : 10860,
|
||||||
"byteOffset" : 83024
|
"byteOffset" : 82956
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 7240,
|
"byteLength" : 7240,
|
||||||
"byteOffset" : 93884
|
"byteOffset" : 93816
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 3192,
|
"byteLength" : 3192,
|
||||||
"byteOffset" : 101124
|
"byteOffset" : 101056
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 960,
|
"byteLength" : 1248,
|
||||||
"byteOffset" : 104316
|
"byteOffset" : 104248
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 960,
|
"byteLength" : 1248,
|
||||||
"byteOffset" : 105276
|
"byteOffset" : 105496
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 640,
|
"byteLength" : 832,
|
||||||
"byteOffset" : 106236
|
"byteOffset" : 106744
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 312,
|
"byteLength" : 504,
|
||||||
"byteOffset" : 106876
|
"byteOffset" : 107576
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 6048,
|
"byteLength" : 6048,
|
||||||
"byteOffset" : 107188
|
"byteOffset" : 108080
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 6048,
|
"byteLength" : 6048,
|
||||||
"byteOffset" : 113236
|
"byteOffset" : 114128
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 4032,
|
"byteLength" : 4032,
|
||||||
"byteOffset" : 119284
|
"byteOffset" : 120176
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 2664,
|
"byteLength" : 2664,
|
||||||
"byteOffset" : 123316
|
"byteOffset" : 124208
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 48,
|
"byteLength" : 48,
|
||||||
"byteOffset" : 125980
|
"byteOffset" : 126872
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 48,
|
"byteLength" : 48,
|
||||||
"byteOffset" : 126028
|
"byteOffset" : 126920
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 32,
|
"byteLength" : 32,
|
||||||
"byteOffset" : 126076
|
"byteOffset" : 126968
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 12,
|
"byteLength" : 12,
|
||||||
"byteOffset" : 126108
|
"byteOffset" : 127000
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 13716,
|
"byteLength" : 13716,
|
||||||
"byteOffset" : 126120
|
"byteOffset" : 127012
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 13716,
|
"byteLength" : 13716,
|
||||||
"byteOffset" : 139836
|
"byteOffset" : 140728
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 9144,
|
"byteLength" : 9144,
|
||||||
"byteOffset" : 153552
|
"byteOffset" : 154444
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 6360,
|
"byteLength" : 6360,
|
||||||
"byteOffset" : 162696
|
"byteOffset" : 163588
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 432,
|
"byteLength" : 432,
|
||||||
"byteOffset" : 169056
|
"byteOffset" : 169948
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 432,
|
"byteLength" : 432,
|
||||||
"byteOffset" : 169488
|
"byteOffset" : 170380
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 288,
|
"byteLength" : 288,
|
||||||
"byteOffset" : 169920
|
"byteOffset" : 170812
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 120,
|
"byteLength" : 120,
|
||||||
"byteOffset" : 170208
|
"byteOffset" : 171100
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 21984,
|
"byteLength" : 21984,
|
||||||
"byteOffset" : 170328
|
"byteOffset" : 171220
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 21984,
|
"byteLength" : 21984,
|
||||||
"byteOffset" : 192312
|
"byteOffset" : 193204
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 14656,
|
"byteLength" : 14656,
|
||||||
"byteOffset" : 214296
|
"byteOffset" : 215188
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"buffer" : 0,
|
"buffer" : 0,
|
||||||
"byteLength" : 5928,
|
"byteLength" : 5928,
|
||||||
"byteOffset" : 228952
|
"byteOffset" : 229844
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"buffers" : [
|
"buffers" : [
|
||||||
{
|
{
|
||||||
"byteLength" : 234880,
|
"byteLength" : 235772,
|
||||||
"uri" : "palace.bin"
|
"uri" : "palace.bin"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Binary file not shown.
@@ -1,124 +1,70 @@
|
|||||||
extends Spatial
|
extends Spatial
|
||||||
|
|
||||||
var side_wall: PackedScene = preload("res://objects/wall-side.scn")
|
|
||||||
var bottom_side: PackedScene = preload("res://objects/bottom-side.scn")
|
|
||||||
var bottom: PackedScene = preload("res://objects/bottom.scn")
|
|
||||||
var bottom_wheels: PackedScene = preload("res://objects/bottom-wheels.scn")
|
|
||||||
var entry: PackedScene = preload("res://objects/entry.scn")
|
|
||||||
var roof_floor: PackedScene = preload("res://objects/roof-floor.scn")
|
|
||||||
var roof_floor_range: PackedScene = preload("res://objects/roof-floor-range.scn")
|
|
||||||
var wall_internal: PackedScene = preload("res://objects/wall-internal.scn")
|
|
||||||
var window_narrow: PackedScene = preload("res://objects/window-narrow.scn")
|
|
||||||
var window_wide: PackedScene = preload("res://objects/window-wide.scn")
|
|
||||||
var wall_solid: PackedScene = preload("res://objects/wall-solid.scn")
|
|
||||||
onready var rnd = RandomNumberGenerator.new()
|
onready var rnd = RandomNumberGenerator.new()
|
||||||
|
|
||||||
|
var spawn = []
|
||||||
# Declare member variables here. Examples:
|
|
||||||
# var a = 2
|
|
||||||
# var b = "text"
|
|
||||||
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
var thread: Thread
|
|
||||||
func _ready():
|
func _ready():
|
||||||
thread = Thread.new()
|
pass
|
||||||
# var parts = {
|
func spawn_child(n: String, xform: Transform) -> void:
|
||||||
# "side_wall": side_wall,
|
var x = xform
|
||||||
# "bottom_side": bottom_side,
|
if n.ends_with("_rotated"):
|
||||||
# "bottom": bottom,
|
x.basis = x.basis.rotated(Vector3(0, 1, 0), PI)
|
||||||
# "bottom_wheels": bottom_wheels,
|
n = n.replace("_rotated", "")
|
||||||
# "entry": entry,
|
streaming.spawn_child(n, global_transform * x)
|
||||||
# "roof_floor": roof_floor,
|
static func build_house(main_xform: Transform):
|
||||||
# "roof_floor_range": roof_floor_range,
|
var rnd = RandomNumberGenerator.new()
|
||||||
# "wall_internal": wall_internal,
|
var s = int(main_xform.origin.x + 100 * main_xform.origin.z * 2) % 0x1ffffff
|
||||||
# "window_narrow": window_narrow,
|
|
||||||
# "window_wide": window_wide,
|
|
||||||
# "wall_solid": wall_solid
|
|
||||||
# }
|
|
||||||
# for k in parts.keys():
|
|
||||||
# Spawner.add_scene(k, parts[k])
|
|
||||||
func _exit_tree():
|
|
||||||
if thread.is_active():
|
|
||||||
thread.wait_to_finish()
|
|
||||||
func spawn_child(n, xform):
|
|
||||||
add_child(n)
|
|
||||||
n.transform = xform
|
|
||||||
func build_house(userdata):
|
|
||||||
var s = int(global_transform.origin.x + 100 * global_transform.origin.z * 2) % 0x1ffffff
|
|
||||||
rnd.seed = s
|
rnd.seed = s
|
||||||
print(global_transform.origin, " seed = ", s)
|
print(main_xform.origin, " seed = ", s)
|
||||||
var l = 6 + 2 * rnd.randi() % 7 - 1
|
var l = 6 + 2 * rnd.randi() % 7 - 1
|
||||||
var h = l - 1
|
var h = l - 1
|
||||||
var d = 3 + rnd.randi() % (l - 5 + 1)
|
var d = 3 + rnd.randi() % (l - 5 + 1)
|
||||||
var range_used = false
|
var range_used = false
|
||||||
|
var objects = []
|
||||||
for k in range(l + 1):
|
for k in range(l + 1):
|
||||||
var pos = Vector3(0, 0, k * 2)
|
var pos = Vector3(0, 0, k * 2)
|
||||||
|
var xform = Transform(Basis(), pos)
|
||||||
if k > 0:
|
if k > 0:
|
||||||
|
var what
|
||||||
if k != d && rnd.randf() > 0.5 && !range_used:
|
if k != d && rnd.randf() > 0.5 && !range_used:
|
||||||
var r = roof_floor_range.instance()
|
what = "roof_floor_range"
|
||||||
var xform = Transform(Basis(), pos)
|
|
||||||
call_deferred("spawn_child", r, xform)
|
|
||||||
range_used = true
|
range_used = true
|
||||||
else:
|
else:
|
||||||
var r = roof_floor.instance()
|
what = "roof_floor"
|
||||||
var xform = Transform(Basis(), pos)
|
objects.push_back({"xform": xform, "data": [what]})
|
||||||
call_deferred("spawn_child", r, xform)
|
|
||||||
var what
|
|
||||||
var xt = [Transform(Basis(), pos), Transform(Basis().rotated(Vector3.UP, PI), pos - Vector3(0, 0, 2))]
|
var xt = [Transform(Basis(), pos), Transform(Basis().rotated(Vector3.UP, PI), pos - Vector3(0, 0, 2))]
|
||||||
for x in range(xt.size()):
|
for x in range(xt.size()):
|
||||||
if x == 0 && k == d:
|
if x == 0 && k == d:
|
||||||
continue
|
continue
|
||||||
if rnd.randf() > 0.5:
|
if rnd.randf() > 0.5:
|
||||||
what = wall_solid.instance()
|
what = "wall_solid"
|
||||||
elif rnd.randf() > 0.5:
|
elif rnd.randf() > 0.5:
|
||||||
what = window_narrow.instance()
|
what = "window_narrow"
|
||||||
else:
|
else:
|
||||||
what = window_wide.instance()
|
what = "window_wide"
|
||||||
call_deferred("spawn_child", what, xt[x])
|
objects.push_back({"xform": xt[x], "data": [what]})
|
||||||
|
var obj_data = []
|
||||||
if k > 1 && k < l && rnd.randf() > 0.6:
|
if k > 1 && k < l && rnd.randf() > 0.6:
|
||||||
var r = wall_internal.instance()
|
objects.push_back({"xform": xform, "data": ["wall_internal"]})
|
||||||
var xform = Transform(Basis(), pos)
|
|
||||||
call_deferred("spawn_child", r, xform)
|
|
||||||
match k:
|
match k:
|
||||||
0:
|
0:
|
||||||
var b = side_wall.instance()
|
obj_data = ["side_wall", "bottom_side"]
|
||||||
var c = bottom_side.instance()
|
|
||||||
var xform = Transform(Basis(), pos)
|
|
||||||
call_deferred("spawn_child", b, xform)
|
|
||||||
call_deferred("spawn_child", c, xform)
|
|
||||||
1:
|
1:
|
||||||
var b = bottom.instance()
|
obj_data = ["bottom"]
|
||||||
var xform = Transform(Basis(), pos)
|
|
||||||
call_deferred("spawn_child", b, xform)
|
|
||||||
2:
|
2:
|
||||||
var b = bottom_wheels.instance()
|
obj_data = ["bottom_wheels"]
|
||||||
var xform = Transform(Basis(), pos)
|
|
||||||
call_deferred("spawn_child", b, xform)
|
|
||||||
d:
|
d:
|
||||||
var b = entry.instance()
|
obj_data = ["entry", "bottom"]
|
||||||
var c = bottom.instance()
|
|
||||||
var xform = Transform(Basis(), pos)
|
|
||||||
call_deferred("spawn_child", b, xform)
|
|
||||||
call_deferred("spawn_child", c, xform)
|
|
||||||
h:
|
h:
|
||||||
var b = bottom_wheels.instance()
|
obj_data = ["bottom_wheels"]
|
||||||
var xform = Transform(Basis(), pos)
|
|
||||||
call_deferred("spawn_child", b, xform)
|
|
||||||
l:
|
l:
|
||||||
var b = side_wall.instance()
|
obj_data = ["side_wall_rotated", "bottom_side_rotated", "bottom"]
|
||||||
var c = bottom_side.instance()
|
|
||||||
var a = bottom.instance()
|
|
||||||
var xform = Transform(Basis().rotated(Vector3(0, 1, 0), PI), pos)
|
|
||||||
var xform2 = Transform(Basis(), pos)
|
|
||||||
call_deferred("spawn_child", b, xform)
|
|
||||||
call_deferred("spawn_child", c, xform)
|
|
||||||
call_deferred("spawn_child", a, xform2)
|
|
||||||
_:
|
_:
|
||||||
var b = bottom.instance()
|
obj_data = ["bottom"]
|
||||||
var xform = Transform(Basis(), pos)
|
objects.push_back({"xform": xform, "data": obj_data})
|
||||||
call_deferred("spawn_child", b, xform)
|
return objects
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
var state = 0
|
var state = 0
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
@@ -126,26 +72,20 @@ func _process(delta):
|
|||||||
0:
|
0:
|
||||||
state = 1
|
state = 1
|
||||||
1:
|
1:
|
||||||
build_house(self)
|
var objects = build_house(global_transform)
|
||||||
|
for obj in objects:
|
||||||
|
var x = obj.xform
|
||||||
|
for w in obj.data:
|
||||||
|
call_deferred("spawn_child", w, x)
|
||||||
state = 2
|
state = 2
|
||||||
|
|
||||||
var prev = 3000000
|
|
||||||
func _physics_process(delta):
|
|
||||||
var cam = get_viewport().get_camera()
|
|
||||||
var dst = cam.global_transform.origin.distance_to(global_transform.origin)
|
|
||||||
match state:
|
|
||||||
2:
|
2:
|
||||||
if abs(prev - dst) > 20:
|
set_process(false)
|
||||||
var space_state = get_viewport().get_world().direct_space_state
|
|
||||||
var where = get_global_transform().origin
|
#var prev = 3000000
|
||||||
var from = where
|
#func _physics_process(delta):
|
||||||
var to = where
|
# var cam = get_viewport().get_camera()
|
||||||
from.y -= 8.0
|
# var dst = cam.global_transform.origin.distance_squared_to(global_transform.origin)
|
||||||
to.y += 8.0
|
# match state:
|
||||||
var result = space_state.intersect_ray(from, to)
|
# 2:
|
||||||
if result.empty() || !result.has("collider"):
|
# if abs(prev - dst) > 400:
|
||||||
return
|
# streaming.update_node_position(n)
|
||||||
else:
|
|
||||||
global_transform.origin = result.position
|
|
||||||
prev = dst
|
|
||||||
|
|
||||||
|
|||||||
@@ -215,9 +215,10 @@ func get_player_out_of_vehicle(data):
|
|||||||
#var d = 1.0
|
#var d = 1.0
|
||||||
#var state = 0
|
#var state = 0
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if parked:
|
pass
|
||||||
mode = RigidBody.MODE_KINEMATIC
|
# if parked:
|
||||||
return
|
# mode = RigidBody.MODE_KINEMATIC
|
||||||
|
# return
|
||||||
# if engine_force > 1000.0 && linear_velocity.length() < 0.1:
|
# if engine_force > 1000.0 && linear_velocity.length() < 0.1:
|
||||||
# apply_central_impulse(global_transform.basis.y * mass * 1 + global_transform.basis.z * mass * 5)
|
# apply_central_impulse(global_transform.basis.y * mass * 1 + global_transform.basis.z * mass * 5)
|
||||||
# if d > 0:
|
# if d > 0:
|
||||||
@@ -245,9 +246,9 @@ func is_upright():
|
|||||||
if v.y > v.x && v.y > v.z:
|
if v.y > v.x && v.y > v.z:
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
func _physics_process(delta):
|
#func _physics_process(delta):
|
||||||
if is_upright():
|
# if is_upright():
|
||||||
if abs(engine_force) > 0 && linear_velocity.y * delta > 0.05:
|
# if abs(engine_force) > 0 && linear_velocity.y * delta > 0.05:
|
||||||
add_central_force(Vector3(0, -linear_velocity.y * delta * mass, 0))
|
# add_central_force(Vector3(0, -linear_velocity.y * delta * mass, 0))
|
||||||
var l = linear_velocity.length() * delta
|
# var l = linear_velocity.length() * delta
|
||||||
add_central_force(Vector3(0, -l * 0.5 * mass, 0))
|
# add_central_force(Vector3(0, -l * 0.5 * mass, 0))
|
||||||
|
|||||||
34
steering_test.gd
Normal file
34
steering_test.gd
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
extends Spatial
|
||||||
|
|
||||||
|
|
||||||
|
# Declare member variables here. Examples:
|
||||||
|
# var a = 2
|
||||||
|
# var b = "text"
|
||||||
|
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
var xdel = 16.0
|
||||||
|
var state = 0
|
||||||
|
func _process(delta):
|
||||||
|
var tgt = $target.global_transform.origin
|
||||||
|
var xt = $VehicleBody.global_transform.affine_inverse()
|
||||||
|
var loc = xt.xform(tgt)
|
||||||
|
$VehicleBody.steering = clamp(loc.x, -1, 1)
|
||||||
|
print(loc.x, " ", loc.z)
|
||||||
|
$Camera.look_at($VehicleBody.global_transform.origin, Vector3.UP)
|
||||||
|
match state:
|
||||||
|
0:
|
||||||
|
$VehicleBody.engine_force = 2000
|
||||||
|
state = 1
|
||||||
|
1:
|
||||||
|
xdel -= delta
|
||||||
|
if xdel < 0:
|
||||||
|
$VehicleBody.engine_force = 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
134
steering_test.tscn
Normal file
134
steering_test.tscn
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
[gd_scene load_steps=12 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://steering_test.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id=3]
|
||||||
|
radius = 0.2
|
||||||
|
|
||||||
|
[sub_resource type="CubeMesh" id=1]
|
||||||
|
|
||||||
|
[sub_resource type="CubeMesh" id=2]
|
||||||
|
size = Vector3( 2, 1, 4 )
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape" id=4]
|
||||||
|
extents = Vector3( 1, 1, 2.00042 )
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id=5]
|
||||||
|
radius = 0.5
|
||||||
|
height = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id=6]
|
||||||
|
radius = 0.5
|
||||||
|
height = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="ProceduralSky" id=9]
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id=10]
|
||||||
|
background_mode = 2
|
||||||
|
background_sky = SubResource( 9 )
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id=7]
|
||||||
|
size = Vector2( 40, 40 )
|
||||||
|
subdivide_width = 5
|
||||||
|
subdivide_depth = 5
|
||||||
|
|
||||||
|
[sub_resource type="ConcavePolygonShape" id=8]
|
||||||
|
data = PoolVector3Array( 20, 0, 20, 13.3333, 0, 20, 20, 0, 13.3333, 13.3333, 0, 20, 13.3333, 0, 13.3333, 20, 0, 13.3333, 13.3333, 0, 20, 6.6667, 0, 20, 13.3333, 0, 13.3333, 6.6667, 0, 20, 6.6667, 0, 13.3333, 13.3333, 0, 13.3333, 6.6667, 0, 20, 0, 0, 20, 6.6667, 0, 13.3333, 0, 0, 20, 0, 0, 13.3333, 6.6667, 0, 13.3333, 0, 0, 20, -6.6667, 0, 20, 0, 0, 13.3333, -6.6667, 0, 20, -6.6667, 0, 13.3333, 0, 0, 13.3333, -6.6667, 0, 20, -13.3333, 0, 20, -6.6667, 0, 13.3333, -13.3333, 0, 20, -13.3333, 0, 13.3333, -6.6667, 0, 13.3333, -13.3333, 0, 20, -20, 0, 20, -13.3333, 0, 13.3333, -20, 0, 20, -20, 0, 13.3333, -13.3333, 0, 13.3333, 20, 0, 13.3333, 13.3333, 0, 13.3333, 20, 0, 6.6667, 13.3333, 0, 13.3333, 13.3333, 0, 6.6667, 20, 0, 6.6667, 13.3333, 0, 13.3333, 6.6667, 0, 13.3333, 13.3333, 0, 6.6667, 6.6667, 0, 13.3333, 6.6667, 0, 6.6667, 13.3333, 0, 6.6667, 6.6667, 0, 13.3333, 0, 0, 13.3333, 6.6667, 0, 6.6667, 0, 0, 13.3333, 0, 0, 6.6667, 6.6667, 0, 6.6667, 0, 0, 13.3333, -6.6667, 0, 13.3333, 0, 0, 6.6667, -6.6667, 0, 13.3333, -6.6667, 0, 6.6667, 0, 0, 6.6667, -6.6667, 0, 13.3333, -13.3333, 0, 13.3333, -6.6667, 0, 6.6667, -13.3333, 0, 13.3333, -13.3333, 0, 6.6667, -6.6667, 0, 6.6667, -13.3333, 0, 13.3333, -20, 0, 13.3333, -13.3333, 0, 6.6667, -20, 0, 13.3333, -20, 0, 6.6667, -13.3333, 0, 6.6667, 20, 0, 6.6667, 13.3333, 0, 6.6667, 20, 0, 0, 13.3333, 0, 6.6667, 13.3333, 0, 0, 20, 0, 0, 13.3333, 0, 6.6667, 6.6667, 0, 6.6667, 13.3333, 0, 0, 6.6667, 0, 6.6667, 6.6667, 0, 0, 13.3333, 0, 0, 6.6667, 0, 6.6667, 0, 0, 6.6667, 6.6667, 0, 0, 0, 0, 6.6667, 0, 0, 0, 6.6667, 0, 0, 0, 0, 6.6667, -6.6667, 0, 6.6667, 0, 0, 0, -6.6667, 0, 6.6667, -6.6667, 0, 0, 0, 0, 0, -6.6667, 0, 6.6667, -13.3333, 0, 6.6667, -6.6667, 0, 0, -13.3333, 0, 6.6667, -13.3333, 0, 0, -6.6667, 0, 0, -13.3333, 0, 6.6667, -20, 0, 6.6667, -13.3333, 0, 0, -20, 0, 6.6667, -20, 0, 0, -13.3333, 0, 0, 20, 0, 0, 13.3333, 0, 0, 20, 0, -6.6667, 13.3333, 0, 0, 13.3333, 0, -6.6667, 20, 0, -6.6667, 13.3333, 0, 0, 6.6667, 0, 0, 13.3333, 0, -6.6667, 6.6667, 0, 0, 6.6667, 0, -6.6667, 13.3333, 0, -6.6667, 6.6667, 0, 0, 0, 0, 0, 6.6667, 0, -6.6667, 0, 0, 0, 0, 0, -6.6667, 6.6667, 0, -6.6667, 0, 0, 0, -6.6667, 0, 0, 0, 0, -6.6667, -6.6667, 0, 0, -6.6667, 0, -6.6667, 0, 0, -6.6667, -6.6667, 0, 0, -13.3333, 0, 0, -6.6667, 0, -6.6667, -13.3333, 0, 0, -13.3333, 0, -6.6667, -6.6667, 0, -6.6667, -13.3333, 0, 0, -20, 0, 0, -13.3333, 0, -6.6667, -20, 0, 0, -20, 0, -6.6667, -13.3333, 0, -6.6667, 20, 0, -6.6667, 13.3333, 0, -6.6667, 20, 0, -13.3333, 13.3333, 0, -6.6667, 13.3333, 0, -13.3333, 20, 0, -13.3333, 13.3333, 0, -6.6667, 6.6667, 0, -6.6667, 13.3333, 0, -13.3333, 6.6667, 0, -6.6667, 6.6667, 0, -13.3333, 13.3333, 0, -13.3333, 6.6667, 0, -6.6667, 0, 0, -6.6667, 6.6667, 0, -13.3333, 0, 0, -6.6667, 0, 0, -13.3333, 6.6667, 0, -13.3333, 0, 0, -6.6667, -6.6667, 0, -6.6667, 0, 0, -13.3333, -6.6667, 0, -6.6667, -6.6667, 0, -13.3333, 0, 0, -13.3333, -6.6667, 0, -6.6667, -13.3333, 0, -6.6667, -6.6667, 0, -13.3333, -13.3333, 0, -6.6667, -13.3333, 0, -13.3333, -6.6667, 0, -13.3333, -13.3333, 0, -6.6667, -20, 0, -6.6667, -13.3333, 0, -13.3333, -20, 0, -6.6667, -20, 0, -13.3333, -13.3333, 0, -13.3333, 20, 0, -13.3333, 13.3333, 0, -13.3333, 20, 0, -20, 13.3333, 0, -13.3333, 13.3333, 0, -20, 20, 0, -20, 13.3333, 0, -13.3333, 6.6667, 0, -13.3333, 13.3333, 0, -20, 6.6667, 0, -13.3333, 6.6667, 0, -20, 13.3333, 0, -20, 6.6667, 0, -13.3333, 0, 0, -13.3333, 6.6667, 0, -20, 0, 0, -13.3333, 0, 0, -20, 6.6667, 0, -20, 0, 0, -13.3333, -6.6667, 0, -13.3333, 0, 0, -20, -6.6667, 0, -13.3333, -6.6667, 0, -20, 0, 0, -20, -6.6667, 0, -13.3333, -13.3333, 0, -13.3333, -6.6667, 0, -20, -13.3333, 0, -13.3333, -13.3333, 0, -20, -6.6667, 0, -20, -13.3333, 0, -13.3333, -20, 0, -13.3333, -13.3333, 0, -20, -20, 0, -13.3333, -20, 0, -20, -13.3333, 0, -20 )
|
||||||
|
|
||||||
|
[node name="steering_test" type="Spatial"]
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="DirectionalLight" type="DirectionalLight" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 20, 0 )
|
||||||
|
shadow_enabled = true
|
||||||
|
|
||||||
|
[node name="front" type="Spatial" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -5 )
|
||||||
|
|
||||||
|
[node name="right" type="Spatial" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.07902, 0, -0.0847001 )
|
||||||
|
|
||||||
|
[node name="left" type="Spatial" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.18049, 0, -0.0847001 )
|
||||||
|
|
||||||
|
[node name="target" type="Spatial" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.18049, 0, 3.45624 )
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="target"]
|
||||||
|
mesh = SubResource( 3 )
|
||||||
|
material/0 = null
|
||||||
|
|
||||||
|
[node name="VehicleBody" type="VehicleBody" parent="."]
|
||||||
|
transform = Transform( -0.000366807, 0, -1, 0, 1, 0, 1, 0, -0.000366807, 0, 1.45468, 0 )
|
||||||
|
mass = 2000.0
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="VehicleBody"]
|
||||||
|
mesh = SubResource( 1 )
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
material/0 = null
|
||||||
|
|
||||||
|
[node name="MeshInstance2" type="MeshInstance" parent="VehicleBody"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.2 )
|
||||||
|
mesh = SubResource( 2 )
|
||||||
|
skeleton = NodePath("../..")
|
||||||
|
material/0 = null
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="VehicleBody"]
|
||||||
|
shape = SubResource( 4 )
|
||||||
|
|
||||||
|
[node name="VehicleWheel" type="VehicleWheel" parent="VehicleBody"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.7, -0.933, 1.321 )
|
||||||
|
use_as_steering = true
|
||||||
|
suspension_stiffness = 40.0
|
||||||
|
suspension_max_force = 12000.0
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="VehicleBody/VehicleWheel"]
|
||||||
|
transform = Transform( 0.2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
mesh = SubResource( 5 )
|
||||||
|
material/0 = null
|
||||||
|
|
||||||
|
[node name="VehicleWheel2" type="VehicleWheel" parent="VehicleBody"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7, -0.933, 1.321 )
|
||||||
|
use_as_steering = true
|
||||||
|
suspension_stiffness = 40.0
|
||||||
|
suspension_max_force = 12000.0
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="VehicleBody/VehicleWheel2"]
|
||||||
|
transform = Transform( 0.3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
mesh = SubResource( 6 )
|
||||||
|
material/0 = null
|
||||||
|
|
||||||
|
[node name="VehicleWheel3" type="VehicleWheel" parent="VehicleBody"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.7, -0.933, -1.32477 )
|
||||||
|
use_as_traction = true
|
||||||
|
suspension_stiffness = 40.0
|
||||||
|
suspension_max_force = 12000.0
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="VehicleBody/VehicleWheel3"]
|
||||||
|
transform = Transform( 0.2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
mesh = SubResource( 5 )
|
||||||
|
material/0 = null
|
||||||
|
|
||||||
|
[node name="VehicleWheel4" type="VehicleWheel" parent="VehicleBody"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7, -0.933, -1.32477 )
|
||||||
|
use_as_traction = true
|
||||||
|
suspension_stiffness = 40.0
|
||||||
|
suspension_max_force = 12000.0
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="VehicleBody/VehicleWheel4"]
|
||||||
|
transform = Transform( 0.3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
mesh = SubResource( 6 )
|
||||||
|
material/0 = null
|
||||||
|
|
||||||
|
[node name="Camera" type="Camera" parent="."]
|
||||||
|
transform = Transform( 0.0659952, 0.422312, -0.904045, 0, 0.90602, 0.423235, 0.99782, -0.0279315, 0.059793, -9.97146, 5.01123, -0.697941 )
|
||||||
|
environment = SubResource( 10 )
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||||
|
mesh = SubResource( 7 )
|
||||||
|
material/0 = null
|
||||||
|
|
||||||
|
[node name="StaticBody" type="StaticBody" parent="MeshInstance"]
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="MeshInstance/StaticBody"]
|
||||||
|
shape = SubResource( 8 )
|
||||||
3
world.gd
3
world.gd
@@ -58,8 +58,7 @@ func _process(delta):
|
|||||||
$player.global_transform.origin.z = v.y
|
$player.global_transform.origin.z = v.y
|
||||||
else:
|
else:
|
||||||
streaming.setup_town(site)
|
streaming.setup_town(site)
|
||||||
if streaming.towns > 30:
|
streaming.setup_traffic(site)
|
||||||
break
|
|
||||||
print("towns done: ", streaming.towns)
|
print("towns done: ", streaming.towns)
|
||||||
player = characters.replace_character($player, "male", ["player", "cmdq", "player_clothes"])
|
player = characters.replace_character($player, "male", ["player", "cmdq", "player_clothes"])
|
||||||
player.add_child(VoxelViewer.new())
|
player.add_child(VoxelViewer.new())
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ run_stream_in_editor = false
|
|||||||
|
|
||||||
[node name="DirectionalLight" type="DirectionalLight" parent="."]
|
[node name="DirectionalLight" type="DirectionalLight" parent="."]
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 100, 0 )
|
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 100, 0 )
|
||||||
|
shadow_enabled = true
|
||||||
|
|
||||||
[node name="Camera" type="Camera" parent="."]
|
[node name="Camera" type="Camera" parent="."]
|
||||||
transform = Transform( 0.819152, 0.40558, -0.40558, 0, 0.707107, 0.707107, 0.573577, -0.579228, 0.579228, 0, 150, 0 )
|
transform = Transform( 0.819152, 0.40558, -0.40558, 0, 0.707107, 0.707107, 0.573577, -0.579228, 0.579228, 0, 150, 0 )
|
||||||
|
|||||||
Reference in New Issue
Block a user