Update
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
extends Node
|
||||
|
||||
signal character_ready
|
||||
|
||||
export var trailer_house: PackedScene
|
||||
export var palace: PackedScene
|
||||
export var car: PackedScene
|
||||
|
||||
onready var obj_names = {
|
||||
"palace": palace,
|
||||
"trailer_house": trailer_house
|
||||
"trailer_house": trailer_house,
|
||||
}
|
||||
|
||||
var done = false
|
||||
@@ -34,6 +36,9 @@ 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")
|
||||
var courtroom: PackedScene = preload("res://objects/courtroom.tscn")
|
||||
var bandit_camp: PackedScene = preload("res://bandit_camp.tscn")
|
||||
var hostile_dwelling: PackedScene = preload("res://hostile_dwelling.tscn")
|
||||
|
||||
onready var palace_map_data = {
|
||||
"courtyard_tile": courtyard_tile,
|
||||
@@ -46,11 +51,12 @@ onready var palace_map_data = {
|
||||
"gate_top_tile": gate_top_tile,
|
||||
"entry_tile": entry_tile,
|
||||
"roof_tile": roof_tile,
|
||||
"tower_roof_tile": tower_roof_tile
|
||||
"tower_roof_tile": tower_roof_tile,
|
||||
"courtroom": courtroom,
|
||||
}
|
||||
|
||||
onready var buildings = {
|
||||
"trailer_house": preload("res://buildings/trailer-house.gd").new()
|
||||
"trailer_house": preload("res://buildings/trailer-house.gd").new(),
|
||||
}
|
||||
|
||||
func spawn_building(bname: String, xform: Transform) -> void:
|
||||
@@ -126,13 +132,13 @@ func setup_town(site):
|
||||
dst -= step
|
||||
towns += 1
|
||||
|
||||
func setup_first_town():
|
||||
func setup_first_town(site):
|
||||
assert(!done)
|
||||
var poly = RoadsData.get_site_polygon_3d(0)
|
||||
var height = RoadsData.get_site_avg_height(0)
|
||||
var border = RoadsData.get_site_border(0, 32)
|
||||
var border1a = RoadsData.get_site_border(0, 42)
|
||||
var border2 = RoadsData.get_site_border(0, 60)
|
||||
var poly = RoadsData.get_site_polygon_3d(site)
|
||||
var height = RoadsData.get_site_avg_height(site)
|
||||
var border = RoadsData.get_site_border(site, 32)
|
||||
var border1a = RoadsData.get_site_border(site, 42)
|
||||
var border2 = RoadsData.get_site_border(site, 60)
|
||||
|
||||
var poly2 = []
|
||||
poly2.resize(border2.size())
|
||||
@@ -146,7 +152,7 @@ func setup_first_town():
|
||||
var infl = RoadsData.get_influence_cached(center.x, center.z, 256)
|
||||
center.y = infl.y
|
||||
print("first town center: ", center)
|
||||
var radial_points = RoadsData.get_site_radial_points(0, 32.0, 64.0)
|
||||
var radial_points = RoadsData.get_site_radial_points(site, 32.0, 64.0)
|
||||
var max_r = 0.0
|
||||
for p in range(radial_points.size()):
|
||||
var ep = radial_points[p]
|
||||
@@ -219,7 +225,8 @@ func setup_traffic(site):
|
||||
var n = (p2 - p1).cross(Vector3.UP).normalized()
|
||||
var t = (p2 - p1).normalized()
|
||||
var l = p1.distance_to(p2)
|
||||
assert(l > 0 && t.length_squared() > 0)
|
||||
assert(l > 0)
|
||||
assert(t.length_squared() > 0)
|
||||
var xpos = p1 + t * 8.0
|
||||
var xe = 128.0
|
||||
if l < xe + 16.0:
|
||||
@@ -244,7 +251,6 @@ func setup_traffic(site):
|
||||
c.add_to_group("traffic_spawn")
|
||||
xpos += t * xe
|
||||
l -= xe
|
||||
|
||||
func _ready():
|
||||
traffic_rnd = RandomNumberGenerator.new()
|
||||
traffic_rnd.randomize()
|
||||
@@ -277,6 +283,7 @@ func _ready():
|
||||
Traffic.add_traffic_vehicle(car)
|
||||
var water_mat = load("res://water/Water.material")
|
||||
Water.set_material(water_mat)
|
||||
connect("character_ready", self, "char_ready")
|
||||
|
||||
var delay = 3.0
|
||||
var state = 0
|
||||
@@ -301,6 +308,9 @@ func _process(delta):
|
||||
|
||||
func stream_obj(obj: String, xform: Transform):
|
||||
Spawner.place_scene(obj, xform)
|
||||
var can_spawn = false
|
||||
func char_ready():
|
||||
can_spawn = true
|
||||
func _physics_process(delta):
|
||||
var cam = get_viewport().get_camera()
|
||||
if !cam:
|
||||
@@ -309,35 +319,48 @@ func _physics_process(delta):
|
||||
1:
|
||||
var space_state = get_viewport().get_world().direct_space_state
|
||||
# probaly should not be here
|
||||
for n in get_tree().get_nodes_in_group("spawn"):
|
||||
var ok = false
|
||||
if !n.is_in_group("keep"):
|
||||
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"):
|
||||
continue
|
||||
if result.collider:
|
||||
n.global_transform.origin = result.position
|
||||
ok = true
|
||||
if ok || n.is_in_group("keep"):
|
||||
if n.is_in_group("male"):
|
||||
characters.replace_character(n, "male", ["cmdq", "marker", "hurtboxes", "student"])
|
||||
elif n.is_in_group("female"):
|
||||
characters.replace_character(n, "female", ["cmdq", "marker", "hurtboxes", "student"])
|
||||
elif n.is_in_group("car"):
|
||||
var p1 = cam.global_transform.origin
|
||||
var p2 = n.global_transform.origin
|
||||
if p1.distance_squared_to(p2) < 5000.0:
|
||||
var c = car.instance()
|
||||
c.add_to_group("saved_vehicle")
|
||||
var p = get_tree().root
|
||||
p.add_child(c)
|
||||
c.global_transform = n.global_transform
|
||||
n.queue_free()
|
||||
if can_spawn:
|
||||
for n in get_tree().get_nodes_in_group("spawn"):
|
||||
var ok = false
|
||||
# if !n.is_in_group("keep"):
|
||||
# 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"):
|
||||
# continue
|
||||
# if result.collider:
|
||||
# n.global_transform.origin = result.position
|
||||
# ok = true
|
||||
ok = true
|
||||
if ok || n.is_in_group("keep"):
|
||||
var base = ["cmdq", "marker", "hurtboxes"]
|
||||
var g = ""
|
||||
if n.is_in_group("male"):
|
||||
g = "male"
|
||||
elif n.is_in_group("female"):
|
||||
g = "female"
|
||||
if n.is_in_group("mystress"):
|
||||
base.push_back("mystress")
|
||||
if n.is_in_group("student"):
|
||||
base.push_back("student")
|
||||
elif n.is_in_group("bandit"):
|
||||
base.push_back("bandit")
|
||||
if g.length() > 0:
|
||||
print(g, " ", base)
|
||||
characters.replace_character(n, g, base)
|
||||
elif n.is_in_group("car"):
|
||||
var p1 = cam.global_transform.origin
|
||||
var p2 = n.global_transform.origin
|
||||
if p1.distance_squared_to(p2) < 5000.0:
|
||||
var c = car.instance()
|
||||
c.add_to_group("saved_vehicle")
|
||||
var p = get_tree().root
|
||||
p.add_child(c)
|
||||
c.global_transform = n.global_transform
|
||||
n.queue_free()
|
||||
|
||||
# buildings
|
||||
|
||||
@@ -379,3 +402,29 @@ static func get_place_rnd(xform: Transform):
|
||||
rnd.seed = s
|
||||
return rnd
|
||||
|
||||
func setup_bandit_camp(site):
|
||||
var poly = RoadsData.get_site_polygon_3d(site)
|
||||
var height = RoadsData.get_site_avg_height(site)
|
||||
var center = Vector3()
|
||||
for p in poly:
|
||||
center += p
|
||||
center /= poly.size()
|
||||
center.y = height
|
||||
var xform = Transform(Basis(), center)
|
||||
var camp = bandit_camp.instance()
|
||||
get_tree().root.add_child(camp)
|
||||
camp.global_transform = xform
|
||||
return camp
|
||||
func setup_bandit_camp_outskirts(site):
|
||||
var b = RoadsData.get_site_border(site, 96.0)
|
||||
for e in range(min(4, b.size())):
|
||||
if scenario.camp_dwellings.has(e):
|
||||
if scenario.camp_dwellings[e].health <= 0:
|
||||
continue
|
||||
var h_xform = Transform(Basis(), b[e])
|
||||
var dwg = hostile_dwelling.instance()
|
||||
get_tree().root.add_child(dwg)
|
||||
dwg.global_transform = h_xform
|
||||
if !scenario.camp_dwellings.has(e):
|
||||
scenario.camp_dwellings[e] = {}
|
||||
scenario.camp_dwellings[e].health = 100.0
|
||||
|
||||
Reference in New Issue
Block a user