stuff
This commit is contained in:
151
objects/trailer-house.gd
Normal file
151
objects/trailer-house.gd
Normal file
@@ -0,0 +1,151 @@
|
||||
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()
|
||||
|
||||
|
||||
# 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():
|
||||
thread = Thread.new()
|
||||
# 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])
|
||||
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
|
||||
print(global_transform.origin, " seed = ", s)
|
||||
var l = 6 + 2 * rnd.randi() % 7 - 1
|
||||
var h = l - 1
|
||||
var d = 3 + rnd.randi() % (l - 5 + 1)
|
||||
var range_used = false
|
||||
for k in range(l + 1):
|
||||
var pos = Vector3(0, 0, k * 2)
|
||||
if k > 0:
|
||||
if k != d && rnd.randf() > 0.5 && !range_used:
|
||||
var r = roof_floor_range.instance()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", r, xform)
|
||||
range_used = true
|
||||
else:
|
||||
var r = roof_floor.instance()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", r, xform)
|
||||
var what
|
||||
var xt = [Transform(Basis(), pos), Transform(Basis().rotated(Vector3.UP, PI), pos - Vector3(0, 0, 2))]
|
||||
for x in range(xt.size()):
|
||||
if x == 0 && k == d:
|
||||
continue
|
||||
if rnd.randf() > 0.5:
|
||||
what = wall_solid.instance()
|
||||
elif rnd.randf() > 0.5:
|
||||
what = window_narrow.instance()
|
||||
else:
|
||||
what = window_wide.instance()
|
||||
call_deferred("spawn_child", what, xt[x])
|
||||
|
||||
if k > 1 && k < l && rnd.randf() > 0.6:
|
||||
var r = wall_internal.instance()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", r, xform)
|
||||
match k:
|
||||
0:
|
||||
var b = side_wall.instance()
|
||||
var c = bottom_side.instance()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", b, xform)
|
||||
call_deferred("spawn_child", c, xform)
|
||||
1:
|
||||
var b = bottom.instance()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", b, xform)
|
||||
2:
|
||||
var b = bottom_wheels.instance()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", b, xform)
|
||||
d:
|
||||
var b = entry.instance()
|
||||
var c = bottom.instance()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", b, xform)
|
||||
call_deferred("spawn_child", c, xform)
|
||||
h:
|
||||
var b = bottom_wheels.instance()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", b, xform)
|
||||
l:
|
||||
var b = side_wall.instance()
|
||||
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()
|
||||
var xform = Transform(Basis(), pos)
|
||||
call_deferred("spawn_child", b, xform)
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
var state = 0
|
||||
func _process(delta):
|
||||
match state:
|
||||
0:
|
||||
state = 1
|
||||
1:
|
||||
build_house(self)
|
||||
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:
|
||||
if abs(prev - dst) > 20:
|
||||
var space_state = get_viewport().get_world().direct_space_state
|
||||
var where = 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:
|
||||
global_transform.origin = result.position
|
||||
prev = dst
|
||||
|
||||
Reference in New Issue
Block a user