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 palace_size = 8 const layers = 4 func _ready(): var voffset = 0.0 for layer in range(layers): match layer: 0: voffset += 0.0 1: voffset += 1 2: voffset += 4 _: voffset += 4 for i in range(palace_size): for j in range(palace_size): var x = i * tile_size - palace_size * tile_size / 2 var z = j * tile_size - palace_size * tile_size / 2 if layer == 0: var ct = courtyard_tile.instance() var xform = Transform(Basis(), Vector3(x, voffset, z)) if i > 0 && i < palace_size - 1: if j > 0 && j < palace_size - 1: call_deferred("place", ct, xform) if i in [0, palace_size - 1] || j in [0, palace_size - 1]: call_deferred("place", ct, xform) else: var ct = room_tile.instance() var tower_angles = { 0: { 0: -PI / 2.0, palace_size - 1: 0 }, palace_size - 1: { 0: PI, palace_size - 1: PI / 2.0 } } var xform = Transform(Basis(), Vector3(x, voffset, z)) if i == 0 && !j in [0, palace_size - 1]: xform.basis = Basis().rotated(Vector3.UP, -PI / 2.0) spawn_wall(layer, i, j, xform) elif i == palace_size - 1 && !j in [0, palace_size - 1]: xform.basis = Basis().rotated(Vector3.UP, PI / 2.0) spawn_wall(layer, i, j, xform) elif !i in [0, palace_size - 1] && j == 0: xform.basis = Basis().rotated(Vector3.UP, PI) spawn_wall(layer, i, j, xform) elif !i in [0, palace_size - 1] && j == palace_size - 1: xform.basis = Basis() spawn_wall(layer, i, j, xform) elif tower_angles.has(i) && tower_angles[i].has(j): xform.basis = Basis().rotated(Vector3.UP, tower_angles[i][j]) if layer == layers - 1: var twr = tower_roof_tile.instance() call_deferred("place", twr, xform) else: var tw = tower_walls_tile.instance() call_deferred("place", tw, xform) var st = stairs_tile.instance() call_deferred("place", st, xform) if layer == 1: var tfl = tower_floor_tile.instance() call_deferred("place", tfl, xform) var car = Spatial.new() car.add_to_group("spawn") car.add_to_group("keep") car.add_to_group("car") add_child(car) for e in range(5): var major_f = Spatial.new() major_f.add_to_group("spawn") if e == 0: major_f.add_to_group("male") else: major_f.add_to_group("female") major_f.add_to_group("keep") 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)) print("PALACE done") func place(obj, where): add_child(obj) obj.transform = where print("placed at ", where.origin) func spawn_wall(layer:int, i: int, j: int, xform: Transform): if layer == layers - 1: var rt = roof_tile.instance() call_deferred("place", rt, xform) elif (j != palace_size / 2.0 && i != palace_size / 2.0)|| layer > 2: var ct = room_tile.instance() call_deferred("place", ct, xform) elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 1: var ent = entry_tile.instance() call_deferred("place", ent, xform) elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 1: var gw = gate_bottom_tile.instance() call_deferred("place", gw, xform) elif (j != palace_size / 2.0 && i == palace_size / 2.0) && layer == 2: var gw = gate_top_tile.instance() call_deferred("place", gw, xform) elif (j == palace_size / 2.0 && i != palace_size / 2.0) && layer == 2: var ct = room_tile.instance() call_deferred("place", ct, xform)